是什麼阻止了礦工更改未確認交易的鎖定腳本
在許多加密貨幣中,一個 TX 由一組 TX 輸入和 TX 輸出組成。
當 TX 送出到網路時,它已經具有簽名(在解鎖腳本中)。
所以我的問題是,是什麼阻止了礦工或網路上的任何人使用已經存在的解鎖並更改交易的鎖定腳本,然後傳播交易。
因為據我了解,我可能會提供一個簽名來解鎖一個 TXO,而有人使用我的簽名來更改這些 TX 的鎖定腳本。
簽名涵蓋輸入和輸出。
如果有人更改交易中的一個輸出,則需要新的簽名。實際上,您的簽名簽署“允許使用我的 UTXO X 將 A BTC 發送給 B,C BTC 發送給 D,……”。
因為據我了解,我可能會提供一個簽名來解鎖一個 TXO,而有人使用我的簽名來更改這些 TX 的鎖定腳本。
以“P2PKH tx”為例,unlockscript 需要在花費 tx 時執行一些操作:
<sig><pubkey><OP_DUP><OP_HASH160>pk hash<OP_EQUALVERIFY><OP_CHECKSIG>
在更改部分腳本欄位時,我在這裡有三種情況:
1.) 改變
<sig>
和<pubkey>
礦工使用新簽名和公鑰更改部分。假設區塊幾乎“通過”,資金的花費者就有問題,導致他的雜湊不再匹配。
2.) 只改變
<sig>
礦工只更改具有新簽名的部分。現在,支出者的將匹配 . 然而,最後一個命令
<OP_CHECKSIG>
會檢查堆棧上的剩餘部分 (<new sig><pubkey>
),這會(顯然)失敗。3.) 更改公鑰腳本
當 pubkey 腳本中的任何內容髮生更改時,簽名過程將失敗。在創建簽名交易的過程中,sigscipt 區域被 pubkey 腳本填充,然後進行簽名。稍後,在發送 tx 之前,sciptsig 區域被替換為
<signature><pubkey>
. 因此,當該塊將被傳播到其他節點時,他們將驗證該塊及其 tx in side,並發現簽名不匹配。Pieter 在這裡解釋了腳本的詳細資訊: 比特幣交易“輸入”腳本的組成部分是什麼?
以及兩個進一步幫助理解的參考資料:
<http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html>
Andreas 的書“掌握比特幣”,第 2 版,第 135 頁