Ethereum 블록체인 노드 사용

이 페이지에서는 Ethereum 노드 API를 호출하는 방법을 설명합니다. 이더리움 블록체인 노드에 액세스하려면 API 키와 노드 엔드포인트 URL을 알아야 합니다. 아직 결정하지 않았다면 블록체인 노드 사용 가이드를 따라 결정하세요.

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입니다.
  • paramsmethod와 함께 사용되는 값입니다.
  • YOUR_NODES_URL블록체인 노드 URL 가져오기에서 반환된 주소입니다(예: json-rpc.ejp4j0b1rdiq06p8lxksd5z25.blockchainnodeengine.com).
  • YOUR_API_KEYAPI 키 만들기에서 만든 키입니다.

요청 객체의 형식에 관한 자세한 내용은 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

블록체인 노드 엔진은 Ethereum 합의 클라이언트 엔드포인트도 노출합니다. 예를 들어 슬롯 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"
   }
}

측정항목

이더리움 노드는 노드의 작동 상태에 관한 여러 측정항목을 제공합니다. 일반적으로 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입니다 (위 예 참고).

각 클라이언트 소프트웨어의 측정항목에 대한 자세한 내용은 다음을 참고하세요.

Private Service Connect 포트 참조 가이드

Private Service Connect 지원 노드는 지정된 포트와 함께 사용자가 생성한 고정 IP 주소를 사용하여 엔드포인트를 생성합니다. 다음 표에서 적절한 매핑을 사용하세요.

포트 유형 포트 번호
JSON RPC API 엔드포인트 8545
Geth Websocket API 엔드포인트 8546
Erigon WebSocket API 엔드포인트 8545
비콘 API 엔드포인트 5052
비콘 Prometheus 측정항목 API 엔드포인트 5054
실행 클라이언트 Prometheus 측정항목 API 엔드포인트 8647