Transactions
交易能否成功結束(即不恢復狀態)但其中的一些“痕跡”耗盡了氣體?
這筆交易:https ://etherscan.io/tx/0xfcf6acee992a6562aeb641fe830b93a6e6c3be9080eb3842909137824d6a7881有一條奇怪的消息,我今天首先註意到:
Although one or more errors occurred [Out of gas] contract execution completed
如果我使用 EtherScan 的 API 檢索交易,EtherScan 不會將其報告為錯誤交易(而且,我認為這不是錯誤交易)。如果我通過從本地節點拉取交易痕跡來查看交易痕跡,許多痕跡會報告“氣體不足”。
我的印像是,如果交易的任何部分用完了 gas,整個交易都會恢復。
**問:**這怎麼可能?這裡發生了什麼?這很常見嗎?
**注意:**如果您提供簡單的 Solidity 範例來說明這種情況如何發生,我將更有可能接受答案。
CALL
是的,如果對另一份契約作出a,就會發生這種情況。只有一部分gas被轉發,因此該呼叫可能會耗盡gas。如果“父級”在失敗時沒有恢復CALL
,則主事務可以成功,而由於氣體不足錯誤導致呼叫失敗。這是如何發生的一個例子。(打電話
A.forward(addressOfB)
。)pragma solidity ^0.4.21; contract A { function forward(address to) public payable { to.send(msg.value); // only forwards 2300 gas // returns false due to out of gas error } } contract B { uint256 foo; function () public payable { foo = 3; // not enough gas to SSTORE } }