这是一个简单的合同来证明我的要求:
contract Example {
uint256 intOne;
uint256 intTwo;
function test1()
public
payable
{
intOne = 300;
}
function test2()
public
payable
{
intOne = 0;
intTwo = 300;
}
}
新部署合约后,我第一次打电话test1()
,它使用了 41527 gas。
这对我来说是有道理的,因为intOne
从零写入非零将使用 20,000 气体,加上基线气体使用量(但这是可行的)。
然后我打电话给test2
它,令人惊讶的是只使用了 31453 气体。
不应该intOne
从非零变为零成本 5000,然后再花费 20,000intTwo
从零变为非零?
还是solidity能够计算交易前后使用的总存储量的差异来确定使用的gas量?