Infura の JSON RPC API で Ethereum アドレスの残高を取得


はじめに

  • Geth と呼ばれる Ethreum クライアントは、JSON RPC API を提供することができます。
  • JSON RPC API を使用することで、Geth を実行せずに、外部のサーバ(ノード)を使用して、Ether の残高を取得したり、トランザクションを投げたりすることができます。
  • ただし、JSON RPC API を提供しているサーバが返す値を読む形になるので、そのサーバを信用する必要があります。
  • 通常は、自らが所有するサーバの JSON RPC API を使用することが望ましいと思いますが、この記事では Infura というサービスが提供する JSON RPC API を使用します。
  • Infura のサーバ上で動いている Geth に、API 経由でアクセスするといった形になります。

Infura に登録して API Key 取得

  • Infura を使用するために、API Key を取得する必要があります。
  • https://infura.io/ でメールアドレスを登録すると、次のようなフォーマットで API Key つきの URL がメールで送られてきます。
  • https://mainnet.infura.io/xxxxxxxxxx

curl で JSON RPC API にアクセス

  • 今回は Ethereum アドレスの残高を知りたいので、Geth の JSON RPC API eth_getBalance を使用します。
  • API ドキュメント 

API に渡すパラメータ

  • DATA: 残高を取得したい Ethereum アドレス
  • QUANTITY|TAG: ブロックの番号または、"latest" つまり最新のブロックを指定
"params" : [
  "0xF02c1c8e6114b1Dbe8937a39260b5b0a374432bB",
  "latest"
]

リクエストのサンプル

  • 実際に使用する際は、次の箇所を変更してください
    • YOUR_API_KEY の部分を、自分の API Key に変更してください。
    • アドレス 0xF02c1c8e6114b1Dbe8937a39260b5b0a374432bB を、残高を調べたいアドレスに変更してください。
curl -i -X POST \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xF02c1c8e6114b1Dbe8937a39260b5b0a374432bB","latest"],"id":1}' \
"https://mainnet.infura.io/YOUR_API_KEY"

レスポンスのサンプル

HTTP/2 200 
date: Mon, 30 Apr 2018 18:21:08 GMT
content-type: application/json
content-length: 55
server: nginx/1.10.3 (Ubuntu)
vary: Origin

{"jsonrpc":"2.0","id":1,"result":"0x2453625cffc4f000"}
  • この result の値が Ethereum アドレスの残高になります。
  • この値は16進数なので、次のようなコマンド等で10進数に直すと wei の値になります。
echo $((16#2453625cffc4f000))
# => 2617543960000000000
  • 1 Ether = 1000000000000000000 Wei なので、今回は 26175439600000000001000000000000000000 で割った値 2.61754396 が残高になります。

参考

sushiether