手動驗證 P2SH 交易腳本。我應該如何連接 OP CODES 以散列腳本?
我正在讀這個:
交易 40eee3ae1760e3a8532263678cdf64569e6ad06abc133af64f735e52562bccc8 支付到 P2SH 地址 3P14159f73E4gFr7JterCCQh9QjiTjiZrG。您可以在事務 7edb32d4ffd7a385b763c7a8e56b6358bcd729e747290624e18acdbe6209fc45 中看到兌換腳本,該腳本使用 OP_FALSE { OP_1 OP_1 OP_CHECKMULTISIG } 花費了該輸出。
來自<https://en.bitcoin.it/wiki/Pay_to_script_hash>
我正在嘗試手動檢查交易的有效性,看看我是否了解正在發生的事情。我首先找到了第一筆交易:https ://blockchain.info/tx/40eee3ae1760e3a8532263678cdf64569e6ad06abc133af64f735e52562bccc8
據我了解,它將這些輸出鎖定到輸出腳本
OP_HASH160 e9c3dd0c07aac76179ebc76a6c78d4d67c6c160a OP_EQUAL
文字告訴我看另一筆交易:https ://blockchain.info/tx/7edb32d4ffd7a385b763c7a8e56b6358bcd729e747290624e18acdbe6209fc45
它花費了這個輸出。這意味著該交易呈現了一個滿足
OP_HASH160 e9c3dd0c07aac76179ebc76a6c78d4d67c6c160a OP_EQUAL
. 讓我們看看這個交易的輸入:OP_FALSE 3045022100ad0851c69dd756b45190b5a8e97cb4ac3c2b0fa2f2aae23aed6ca97ab33bf88302200b248593abc1259512793e7dea61036c601775ebb23640a0120b0dba2c34b79001 5141042f90074d7a5bf30c72cf3a8dfd1381bdbd30407010e878f3a11269d5f74a58788505cdca22ea6eab7cfb40dc0e07aba200424ab0d79122a653ad0c7ec9896bdf51ae
我應該用
OP_HASH160
這個來驗證它是否等於e9c3dd0c07aac76179ebc76a6c78d4d67c6c160a
,對吧?請記住,這OP_HASH160
意味著:ripemd160(sha256(something))。我應該將他開始的 OP_FALSE 連接起來嗎?另外,不應該是腳本嗎?除了其他操作碼在哪裡OP_FALSE
?
您可以在此處找到類似的支付腳本雜湊 (P2SH) 交易的執行: 支付腳本雜湊執行
基本上 scriptSig 首先被評估,由於 OP_FALSE 程式碼,它將一個空的字節數組壓入堆棧,然後將簽名 3045….001 壓入堆棧,最後將贖回腳本 5141…1ae 壓入堆棧. 然後我們繼續進行 scriptPubKey 評估,將編碼的贖回腳本從堆棧中取出並進行散列,並將散列與散列 e9c3…60a 進行比較。如果它們相等,我們將繼續對贖回腳本進行實際評估。這意味著堆棧被帶回到 scriptPubKey 執行之前的位置,所以我們有:
5141...1ae 3045....001 (empty value)
頂部元素被彈出,解碼,然後評估。在這種情況下,它是一個 OP_CHECKMULTISIG 腳本,解碼版本在您連結的網頁上以及您的問題中,但是這個多重簽名只有一個公鑰和一個簽名,所以它基本上相當於直接支付給那個地址。OP_CHECKMULTISIG 將根據公鑰檢查簽名 3045…001,如果匹配,則交易有效。OP_FALSE 在開始時推送的空數據只是由於 CHECKMULTISIG 由於一個錯誤而比它需要的多一個元素而存在,因此它只是使其工作所需的未使用的數據位。
我不確定你所說的腳本是什麼意思。它是一個腳本,它只是編碼在 5141…1ae 中。您可以通過
decodescript
呼叫比特幣 RPC 對其進行解碼。