Utilizzo di nodi blockchain Ethereum

Questa pagina descrive come chiamare l'API del nodo Ethereum. Prima di poter accedere al nodo della blockchain di Ethereum, devi conoscere la chiave API e l'URL dell'endpoint del nodo. Segui la guida sull'utilizzo dei nodi blockchain per determinare questi valori, se non l'hai ancora fatto.

JSON-RPC

Questa sezione descrive la query dell'API JSON-RPC di un nodo della blockchain di Ethereum.

Esempio di RPC del client di esecuzione

Puoi eseguire query sul client di esecuzione (Geth per i nodi completi o Erigon per i nodi di archivio) tramite JSON-RPC. Consulta la specifica dell'API Ethereum per la specifica JSON-RPC generica o la documentazione RPC di Geth per la documentazione specifica di Geth.

Ad esempio, per chiamare il metodo eth_getBlockByNumber():

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

Dove:

  • id è un identificatore impostato dal client, ovvero l'originatore della richiesta. Ad esempio, 1.
  • jsonrpc è la versione JSON-RPC. Ad esempio, 2.0.
  • method è il nome del metodo. Ad esempio, eth_getBlockByNumber.
  • params sono i valori da utilizzare con method.
  • YOUR_NODES_URL è l'indirizzo restituito in Ottenere gli URL dei nodi blockchain. Ad esempio, json-rpc.ejp4j0b1rdiq06p8lxksd5z25.blockchainnodeengine.com.
  • YOUR_API_KEY è la chiave che hai creato in Creare una chiave API.

Per ulteriori informazioni sul formato dell'oggetto Request, consulta la specifica JSON-RPC 2.0.

Ecco un esempio di risposta al comando precedente:

{
   "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 beacon

Blockchain Node Engine espone anche l'endpoint del client di consenso Ethereum. Ad esempio, per richiedere lo stato del validatore nello slot 1:

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'

Puoi anche fornire la chiave API come intestazione HTTP anziché come parametro di query. La query seguente è equivalente:

curl \
-H "Content-Type: application/json" \
'http://beacon.YOUR_NODES_URL/eth/v1/beacon/states/head/validators/1?key=YOUR_API_KEY'

Ulteriori spiegazioni:

Ecco un esempio di risposta al comando precedente:

{
  "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

Per iscriverti ai feed di dati anziché eseguire il polling dei dati, puoi utilizzare l'API WebSocket del client di esecuzione del nodo blockchain.

Ad esempio, per iscriverti a nuovi emittenti principali:

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"]}

Il client di esecuzione risponderà con un identificatore per l'abbonamento, ad esempio:

{"jsonrpc":"2.0","id":1,"result":"0xf47df962ae9ba250ba9e9fb239b6894f"}

In seguito, il client invierà i dettagli di ogni nuovo blocco della testa della catena man mano che si verifica. Ecco un evento di esempio dall'iscrizione riportata sopra:

{
   "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"
   }
}

Metriche

I nodi Ethereum forniscono una serie di metriche sullo stato operativo del nodo. In genere, questi dati vengono utilizzati da uno strumento come Prometheus o Grafana.

Per recuperare le metriche esposte da un client beacon, puoi utilizzare un comando come:

curl https://bc-mc.YOUR_NODES_URL/metrics/prometheus?key=YOUR_API_KEY

Viene generato un output simile al seguente:

# 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
...

Esistono endpoint delle metriche distinti per il client di esecuzione e il client beacon. Per il client di esecuzione, in genere hanno il prefisso ec-mc e per il client del beacon, in genere hanno il prefisso bc-mc (come nell'esempio precedente).

Per saperne di più sulle metriche di ciascun software client, visita:

Guida di riferimento per le porte Private Service Connect

I nodi abilitati per Private Service Connect utilizzano un indirizzo IP statico generato dall'utente insieme alla porta designata per generare un endpoint. Utilizza la mappatura appropriata nella tabella seguente.

Tipo di porta Numero porta
Endpoint API JSON RPC 8545
Endpoint API Geth Websocket 8546
Endpoint API Erigon Websocket 8545
Endpoint API Beacon 5052
Endpoint API Beacon Prometheus Metrics 5054
Endpoint API Prometheus Metrics del client di esecuzione 8647