背景
自社サービスに Counterparty トークン SEMORA を採用したい。
まずは顧客が購入したトークンの口座に相当する Bitcoin アドレスを,顧客ごとに割り当てる必要がある。BIP32/BIP44 辺りを使っているだろうから難しいことではないはず。
自社内で counterblockd は動いているし他社提供の API を使う手もありそうだ。
しかし,顧客に割り当てる Bitcoin アドレス表示のたびに JSON RPC を発行するのも効率が悪い。
よって,オフラインでも seed から Bitcoin アドレスを割り出せるようにしたい。
課題
Counterwallet では認証方法として 12words mnemonic が使われている。しかし,用いている単語リストが BIP39 と異なっている。なんてこった。
そのため,BIP39 を扱うライブラリでは BIP32/BIP44 用の seed が得らず,Bitcoin アドレスのリストも得られない。
ハマりどころ
Node ユーザのみ
npm で配布されている bip39
パッケージは,mnemonic に BIP39 が定義しない単語が含まれていてもエラーを出さず,しれっと seed らしきものを返す。
もちろん誤った seed なので,正しい Bitcoin アドレスは得られない。
Counterwallet で表示されるアドレスと目視比較すればすぐに分かるけれども,うっかりすると危険。
bitcore-lib が提供する BIP39 関連のコードからは,きちんとエラーが得られる。
たぶん全員
Counterparty の公式情報によると「CounterWalletHelper.py スクリプトを使え」とある。
しかし,手元の環境 1 では動作しなかった。
追試した日本語圏の方もいらっしゃるようなので,どこかの時点までは期待通りに動作していたはずとは思うのだが…。
Python わからんので,深追いはしていない。
オススメ
Blockscan が,Counterwallet の nmemonic から Bitcoin アドレスを生成する静的 web サイトの雛形を公開している。
手元環境では,これは正しく動作する。サーバサイドで動かすには一手間かかりそうだけれども,コードは比較的きれいなので,なんとかなりそう。
感想
さすが Blockchan 様。
-
Ubuntu 14.04 / Python 2.7.6 (default, Oct 26 2016, 20:30:19) ↩