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

使用Maticjs通过POS Bridge跨链ERC20代币时触发零地址授权错误

ERC20跨链approve报错:"execution reverted: ERC20: approve to the zero address" 解决方案

核心原因

调用erc20.approve()时,maticjs需要将代币授权给根链POS Portal合约作为跨链中转方,但当前代码未指定该合约地址,导致默认传入零地址触发ERC20安全校验。

修复步骤

  • 确认Portal合约地址:Goerli测试网的ERC20 POS Portal合约地址为0x2890bA17EfE978480615e330ecB6533b880928e7(主网需替换为对应官方地址)。
  • 修改approve调用逻辑:在approve方法中明确传入Portal合约地址作为授权对象,同时可配置gas参数。修改后的代码如下:
async function approveToken() {
    const posClient = await getPOSClient();
    const erc20Token = posClient.erc20(process.env.ROOT_TOKEN, true);
    
    // 指定Goerli测试网的ERC20 POS Portal地址
    const portalAddress = '0x2890bA17EfE978480615e330ecB6533b880928e7';
    const result = await erc20Token.approve('1000', {
        to: portalAddress,
        gasLimit: '300000' // 可根据实际情况调整gas上限
    });

    const txHash = await result.getTransactionHash();
    console.log('txHash', txHash);

    const receipt = await result.getReceipt();
    console.log('receipt', receipt);
}
  • 验证环境变量:
    • 确保process.env.ROOT_TOKEN是**根链(Goerli)**上已完成映射的ERC20代币地址,而非Polygon侧的代币地址。
    • 确认FROM_ADDRESS与私钥对应,且账户持有足够的Goerli ETH用于支付gas费用。

额外排查建议

  • 确认代币在Polygon映射门户的映射状态正常,无映射失败记录。
  • 若代码修改后仍报错,可通过MetaMask手动调用根链代币合约的approve方法,授权给Portal合约,再执行跨链操作,排除代码逻辑外的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:35:42