Aprenda temas fundamentales de Ethereum con SQL
Muchos tutoriales de Ethereum están dirigidos a desarrolladores, pero faltan recursos educativos para los analistas de datos o para las personas que desean ver datos en la cadena sin ejecutar un cliente o un nodo.
Este tutorial ayuda a los lectores a comprender los conceptos fundamentales de Ethereum, como las transacciones, los bloques y el gas, mediante la consulta de datos en la cadena con el lenguaje de consulta estructurado (SQL) a través de una interfaz proporcionada por Dune Analyticsopens in a new tab.
Los datos en la cadena pueden ayudarnos a entender Ethereum, la red y su economía de potencia de cálculo, y deberían servir como base para comprender los retos a los que se enfrenta Ethereum hoy en día (es decir, el aumento de los precios del gas) y, lo que es más importante, los debates en torno a las soluciones de escalabilidad.
Transacciones
El recorrido de un usuario en Ethereum comienza con la inicialización de una cuenta controlada por el usuario o de una entidad con un saldo de ETH. Hay dos tipos de cuentas: las controladas por el usuario o un contrato inteligente (consulte ethereum.org).
Cualquier cuenta puede verse en un explorador de bloques como Etherscanopens in a new tab o Blockscoutopens in a new tab. Los exploradores de bloques son un portal a los datos de Ethereum. Muestran, en tiempo real, datos sobre bloques, transacciones, mineros, cuentas y otra actividad en la cadena (consulte aquí).
Sin embargo, un usuario puede desear consultar los datos directamente para conciliar la información proporcionada por los exploradores de bloques externos. Dune Analyticsopens in a new tab proporciona esta capacidad a cualquier persona con algún conocimiento de SQL.
Como referencia, la cuenta del contrato inteligente de la Ethereum Foundation (EF) se puede ver en Blockscoutopens in a new tab.
Una cosa a tener en cuenta es que todas las cuentas, incluidas las de la EF, tienen una dirección pública que se puede utilizar para enviar y recibir transacciones.
El saldo de la cuenta en Etherscan comprende transacciones regulares y transacciones internas. Las transacciones internas, a pesar de su nombre, no son transacciones reales que cambien el estado de la cadena. Son transferencias de valor iniciadas por la ejecución de un contrato (fuenteopens in a new tab). Dado que las transacciones internas no tienen firma, no se incluyen en la cadena de bloques y no se pueden consultar con Dune Analytics.
Por lo tanto, este tutorial se centrará en las transacciones regulares. Esto se puede consultar de la siguiente manera:
1WITH temp_table AS (2SELECT3 hash,4 block_number,5 block_time,6 "from",7 "to",8 value / 1e18 AS ether,9 gas_used,10 gas_price / 1e9 AS gas_price_gwei11FROM ethereum."transactions"12WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'13ORDER BY block_time DESC14)15SELECT16 hash,17 block_number,18 block_time,19 "from",20 "to",21 ether,22 (gas_used * gas_price_gwei) / 1e9 AS txn_fee23FROM temp_tableMostrar todoEsto producirá la misma información que se proporciona en la página de transacciones de Etherscan. A modo de comparación, estas son las dos fuentes:
Etherscan
Página del contrato de EF en Blockscout.opens in a new tab
Dune Analytics
Puede encontrar el panel de control aquíopens in a new tab. Haga clic en la tabla para ver la consulta (véase también más arriba).
Desglose de las transacciones
Una transacción enviada incluye varios datos, entre ellos (fuente):
- Destinatario: la dirección de recepción (consultada como "to")
- Firma: aunque las claves privadas de un remitente firman una transacción, lo que podemos consultar con SQL es la dirección pública de un remitente ("from").
- Valor: esta es la cantidad de ETH transferido (véase la columna
ether). - Datos: son datos arbitrarios que se han hasheado (véase la columna
data). - gasLimit: la cantidad máxima de unidades de gas que puede consumir la transacción. Las unidades de gas representan pasos computacionales.
- maxPriorityFeePerGas: la cantidad máxima de gas que se incluirá como propina para el minero.
- maxFeePerGas: la cantidad máxima de gas que se está dispuesto a pagar por la transacción (incluye baseFeePerGas y maxPriorityFeePerGas).
Podemos consultar estos datos específicos para las transacciones a la dirección pública de la Ethereum Foundation:
1SELECT2 "to",3 "from",4 value / 1e18 AS ether,5 data,6 gas_limit,7 gas_price / 1e9 AS gas_price_gwei,8 gas_used,9 ROUND(((gas_used / gas_limit) * 100),2) AS gas_used_pct10FROM ethereum."transactions"11WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'12ORDER BY block_time DESCMostrar todoBloques
Cada transacción cambiará el estado de la máquina virtual de Ethereum (EVM) (fuente). Las transacciones se transmiten a la red para ser verificadas e incluidas en un bloque. Cada transacción está asociada a un número de bloque. Para ver los datos, podríamos consultar un número de bloque específico: 12396854 (el bloque más reciente entre las transacciones de la Ethereum Foundation en el momento de escribir este artículo, 11/5/21).
Además, cuando consultamos los dos bloques siguientes, podemos ver que cada bloque contiene el hash del bloque anterior (es decir, el hash padre), lo que ilustra cómo se forma la cadena de bloques.
Cada bloque contiene una referencia a su bloque padre. Esto se muestra a continuación entre las columnas hash y parent_hash (fuente):
Esta es la consultaopens in a new tab en Dune Analytics:
1SELECT2 time,3 number,4 hash,5 parent_hash,6 nonce7FROM ethereum."blocks"8WHERE "number" = 12396854 OR "number" = 12396855 OR "number" = 123968569LIMIT 10Mostrar todoPodemos examinar un bloque consultando la hora, el número de bloque, la dificultad, el hash, el hash padre y el nonce.
Lo único que no cubre esta consulta es la lista de transacciones, que requiere una consulta separada a continuación, y la raíz de estado. Un nodo completo o de archivo almacenará todas las transacciones y transiciones de estado, lo que permite a los clientes consultar el estado de la cadena en cualquier momento. Como esto requiere un gran espacio de almacenamiento, podemos separar los datos de la cadena de los datos de estado:
- Datos de la cadena (lista de bloques, transacciones)
- Datos de estado (resultado de la transición de estado de cada transacción)
La raíz de estado entra en esta última categoría y son datos implícitos (no se almacenan en la cadena), mientras que los datos de la cadena son explícitos y se almacenan en la propia cadena (fuenteopens in a new tab).
En este tutorial, nos centraremos en los datos en la cadena que pueden consultarse con SQL a través de Dune Analytics.
Como se ha indicado anteriormente, cada bloque contiene una lista de transacciones; podemos consultarla filtrando por un bloque específico. Probaremos el bloque más reciente, 12396854:
1SELECT * FROM ethereum."transactions"2WHERE block_number = 123968543ORDER BY block_time DESC`Este es el resultado de SQL en Dune:
La adición de este único bloque a la cadena cambia el estado de la máquina virtual de Ethereum (EVM). Se verifican a la vez docenas, a veces cientos, de transacciones. En este caso concreto, se incluyeron 222 transacciones.
Para ver cuántas tuvieron éxito, añadiríamos otro filtro para contar las transacciones exitosas:
1WITH temp_table AS (2 SELECT * FROM ethereum."transactions"3 WHERE block_number = 12396854 AND success = true4 ORDER BY block_time DESC5)6SELECT7 COUNT(success) AS num_successful_txn8FROM temp_tablePara el bloque 12396854, de un total de 222 transacciones, 204 se verificaron con éxito:
Las solicitudes de transacciones se producen docenas de veces por segundo, pero los bloques se confirman aproximadamente una vez cada 15 segundos (fuente).
Para ver que se produce un bloque aproximadamente cada 15 segundos, podríamos tomar el número de segundos de un día (86 400) y dividirlo por 15 para obtener un número medio estimado de bloques por día (~5760).
El gráfico de bloques de Ethereum producidos por día (2016 - actualidad) es:
El número promedio de bloques producidos diariamente durante este período de tiempo es de ~5874:
Las consultas son:
1# consulta para visualizar el número de bloques producidos diariamente desde 201623SELECT4 DATE_TRUNC('day', time) AS dt,5 COUNT(*) AS block_count6FROM ethereum."blocks"7GROUP BY dt8OFFSET 1910# número promedio de bloques producidos por día1112WITH temp_table AS (13SELECT14 DATE_TRUNC('day', time) AS dt,15 COUNT(*) AS block_count16FROM ethereum."blocks"17GROUP BY dt18OFFSET 119)20SELECT21 AVG(block_count) AS avg_block_count22FROM temp_tableMostrar todoEl número promedio de bloques producidos por día desde 2016 es ligeramente superior a esa cifra, con 5874. Alternativamente, si se dividen 86 400 segundos por un promedio de 5874 bloques, el resultado es de 14,7 segundos o, aproximadamente, un bloque cada 15 segundos.
Gas
Los bloques tienen un tamaño limitado. El tamaño máximo de los bloques es dinámico y varía en función de la demanda de la red entre 12 500 000 y 25 000 000 de unidades. Se necesitan límites para evitar que los bloques de tamaño arbitrariamente grande sobrecarguen los nodos completos en cuanto a espacio en disco y requisitos de velocidad (fuente).
Una forma de conceptualizar el límite de gas de un bloque es pensar en él como la oferta de espacio de bloque disponible para agrupar las transacciones. El límite de gas de los bloques puede consultarse y visualizarse desde 2016 hasta la actualidad:
1SELECT2 DATE_TRUNC('day', time) AS dt,3 AVG(gas_limit) AS avg_block_gas_limit4FROM ethereum."blocks"5GROUP BY dt6OFFSET 1Luego está el gas real que se utiliza diariamente para pagar la computación realizada en la cadena de Ethereum (es decir, enviar una transacción, llamar a un contrato inteligente, acuñar un NFT). Esta es la demanda de espacio de bloque disponible en Ethereum:
1SELECT2 DATE_TRUNC('day', time) AS dt,3 AVG(gas_used) AS avg_block_gas_used4FROM ethereum."blocks"5GROUP BY dt6OFFSET 1También podemos yuxtaponer estos dos gráficos para ver cómo se alinean la demanda y la oferta:
Por lo tanto, podemos entender los precios del gas como una función de la demanda de espacio de bloque de Ethereum, dada la oferta disponible.
Por último, es posible que queramos consultar el precio promedio diario del gas para la cadena de Ethereum; sin embargo, si lo hacemos, el tiempo de consulta será especialmente largo, por lo que filtraremos nuestra consulta a la cantidad promedio de gas pagada por transacción por la Ethereum Foundation.
Podemos ver los precios del gas pagados por todas las transacciones realizadas a la dirección de la Ethereum Foundation a lo largo de los años. Esta es la consulta:
1SELECT2 block_time,3 gas_price / 1e9 AS gas_price_gwei,4 value / 1e18 AS eth_sent5FROM ethereum."transactions"6WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'7ORDER BY block_time DESCResumen
Con este tutorial, entendemos los conceptos fundamentales de Ethereum y cómo funciona la cadena de bloques de Ethereum consultando y familiarizándonos con los datos en la cadena.
El panel de control que contiene todo el código utilizado en este tutorial se puede encontrar aquíopens in a new tab.
Para ver más usos de los datos para explorar la web3, encuéntreme en Twitteropens in a new tab.
Última actualización de la página: 29 de septiembre de 2025










