Menggunakan node blockchain Ethereum

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 dengan method.
  • 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:

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