You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Brownie测试ERC20支付ERC1155 NFT mint报超出授权额度错误求助

问题修复方案

1. 核心报错原因:授权逻辑错误

你收到的transfer amount exceeds allowance报错完全是测试脚本中的授权逻辑写错导致的:
transferFrom是NFT合约作为第三方操作你的ERC20代币,必须由代币持有者给NFT合约地址授权,你当前的测试代码是让account2给自己授权,完全不生效。同时你没有指定approve调用的发起方为代币持有者account2,默认会用部署合约的account1发起调用,也是错误的。

将测试脚本中的授权代码:

tx2 = robo_token.approve(account2.address, robo_token.balanceOf(account2.address))

修改为:

tx2 = robo_token.approve(pomobot_token.address, robo_token.balanceOf(account2.address), {"from": account2})

2. 隐藏问题:ERC20精度不匹配

你的ERC20代币设置了18位小数,当前mintPomoBot中transferFrom转账数额写的是1,对应实际金额是0.000000000000000001个POMO,如果你想设置1个POMO作为铸造费,需要修改ERC1155合约中的转账逻辑:

// 建议先定义常量
uint256 public constant MINT_FEE = 1 * 10 ** 18;
require(_roboToken.transferFrom(msg.sender, address(this), MINT_FEE));

3. payable修饰符相关问题

不需要给mintPomoBot加payable修饰符。payable仅用于需要接收链原生币(如ETH、BNB)的函数,你全程使用ERC20代币结算,没有原生币转账逻辑,不需要加该修饰符。

额外优化建议

  • 你ERC20合约中写的approveNFTContract是仅owner可调用的函数,只能给owner持有的代币授权给NFT合约,普通用户铸造时还是需要自行发起授权,该函数在当前业务逻辑中无作用,可以删除。
  • 建议给mintPomoBot加上NFT ID、铸造数量的合法性校验,避免无效mint操作。

内容的提问来源于stack exchange,提问作者Cromewar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:06:06