Security

檢查輸入溢出的目的是什麼?

  • April 23, 2019

每個人都知道這個著名的塊 74638 修復程序仍然存在於其他文件中。但是有些事情我無法理解,為什麼要檢查輸入溢出,因為在這種情況下不可能有足夠的 utxo,因為它是被跟踪的雜湊,從攻擊者的角度來看,這只會減少他/她/他們在現實中擁有的東西(與減少支付金額的輸出不同)。

那麼,為什麼要使已經不可能並且不會作為通貨膨脹錯誤產生影響的東西無效呢?

甚至比特幣的 go 實現也在這樣做。

它似乎在很大程度上只是一個腰帶和吊帶檢查。正如您所說,沒有必要進行此檢查。但是,在那裡進行此檢查並沒有什麼壞處。在最壞的情況下,它只會增加幾納秒的驗證時間。充其量,它會擷取一些嚴重的錯誤。

鑑於這是與共識相關的,因此進行理論上不必要的額外檢查並沒有什麼壞處。它們將在發生某些極端情況的情況下防止錯誤。在這種情況下,可能會花費一個負值的輸入,因此該檢查將發揮作用。如果有人在帶有錯誤交易的區塊之後更新了他們的節點,但沒有回滾他們的區塊鏈,就會發生這種情況。如果負輸出的所有者已經花費了它,則此檢查將阻止節點接受交易。

雖然在比特幣網路上輸入加起來為負數或超過 2100 萬是無效的,但電腦天生不知道這一點——它需要一個程序來指示它。您的連結指向 bitcoind 程序中的一個點,電腦被指示如何區分有效交易和無效交易。

您還可以以另一種方式考慮您的斷言“不可能有足夠的 utxo”。不可能的一個原因是因為您指向的 IF 語句:刪除檢查,突然它是可能的(後來的程式碼承受。)

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