本文へスキップ
buybitcoinsmart

用語集 / アドレスと鍵

BIP-84導出

BIP-84導出とは?
BIP-84導出とは、BIP-32パスのpurposeレベルを84'に固定する方式であり、これにより1つのシードフレーズから、BIP-141のP2WPKHカプセル化を用いたネイティブSegWitのbc1qアドレスが得られます。

BIP-84で規定されています。

BIP-84はBIP-44の5階層のレイアウトを再利用し、purposeの値だけを変更しています。2017年12月28日に割り当てられ、各アカウントを、バージョンバイトが0x04b24746であるzpub拡張鍵と組み合わせます。読者にとっては、復元したシードフレーズが自身のbc1qの残高を見つけるのか、それとも空のウォレットを報告するのかを、これが決めるという意味になります。

仕組み

BIP-84は2つのことを行い、1つ目はパスの中の1つの数値を固定することです。鍵はBIP-44が導入した骨格にぶら下がり、m / purpose' / coin_type' / account' / change / address_indexと書かれます。この仕様が独自のものと主張する唯一の階層はpurposeで、84'に固定されています。coin type、account、change、address indexは、BIP-44とBIP-49がすでに与えた意味をそのまま保ち、著者のPavol Rusnakは、BIP-49の根拠を繰り返さずに明示的に再利用しています。

2つ目は出力形式です。BIP-84はBIP-141からカプセル化を借りています。scriptPubKeyは0x0014に続いて公開鍵の20バイトのハッシュであり、scriptSigは空のままで、ウィットネスは署名を運び、その後に鍵を運びます。この出力のどこにも、どのpurposeの値がそれを生成したかは記録されません。

ブランチ上の拡張鍵には独自のバージョンバイトが付きます。公開鍵は0x04b24746を使用し、これはzpubとして表示されます。秘密鍵はzprv用に0x04b2430cを使用し、テストネットはvpubとvprv用に0x045f1cf6と0x045f18bcを使用します。これらの値はビットコイン固有のものではありません。それらを収集するレジストリであるSLIP-0132は、GroestlcoinとSyscoinを同一の0x04b24746の下に掲載しています。シリアライズ形式にはcoin typeのためのフィールドがないため、zpubはスクリプトの種類を伝えるだけで、それが属するチェーンについては何も伝えません。

この仕様は自らを「not backwards compatible by design」と呼び、互換性のないウォレットは「will not discover accounts at all」と述べています。これは意図的なものです。purposeの値を分けることで、SegWitより前に書かれたソフトウェアを、それがうまく扱えないアカウントから遠ざけており、残高がゼロと表示されることは、ウォレットが音もなく中途半端に復元されるよりも、より良い失敗です。

どこで見られるか

BIP-84は、読者のウォレットがすでに表示している3つの場所に現れます。アカウントのパスm/84'/0'/0'、zpubで始まる拡張鍵、bc1qで始まる受取アドレスです。SLIP-0132は、ビットコインのそのzpubの行をパスm/84'/0'と組み合わせており、これはアプリが1つを渡すときに主張する組み合わせです。当サイトのレビューで4.7と評価したSparrowは、一般的なスクリプトの種類にわたってシングルシグとマルチシグのウォレットに対応しているため、開くアカウントは、引き継いだ既定のものではなく、読者が選んだものになります。

この文書のうち借りる価値がある部分は、そのテストベクターのブロックです。これは「このウォレットは他のすべてと同じようにBIP-84を実装しているか」という問いを、1分で終わる確認に変えます。このBIPは、ニーモニック「abandon」を11回繰り返し、その後に「about」を続けたものについての結果を公開しています。

  • m/84'/0'/0'/0/0はbc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyuになります
  • m/84'/0'/0'/0/1はbc1qnjg0jd8228aq7egyzacy8cys3knf9xvrerkf9gになります
  • m/84'/0'/0'/1/0はbc1q8c6fshw2dlwun7ekn9qwf37cu2rn755upcp6elになります

そのフレーズを、コインを保有しないマシン上の不慣れなソフトウェアに読み込み、ネイティブSegWitを選択し、最初の受取アドレスと最初のお釣りアドレスをそれらの文字列と比較してください。両方が一致すれば、その実装はお釣りブランチにおいても標準に一致しており、そこが人々が確認を忘れる半分です。それらのアドレスには決して何も送らないでください。このBIPは対応する秘密鍵を公開しており、SLIP-0132は同じニーモニックを公開しているため、どちらの文書でも読んだ人は、そこに届いたものを誰でも使用できてしまいます。

BIP-84の導出vs P2WPKH

BIP-84の導出は鍵がどこから来たかを示し、P2WPKHはコインがどのようにロックされるかを示します。コンセンサスであるのは2つ目だけです。ウォレットは、どこにも84'を含まないパスで鍵を導出し、同じ0x0014のパターンで出力をロックすることができ、その結果生じるbc1qアドレスは、オンチェーン上で読者のものと区別がつかないでしょう。したがって「BIP-84アドレス」は省略表現であり、どのエクスプローラーも決着をつけられる主張ではなく、purposeの値はバックアップのメモに記録するものであり、後からブロックチェーンから読み返すことはできません。

混同しやすい用語

よくある質問

BIP-84とBIP-49の違いは何ですか?

purposeレベル、そしてそれに伴うアドレス形式です。BIP-84は84'を使用し、zpub拡張鍵の下でネイティブSegWitのbc1qアドレスを生成する一方、2016年5月19日に割り当てられたBIP-49は49'を使用し、ypubの下でP2SHにネストされたP2WPKHアドレスを生成します。1つのシードフレーズが同時に両方のアカウントを持つことができます。

zpubの接頭辞は、ビットコインのウォレットを見ていることの証明になりますか?

いいえ。SLIP-0132は、ビットコインと同様にGroestlcoinとSyscoinにも同じバージョンバイト0x04b24746を登録しています。拡張鍵の形式にはコイン種別のフィールドがないためです。接頭辞から分かるのはスクリプト種別がP2WPKHであることだけで、チェーンについては何も分かりません。

バックアップと一緒にm/84'/0'/0'を書き留める必要はありますか?

はい、ウォレット名の横に書いてください。パスは秘密ではなく、それ自体で何かを開示するものではありませんが、同じ単語を別のpurposeレベルで復元するソフトウェアは異なるアドレスの集合を導出し、空のウォレットを表示します。

次に読む

関連用語

アドレスと鍵のその他の用語

このページを英語で読む