Transaction-Malleability
如何以不受其延展性影響的方式跟踪交易?
最近由交易延展性引起的所有問題都將跟踪交易 id 不夠好的事實帶到了中心舞台。
所以這是我的問題,什麼是足夠好的?
我能想到的最好辦法是在將要跟踪的交易發送到網路之前創建自己的雜湊。我們稱該雜湊為“跟踪 ID”。該雜湊將僅涵蓋交易的簽名部分。散列的元素將是
- 對於所有輸入:txid、vout
- 對於所有輸出:金額,地址
鑑於交易仍然必須由官方客戶聲明有效,這個“跟踪 ID”是否足夠強大以跟踪交易,無論它可能如何通過交易延展性秘密“調整”?
如果這個方案不起作用,你知道有什麼方法可以讓我安全地跟踪交易嗎?
由於給出的答案都沒有完全充實到足以正確回答我的問題,因此我發布了我自己的答案,該答案綜合了已經說過的所有內容:
以抵抗交易延展性的方式跟踪交易的最佳方法是實際僅跟踪已簽名的數據。為此,我建議使用簽名數據的雙 SHA256。OP_CHECKSIG腳本操作的文件(它是非常有用的圖表形式,提示應遵循哪個程序。
交易延展性不變的“跟踪雜湊”可以通過以下方式從支付到公鑰雜湊交易中獲得:
驗證交易的技術有效性,就像參考比特幣客戶端所做的那樣。這包括驗證交易的簽名。這是至關重要的一步,如果您不這樣做,跟踪雜湊將毫無用處。
雙 SHA-256 散列以下所有內容:
版本號
輸入數量
對於每個輸入:
- 要花費的輸出的交易 ID
- 要花費的產出指數
- 序號
- (注意:我們故意不對輸入腳本或輸入腳本的長度進行雜湊處理)
輸出數量
對於每個輸出:
- 數量
- 輸出腳本的長度
- 整個輸出腳本
鎖定時間
這樣做應該會給你一個很好的跟踪雜湊,這對於所有等效的交易都是一樣的,無論它是如何通過利用交易延展性來修改的。
請注意,此跟踪雜湊不是比特幣協議的一部分,因此您不會在區塊鏈中找到它,也無法使用 blockchain.info 查找它。