调用StakingRewards合约stake方法时触发ERC20授权不足错误的原因咨询
问题原因与解决方案
这个错误的核心原因是ERC20代币的授权机制限制,结合你的合约代码拆解来看:
在StakingRewards的stake函数中,你使用了stakingToken.transferFrom(msg.sender, address(this), _amount)——这是ERC20标准中的「第三方划转」方法,它要求调用stake的用户地址,必须预先给StakingRewards合约授权,允许合约从用户账户中划转指定数量的YAY代币。如果没有完成这个前置授权操作,合约就没有权限转走用户的代币,直接触发"ERC20: insufficient allowance"的回滚。
具体解决步骤(在Remix中操作)
- 找到你已经部署好的YAYToken合约实例
- 调用该合约的
approve方法:- 第一个参数填你的
StakingRewards合约的地址(让YAY代币明确要授权给哪个合约) - 第二个参数填你想要授权的额度(比如你要stake 1000,就填
1000,或者填一个更大的值比如1000000方便后续多次stake)
- 第一个参数填你的
- 确认授权交易执行成功后,回到
StakingRewards合约实例,再次调用stake方法并传入1000,就能正常执行了
补充说明
- 如果之后你要stake的代币数量不超过当前剩余授权额度,不需要重复授权
- 如果授权额度用完了,只需再次调用
YAYToken.approve方法增加额度即可
内容的提问来源于stack exchange,提问作者Magnus
相关产品推荐
相关产品推荐

