Halaman ini menjelaskan cara memanggil Ethereum Node API. Sebelum dapat mengakses node blockchain Ethereum, Anda harus mengetahui kunci API dan URL endpoint node. Ikuti panduan menggunakan node blockchain untuk menentukannya, jika Anda belum melakukannya.
JSON-RPC
Bagian ini menjelaskan cara membuat kueri JSON-RPC API node blockchain Ethereum.
Contoh RPC klien eksekusi
Anda dapat membuat kueri klien eksekusi (Geth untuk node lengkap atau Erigon untuk node arsip) melalui JSON-RPC. Lihat spesifikasi Ethereum API untuk spesifikasi JSON-RPC generik, atau dokumentasi Geth RPC untuk dokumentasi khusus Geth.
Misalnya, untuk memanggil metode 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
Dengan:
id
adalah ID yang ditetapkan oleh klien--pemrakarsa permintaan. Contoh,1
.jsonrpc
adalah versi JSON-RPC. Contoh,2.0
.method
adalah nama metode. Contoh,eth_getBlockByNumber
.params
adalah nilai yang akan digunakan denganmethod
.- YOUR_NODES_URL adalah alamat yang ditampilkan di
Mendapatkan URL node blockchain. Misalnya,
json-rpc.ejp4j0b1rdiq06p8lxksd5z25.blockchainnodeengine.com
. - YOUR_API_KEY adalah kunci yang Anda buat di Membuat kunci API.
Lihat Spesifikasi JSON-RPC2.0 untuk mengetahui informasi selengkapnya tentang format objek Permintaan.
Berikut adalah contoh respons terhadap perintah di atas:
{
"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 node suar
Blockchain Node Engine juga mengekspos endpoint klien konsensus Ethereum.
Misalnya, untuk meminta status validator di 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'
Anda juga dapat memberikan kunci API sebagai header HTTP, bukan parameter kueri. Kueri berikut setara:
curl \
-H "Content-Type: application/json" \
'http://beacon.YOUR_NODES_URL/eth/v1/beacon/states/head/validators/1?key=YOUR_API_KEY'
Penjelasan Lebih Lanjut:
- YOUR_NODES_URL adalah alamat yang ditampilkan di Mendapatkan URL node blockchain.
- YOUR_API_KEY adalah kunci yang Anda buat di Membuat kunci API.
Berikut adalah contoh respons terhadap perintah di atas:
{
"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
Untuk berlangganan feed data, bukan melakukan polling data, Anda dapat menggunakan WebSocket API dari klien eksekusi node blockchain.
Misalnya, untuk berlangganan head rantai baru:
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"]}
Klien eksekusi akan merespons dengan ID untuk langganan, seperti:
{"jsonrpc":"2.0","id":1,"result":"0xf47df962ae9ba250ba9e9fb239b6894f"}
Setelah itu, klien akan mengirimkan detail setiap blok head chain baru saat terjadi. Berikut adalah contoh peristiwa dari langganan di atas:
{
"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"
}
}
Metrik
Node Ethereum menyediakan sejumlah metrik tentang status operasional node. Biasanya, metrik ini akan digunakan oleh alat seperti Prometheus atau Grafana.
Untuk mengambil metrik yang diekspos oleh klien beacon, Anda dapat menggunakan perintah seperti:
curl https://bc-mc.YOUR_NODES_URL/metrics/prometheus?key=YOUR_API_KEY
Tindakan ini menghasilkan output yang mirip dengan berikut ini:
# 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
...
Ada endpoint metrik terpisah untuk klien eksekusi dan klien beacon.
Untuk klien eksekusi, biasanya diawali dengan ec-mc
dan untuk klien beacon, biasanya diawali dengan bc-mc
(seperti dalam contoh di atas).
Anda dapat membaca selengkapnya tentang metrik dari setiap software klien di: