En esta página, se describe cómo llamar a la API del nodo de Ethereum. Antes de acceder al nodo de la cadena de bloques de Ethereum, deberás conocer la clave de API y la URL del extremo del nodo. Si aún no lo hiciste, sigue la guía para usar nodos de blockchain y determinar estos valores.
JSON-RPC
En esta sección, se describe cómo consultar la API de JSON-RPC de un nodo de la cadena de bloques de Ethereum.
Ejemplo de RPC del cliente de ejecución
Puedes consultar el cliente de ejecución (Geth para nodos completos o Erigon para nodos de archivo) a través de JSON-RPC. Consulta la especificación de la API de Ethereum para obtener la especificación genérica de JSON-RPC o la documentación de RPC de Geth para obtener documentación específica de Geth.
Por ejemplo, para llamar al método eth_getBlockByNumber()
, haz lo siguiente:
curl -H POST \
-H "X-goog-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"id":1,
"jsonrpc":"2.0",
"method": "eth_getBlockByNumber",
"params": ["0x1", true]
}' \
http://YOUR_NODES_URL
Aquí:
id
es un identificador establecido por el cliente, el originador de la solicitud. Por ejemplo,1
.jsonrpc
es la versión de JSON-RPC. Por ejemplo,2.0
method
es el nombre del método. Por ejemplo,eth_getBlockByNumber
params
son los valores que se usarán conmethod
.- YOUR_NODES_URL es la dirección que se muestra en Cómo obtener las URLs de los nodos de la cadena de bloques. Por ejemplo,
json-rpc.ejp4j0b1rdiq06p8lxksd5z25.blockchainnodeengine.com
. - YOUR_API_KEY es la clave que creaste en Crea una clave de API.
Consulta la especificación de JSON-RPC 2.0 para obtener más información sobre el formato del objeto Request.
A continuación, se muestra una respuesta de ejemplo al comando anterior:
{
"id" : 1,
"jsonrpc" : "2.0",
"result" : {
"difficulty" : "0x3ff800000",
"extraData" : "0x476574682f76312e302e302f6c696e75782f676f312e342e32",
"gasLimit" : "0x1388",
"gasUsed" : "0x0",
"hash" : "0x88e96d4537bea4d9c05d12549907b32561d3bf31f45aae734cdc119f13406cb6",
"logsBloom": "0x0000000000000000000000000000000000000",
"miner" : "0x05a56e2d52c817161883f50c441c3228cfe54d9f",
"mixHash" : "0x969b900de27b6ac6a67742365dd65f55a0526c41fd18e1b16f1a1215c2e66f59",
"nonce" : "0x539bd4979fef1ec4",
"number" : "0x1",
"parentHash" : "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",
"receiptsRoot" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"sha3Uncles" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size" : "0x219",
"stateRoot" : "0xd67e4d450343046425ae4271474353857ab860dbc0a1dde64b41b5cd3a532bf3",
"timestamp" : "0x55ba4224",
"totalDifficulty" : "0x7ff800000",
"transactions" : [],
"transactionsRoot" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"uncles" : []
}
}
RPC del nodo de baliza
El Motor de nodos de cadenas de bloques también expone el extremo del cliente de consenso de Ethereum.
Por ejemplo, para solicitar el estado del validador en la ranura 1
, haz lo siguiente:
curl \
-H "X-goog-api-key: YOUR_API_KEY" "Content-Type: application/json" \
'http://beacon.YOUR_NODES_URL/eth/v1/beacon/states/head/validators/1'
También puedes proporcionar tu clave de API como un encabezado HTTP en lugar de un parámetro de consulta. La siguiente búsqueda es equivalente:
curl \
-H "Content-Type: application/json" \
'http://beacon.YOUR_NODES_URL/eth/v1/beacon/states/head/validators/1?key=YOUR_API_KEY'
Explicación adicional:
- YOUR_NODES_URL es la dirección que se devolvió en Obtén las URLs de los nodos de la cadena de bloques.
- YOUR_API_KEY es la clave que creaste en Crea una clave de API.
A continuación, se muestra una respuesta de ejemplo al comando anterior:
{
"execution_optimistic": false,
"data": {
"index": "1",
"balance": "36835614902",
"status": "active_ongoing",
"validator": {
"pubkey": "0x1234abcd",
"withdrawal_credentials": "0x1234abcd",
"effective_balance": "32000000000",
"slashed": false,
"activation_eligibility_epoch": "0",
"activation_epoch": "0",
"exit_epoch": "18446744073709551615",
"withdrawable_epoch": "18446744073709551615"
}
}
}
WebSocket
Para suscribirte a feeds de datos en lugar de sondear los datos, puedes usar la API de WebSocket del cliente de ejecución del nodo de la cadena de bloques.
Por ejemplo, para suscribirte a los nuevos encabezados de la cadena, haz lo siguiente:
wscat -c wss://ws.YOUR_NODES_URL?key=YOUR_API_KEY
Connected (press CTRL+C to quit)
> {"jsonrpc":"2.0", "id": 1, "method": "eth_subscribe", "params": ["newHeads"]}
El cliente de ejecución responderá con un identificador para la suscripción, como el siguiente:
{"jsonrpc":"2.0","id":1,"result":"0xf47df962ae9ba250ba9e9fb239b6894f"}
A partir de entonces, el cliente enviará detalles de cada nuevo bloque principal de la cadena a medida que se produzca. Este es un ejemplo de un evento de la suscripción anterior:
{
"jsonrpc" : "2.0",
"method" : "eth_subscription",
"params" : {
"result" : {
"baseFeePerGas" : "0x4bdc620b8",
"difficulty" : "0x0",
"extraData" : "0x496c6c756d696e61746520446d6f63726174697a6520447374726962757465",
"gasLimit" : "0x1c9c380",
"gasUsed" : "0xe24dae",
"hash" : "0xbde840749c4d9086d17d66079d5f7d3d568ed4572329691e5b4a70f44a551816",
"logsBloom": "0x0000000000000000000000000000000000000",
"miner" : "0xb4c9e4617a16be36b92689b9e07e9f64757c1792",
"mixHash" : "0xf68eb0b3ec50e1543de1cc7f09c7735ba20fa252124511756857078a3ff9a7cf",
"nonce" : "0x0000000000000000",
"number" : "0x109e280",
"parentHash" : "0x54f78faba9fde0d15d7a9d6b80c4569435c7fdc5f1fef3255110373b66ce14de",
"receiptsRoot" : "0x876bcb5772f8597fee4b063c57b7a51209eb428034efabf4cdf39a46901681b4",
"sha3Uncles" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"stateRoot" : "0xfc5daf9608c8f2b9944bcfe0b9182148d85b1a6ad4dc52d3eb522dd02687c7e0",
"timestamp" : "0x647fd287",
"transactionsRoot" : "0x0acaef87e4609ea6075d88fdd404b3fbd25d796af9044522beefd3c708d37af8",
"withdrawalsRoot" : "0x7adfc670253572678769e7d80db8c4c94b5d14d4e014274f39b679fdb5e72d98"
},
"subscription" : "0xf47df962ae9ba250ba9e9fb239b6894f"
}
}
Métricas
Los nodos de Ethereum proporcionan varias métricas sobre el estado operativo del nodo. Por lo general, una herramienta como Prometheus o Grafana las consumiría.
Para recuperar las métricas que expone un cliente de baliza, puedes usar un comando como el siguiente:
curl https://bc-mc.YOUR_NODES_URL/metrics/prometheus?key=YOUR_API_KEY
Esto produce un resultado similar al siguiente:
# HELP async_tasks_count Total number of async tasks spawned using spawn
# TYPE async_tasks_count gauge
async_tasks_count{async_task_count="addr_broadcast"} 0
async_tasks_count{async_task_count="beacon_node"} 0
async_tasks_count{async_task_count="beacon_processor_manager"} 1
async_tasks_count{async_task_count="beacon_processor_reprocess_queue"} 1
async_tasks_count{async_task_count="beacon_processor_worker"} 0
async_tasks_count{async_task_count="discv5"} 4
async_tasks_count{async_task_count="el_fork_choice_update"} 0
async_tasks_count{async_task_count="eth1"} 1
...
Existen extremos de métricas separados para el cliente de ejecución y el cliente de baliza.
En el caso del cliente de ejecución, suelen tener el prefijo ec-mc
, y en el caso del cliente de Beacon, suelen tener el prefijo bc-mc
(como en el ejemplo anterior).
Puedes obtener más información sobre las métricas de cada software cliente en los siguientes vínculos: