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

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

JSON-RPC

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

実行クライアント RPC の例

実行クライアント(フルノードの場合は Geth、アーカイブ ノードの場合は Erigon)は、JSON-RPC を介してクエリできます。一般的な 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"]}

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

{"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 が付加されます(上記の例を参照)。

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

Private Service Connect ポート リファレンス ガイド

Private Service Connect 対応ノードは、指定されたポートとともにユーザーが生成した静的 IP アドレスを使用してエンドポイントを生成します。次の表で適切なマッピングを使用します。

ポートの種類 ポート番号
JSON RPC API エンドポイント 8545
Geth Websocket API エンドポイント 8546
Erigon Websocket API エンドポイント 8545
Beacon API エンドポイント 5052
Beacon Prometheus Metrics API エンドポイント 5054
実行クライアントの Prometheus Metrics API エンドポイント 8647