Solidity 最近的变化将回退函数格式从只是 function() 更改为 fallback(),这对于初学者来说非常好理解发生了什么,但是我有一个问题是关于编译器在我实现时给我的建议后备。
例如,我项目中的一段代码:
pragma solidity ^0.6.1;
contract payment{
mapping(address => uint) _balance;
fallback() payable external {
_balance[msg.sender] += msg.value;
}
}
Run Code Online (Sandbox Code Playgroud)
一切正常,但编译器建议:
Warning: This contract has a payable fallback function, but no receive ether function.
Consider adding a receive ether function.
Run Code Online (Sandbox Code Playgroud)
接收以太函数是什么意思?我试着查了一下,我能找到的很多例子只是另一个后备函数。
我使用的是 0.6.1+commit.e6f7d5a4 版本
Far*_*asi 20
根据 Solidity 0.6.0 版本,我们有一个重大更改。\n通常称为 \xe2\x80\x9cfallback 函数\xe2\x80\x9d 的未命名函数被分成使用 Fallback 关键字定义的新后备函数和使用 receive 关键字定义的接收以太函数。\n如果存在,只要调用数据为空(无论是否接收到以太币),就会调用接收以太币函数。此函数是隐式付费的。\n当没有其他函数匹配时,将调用新的后备函数(如果接收以太函数不存在,则这包括具有空调用数据的调用)。您可以将此功能设为付费或不付费。如果它是不可支付的,那么与发送值的任何其他功能不匹配的交易将被恢复。如果您遵循升级或代理模式,则只需实现新的后备功能。
\n\nhttps://solidity.readthedocs.io/en/v0.6.7/060-writing-changes.html#semantic-and-syntropic-changes
\nTho*_*ena 11
作为对已接受答案的补充,您应该如何定义未命名的回退和接收函数来解决此错误:
contract MyContract {
fallback() external payable {
// custom function code
}
receive() external payable {
// custom function code
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3444 次 |
| 最近记录: |