hiro99ma blog

ウォレット

目次 (最終更新日:2025/03/24)

HDウォレット

(ここに階層の図を入れる)

BIP32 は鍵導出について、BIP-44 は各階層(path)の用途を決めている。

m / purpose' / coin_type' / account' / change / address_index

「ウォレットを作る」としたときに 12単語や 24単語のニモニック(場合によってはパスフレーズも)を記録するが、 それだけだとこの階層では最初の m だけしか決まらない。
purpose' が P2TR(86’) や P2WPKH(84’) などを決めているので、これも記録しておかないと面倒だ(数種類なので全部試せば良いのだが、それが面倒だと思う)。
coin_type' は “Bitcoin mainnet” や “Bitcoin testnet”(regtest などもたぶん含む)、おそらく Ethereum なども使っているんじゃ無かったか。
account' はおそらく切り替えて使いたい場合、change0 が受信アドレス(公開用)、1 がお釣りアドレス(内部用)。 address_index はアドレスを作るごとに増やしていく値。

ウォレットに紐付く UTXO を探す場合、address_index をインクリメントさせながら調べていく。 32 bit あるので全部の空間を調べることはできない。 アドレスを作ったけど受信しなかったということもあるので、 デフォルトでは UTXO が見つからないアドレスが 20個続いた場合は探索を打ち切る(gap limit)。
あくまでデフォルトなので、20個調べたら必ず打ち切る、というものではない。

seed

seed は 128~512 bits の乱数である。
BIP-32 では 256 bit を推奨していたが今もそうなのかは未確認。

master key と chain code

* Master key generation

Key=”Bitcoin seed”、Data=seed で HMAC-SHA512 計算をした値を I とし、それを半分に割って ILIR とする(左半分と右半分)。
左半分が master secret key、右半分が master chain code である。
IL が 0 と等しいか n 以上だと NG。

拡張鍵

extended key はこう。

シリアライズ

プレフィクス

参考

Output Descriptors

under construction…

参考

関連ページ

writer: hiro99ma
tags: Bitcoin開発  

 < Top page

コメント(Google Formへ飛びます)

GitHub

X/Twitter

Homepage

About me