Contract-Debugging
Etherscan 顯示 tx 沒有氣體,但無論如何都完成了
似乎有可能以某種方式耗盡gas,但交易仍然完成?這違背了我對乙太坊的理解。如果您用完了氣體,它會恢復所有更改。etherscan的這個錯誤是什麼意思?
Although one or more errors occured [Out of gas] contract execution completed
只要交易是有效的(意味著沒有錯誤的簽名、錯誤的 nonce 等),即使它耗盡了 gas,交易仍然是完成的。交易是否進行了任何狀態更改是另一回事。
如果我們說 OOG 交易無效,並且不能在有效區塊中,並且礦工沒有得到工作補償怎麼辦?
想像一下,攻擊者送出了一堆計算量大的函式呼叫事務,但他確保這些事務中的每一個最終都出錯。礦工會執行它們,浪費計算能力,沒有得到任何回報。這實際上是對區塊鏈的 DOS 攻擊。
關於內部交易的幾句話。
由於合約可以呼叫其他合約或發送資金,因此一個交易呼叫可能包含多個內部交易。可以從事務中的內部事務的OOG 中恢復。
如果您僅將有限數量的 gas 轉發給內部交易函式呼叫,您的內部交易可能會失敗並 OOG。但是由於您的主 TX 中仍有剩餘氣體,它最終可以完成。