在Remix.eth部署BSC代币出现低级交互错误:未定义receive、fallback函数
BSC合约部署"receive和fallback未定义"报错解决方案
错误触发逻辑
该报错属于EVM标准交易回滚错误:当BSC链上有原生币BNB转入目标合约地址时,EVM会优先匹配合约的
receive()函数,无匹配则尝试调用带payable修饰的fallback()函数,两个函数均未定义时会直接终止交易抛出该错误。
排查步骤
- 检查Remix部署面板的
Value参数,确认是否误填了大于0的数值且单位选择了BNB/ether,部署代币合约无特殊需求时Value需设为0。 - 检查合约构造函数
constructor是否添加了不必要的payable修饰符,或构造函数内部存在触发原生币转入的逻辑。 - 确认你的代币合约是否有接收BNB的业务需求(比如税币手续费归集、空投分发等)。
修复方案
方案1:合约无需接收BNB
将Remix部署面板的Value设为0,若构造函数加了payable修饰符直接删除,重新编译部署即可解决。
方案2:合约需要支持BNB接收
在合约代码中添加对应接收函数即可,Solidity 0.6及以上版本示例如下:
// 处理无调用数据的纯BNB转账场景 receive() external payable { // 无额外业务逻辑留空即可 } // 可选:处理带调用数据的转账/调用场景 fallback() external payable {}
如果使用的Solidity版本低于0.6,直接添加如下通用 fallback 函数即可:
function() external payable {}
修改后重新编译合约再部署即可。
内容的提问来源于stack exchange,提问作者PHP DEV
相关产品推荐
相关产品推荐

