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

Hardhat部署合约报错:Cannot read properties of undefined (reading 'JsonRpcProvider')

解决Hardhat任务中Cannot read properties of undefined (reading 'JsonRpcProvider')错误

问题场景

运行自定义Hardhat部署ERC271A合约的任务时,触发以下错误:

TypeError: Cannot read properties of undefined (reading 'JsonRpcProvider')
    at Object.<anonymous> (/Users/iii/dev/impulse-sk/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:4:61)
    at Module._compile (node:internal/modules/cjs/loader:1256:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
    at Module.load (node:internal/modules/cjs/loader:1119:32)
    at Function.Module._load (node:internal/modules/cjs/loader:960:12)
    at Module.require (node:internal/modules/cjs/loader:1143:19)
    at require (node:internal/modules/cjs/helpers:110:18)
    at Object.<anonymous> (/Users/iii/dev/impulse-sk/node_modules/@nomiclabs/hardhat-ethers/src/internal/provider-proxy.ts:7:1)
    at Module._compile (node:internal/modules/cjs/loader:1256:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1310:10)

相关任务代码:

task("deploy-erc271a-contract", "Deploy ERC271A Mint NFT contract", async (taskArgs, hre) => {    
      console.log("Task[deploy-erc271a-contract] getContractFactory for MyERC271A");
      const nftERC271AFactory = await ethers.getContractFactory("MyERC271A");

      // Start deployment, returning a promise that resolves to a contract object
      console.log("Task[deploy-erc271a-contract] Contract deploying... ");

      //Contract takes: name, symbol, delegates[], receivers[], amount[]
      const nftERC271AContract = await nftERC271AFactory.deploy(taskArgs.name, taskArgs.symbol);
      await nftERC271AContract.deployed();

      console.log("Task[deploy-erc271a-contract] Contract deployed: " + nftERC271AContract.address)
      return(nftERC271AContract.address);
 });

解决方案

1. 修复插件与ethers版本兼容性

该错误核心原因是@nomiclabs/hardhat-ethers插件和ethers版本不兼容。执行以下命令安装兼容版本:

npm install --save-dev @nomiclabs/hardhat-ethers@npm:hardhat-deploy-ethers ethers@5

2. 通过hre对象获取ethers实例

避免直接使用全局ethers,改用Hardhat Runtime Environment(hre)提供的实例,确保环境初始化正确。修改后的任务代码:

task("deploy-erc271a-contract", "Deploy ERC271A Mint NFT contract", async (taskArgs, hre) => {    
      console.log("Task[deploy-erc271a-contract] getContractFactory for MyERC271A");
      // 通过hre获取ethers
      const nftERC271AFactory = await hre.ethers.getContractFactory("MyERC271A");

      console.log("Task[deploy-erc271a-contract] Contract deploying... ");

      // 注意:合约构造函数需要5个参数,当前仅传入2个,需补全剩余参数避免部署失败
      const nftERC271AContract = await nftERC271AFactory.deploy(taskArgs.name, taskArgs.symbol, [], [], []);
      await nftERC271AContract.deployed();

      console.log("Task[deploy-erc271a-contract] Contract deployed: " + nftERC271AContract.address);
      return nftERC271AContract.address;
 });

3. 验证Hardhat配置

确保hardhat.config.js中正确引入插件:

require("@nomiclabs/hardhat-ethers");

module.exports = {
  solidity: "0.8.19", // 匹配你的合约Solidity版本
  networks: {
    hardhat: {},
    // 其他网络配置
  },
};

4. 清理并重装依赖

若上述步骤无效,清理现有依赖后重新安装:

rm -rf node_modules package-lock.json
npm install

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:13:15