(執筆途中。だが、公開。)
まとめ
- P2SHでハッシュ化されるScriptのこと (ハッシュ化前のもの)
- P2SHトランザクションでは、ハッシュによって置き換えられたlocking scriptは、redeem scriptと呼ばれます。(マスタリング・ビットコイン 5章より引用)
前提知識
以下を知っていること
- BitcoinのScriptの基礎知識
- scriptSig: unlocking script
- scriptPubKey: locking script
- BIP:
- P2SH: Pay to Script Hash
- P2SHアドレス
Redeem Scriptとは何かの説明
redeem script: 一言で説明すると、「引き換えスクリプト」。
- ビットコインをロックするスクリプトで、ハッシュ化したものをlockingスクリプトに入れる。
- unlockする時に、redeem scriptを提出する(引き換え券のように)必要がある
超ざっくり説明すると、Bitcoinのscriptが長すぎるから、ハッシュ化してscriptPubKeyに入れとけばいいのでは? という考えから出てきた元のscriptのこと。
特にマルチシグの場合、公開鍵をいくつも入れたりすると、scriptが非常に長くなるので、利用されることが多い。(別に利用しなくてもいい。)
P2SHが解決した問題
P2SHは、2012年4月に導入された。
以下のような問題を解決する。
- multisigの場合、全ての人にscriptの説明をしなくてはならない
- 特殊なトランザクション・スクリプトを作れる特別なウォレットを使う必要がある
- 長い公開鍵を含むため、約5倍サイズが大きい (手数料が高くなる)
- 使われるまでフルノードのRAM内のUTXOセットに保存される
P2SHの意味
P2SHは、”このハッシュと一致するscriptに対して支払い、このscriptは後にこのアウトプットが使用される時に与えられます”という意味
(マスタリング・ビットコイン 5章より引用)
redeem scriptの例
タイトル | Script |
---|---|
Redeem Script | 2 PubKey1 PubKey2 Pubkey3 Pubkey4 Pubkey5 5 OP_CHECKMULTISIG |
Locking Script | OP_HASH160 【Redeem Scriptの20バイトハッシュ値】 OP_EQUAL |
Unlocking Script | Sig1 Sig2 Redeem Script |
注意) 上記、マスタリングビットコイン 5章からのそのままの引用ですが、Unlocking Scriptは、実際には先頭にOP_0が必要です。
2つの表記
- Redeem script
- RedeemScript
以下と間違えないように
- scriptSig
- scriptPubKey
備考
- バージョン0.9.2より前は、P2SHは、スタンダードな形だけに制限されていた。
- P2SH redeem script の中に P2SHを置くことはできない (再帰できないため)
- redeem scriptが無効だったとしても、P2SHトランザクションは、有効なものとして受け入れられる = 利用できないbitcoin
- serialized scriptのサイズに520-byteの制限
参考
- Redeem Script, RedeemScript – Bitcoin Glossary
- Developer Guide – Bitcoin
- Mastering Bitcoin: Chapter 5
- マスタリング・ビットコイン 5章
- BIP16:
- BIP13: P2SHのアドレス形式: bips/bip-0013.mediawiki at master · bitcoin/bips
- P2SHの説明スライド BitGo & Securing Bitcoin with P2SH
混乱しがちなところ
- P2SHとP2SHアドレスの違い
- BIP16とBIP13
- P2SHとRedeem Scriptの関係
- P2SHとマルチシグとの関係
- scirptPubKeyとscriptSigのどちらに使うのか?
- redeem scriptは、ハッシュ化前のscriptのみを指すのか、ハッシュ化した後のハッシュ値も指すのか?
- Full Redeem ScriptとRedeem Script Hash
関連用語
- Bitcoin, ビットコイン
- Redeem Script, リディーム・スクリプト
- Full Redeem Script, Redeem Script Hash
- Script, Bitcoin Script Language
- P2SH, multisig, multi-signature
- P2SH address, P2SHアドレス
- BIP16, BIP-0016, Pay to Script Hash
- locking script: scriptPub: pubkey script
- unlocking script: scriptSig: signature script
謝辞
- Jonathan Underwood氏にレビュー頂き、ご指摘の部分を修正致しました。いつもありがとう!