7 - 3 P2PKH 腳本
解鎖腳本 scriptSig
當一筆錢送到某個地址時,這筆錢是被「可以解鎖這個地址的私鑰」的這個腳本鎖定,
也就是 scriptPubKey
,這樣做就是要接收方能提供公鑰以及簽章來確認身份。
所以 scriptSig 會是 <signature> <pubKey>
這樣的形式。
鎖定腳本 scriptPubKey
而標準的 P2PKH 的鎖定腳本會是 OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
執行 P2PKH
示意圖:
Script: <signature> <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
執行時將 scriptSig
scriptPubKey
擺在一起,準備執行
Script: <signature> <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
Stack: [ ]
Script: <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
Stack: [ <signature> ]
Script: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
Stack: [ <signature> <pubKey> ]
Script: OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
Running: <pubKey> OP_DUP
Stack: [ <signature> <pubKey> <pubKey> ]
把 <signature>
<pubKey>
丟進 stack 裡後,執行 OP_DUP
:拿出棧頂,複製一個,再推回棧頂
接著 OP_HASH160
, 將棧頂元素做 hash 160,再推回棧頂
Script: <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
Running: <pubKey> OP_HASH160
Stack: [ <signature> <pubKey> <pubKeyHash> ]
再將 <pubKeyHash>
推入
Script: OP_EQUALVERIFY OP_CHECKSIG
Stack: [ <signature> <pubKey> <pubKeyHash> <pubKeyHash> ]
OP_EQUALVERIFY
檢查棧頂兩個元素是否相同
如果相同,最後會執行
Script:
Running: <signature> <pubKey> OP_CHECKSIG
Stack: [ True ]
如果 True,那麼就可以用這筆 UTXO