am正在学习转移和发送solidity以及回退功能。据我所知,当你向智能合约发送以太币时,你也会向回退功能发送一些天然气。为什么有这种机制?我以为天然气是用来支付验证器的,为什么合同中现在储存着天然气+合同中的天然气现在是用来做什么的?感谢
每次操作都要花费一定量的天然气。无论主交易中执行了多少内部交易,总金额都由主交易发送方支付。
transfer()
函数(在当前的Solidity 0.8版本中(允许被调用的地址只花费2300气体,防止了重新进入攻击。
这个数量足以发出一个事件,但不足以执行另一个调用——例如,返回到调用者合约,这将允许重新进入攻击。
因此,为了回答您最初的问题:
如何处理发送到回退功能的气体
从调用合约的角度来看:您只能将其用于执行一些基本操作,例如发出事件。但你不能把它卖回ETH并存储在被调用的合同中,也不能调用另一个合同(包括发送者(。
contract Called {
event Received(uint256 amount);
fallback() external payable {
// ok
emit Received(msg.value);
// fail - costs more than the 2300 limit
msg.sender.call("");
}
}