Halaman ini menjelaskan cara memanggil API node Ethereum. 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 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 mengetahui 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 keterangan:
id
adalah ID yang ditetapkan oleh klien--asal 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 untuk 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 Beacon
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 di bawah ini 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 untuk 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 rantai 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, data ini akan digunakan oleh alat seperti Prometheus atau Grafana.
Untuk mengambil metrik yang ditampilkan oleh klien beacon, Anda dapat menggunakan perintah seperti berikut:
curl https://bc-mc.YOUR_NODES_URL/metrics/prometheus?key=YOUR_API_KEY
Tindakan ini akan 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:
Panduan Referensi Port Private Service Connect
Node yang mengaktifkan Private Service Connect menggunakan alamat IP statis yang dibuat pengguna beserta port yang ditetapkan untuk membuat endpoint. Gunakan pemetaan yang sesuai dalam tabel berikut.
Jenis Port | Nomor Port |
---|---|
Endpoint JSON RPC API | 8545 |
Endpoint Geth Websocket API | 8546 |
Endpoint Erigon Websocket API | 8545 |
Endpoint Beacon API | 5052 |
Endpoint API Metrik Prometheus Beacon | 5054 |
Endpoint API Metrik Prometheus Klien Eksekusi | 8647 |