はじめに
- 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 なので、今回は
2617543960000000000
を1000000000000000000
で割った値2.61754396
が残高になります。
参考
- http://blog.playground.io/entry/2018/05/01/035823
- https://scrapbox.io/playground/Infura_%E3%81%AE_JSON_RPC_API_%E3%81%A7_Ethereum_%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AE%E6%AE%8B%E9%AB%98%E3%82%92%E5%8F%96%E5%BE%97
- https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getbalance
- https://infura.io/docs/gettingStarted/makeRequests
sushiether
- Ethereum 関連の情報は https://scrapbox.io/sushiether/ に集約することにしました。
- この記事の内容に変更・更新がある場合は、Infura の JSON RPC API で Ethereum アドレスの残高を取得 - sushiether を更新します。