이 페이지에서는 이더리움 노드 API를 호출하는 방법을 설명합니다. 이더리움 블록체인 노드에 액세스하려면 API 키와 노드 엔드포인트 URL을 알아야 합니다. 아직 확인하지 않았다면 블록체인 노드 사용 가이드를 따라 확인하세요.
JSON-RPC
이 섹션에서는 이더리움 블록체인 노드의 JSON-RPC API를 쿼리하는 방법을 설명합니다.
실행 클라이언트 RPC 예시
JSON-RPC를 통해 실행 클라이언트 (전체 노드의 경우 Geth, 보관 노드의 경우 Erigon)를 쿼리할 수 있습니다. 일반 JSON-RPC 사양은 이더리움 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 키 만들기에서 만든 키입니다.
요청 객체의 형식에 관한 자세한 내용은 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
블록체인 노드 엔진은 이더리움 합의 클라이언트 엔드포인트도 노출합니다.
예를 들어 슬롯 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'
쿼리 매개변수 대신 HTTP 헤더로 API 키를 제공할 수도 있습니다. 다음 쿼리는 동일합니다.
curl \
-H "Content-Type: application/json" \
'http://beacon.YOUR_NODES_URL/eth/v1/beacon/states/head/validators/1?key=YOUR_API_KEY'
자세한 설명:
- YOUR_NODES_URL는 블록체인 노드 URL 가져오기에서 반환된 주소입니다.
- YOUR_API_KEY는 API 키 만들기에서 만든 키입니다.
위 명령어에 대한 샘플 응답은 다음과 같습니다.
{
"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"
}
}
측정항목
이더리움 노드는 노드의 운영 상태에 관한 여러 측정항목을 제공합니다. 일반적으로 이러한 측정항목은 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
...
실행 클라이언트와 비콘 클라이언트에는 별도의 측정항목 엔드포인트가 있습니다.
실행 클라이언트의 경우 일반적으로 ec-mc
이 접두사로 붙고 비콘 클라이언트의 경우 일반적으로 bc-mc
이 접두사로 붙습니다 (위 예 참고).
각 클라이언트 소프트웨어의 측정항목에 대한 자세한 내용은 다음을 참고하세요.