使用以太坊区块链节点

本页介绍了如何调用以太坊节点为基础的 API。您需要先知道 API 密钥和节点端点网址,然后才能访问以太坊为基础的区块链节点。如果您尚未确定这些信息,请按照使用区块链节点指南中的说明进行操作。

JSON-RPC

本部分介绍了如何查询以太坊区块链节点的 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获取区块链节点网址中返回的地址。例如 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

如需订阅数据 Feed 而非轮询数据,您可以使用区块链节点执行客户端的 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
...

执行客户端和信标客户端有单独的指标端点。对于执行客户端,这些 ID 通常带有前缀 ec-mc;对于信标客户端,这些 ID 通常带有前缀 bc-mc(如上例所示)。

如需详细了解每种客户端软件的指标,请参阅以下资源:

Private Service Connect 端口参考指南

启用了 Private Service Connect 的节点使用用户生成的静态 IP 地址和指定的端口生成端点。请使用下表中的相应映射。

端口类型 端口号
JSON RPC API 端点 8545
Geth Websocket API 端点 8546
Erigon Websocket API 端点 8545
信标 API 端点 5052
信标 Prometheus Metrics API 端点 5054
执行客户端 Prometheus Metrics API 端点 8647