Counterparty Send APIを使ってAssetを送信する

f:id:yzono:20141220051341j:plain

はじめに

前回は、PassPhraseから秘密鍵を取得しました。今回はその秘密鍵を利用してCounterparty Send APIを使ってAssetを送信します。

ただし送信には他にもいくつか準備が必要です。順を追って説明します。

Counterpartyを使ったサービスを開発する人への情報共有を目的とします。

目次

  • Send API実行
  • bitcoind再インストール(jmcorgan-addrindexパッチ適用バージョン)
  • Send API再実行

Send API実行

RPC経由ではなく直接counterpartydコマンドを実行します。

"Public key (hexadecimal) or Private key (Wallet Import Format):"が表示されたら秘密鍵を入力してください。

$ counterpartyd send --source "17sdLuNtD7ZpFCVZ3Doz58fwxFF6i6CKk2" --destination "1GfcF1LSQagv65VQ1n66UAn9NF1TKmepcM" --quantity 1 --asset "XZCOIN"
Status: Running v9.49.1 of counterpartyd.
Status: Connecting to database.
Source not in backend wallet.
Public key (hexadecimal) or Private key (Wallet Import Format): XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

しばらくすると以下エラーが表示されます。(dbチェックに時間がかかる場合があります。毎回チェックする必要はないのでスクリプトを編集して、該当部分をコメントアウトしても構いません。とりあえずは)

Traceback (most recent call last):
  File "/home/xcp/counterpartyd_build/dist/counterpartyd/counterpartyd.py", line 675, in <module>
    args.unsigned)
  File "/home/xcp/counterpartyd_build/dist/counterpartyd/counterpartyd.py", line 112, in cli
    unsigned_tx_hex = util.api(method, params)
  File "/home/xcp/counterpartyd_build/dist/counterpartyd/lib/util.py", line 66, in api
    raise RPCError('{}'.format(response_json['error']))
lib.util.RPCError: {'code': -32000, 'data': {'type': 'BitcoindRPCError', 'args': ['Unknown RPC command: `searchrawtransactions`. Either, switch to jmcorgan (recommended), use Insight, or use sochain or blockr.'], 'message': 'Unknown RPC command: `searchrawtransactions`. Either, switch to jmcorgan (recommended), use Insight, or use sochain or blockr.'}, 'message': 'Server error'}

"searchrawtransactions"というRPCコマンドが無いというエラーです。counterpartyd4.7からマルチシグネチャーを取り入れたため、bitcoindにパッチを適用する必要があります。"switch to jmcorgan (recommended)"とはそれを指しています。

bitcoind再インストール(jmcorgan-addrindexパッチ適用バージョン)

(1) bitcoindアンインストール

sudo apt-get remove bitcoind

(2) パッチ適用済みbitcoindインストール

ripplerの説明のコピペになりますが以下を実行してください。

sudo apt-get update -y; sudo apt-get upgrade -y
sudo apt-get install wget
wget https://www.dropbox.com/s/9v2yxpss1yxhbfx/bitcoin.addrindex_0.9.2-0_amd64.deb
sudo apt-get install libboost-chrono-dev libboost-filesystem1.54-dev libboost-program-options-dev libboost-python-dev libboost-system1.54-dev libboost-system-dev libboost-thread1.54.0 -y  
wget https://launchpad.net/~bitcoin/+archive/ubuntu/bitcoin/+files/libdb4.8_4.8.30-trusty1_amd64.deb
wget https://launchpad.net/~bitcoin/+archive/ubuntu/bitcoin/+files/libdb4.8%2B%2B_4.8.30-trusty1_amd64.deb
sudo dpkg -i libdb4.8*.deb
wget https://www.dropbox.com/s/9v2yxpss1yxhbfx/bitcoin.addrindex_0.9.2-0_amd64.deb
sudo dpkg -i bitcoin.addrindex_0.9.2-0_amd64.deb

(3) 設定ファイル修正

vi ~/.bitcoin/bitcoin.conf

addrindex=1 # この1行を追加してください。

(4) Blockchainデータをreindex

/usr/local/bin/bitcoind -reindex
/usr/local/bin/bitcoind getinfo
{
    "version" : 90200,

バージョンが0.9.2になっているか確認してください。インデックスが完了するまで数時間待ちます。私の環境では6時間かかりました。

API再実行、エラー発生

APIを再実行すると以下エラーが出ます。256bitの秘密鍵ではなく、Wallet Import Format(WIF)が必要になるからです。

raise exceptions.TransactionError('invalid private key')

Private key (Wallet Import Format)取得後、再実行

http://gobittest.appspot.com/PrivateKeyでWIFを取得して再実行したら別のエラーが発生しました。

counterpartyd send --source "17sdLuNtD7ZpFCVZ3Doz58fwxFF6i6CKk2" --destination "1GfcF1LSQagv65VQ1n66UAn9NF1TKmepcM" --quantity 1 --asset "XZCOIN"
Status: Running v9.49.1 of counterpartyd.
Status: Connecting to database.
Source not in backend wallet.
Public key (hexadecimal) or Private key (Wallet Import Format): XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Sign and broadcast? (y/N) y
Traceback (most recent call last):
  File "/home/xcp/counterpartyd_build/dist/counterpartyd/counterpartyd.py", line 675, in <module>
    args.unsigned)
  File "/home/xcp/counterpartyd_build/dist/counterpartyd/counterpartyd.py", line 125, in cli
    signed_tx_hex = bitcoin.sign_tx(unsigned_tx_hex, private_key_wif=private_key_wif)
  File "/home/xcp/counterpartyd_build/dist/counterpartyd/lib/bitcoin.py", line 585, in sign_tx
    raise exceptions.TransactionError('Could not sign transaction with pybtctool.')
lib.exceptions.TransactionError: Could not sign transaction with pybtctool.

まとめ

Assetの送信はできませんでした。解決策を質問したところいくつか方法があるそうです。次回書きます。

参考

Counterparty Federated Node and counterpartyd with Bitcoin-Qt and addrindex Patch

rippler/btc-jmcorgan-addrindex-v0.9.2.0-fca268c-beta

rippler/btc-jmcorgan-addrindex-v0.9.2.0-fca268c-beta

CounterpartyXCP/counterpartyd

Private key

暗号通貨(Bitcoin, Monacoin)のプロトコルを理解する: 公開鍵と秘密鍵

Mastering Bitcoin