8 - 1 了解 P2SH

上面幾部分我們知道比特幣腳本可以控制 UTXO 的贖回,上面介紹的都是固定的腳本,

之後我們想要自己寫腳本,但可沒那麼簡單,因為比特幣現在只會識別這五個腳本:

  • Pay to Public Key (P2PK): 目前已過時
  • Pay to Public Key Hash (P2PKH): 標準交易 (OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY)
  • MultiSig: 多簽交易(也是一種 P2SH)
  • Null Data: 無法使用的交易
  • Pay to Script Hash (P2SH): 轉到履行腳本的交易

如果我們想要寫自己的 script,就要用 P2SH,因為只有這個可以接受自訂的 script。


我們來看一下多簽交易的鎖定腳本

"scriptPubKey": {
  "asm": "OP_HASH160 babf9063cee8ab6e9334f95f6d4e9148d0e551c2 OP_EQUAL",
  "hex": "a914babf9063cee8ab6e9334f95f6d4e9148d0e551c287",
  "reqSigs": 1,
  "type": "scripthash",
  "addresses": [
    "2NAGfA4nW6nrZkD5je8tSiAcYB9xL2xYMCz"
  ]
}

這個腳本的內容是 "OP_HASH160 babf9063cee8ab6e9334f95f6d4e9148d0e551c2 OP_EQUAL"

中間那串 Hash 字串是履行腳本 (redeemScript),只有在履行時會顯示內容,也就是說

P2SH 的格式是:OP_HASH160 <redeemScript> OP_EQUAL

每個 P2SH 腳本都帶有 20-bytes Hash 的履行腳本,當 P2SH 交易被履行,履行腳本會被帶入

scriptSig,接著往下執行 script。

P2SH 有趣的地方是發送方或區塊鏈本身都不知道履行腳本內容是什麼,發送方只是送交易到 P2SH 的地址,

接收方要怎樣的使用發送方不管。

履行腳本在測試網路是 2 開頭,主網是 3 開頭。


如何創造 P2SH 腳本

創建 P2SH 的交易很簡單,只要創建一個帶有 20-bytes 履行腳本 Hash 的鎖定腳本交易即可。

Hash 方式是比特幣的 OP_HASH160。

所謂的 OP_HASH160 是 SHA-256 + RIPEND-160 hash

步驟:

  1. 創造鎖定腳本
  2. 創造一個根據 1. 的鎖定腳本的序列號碼(serialized version)
  3. 對序列號碼做 SHA-256
  4. 對 4. 的結果做 RIPEMD-160

以上是比較詳細的步驟,實際上都可用提供的 API 來完成。


如何送出 P2SH 腳本交易

P2SH 腳本交易也很簡單,

  1. 把上面做出來的 Hash 放到 OP_HASH160 <redeemScriptHash> OP_EQUAL 的履行腳本裡
  2. 翻譯為 Hexcode
  3. 用此 hex 當作 scriptPubKey
  4. 完成剩下的交易步驟

如何解鎖 P2SH

要點是接收方也要有同樣的鎖定腳本序列號碼,之所以叫履行交易是因為接收方要去「履行」這個腳本。

P2SH 的解鎖腳本 scriptSig 形式會是 ... data ... <redeemScript>, data 只能是 data。

履行時 ... data ... <redeemScript> OP_HASH160 <redeemScriptHash> OP_EQUAL ,步驟為:

  1. 履行腳本做 OP_HASH160
  2. 比對 <redeemScriptHash>
  3. 正確則使用 data
  4. 驗證通過則可以使用這筆 UTXO

P2SH 可以用來做智能合約,很有用

results matching ""

    No results matching ""