Cómo usar nodos de cadena de bloques de Ethereum

En esta página, se describe cómo llamar a la API del nodo de Ethereum. Antes de poder acceder al nodo de 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 cadena de bloques para determinarlos.

JSON-RPC

En esta sección, se describe cómo consultar la API de JSON-RPC de un nodo de cadena de bloques de Ethereum.

Ejemplo de RPC de 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 que establece el cliente, el creador 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 valores que se usarán con method.
  • YOUR_NODES_URL es la dirección que se muestra en Obtén 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-RPC2.0 para obtener más información sobre el formato del objeto Request.

Esta es una respuesta de ejemplo para el 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 píxel contador

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 consulta 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:

Esta es una respuesta de ejemplo para el 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 datos, puedes usar la API de WebSocket del cliente de ejecución del nodo de cadena de bloques.

Por ejemplo, para suscribirte a nuevos encabezados de 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 ese momento, el cliente enviará los detalles de cada bloque de cabeza de cadena nuevo a medida que se produzca. Este es un evento de muestra 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 píxeles contadores, 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
...

Hay extremos de métricas independientes para el cliente de ejecución y el cliente de píxeles contadores. En el caso del cliente de ejecución, suelen tener el prefijo ec-mc y, en el caso del cliente de píxeles contadores, suelen tener el prefijo bc-mc (como en el ejemplo anterior).

Puedes obtener más información sobre las métricas de cada software de cliente en los siguientes vínculos:

Guía de referencia de puertos de Private Service Connect

Los nodos habilitados para Private Service Connect usan una dirección IP estática generada por el usuario junto con el puerto designado para generar un extremo. Usa la asignación adecuada en la siguiente tabla.

Tipo de puerto Número de puerto
Extremo de la API de JSON RPC 8545
Extremo de la API de Websocket de Geth 8546
Extremo de la API de Erigon Websocket 8545
Extremo de la API de píxel contador 5052
Extremo de la API de Métricas de Prometheus del píxel contador 5054
Extremo de la API de métricas de Prometheus del cliente de ejecución 8647