はじめに
- 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 に渡すパラメータ
DATA
: 残高を取得したい Ethereum アドレスQUANTITY|TAG
: ブロックの番号または、"latest"
つまり最新のブロックを指定
"params" : [ "0xF02c1c8e6114b1Dbe8937a39260b5b0a374432bB", "latest" ]
- 詳細は API ドキュメント を参照してください。
リクエストのサンプル
- YOUR_API_KEY の部分は、自分の API Key に変更してください。
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
が残高になります。
参考
- Scrapbox
- https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getbalance
- https://infura.io/docs/gettingStarted/makeRequests