为什么燃气成本取决于函数输入?



我正在使用Remix测试此代码。我想知道为什么函数的执行成本(以气体表示)取决于输入x。随着x值的增加,成本似乎以12的倍数增加。我没有找到一个模式。

// SPDX-License-Identifier: MIT
pragma solidity 0.8.4; 
contract Example{
function test (uint x) external pure returns(bool z) {
if(x > 0)
z=true;
else
z=false;
}
}

https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-0-intrinsic-gas

发送到合约的字节数确实决定了gas成本,从链接中可以看出。Gas_cost += 4 * bytes_zero:内存数据每零字节加到基本成本上的gasGas_cost += 16 * bytes_nonzero: gas加到内存数据的每一个非零字节的基本成本

所以如果你发送0x0001或0x0010,它将花费相同数量的gas。但是如果你发送0x0011,它将比之前的情况多花费12(16-4)个gas。

燃气收费有三种情况

  • 操作的计算

  • 用于创建合同或消息调用

  • 内存使用的增加。函数参数和函数中的局部变量都是内存数据。在以太坊Solidity中,"记忆"的目的是什么?关键字?

相关内容

  • 没有找到相关文章

最新更新