Sai*_*laj 5 ethereum solidity smartcontracts
谷歌没有给我一个具体的答案,使用该require()功能是否会Solidity消耗gas?即使函数中的语句被评估为真?
我不太确定您是在问 OPCODE 本身是否消耗了gas,或者如果语句的计算结果为真,则是否消耗了gas。
如果您问的是 OPCODE 本身,我同意您的看法,即答案尚不清楚。我在(现在非常不推荐使用的)Google OPCODE 气体使用电子表格或黄皮书(附录 G)中没有看到REVERTOPCODE(这是require()编译成的)。
在 Remix 中运行测试,看起来它确实消耗了很少的 gas。只需require(true)在此方法的顶部添加一个调用,gas 使用量就会增加 23。
contract GasUsage {
uint val;
function someFunc() public returns (bool) {
require(true);
delete val;
}
}
Run Code Online (Sandbox Code Playgroud)
包含时的执行成本:5230
注释掉时的执行成本:5207
如果您在require声明之前询问天然气消耗量,那么答案是肯定的。从拜占庭版本开始,直到require声明点为止消耗的所有气体都会被消耗,但任何剩余的气体都会返回。在拜占庭之前,require()和assert()是相同的,所有的气体都将被消耗。
来自Solidity 文档:
在内部,Solidity 对 require 样式的异常执行还原操作(指令 0xfd)并执行无效操作(指令 0xfe)以抛出断言样式的异常。在这两种情况下,这都会导致 EVM 恢复对状态所做的所有更改……请注意,断言风格的异常消耗了调用可用的所有 gas,而 require 风格的异常不会消耗从 Metropolis 版本开始的任何 gas。
| 归档时间: |
|
| 查看次数: |
2282 次 |
| 最近记录: |