Transactions

是否可以將交易輸入添加到記憶體池中的交易中?

  • March 16, 2016

是否可以向記憶體池中的交易添加輸入?

例如,如果有人向他們的朋友支付 1 BTC,我可以在該交易被探勘之前從記憶體池中獲取該交易的原始十六進制數據。

然後我可以用我自己的私鑰簽署一個未使用的交易(比如說 3 BTC),將其列為輸入,並為此獲取原始十六進制數據。然後,我可以將 3 BTC 輸出添加到其他人的地址(我要支付的人),並將這個新交易重新廣播到網路。

是什麼阻止了這種情況的發生?

簡短的回答:不,這是不可能的。

更長的答案:某些交易允許更改使用的輸入(ANYONECANPAY 輸入)。也可能有不簽署正在創建的輸出的輸入 (SIGHASH_NONE)。然而,所有輸入都是這種類型的交易是毫無價值的,因為任何人都可以改變輸出來代替自己的信用。

通常,當使用普通的 SIGHaSH_ALL 簽名時,交易的幾乎所有內容都會被簽名(使用哪個輸入硬幣(以及以何種順序),創建什麼輸出腳本,分配給它們的值,……除了簽名之外的所有內容自己真的(這就是導致非自願延展性的原因)。

如果輸入簽名標記為 ANYONECANPAY,則它不會對正在使用的其他輸入硬幣進行簽名。這意味著您可以創建一個交易,意思是“我希望支付 x 和 y,但我不在乎誰提供資金來支付”。如果交易中的所有簽名都是 ANYONECANPAY,您可以添加額外的輸入(或刪除現有的輸入。不過,僅增加輸入資金只會將它們作為費用燒掉。

另一方面,有 SIGHASH_NONE,它使簽名不簽署交易的輸出。這似乎可以滿足您的要求,但如果每個簽名都是 SIGHASH_NONE,則交易是完全不安全的,因為任何人都可以替換輸出的位置。

因此,即使這些組合在理論上允許您的建議,但對於典型的電車操作來說並非如此,amd 實際上完全不安全。

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