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
相关产品推荐
相关产品推荐

