LoginSignup
1
1

More than 5 years have passed since last update.

Counterwallet の mnemonic から,オフラインで Bitcoin アドレスを取得する方法

Last updated at Posted at 2017-02-22

背景

自社サービスに 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 様。


  1. Ubuntu 14.04 / Python 2.7.6 (default, Oct 26 2016, 20:30:19)  

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1