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

通过智能合约对接Balancer Vault加入池时遇BAL#401错误求助

BAL#401 - SENDER_NOT_ALLOWED 错误解决方法

你遇到的BAL#401 - SENDER_NOT_ALLOWED错误,核心原因是你的合约没有被用户授权为Balancer Vault的Relayer,这和ERC20代币授权是完全独立的两个权限要求。

当你的合约以用户地址作为sender调用Vault的joinPool时,Balancer的权限机制会校验:用户是否允许你的合约作为Relayer代其发起资金操作——仅给Vault和合约授权ERC20代币支出权限,无法满足这个校验要求。

解决步骤

  • 用户需主动调用Balancer Vault的setRelayerApproval接口,为你的合约授予Relayer权限:
    // 用户直接调用Vault的该函数
    vault.setRelayerApproval(
        msg.sender,  // owner:用户自己的地址
        你的合约地址, // relayer:处理资金的合约地址
        true         // approved:设为true开启授权
    );
    
    这个操作必须由用户发起,完成后你的合约才能合法代表用户执行joinPool操作。
  • 确认现有代码逻辑:你的_addTokenLiquidityToBalancerPool函数中joinPool的参数传递是正确的(sender传用户地址、recipient传合约地址),补全Relayer授权步骤后即可解决错误。

权限区别说明

  • ERC20的approve是允许Vault转移用户的代币;
  • Vault的setRelayerApproval是允许你的合约代表用户发起资金操作请求,两者都是必要条件,缺一不可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:47:18