Solidity

失敗的交易不應該永遠不會用完gas嗎?

  • March 6, 2022

當您呼叫純函式和視圖函式時,它們僅在您用於連接網路的節點上執行。這是有道理的,因為不需要更改任何狀態。

但是對於最終失敗或恢復的交易 - 你的節點不應該能夠告訴而不是將其傳播到整個網路並浪費氣體嗎?更令人困惑的是,有時交易確實失敗並且不會花費你任何汽油,而其他時候你會損失巨額汽油費。

我知道這會assert用完所有的氣體,並且require/revert只用掉一些氣體,但是為什麼它們中的任何一個都會用掉任何氣體呢?當您將 ETH 發送到沒有接收/回退的合約時,該交易實際上會在鏈上進行但失敗,您將失去交易費用。我覺得這種簡單的東西不應該傳播到網路和廢氣中。

謝謝你。

即使交易“失敗”,它仍然會消耗網路資源,例如頻寬、礦工處理時間等。有些合約提前失敗,因此成本較低,但其他合約的互動相當複雜,使用大量 gas 後會失敗。

一些錢包在發送前模擬交易,如果交易失敗會警告使用者,但發送與否取決於使用者。

正如 pbsh 所說,交易費用的目的是阻止不良行為者濫用網路。

這樣做是為了讓網路不會被最終會恢復的交易發送到垃圾郵件中。即使交易最終恢復,節點也必須執行它才能找出答案。如果 gas 沒有用完,垃圾郵件發送者可以通過恢復呼叫淹沒網路,而無需任何成本。

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