一番基本的な送金にP2PKHとP2SHがあります。P2PKHは公開鍵に対する送金、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)
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す