2020/06/02
PythonでBIP49アドレスを生成
概要
現在、Bitcoin系のサーバーの見直しを行っています。
プライベートキーの管理がやや煩雑になってきたので、
HD Walletベースで、BIP49に基づいたアドレスを生成して
プライベートキーは直接管理せず、mnemonic wordのみを管理すれば十分なようにしようとしています。
それに伴って、pythonでBIP49ベースのprivate keyおよびaddressを生成できないか検証してみました。
今回は、hdtoolsというツールを検証してみました。
実施事項
オンラインツールの使用
まずは、テスト用にmnemonicを生成します。(以下)
float tank tower skate steel fault choice weather loop deputy remember gap
https://test.jochen-hoenicke.de/bip39-standalone.html が便利です。
まずは上記のオンラインのツールを使って "m/49’/0’/0’/0/0"のアドレスを生成してみます。
3FmAhUvFNKpxK8J1WQq3E5twLJR3erQnPn
が生成されていました。
hdtoolsを使った実装
mainnet
M = XPrv.from_mnemonic("float tank tower skate steel fault choice weather loop deputy remember gap")
address = (M/49./0./0./0/0).address('P2WPKH-P2SH')
logger.info("address for M/49'/0'/0'/0/0 is %s", address)
同様のアドレスが生成されていることが確認できました。
address for M/49'/0'/0'/0/0 is 3FmAhUvFNKpxK8J1WQq3E5twLJR3erQnPn
testnet
Testnetは “from_mnemonic” の引数にnetworkを明示的に指定する必要があります。
M = XPrv.from_mnemonic("float tank tower skate steel fault choice weather loop deputy remember gap", network=NETWORK.BTC_TEST)
address = (M/49./1./0./0/0).address('P2WPKH-P2SH')
logger.info("address for M/49'/1'/0'/0/0 is %s", address)
こちらで、無事に “2Mz2Xebx5Qub8PBiYn3sC1HWtj46sopgwmL” が出力されました。
感想
“hdtools” 使いやすいです。
あと・使い方がカッコ良くて良いですね。
関連する記事
[Python]ハイフンなし電話番号からハイフン付きに復元
Pythonでハイフンなしの日本の電話番号をハイフン付きのものに変換する
[Rust]BitcoindのZMQを使って、新しいblockの検知をする
Rustにてbitcoinのblock生成を検知して、処理をキックする部分を実装しました。
[22.0]Local環境でbitcoind@Regtestを動かしてみる
version22.0のbitcoind・Regtestネットワークをdocker-composeを使って動作確認をしました
[Python]BeautifulSoup4でhtmlの解析
BeautifulSoup4というPythonのライブラリを使って、特定のURLのコンテンツを取得し、タイトルや説明文を取得できるようにしました。