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

Ethers.js调用approve时BigNumberish参数无效错误求助

问题分析与解决方案

错误根源

这个invalid BigNumberish value错误是因为ethers.js v6不再使用自定义BigNumber类,完全采用原生BigInt,但交易中传入了非兼容的BigNumber对象(错误信息里的{ "hex": "0xb3e3", "type": "BigNumber" }是旧版ethers或其他库的BigNumber格式),导致gasLimit参数解析失败。

解决步骤

  • 统一数值为ethers v6兼容格式
    所有传入合约方法的数值(授权金额、gas参数等),改用以下类型:

    • 原生BigInt(推荐,避免大数溢出)
    • 数字字符串(比如"6500000000000000")
    • 安全范围内的普通数字(小于2^53)
  • 显式指定兼容的gasLimit参数
    在approve调用的overrides参数里明确设置gasLimit为原生BigInt或字符串,避免使用旧BigNumber对象:

    // goerli chain
    const wethAddress = '0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6';
    const routerAddress = '0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45';
    
    const provider = new JsonRpcProvider(PROVIDER_URL);
    const approvalContract = new Contract(wethAddress, erc20Abi, provider);
    
    console.log('approving');
    await approvalContract.connect(wallet).approve(
        routerAddress,
        BigInt("6500000000000000"), // 用BigInt包裹授权金额
        { gasLimit: BigInt(60000) } // 显式设置gasLimit为原生BigInt
    );
    console.log('approved');
    
  • 排查依赖版本冲突
    确保项目只使用ethers.js v6版本,不要同时安装v5和v6,避免不同版本的BigNumber类混用。可执行npm ls ethers检查版本,如有冲突则清理依赖重新安装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:13:31