BitcoinのSegWitアドレスの種類P2WPKH、P2WSH、P2WPKH nested in P2SHについて

Bitcoin segwit address format




一番基本的な送金にP2PKHとP2SHがあります。P2PKHは公開鍵に対する送金、P2SHはスクリプト(マルチシグなど)に対する支払いです。それぞれの詳細は下記リンクで解説しています。

>>Bitcoin Script P2PKHの解説

>>Bitcoin Script P2SHの解説

 

今回はBitcoinで使われているSegWitの支払い方法について解説します。

 

Native SegWit

Native SegWitはSegWitの正規実装のことです。

 

1から始まるレガシーアドレスにしか対応していないウォレットではNative SegWitのアドレスに送金することはできません。

 

SegWitとの主な特徴は下記です。

  • unlocking scriptに入れていた署名データと公開鍵をwitness部分に移すので空になる
  • locking scriptは1バイトのwitness versionと20バイトの公開鍵ハッシュを合わせた22バイト
  • アドレスフォーマットはBIP173で定義されているBech32となる

 

このSegWitにはP2WPKH(Pay to Witness Public Key Hash)とP2WSH(Pay to Witness Script Hash)があります。

 

P2WPKH

P2WPKHはP2PKHのSegWitバージョンでスクリプトは下記のようになります。

witness:      <signature> <pubkey>
scriptSig:    (empty)
scriptPubKey: 0 <20-byte-key-hash>
                  (0x0014{20-byte-key-hash})

 

scripotPubKeyの先頭の0はwitness versionになります。また、P2PKHに対してP2WPKHは、OP_HASH160、OP_EQUAL、OP_CHECKSIGがscriptPubKeyからなくなるので3バイト削減されます。

P2WSH

P2WSHはP2SHのSegWitバージョンでスクリプトは下記のようになります。これは1 of 2のマルチシグスクリプトです。

witness:      0 <signature1> <1 <pubkey1> <pubkey2> 2 CHECKMULTISIG>
scriptSig:    (empty)
scriptPubKey: 0 <32-byte-hash>
                  (0x0020{32-byte-hash})

 

P2WPKHと同様にscriptSigはからになります。scriptPubKeyの先頭も同様にwitness versionで、残りの32バイトハッシュはwitnessのwitness versionより後のアイテムをSHA256した値(32バイト)になります。

 

Nested SegWit

Nested SegWitとはP2SHでNative SegWitを隠蔽した実装で、正規のSegWitに未対応のウォレットでも受け取りができるようになっています。アドレスはP2SHと同じ3始まりのアドレスとなります。

 

witness:      <signature> <pubkey>
scriptSig:    <0 <20-byte-key-hash>>
              (0x160014{20-byte-key-hash})
scriptPubKey: HASH160 <20-byte-script-hash> EQUAL
                  (0xA914{20-byte-script-hash}87)

 

 

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です