網路接受的無效 p2sh 交易
我嘗試使用 Jimmy Song 的“程式比特幣”一書從頭開始建構 2 of 2 p2sh 交易,我們沒有直接指導製作其中之一,所以我不得不修改我們必須在書中建構的一些功能但我想它必須工作。
這是我在測試網上的交易: https ://www.blockchain.com/btc-testnet/tx/7eba40f4c00e3da529309011c6fd8066c97fd24adca60b0d024976c360bcdd8b
這是我的程式碼:https ://pastebin.com/1mCv73i2
使用書中的功能:https ://github.com/jimmysong/programmingbitcoin
我的問題是:
- 為什麼儘管沒有按預期工作,但交易仍被網路接受
- 為什麼我的輸入沒有轉到所需的 p2sh 地址“2N7e6ZAGXoepdVYu2Y8ho7fTf6oxE3j9UwS”
- 它在測試網上,但如果不是,我可以在這個 tx 上檢索我的 satoshis 嗎?
編輯:我發現了關於我的兌換腳本的錯誤並更新了我的程式碼,但現在我想廣播它時出現“程式碼:-25,錯誤:bad-txns-inputs-missingorspent”錯誤
這是我的原始交易,我已經更新了程式碼的 pastebin: https ://pastebin.com/8sQBpnVY
為什麼儘管沒有按預期工作,但交易仍被網路接受
網路不檢查輸出腳本的有效性。輸出腳本可以包含幾乎任何數據,並且交易仍然是共識有效的。但您的交易實際上並非無效。現在它就像一個簡單的多重簽名,但由於公鑰是雜湊,所以它不是。
為什麼我的輸入沒有轉到所需的 p2sh 地址“2N7e6ZAGXoepdVYu2Y8ho7fTf6oxE3j9UwS”
您將輸出腳本設置為
dat_redeem_script_op
而不是target_script
. 所以輸出腳本實際上是你的多重簽名腳本,而不是你想要的 P2SH 腳本。它在測試網上,但如果不是,我可以在這個 tx 上檢索我的 satoshis 嗎?
不,即使你用 P2SH 正確地做到了這一點,它仍然是不可用的。這是因為您的“公鑰”實際上是公鑰雜湊。但是,您不使用任何操作碼進行公鑰散列。
OP_CHECKMULTISIG
獲取公鑰,因此它會嘗試將您的公鑰雜湊解釋為 pubkeys 並且無法這樣做。如果您使用公鑰正確建構了多重簽名腳本,則可以將其用作裸多重簽名。除了您沒有在輸入的 scriptSig 中提供 multisig 腳本外,它的可花費方式與 P2SH 多重簽名的可花費方式相同。