你可以用发送到回退功能的气体做什么
what can you do with the gas that is sent to a fall back function
我正在学习 solidity 中的传输和发送,以及回退功能。据我了解,当你将以太币发送到智能合约时,你也会向回退函数发送一些气体。为什么会有这个机制?我以为 gas 是用来支付验证者费用的,怎么现在合约中存储了 gas + 合约中的 gas 现在是干什么用的?谢谢
每个操作都会消耗一些预定义的气体量。合并金额 - 无论在主交易中执行了多少内部交易 - 始终由主交易发送方支付。
transfer()
函数(在当前 Solidity 0.8 版本中)允许被调用地址仅花费 2300 gas,防止 reentrancy 攻击。
此数量足以发出一个事件,但不足以执行另一个调用 - 例如返回调用者合约,这将允许重入攻击。
所以回答你原来的问题:
what can you do with the gas that is sent to a fall back function
从被调用合约的角度来看:您只能将其用于执行一些基本操作,例如发出事件。但是不能卖回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("");
}
}
我正在学习 solidity 中的传输和发送,以及回退功能。据我了解,当你将以太币发送到智能合约时,你也会向回退函数发送一些气体。为什么会有这个机制?我以为 gas 是用来支付验证者费用的,怎么现在合约中存储了 gas + 合约中的 gas 现在是干什么用的?谢谢
每个操作都会消耗一些预定义的气体量。合并金额 - 无论在主交易中执行了多少内部交易 - 始终由主交易发送方支付。
transfer()
函数(在当前 Solidity 0.8 版本中)允许被调用地址仅花费 2300 gas,防止 reentrancy 攻击。
此数量足以发出一个事件,但不足以执行另一个调用 - 例如返回调用者合约,这将允许重入攻击。
所以回答你原来的问题:
what can you do with the gas that is sent to a fall back function
从被调用合约的角度来看:您只能将其用于执行一些基本操作,例如发出事件。但是不能卖回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("");
}
}