Counterpartyにおいて、HDWallet機能はラベル付けにしか使うことができないのか

はじめに

Counterwallet.ioの画面からCreate New Addressボタンをクリックすると、新しいアドレスが追加されます。利用用途毎にアドレスを作れる便利な機能です。(ラベル付けのような機能。HDWalletの階層は3階層になっていて、m/0'/0/0、m/0'/0/1 ... m/0'/0/k と増えていきます)

最近のBitcoin Walletでは使用するアドレスは毎回生成されてプライバシーを高めたり、意味を持ったアドレス(例えばECサイトにおいて商品やユーザー毎のアドレス)を作成することができますが、Counterpartyにおいて同様のことができるでしょうか。

ためしに4階層目のアドレスを作ってBTCを入金してみたら...

親子関係にあるアドレスを用意して、子のアドレスにビットコインを送金します。

当然ですが、結果は反映されない

残高は0です。

スクリーンショット 2016-01-16 20.36.51.png

合算した金額を表示したい

Counterwallet.ioは機能を提供していないので、自前で子アドレスのunspent transactionを1件ずつ見て加算するしかなさそうです。

BIP44の小ネタ。子アドレスの残高を無限に調べないといけないの?

子アドレスは無数に存在する場合があるので、どこまでも残高を加算する必要があるのでしょうか? 答えはもちろんNOで、BIP44では20の子アドレスが連続して残高が0の場合は、それ以降の子アドレスは使用されていないとすると設定されています。

例) 以下の場合、m/0'/0/0/0/23も使用されていないと判断する

  • m/0'/0/0/0/0 1BTC
  • m/0'/0/0/0/1 1BTC
  • m/0'/0/0/0/2 0BTC
  • m/0'/0/0/0/3 0BTC

....

  • m/0'/0/0/0/22 0BTC

CounterpartyAPIを見ると、送信元・送信先が1対1になっている

Counterpartyのトークンを送信する時に、couterpartydサーバーにRPCコールするAPIです。未サイントランザクションが返されます。sourceアドレスとdestinationアドレスが1対1に紐付いています。

create_send API

create_send(source, destination, asset, quantity, encoding=’multisig’, pubkey=null, allow_unconfirmed_inputs=false, fee=null, fee_per_kb=10000, regular_dust_size=XXXX(optional))

まとめ

CounterpartyはAPI仕様上、複数のアドレスにまたがるトークンの送信はできなそうです。(アドレスAのZONOコインと、アドレスBのZONOコインを合算して、アドレスCに送ることはできない)

特殊な状況ですが、一部のアドレスをBTC入金専用にしたい(例:m/0'/0/2はBTC専用)、そのアドレスは都度生成したいという仕様がある場合は、utxoの取得部分を追加実装すればできそうです。

参考

github bitcoin/bips

github copay

bitcoin/bips bip-0044

ビットコイン・ウォレットの受け取り用のアドレスが毎回変わってしまう理由

Counterparty API

TipMe

TipMe with IndieSquare