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 conmethod
.- 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:
- YOUR_NODES_URL è l'indirizzo restituito in Ottenere gli URL dei nodi blockchain.
- YOUR_API_KEY è la chiave che hai creato in Creare una chiave API.
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 |