Call, send 和transfer 函数对应于CALL指令。基本消耗是7,400 GAS。事实上,消费将近7,600 GAS。值得注意的是,如果转账到一个从未见过的地址,将额外增加25,000个GAS。
我发现我的智能合约买一个币,第一次花费12.5万gas,第二次也差不多。并没有减少 2.5万gas。
照理说第一次购买,薄饼转账到一个从未见过的地址花费额外的2.5万gas,第二次交易应该更少的gas花费才是。
因为我无论怎么优化我的智能合约,我需要花费的燃料依然比人家多了大概2万左右,所以我怀疑问题在这。
----------------------------------更新-------------------------------------
感谢Tiny熊的答复。
卖出的时候我用到了balanceOf函数,然后第一次卖出确实花费了很多的gas,但是买的时候没有涉及balanceOf的调用,故而第一次和第二次没有太大的变化。
这是我涉及到薄饼的核心交易代码,就2行而已。我也不知道怎么优化了,但是目前来看swap函数用的燃料费比人家的多,但是swap又不归我管。我也不知道对方用了什么方法,燃料费就是比我们的省了2万左右。
swap_token_address.call(abi.encodeWithSelector(SELECTOR, pair_address, transfer_amount));
IUniswapV2Pair(pair_address).swap(
amount0Out, uint(0), address(this), new bytes(0)
);