本页介绍了如何调用以太坊节点为基础的 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 节点提供了有关节点运行状态的多个指标。通常,这些数据会由 Prometheus 或 Grafana 等工具使用。
如需提取信标客户端公开的指标,您可以使用以下命令:
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 |