Transactions

手動驗證 P2SH 交易腳本。我應該如何連接 OP CODES 以散列腳本?

  • March 28, 2018

我正在讀這個:

交易 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 對其進行解碼。

引用自:https://bitcoin.stackexchange.com/questions/57217