Ethereum ブロックチェーン ノードの使用

このページでは、Ethereum ノード API を呼び出す方法について説明します。Ethereum ブロックチェーン ノードにアクセスするには、API キーとノード エンドポイント URL を知っておく必要があります。まだ行っていない場合は、ブロックチェーン ノードの使用ガイドに沿って確認してください。

JSON-RPC

このセクションでは、Ethereum ブロックチェーン ノードの JSON-RPC API のクエリについて説明します。

実行クライアント RPC の例

JSON-RPC を使用して、実行クライアント(フルノードの場合は Geth、アーカイブ ノードの場合は Erigon)をクエリできます。一般的な JSON-RPC 仕様については Ethereum API 仕様、Geth 固有のドキュメントについては Geth RPC ドキュメントをご覧ください。

たとえば、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

ここで

  • id は、リクエストの送信元であるクライアントによって設定される識別子です。例: 1
  • jsonrpc は JSON-RPC バージョンです。例: 2.0
  • method はメソッドの名前です。例: eth_getBlockByNumber
  • params は、method で使用する値です。
  • YOUR_NODES_URL は、ブロックチェーン ノードの URL を取得するで返されたアドレスです。例: json-rpc.ejp4j0b1rdiq06p8lxksd5z25.blockchainnodeengine.com
  • YOUR_API_KEY は、API キーを作成するで作成したキーです。

Request オブジェクトの形式について詳しくは、JSON-RPC2.0 仕様をご覧ください。

上記のコマンドに対するレスポンスの例を次に示します。

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

Blockchain Node Engine は、イーサリアム コンセンサス クライアント エンドポイントも公開します。たとえば、スロット 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'

API キーは、クエリ パラメータではなく HTTP ヘッダーとして指定することもできます。次のクエリは同等です。

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

詳細:

上記のコマンドに対するレスポンスの例を次に示します。

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

データをポーリングするのではなくデータフィードをサブスクライブするには、ブロックチェーン ノードの実行クライアントの WebSocket API を使用します。

たとえば、新しいチェーンヘッドをサブスクライブするには:

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

実行クライアントは、次のようなサブスクリプションの識別子を返します。

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

その後、クライアントは新しいチェーンヘッド ブロックが発生するたびに、その詳細を送信します。上記のサブスクリプションからのイベントの例を次に示します。

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

指標

Ethereum ノードは、ノードの運用状態に関するさまざまな指標を提供します。通常、これらの指標は PrometheusGrafana などのツールで使用されます。

ビーコン クライアントによって公開された指標を取得するには、次のようなコマンドを使用します。

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

これにより、次のような出力が生成されます。

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

実行クライアントとビーコン クライアントには、別々の指標エンドポイントがあります。実行クライアントの場合、通常は ec-mc という接頭辞が付き、ビーコン クライアントの場合、通常は bc-mc という接頭辞が付きます(上記の例を参照)。

各クライアント ソフトウェアの指標の詳細については、以下をご覧ください。