HardHat测试Solidity合约 调用mintPublic报余额不足错误
报错根因
Seller: Costs 2500000000 GWei这个回滚原因和测试地址的链上余额多少没有关系,本质是你调用mintPublic的时候,没有随交易附带对应价值的ETH作为铸造费。
你在控制台打印的是地址的总余额,这个余额不会在你调用合约方法的时候自动转给合约,合约校验的是本次交易携带的msg.value数值,你当前的调用没传value参数,msg.value就是0,自然会被判定为未支付铸造费直接回滚。
修复方法
- 调用mint方法时显式传入交易附带的ETH数额,用ethers的单位转换工具避免算错单位:2500000000 GWei等价于2.5 ETH
const mintCost = ethers.utils.parseEther("2.5"); await testBirdsContractDeployed.mintPublic(owner.address, { value: mintCost }); - 修正测试代码里写漏的断言,你当前对
tokenURI的断言缺失.to.equal调用,就算mint流程跑通也会报测试错误:// 原错误写法 // expect(await testBirdsContractDeployed.tokenURI(0), "https://test.url/0") // 修正后写法 expect(await testBirdsContractDeployed.tokenURI(0)).to.equal("https://test.url/0")
内容的提问来源于stack exchange,提问作者Matias Villanueva
相关产品推荐
相关产品推荐

