调用UniswapV3Router的exactInputSingle报错:Cannot read properties of undefined
报错TypeError: Cannot read properties of undefined (reading 'exactInputSingle')本质是你尝试访问的对象(callStatic或其下的exactInputSingle)为undefined,结合你的代码和场景,可能的原因如下:
Ethers.js版本不兼容
Ethers.js v5和v6的callStatic调用语法差异很大:- v5写法:
contract.callStatic.exactInputSingle(params) - v6写法:
await contract.exactInputSingle.staticCall(params)
如果你当前环境是v6,但代码用了v5的语法,contract.callStatic会是undefined,自然无法读取exactInputSingle。
- v5写法:
ABI未正确加载
即便你确认ABI文件包含该方法,也可能存在加载问题:比如导入路径错误、变量名拼写错误、ABI文件格式损坏(比如变成空数组或无效JSON)。可以在合约实例化前打印UniswapV3RouterABI,确认数组中确实有exactInputSingle的方法定义。合约地址与网络不匹配
你使用的地址0xe592427a0aece92de3edee1f18e0157c05861564是以太坊主网的Uniswap V3 Router,但如果你的provider连接的是测试网(如Sepolia),该地址上的合约并非Router,自然没有对应方法。另外也可以检查addresses.uniswapV3Router是否被正确赋值。Provider连接异常
如果provider未成功连接到区块链(比如RPC地址错误、网络不通),合约实例的内部方法无法正常初始化,会导致访问callStatic.exactInputSingle时出现undefined。可以先执行await provider.getBlockNumber(),看是否能正常返回区块高度,验证provider状态。
内容的提问来源于stack exchange,提问作者Bmroxx Roxx

