Ethereum(Geth)でJSON RPCを使って外部からアクセスする

article-thumbnail

こんにちは、いつもお読みいただきありがとうございます。
Ken(@gootablog)です。

Gethの構築の記事やコマンドの記事を書きましたが、今回は外部からGethにアクセスするために必要なJSON RPCについて書いていきます。

Ethereumクライアント「Geth」の環境構築方法
Ethereum(Geth)でプライベートネットを作成
Gethコンソールでよく使うコマンドをまとめました
Ethereum(Geth)でテストネット(Ropsten)に接続してみる
Ethereum(Geth)をlivenetに接続してみる
Ethereum(Geth)をバックグラウンドで起動する&バックグラウンドからコンソールを起動する

コンソールからRPCを有効にする

コンソールから有効にするにはすでにGethを起動させている必要があります。起動させてコンソールを開いたら以下のコマンドを実行してください。

> admin.startRPC('0.0.0.0', 8545, '', 'eth,net,web3')

引数はデフォルトの値と同じなので無しで実行しても同じ結果になります。

>> 参考 https://github.com/ethereum/go-ethereum/wiki/Management-APIs#admin_startrpc

止めるにはこのコマンドを実行してください。

> admin.stopRPC()

起動時にオプション指定で有効にする

起動時に有効にする場合は以下のオプションを付けてGethを起動させてください。

--rpc --rpcaddr "0.0.0.0" --rpcport "8545" --rpcapi "web3,eth,net" 

これでRPCが有効になります。

実際に外部からRPCのAPIを叩いてみる

試しに現在のブロック数を取得するAPIを叩いてみます
(実行はRopstenのネットワークを使用します)

$ curl -X POST \
  http://**** \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0", "method":"eth_blockNumber", "params": [], "id":"hoge" }'

//response
{"jsonrpc":"2.0","id":"hoge","result":"0x26746b"}

resultのところにブロック数が入っています。
16進数なので変換すると2520171ブロックですね。

このように外部からAPIを使えるのでWebアプリなどとも連携ができますね。
ただし、ポートを開放する場合は通過できるIPなどを絞って使ってください。

JSON RPCのAPIは以下のページで確認できます。
>> https://github.com/ethereum/wiki/wiki/JSON-RPC

参考になれば幸いです。

Geth