Remix部署ERC721合约报the called function should be payable错误求助
问题根因排查
- 最核心的部署失败原因:构造函数逻辑冲突
你的合约在构造函数中直接调用了mint(90),但mint函数全局生效的校验规则require(_mintAmount <= maxMintAmount)中,maxMintAmount的默认值为20,90远大于20,触发校验直接回滚交易,这就是你不管在本地VM还是Rinkby测试网部署都失败的核心原因。 - 其他可能的部署问题
部署时需要传入三个构造参数:NFT名称_name、NFT标识_symbol、初始BaseURI_initBaseURI,如果参数缺失、格式错误也会触发部署失败。
修复方案
你可以任选以下任意一种方案修复:
- 调整构造函数的铸造数量:将
mint(90)改为20以内的数值,满足当前的单次最大铸造限制 - 调整全局单次最大铸造限制:将
uint256 public maxMintAmount = 20;的默认值修改为大于等于90的数值 - 给owner增加校验豁免:将mint函数中的
require(_mintAmount <= maxMintAmount);移到if (msg.sender != owner())的判断分支内,owner铸造不受单次数量限制
后续使用注意事项
- 合约默认开启白名单限制
onlyWhitelisted = true,普通用户铸造前需要先调用whitelistUsers将对应地址加入白名单 - 普通用户铸造时需要传入不小于
cost * 铸造数量的ETH,否则也会触发回滚
内容的提问来源于stack exchange,提问作者houseofbuidl
相关产品推荐
相关产品推荐

