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

使用ethers创建合约时遇ABI映射错误,求解决方案

解决ethers创建Uniswap V3合约实例的报错问题

错误原因分析

报错出现在@ethersproject/abi处理ABI的环节,核心问题有两个:

  • ABI格式错误:你导入的IUniswapV3PoolABI是完整的编译后JSON文件(包含abi、bytecode等字段),但ethers.Contract构造函数需要的是单独的ABI数组,而非整个JSON对象。
  • 依赖版本不兼容:你使用的ethers@5.1.4版本过旧,与@uniswap/v3-sdk@3.8.2存在兼容性问题,同时依赖中缺少@uniswap/v3-core包(你导入了该包的artifacts,但未在package.json中声明)。

解决方案

1. 修正ABI传入方式

修改合约实例创建代码,传入JSON文件中的abi字段而非整个对象:

import { ethers } from 'ethers';
import IUniswapV3PoolABI from '@uniswap/v3-core/artifacts/contracts/interfaces/IUniswapV3Pool.sol/IUniswapV3Pool.json';
import dotenv from 'dotenv';
dotenv.config();

const poolAddress = '0x7109C674e52b14FCFb8A04ffe254f454f9C61C18';
const INFURA_URL_MAINNET = process.env.INFURA_URL_MAINNET;
const provider = new ethers.providers.JsonRpcProvider(INFURA_URL_MAINNET);

// 关键:传入ABI数组而非整个JSON对象
const poolContract = new ethers.Contract(
    poolAddress,
    IUniswapV3PoolABI.abi,
    provider
);

2. 调整依赖版本并补充缺失包

更新package.json中的依赖,确保版本兼容:

"dependencies": {
  "@uniswap/sdk-core": "^3.0.1",
  "@uniswap/v3-core": "^1.0.1",
  "@uniswap/v3-sdk": "^3.8.2",
  "dotenv": "^16.0.0",
  "ethers": "^5.7.2"
},
"devDependencies": {
  "@ethersproject/experimental": "^5.7.0",
  "@typechain/ethers-v5": "^7.0.0",
  "@types/node": "^18.11.9",
  "typechain": "^5.0.0",
  "typescript": "^4.8.4"
}

执行安装命令更新依赖:

npm install

3. 检查TypeScript配置

确保tsconfig.json中开启JSON模块解析:

{
  "compilerOptions": {
    "resolveJsonModule": true,
    "esModuleInterop": true,
    // 其他配置项...
  }
}

验证

完成上述修改后重新运行代码,即可正常创建Uniswap V3 Pool合约实例,ABI处理相关报错会消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:20:29