Ethereum 以太坊坚固性-是否需要()使用任何气体?

Ethereum 以太坊坚固性-是否需要()使用任何气体?,ethereum,solidity,smartcontracts,Ethereum,Solidity,Smartcontracts,谷歌没有给我一个具体的答案,在Solidity中使用require()?即使函数中的语句的计算结果为true?如果语句的计算结果为true,我也不确定您是在询问操作码本身是否消耗gas还是gas被消耗 如果你问的是操作码本身,我同意你的说法,答案不清楚。我没有在(现在非常不推荐)或(附录G)中看到REVERT操作码(这是require()编译到的) 在混音中运行一个测试,看起来它确实消耗了非常少的气体。只需在这个方法的顶部添加一个require(true)调用,气体使用量就增加了23 contr

谷歌没有给我一个具体的答案,在
Solidity
中使用
require()?即使函数中的语句的计算结果为true?

如果语句的计算结果为true,我也不确定您是在询问操作码本身是否消耗gas还是gas被消耗

如果你问的是操作码本身,我同意你的说法,答案不清楚。我没有在(现在非常不推荐)或(附录G)中看到
REVERT
操作码(这是
require()
编译到的)

在混音中运行一个测试,看起来它确实消耗了非常少的气体。只需在这个方法的顶部添加一个
require(true)
调用,气体使用量就增加了23

contract GasUsage {
    uint val;

    function someFunc() public returns (bool) {
        require(true);

        delete val;
    }
}
包括在内的执行成本:5230

注释掉时的执行成本:5207


如果您在询问
require
语句之前的耗气量,那么答案是肯定的。自发布之日起,在
require
语句之前消耗的所有气体都将被消耗,但剩余的气体将被返回。在拜占庭之前,
require()
assert()
是相同的,所有的气体都会被消耗掉

从:

在内部,Solidity执行还原操作(指令0xfd) 用于请求样式异常,并执行无效操作 (指令0xfe)引发断言样式异常。在这两种情况下, 这会导致EVM恢复对状态所做的所有更改…请注意,断言样式异常会消耗所有气体 可用于调用,而require样式异常将不会使用 从大都会排放的任何气体