Transactions

白皮書驗證算法可能出現錯誤?

  • November 24, 2021

如果我們採用 白皮書(區塊鍊和採礦部分)中描述的區塊驗證算法,它在第 6 點中指出:

TX是塊的交易列表,帶有n交易。對於所有i0...n-1,設置S[i+1] = APPLY(S[i],TX[i])如果任何應用程序返回錯誤,或者直到此時塊中消耗的總氣體超過 GASLIMIT,則返回錯誤

大膽的說法是真的嗎?我的意思是,如果粗體部分為真,是否意味著有效塊不能包含有錯誤的交易?或者它只是一種與真實算法不對應的通用驗證算法?

(我確定有交易失敗的有效區塊,例如氣體不足異常、呼叫堆棧溢出等,例如<https://etherscan.io/tx/0x3967f859c56c61f3365f6873ea001985e4e694952a9c22b68be731132c8e3e77>)

重要的是要了解這是一個塊驗證算法。當白皮書的這一部分討論返回錯誤時,這是在塊層而不是交易層。塊驗證級別的錯誤不允許將塊傳播到網路,與交易層的錯誤相反,它將被廣播到網路,如您在範例連結中所示。

如果直到此時塊中消耗的總氣體超過 GASLIMIT,則返回錯誤

從塊驗證的角度考慮這一點時,這是完全合理的。如果礦工試圖在其區塊中包含總數gas大於 的交易GASLIMIT,則該區塊將無效,因此永遠不會看到網路。如果不是這種情況,礦工會將每筆交易都包含在他們的區塊中,以收取所有交易費用。

如果任何應用程序返回錯誤…返回錯誤。

關鍵是要理解它是在談論一個應用程序,而不是一個特定的事務。在此聲明中,應用程序指的是挖礦客戶端或驗證區塊的人。有了這樣的理解,這個陳述就更清楚了——如果塊驗證應用程序返回錯誤,則返回錯誤。

錯誤修正:

或者如果塊中消耗的總氣體

=> 或者如果交易中消耗的總氣體


在區塊的情況下,區塊頭的gasLimit必須大於交易的gasLimit之和。

引用自:https://ethereum.stackexchange.com/questions/62317