Bitcoin Script P2SHの解説




本記事ではBitcoinなどのUTXO通貨の送金で使われるP2SHについて解説したいと思います。

Bitcoin Scriptの基本的な解説やP2PKHについては前回紹介した下記の記事を読んでください。

Bitcoin Script P2PKHの解説

P2SH Pay-to-Script-hash

P2SHはBIP16で定義されています。

P2SHは主にマルチシグを利用するために使われていますが、スクリプト(Redeem Script)はP2SH以外のスクリプトであればなんでも入れることができます。 例えばRedeem Scriptの中にP2PKHの処理を入れることもできます。BitcoinのSegWit対応でも同様の方法は使われてて、Bech32に完全に移行する前の段階としてP2WPKH-nested-in-P2SHがBIP-49で定義されています。

P2SHの特徴は大きく2つです。

  • P2PKHと大きく異なるのはLocking Script、Unlocking Scriptの他にRedeem Scriptを定義
  • P2SHのスクリプトの検証は2回に分けて行われる

MultiSigを例に各スクリプトを記述するとこのようになります。

Redeem Script

Redeem Scriptにはマルチシグに関するスクリプトを記述します。例は2of3のマルチシグです。

Unlocking時に必要な署名の数2、公開鍵とその数3、実際に署名検証を行うOP_CHECKMULTISIGのOP_CODEをセットします。

2 PubKey1 PubKey2 PubKey3 3 OP_CHECKMULTISIG

Locking Script

OP_HASH160はスタックの1番上に入っている値を取り出してRIPEMD160(SHA256())でハッシュ化し、スタックに追加します。

次にRedeem ScriptをRIPEMD160(SHA256(Redeem Script))した20 Bytesのハッシュ値が入ります。OP_EQUALはスタックに積まれた1番目と2番目の値を取り出し、比較します。

OP_HASH160 <20-bytes-redeem-script-hash> OP_EQUAL

Unlocking Script

Locking Scriptで指定された署名の数をセットします。Unlocking Scriptの最後にRedeem Scriptが入ります。

<signature1> <signature2> <redeem script>

P2SHは2回に分けてスクリプトの実行が行われるわけですが、下記順番で2回の検証が行われます。

  • 1回目はシリアライズされたRedeem Scriptのハッシュ値がLocking Scriptで指定されているものと一致するか検証
  • 2回目はデシリアライズしたRedeem ScriptをLocking Scriptとして実行

上記2回の検証を通ることでUTXOを使用することができます。

The following two tabs change content below.

髙妻智一

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






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




コメントを残す

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