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

调用StakingRewards合约stake方法时触发ERC20授权不足错误的原因咨询

问题原因与解决方案

这个错误的核心原因是ERC20代币的授权机制限制,结合你的合约代码拆解来看:

在StakingRewards的stake函数中,你使用了stakingToken.transferFrom(msg.sender, address(this), _amount)——这是ERC20标准中的「第三方划转」方法,它要求调用stake的用户地址,必须预先给StakingRewards合约授权,允许合约从用户账户中划转指定数量的YAY代币。如果没有完成这个前置授权操作,合约就没有权限转走用户的代币,直接触发"ERC20: insufficient allowance"的回滚。

具体解决步骤(在Remix中操作)

  1. 找到你已经部署好的YAYToken合约实例
  2. 调用该合约的approve方法:
    • 第一个参数填你的StakingRewards合约的地址(让YAY代币明确要授权给哪个合约)
    • 第二个参数填你想要授权的额度(比如你要stake 1000,就填1000,或者填一个更大的值比如1000000方便后续多次stake)
  3. 确认授权交易执行成功后,回到StakingRewards合约实例,再次调用stake方法并传入1000,就能正常执行了

补充说明

  • 如果之后你要stake的代币数量不超过当前剩余授权额度,不需要重复授权
  • 如果授权额度用完了,只需再次调用YAYToken.approve方法增加额度即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:42:29