8 - 3 建立 P2SH 交易
建立 P2SH 交易
我們用 OP_ADD 99 OP_EQUAL
當範例,來製作一個 P2SH 腳本
- 序列化腳本
- OP_ADD -> 0x93
- 99 -> 0x01 0x63, 要推 1 byte到棧上,值是 99
- OP_EQUAL -> 0x87
- 序列化
<serialized99Equal>
-> "93016387"
- 把履行腳本設為 "93016387" -> redeemScript = "93016387"
- SHA-256, RIPEND160 產生 Hash -> "3f58b4f7b14847a9083694b9b3b52a4cea2569ed"
- 產生 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!