2014年8月3日日曜日

JSON-RPCを使ってmonacoindを操作する


JSON-RPCの動きを検証するために、jqueryなどを使って適当なJavascriptでテストページを作ったのですが、クロスオリジンの問題でうまく動きません。

ポートが異なるだけで別オリジン扱いのようなので、どうしようもないのかな?と思っていたところ、動きをテストするだけならもっと簡単な方法がありました。

cURLという、様々なプロトコルでデータを送受信できるユーティリティを使います。

試しにインストールして使ってみましょう。

$ sudo apt-get install curl
$ curl http://monacoin.org/ja/

これでだーっと標準出力にサイトのソースが表示されます。


では実際にmonacoindを操作してみましょう。

monacoindとJSON-RPCを使って会話をするために必要なIDとPWは、初回起動時にmonacoin.confに設定しているはずです。

そのIDとPWを使ってデフォルトのrpcportにアクセスすると、ちゃんと返事があります。

$ curl --user 'rpcuserid:rpcpassword' --data-binary '{"jsonrpc":"1.0","id":"curltext","method":"getinfo","params":[]}' -H 'content-type:text/plain;' http://127.0.0.1:9402

{"result":{"version":80700,"protocolversion":70002,"walletversion":60000,"balance":0.01800000,"blocks":208195,"timeoffset":44,"connections":8,"proxy":"","difficulty":1105.55691097,"testnet":false,"keypoololdest":1405931648,"keypoolsize":104,"paytxfee":0.00000000,"mininput":0.00001000,"errors":""},"error":null,"id":"curltext"}


monacoin.confの他の設定項目についても見てみます。

いくつかある設定項目の内、重要なのはrpcallowipとrpcportです。
server、listenについては設定しなくても返事があるので、qtを使う時に必要な設定なのか、デフォルトが有効な設定のようです。

まずrpcportを設定すると、待ち受けるポートをデフォルトの9402から変更出来ます。

rpcport=9359

monacoin.confで上記のように設定すると、以下のように9359ポートで動いているのが分かります。

$ curl --user 'rpcuserid:rpcpassword' --data-binary '{"jsonrpc":"1.0","id":"curltext","method":"getinfo","params":[]}' -H 'content-type:text/plain;' http://127.0.0.1:9359

{"result":{"version":80700,"protocolversion":70002,"walletversion":60000,"balance":0.01800000,"blocks":208196,"timeoffset":44,"connections":6,"proxy":"","difficulty":938.68052376,"testnet":false,"keypoololdest":1405931648,"keypoolsize":104,"paytxfee":0.00000000,"mininput":0.00001000,"errors":""},"error":null,"id":"curltext"}

次に、rpcallowipを設定すると、別のIPからでもアクセス出来るようになります。

以下のコメントアウトした1行目のように設定にすると、ネットワークごとアクセス許可が出来ます。

が、基本的にはlocalhostからのみの接続とすべきでしょう。
そうであれば、デフォルトでlocalhost限定なので、わざわざ設定しなくても良さそうですが、設定しろとよく書いてあるので、念のため。

#rpcallowip=192.168.0.*
rpcallowip=127.0.0.1

ちなみにrpcpasswordを間違えると、以下のようにHTMLでレスポンスがあります。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
<HEAD>
<TITLE>Error</TITLE>
<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
</HEAD>
<BODY><H1>401 Unauthorized.</H1></BODY>
</HTML>


0 コメント:

コメントを投稿