8 - 3 建立 P2SH 交易

建立 P2SH 交易

我們用 OP_ADD 99 OP_EQUAL 當範例,來製作一個 P2SH 腳本

  1. 序列化腳本
    1. OP_ADD -> 0x93
    2. 99 -> 0x01 0x63, 要推 1 byte到棧上,值是 99
    3. OP_EQUAL -> 0x87
    4. 序列化 <serialized99Equal> -> "93016387"
  2. 把履行腳本設為 "93016387" -> redeemScript = "93016387"
  3. SHA-256, RIPEND160 產生 Hash -> "3f58b4f7b14847a9083694b9b3b52a4cea2569ed"
  4. 產生 P2SH,其中的履行腳本為上面的 3. -> scriptPubKey = "a9143f58b4f7b14847a9083694b9b3b52a4cea2569ed87"

解鎖 P2SH 交易

要解鎖上面的腳本,我們需要加起來是 99 的 scriptSig,也就是兩個常數和 <serialized99Equal>

我們把兩個腳本擺在一起 scriptSig scriptPubKey

第一階段會驗證到 OP_EQUAL

Script: 1 98 <serialized99Equal> OP_HASH160 <hashed99Equal> OP_EQUAL
Stack: []

Script: 98 <serialized99Equal> OP_HASH160 <hashed99Equal> OP_EQUAL
Stack: [ 1 ]

Script: <serialized99Equal> OP_HASH160 <hashed99Equal> OP_EQUAL
Stack: [ 1 98 ]

Script: OP_HASH160 <hashed99Equal> OP_EQUAL
Stack: [ 1 98 <serialized99Equal> ]

Script: <hashed99Equal> OP_EQUAL
Running: <serialized99Equal> OP_HASH160
Stack: [ 1 98 <hashed99Equal> ]

Script: OP_EQUAL
Stack: [ 1 98 <hashed99Equal> <hashed99Equal> ]

Script: 
Running: <hashed99Equal> <hashed99Equal> OP_EQUAL
Stack: [ 1 98 True ]

第二階段會把履行腳本反序列並且推到棧上: "93016387" -> "OP_ADD 99 OP_EQUAL"

Script: 1 98 OP_ADD 99 OP_EQUAL
Stack: [ ]

Script: 98 OP_ADD 99 OP_EQUAL
Stack: [ 1 ]

Script: OP_ADD 99 OP_EQUAL
Stack: [ 1 98 ]

Script: 99 OP_EQUAL
Running: 1 98 OP_ADD
Stack: [ 99 ]

Script: OP_EQUAL
Stack: [ 99 99 ]

Script: 
Running: 99 99 OP_EQUAL
Stack: [ True ]

做到最後都驗證通過就可以使用這筆 UTXO!

results matching ""

    No results matching ""