Polygon Mumbai测试网部署NativzKeyMinter合约后无法铸造,提示价格错误问题求助
排查Polygon Mumbai上NativzKeyMinter合约mint失败(价格错误)的解决方案
从你给出的报错信息execution reverted: The price is incorrect可以直接定位问题核心:你的铸币请求中附带的金额和合约预期的铸币价格不匹配。下面是一步步的排查和解决思路:
第一步:确认合约设定的铸币价格
首先要搞清楚合约当前要求的铸币价格是多少。你可以通过以下方式查询:- 打开Polygon Mumbai区块浏览器,找到你的
NativzKeyMinter合约地址; - 切换到「Read Contract」标签,查找类似
price()、mintPrice这类公开的价格变量,调用它获取数值; - 注意这个数值的单位是wei(Polygon上的最小单位,1 MATIC = 10^18 wei),别和MATIC单位搞混。
- 打开Polygon Mumbai区块浏览器,找到你的
第二步:检查mint调用时的金额传递
不管你是通过前端DApp还是直接用钱包/Remix调用mint函数,都要确认:- 如果是调用带
payable的mint函数,必须在调用时附带对应金额(也就是合约要求的价格); - 检查金额的单位转换:比如合约要求1 MATIC,那你需要传入
1000000000000000000wei,而不是1; - 如果是前端调用,检查代码中是否有把MATIC转成wei的逻辑(比如用
ethers.utils.parseEther(price)),有没有写错价格数值。
- 如果是调用带
第三步:排查价格的动态逻辑(如果有)
有些NFT合约会分阶段发售(比如预售、公售),或者给白名单用户设置优惠价格:- 确认当前合约的发售阶段是否已经正确启动,且你处于对应的阶段;
- 如果你是白名单用户,检查你的地址是否被正确添加到白名单,白名单对应的价格是否和你传递的金额一致;
- 查看合约代码中是否有价格随时间/数量变化的逻辑(比如阶梯价格),确认当前的价格要求。
第四步:验证价格设置的权限与正确性
你提到已经授予了对应角色,要确认:- 负责设置价格的角色(比如
PRICE_SETTER)是否正确授予,且价格已经被正确设置为你预期的数值; - 启动发售后,价格有没有被意外修改(比如误操作调用了
setPrice这类函数)。
- 负责设置价格的角色(比如
第五步:模拟调用测试
你可以在Remix或者PolygonScan的「Write Contract」标签中,手动调用mint函数并传入正确的金额(在Value字段填写对应wei数值),看是否能成功:- 如果模拟成功,说明问题出在你的前端调用逻辑或者钱包的金额设置上;
- 如果模拟也失败,那需要重新检查合约的价格校验代码,比如是否在
mint函数中有额外的价格判断逻辑(比如是否只允许特定地址按特定价格铸造)。
内容的提问来源于stack exchange,提问作者shan.B
相关产品推荐
相关产品推荐

