Tech

Bitcoin の Redeem Scriptとは何か?

  • このエントリーをはてなブックマークに追加

(執筆途中。だが、公開。)

まとめ

  • 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の制限

参考

混乱しがちなところ

  • 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氏にレビュー頂き、ご指摘の部分を修正致しました。いつもありがとう!
  • このエントリーをはてなブックマークに追加