2020/06/02

PythonでBIP49アドレスを生成

bitcoinpythoncrypto-asset

概要

現在、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"のアドレスを生成してみます。

bip49-online-tool-min.png

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” 使いやすいです。
あと・使い方がカッコ良くて良いですね。