用語集 / アドレスと鍵
ネストされたSegWit
別名はNested SegWit、Wrapped SegWit、P2SH-P2WPKH、3アドレスです。
- ネストされたSegWitとは?
- ネストされたSegWitは、ネイティブSegWitの鍵ハッシュをP2SHアドレスの中に包み込む方式であり、bc1文字列を読み取れなかったソフトウェアとの互換性を得る代わりに、入力ごとに約23vbytesを余分に要します。
BIP-49で規定されています。
2017年当時、bech32アドレスを解釈できる取引所はほとんどなかったため、BIP-141はウィットネスプログラムを通常のpay to script hash出力の中に置くことを認めました。結果として、送金者から見れば他の3アドレスと見分けがつかず、使用時のコストは約91vbytesで、レガシー入力の148、通常のbc1q入力の68と比べられます。これは橋渡しであり、その通行路は何年も前から開いています。
仕組み
ネストされたSegWitの出力は、何の変哲もないP2SH出力です。OP_HASH160、20バイトのハッシュ、OP_EQUALです。異例なのはハッシュの背後にあるものです。redeem scriptは実際にはスクリプトではなく、22バイトのウィットネスプログラムそのものであり、バージョンバイト0x00に、圧縮公開鍵の20バイトのHASH160をプッシュする命令が続きます。
したがって使用時は両方の世界を使います。scriptSigにはその22バイトのプログラムという1つの項目だけが入り、これがP2SHのチェックを満たします。署名と公開鍵はウィットネスに入り、そこで割引を受けます。プッシュのオペコードを加えると、scriptSigはウィットネス以外のバイトを23バイト寄与して92ユニットの重みになり、92を4で割ったものが、ネイティブSegWitに対する23vbyteのペナルティの全体です。
ウォレットはこれらのアドレスを独自のブランチに保持します。BIP-49は導出パスm/49'/0'/0'を割り当て、SLIP-132はそのブランチにypub拡張鍵プレフィックスを与えました。これにより、バックアップを復元するとbc1qではなく3アドレスが生成されます。復元時にプレフィックスを間違えると、シードが正しくても空のウォレットが表示されます。
目にする場面
「SegWit」と「Native SegWit」を別々の選択肢として提示する入金画面や出金画面は、この順にネストされた方式とネイティブ方式を提示しています。LedgerとTrezorのアカウント設定画面も同様です。SegWitを早期に採用した取引所はネストされた形式を標準とし、多くは今も変えていないため、カストディ型のコールドストレージの多くは今も3アドレスの背後にあります。
ネイティブSegWitへの移行は設定の変更ではなくオンチェーンのトランザクションです。2つの形式は同じシードの異なるブランチに由来するためです。手数料が低いときに行い、まず少額でテスト送金し、その後ウォレットがm/84'/0'/0'のアカウントを表示していることを確認してください。両者にセキュリティ上の違いはないため、急ぐ必要はありません。トレードオフは純粋に手数料と互換性の関係であり、互換性はもはや希少ではありません。
ネストされたSegWit vs P2SHアドレス
ネストされたSegWitはP2SHアドレスの一種であり、オンチェーンでは使用されるまで両者を見分けることは不可能です。3で始まる文字列は、22バイトのウィットネスプログラムにコミットしている場合もあれば、3つのうち2つの署名を要するマルチシグredeem scriptや、タイムロック付きのリカバリー条項にコミットしている場合もあります。未使用の出力からは何もわかりません。この不透明さはかつてプライバシー上の利点と見なされていました。実際には現在、ブロックエクスプローラーでは自分が何を保有しているのかわからず、送金者も、そのアドレスを空にするコストがbc1qアドレスより高くなることを警告できないということを意味します。