Counterpartydの参照系APIを実行する
はじめに
前回はCounterpartydをセットアップしてAPI(get_running_info)を実行しましたが、今回はそれ以外のReadAPIを実行します。
ローカルPC(Mac)からCounterpartydサーバーにRPC接続します。Node.jsを利用します。Node.jsの細かい説明は省略します。
Counterpartyを使ったサービスを開発する人への情報共有を目的とします。
目次
- 準備(外部からのRPCアクセス。Node.js設定)
- get_{table}
- get_asset_info
- get_asset_names
- get_messages
- get_messages_by_index
- get_xcp_supply
- get_block_info
- get_blocks
準備(外部からのRPCアクセス。Node.js設定)
(1) 外部からのアクセスを許可
外部からのアクセスを可能にするために。counterpartyd.confを変更してcounterpartydを再起動してください。
rpc-host=0.0.0.0
ローカルPC(Mac)からCounterpartydサーバーにRPC接続ができるか確認
curl http://XXXXXXXX.vs.sakura.ne.jp:4000/api/ --user rpc:xcppw1234 -H 'Content-Type: application/json; charset=UTF-8' -H 'Accept: application/json, text/javascript' --data-binary '{"jsonrpc":"2.0","id":0,"method":"get_running_info"}'
(2) Node.js設定
JSON-RPCのライブラリはnode-json-rpcを利用します。
$ npm install node-json-rpc
(3) Node.jsサンプル起動(get_running_info)
counterpartyd-api.jsファイルを作成。
var rpc = require('node-json-rpc'); var options = { port: 4000, host: 'XXXXXXX.vs.sakura.ne.jp', path: '/', strict: true, login: 'rpc', hash: 'xcppw1234' }; var client = new rpc.Client(options); client.call( {"jsonrpc":"2.0", "id":0, "method":"get_running_info"}, function (err, res) { if (err) { console.log(err); } else { console.log(res); } } );
実行と結果。
$node counterpartyd-api.js { jsonrpc: '2.0', id: 0, result: { version_minor: 49, bitcoin_block_count: 311432, version_major: 9, db_caught_up: true, last_message_index: 479193, running_testcoin: false, running_testnet: false, version_revision: 1, last_block: { previous_block_hash: '0000000000000000001e79a361bb06c861ec527e9d57e3cdf176b6fdb0784e4b', block_index: 334553, txlist_hash: 'e3abb6ae9f22e51afcfab5c7da1067ae3a6815c29c369cdfed26876975fae6ee', block_time: 1418729720, block_hash: '000000000000000008a3b7780f566e2f8ddb1378f758cee28e6857bf4cf57c3b', ledger_hash: '396e6c9be5b6e99dacc8a0f1cc1213812bc0ae552b0ce457d41327d90c9846df', difficulty: '40007470271.2713' } } }
get_{table}
{table}にはbalances, credits, debitsなどを選択できます。ここではget_balancesを利用して、ビットコインアドレスに対する残高を取得します。
デフォルトの検索結果件数は最大1000件です。抽出条件は細かく設定できます。
client.call( {"jsonrpc":"2.0", "id":0, "method":"get_balances", "params":{"filters": {'field': 'address', 'op': '==', 'value': "17sdLuNtD7ZpFCVZ3Doz58fwxFF6i6CKk2"}}}, function (err, res) { if (err) { console.log(err); } else { console.log(res); } } );
実行と結果。
$node counterpartyd-api.js { jsonrpc: '2.0', id: 0, result: [ { address: '17sdLuNtD7ZpFCVZ3Doz58fwxFF6i6CKk2', quantity: 30000000, asset: 'XCP' }, { address: '17sdLuNtD7ZpFCVZ3Doz58fwxFF6i6CKk2', quantity: 99900, asset: 'XZCOIN' } ] }
私の保有するXCPとXZCOINの残高が表示されます。quantityは100000000倍の値が表示されます。実際は0.3XCP保持しています。
get_asset_info
指定したアセットの情報を返します。
リクエスト(ざくっと省略します。counterpartyd-api.js内のリクエストJSON部分をこれに変更してください)
{"jsonrpc":"2.0", "id":0, "method":"get_asset_info", "params":{"assets": ["XZCOIN", "GEMZ"]}},
実行と結果。
$node counterpartyd-api.js { jsonrpc: '2.0', id: 0, result: [ { issuer: '17sdLuNtD7ZpFCVZ3Doz58fwxFF6i6CKk2', owner: '17sdLuNtD7ZpFCVZ3Doz58fwxFF6i6CKk2', call_date: 0, asset: 'XZCOIN', supply: 100000, call_price: 0, divisible: false, callable: false, description: '', locked: false }, { issuer: '1FUWt93FcNtWv2sqhGVK81QVgaGgPUaYis', owner: '1FUWt93FcNtWv2sqhGVK81QVgaGgPUaYis', call_date: 0, asset: 'GEMZ', supply: 10000000000000000, call_price: 0, divisible: true, callable: false, description: 'The GEMS Mobile App', locked: true } ] }
get_asset_names
全アセット名の一覧が表示されます。(XCP名を決める時に使えるかな..)
リクエストJSON
{"jsonrpc":"2.0", "id":0, "method":"get_asset_names"},
実行と結果。
$node counterpartyd-api.js { jsonrpc: '2.0', id: 0, result: [ 'A100000000000000000', 'A1000000000000000000', . . (省略)
get_messages
ブロック内のメッセージを表示します。細かい取引の内容が確認できます。
リクエストJSON
{"jsonrpc":"2.0", "id":0, "method":"get_messages", "params":{"block_index": 334553}},
実行と結果。
$node counterpartyd-api.js { jsonrpc: '2.0', id: 0, result: [ { bindings: '{"action": "open order", "address": "19HgcRygeivCz5faiVzFniC9GjW3DFyXG2", "asset": "XCP", "block_index": 334553, "event": "adba05c012f18e93f8d00590f0b5723f26a4ccb0dd546995cd1dbfe38b13a332", "quantity": 1046921}', block_index: 334553, timestamp: 1418869725, category: 'debits', command: 'insert', message_index: 479175 }, . . (省略)
get_messages_by_index
リクエストJSON
{"jsonrpc":"2.0", "id":0, "method":"get_messages_by_index", "params":{"message_indexes": [479175]}},
実行と結果。
$node counterpartyd-api.js { jsonrpc: '2.0', id: 0, result: [ { bindings: '{"action": "open order", "address": "19HgcRygeivCz5faiVzFniC9GjW3DFyXG2", "asset": "XCP", "block_index": 334553, "event": "adba05c012f18e93f8d00590f0b5723f26a4ccb0dd546995cd1dbfe38b13a332", "quantity": 1046921}', block_index: 334553, timestamp: 1418869725, category: 'debits', command: 'insert', message_index: 479175 } ] }
get_xcp_supply
現在存在するXCPの総量を返します。
リクエストJSON
{"jsonrpc":"2.0", "id":0, "method":"get_xcp_supply"},
実行と結果。
$node counterpartyd-api.js { jsonrpc: '2.0', id: 0, result: 264671268477850 }
get_block_info
block_indexを指定してblockの情報を返します。
リクエストJSON
{"jsonrpc":"2.0", "id":0, "method":"get_block_info", "params":{"block_index": 334553}},
実行と結果。
$node counterpartyd-api.js { jsonrpc: '2.0', id: 0, result: { previous_block_hash: '0000000000000000001e79a361bb06c861ec527e9d57e3cdf176b6fdb0784e4b', block_index: 334553, txlist_hash: 'e3abb6ae9f22e51afcfab5c7da1067ae3a6815c29c369cdfed26876975fae6ee', block_time: 1418729720, block_hash: '000000000000000008a3b7780f566e2f8ddb1378f758cee28e6857bf4cf57c3b', ledger_hash: '396e6c9be5b6e99dacc8a0f1cc1213812bc0ae552b0ce457d41327d90c9846df', difficulty: '40007470271.2713' } }
get_blocks
複数のblock_indexを指定してblockの情報を返します。
リクエストJSON
{"jsonrpc":"2.0", "id":0, "method":"get_blocks", "params":{"block_indexes": [334553]}},
実行と結果。
$node counterpartyd-api.js { jsonrpc: '2.0', id: 0, result: [ { previous_block_hash: '0000000000000000001e79a361bb06c861ec527e9d57e3cdf176b6fdb0784e4b', block_index: 334553, txlist_hash: 'e3abb6ae9f22e51afcfab5c7da1067ae3a6815c29c369cdfed26876975fae6ee', _messages: [Object], block_time: 1418729720, block_hash: '000000000000000008a3b7780f566e2f8ddb1378f758cee28e6857bf4cf57c3b', ledger_hash: '396e6c9be5b6e99dacc8a0f1cc1213812bc0ae552b0ce457d41327d90c9846df', difficulty: '40007470271.2713' } ] }
まとめ
次回はAction/Write API について書きます。