使用Hardhat部署合约遇Ethers函数不存在问题求助
解决Hardhat部署合约时
waitForDeployment is not a function错误 这个错误的核心是Ethers版本不兼容:
waitForDeployment()是Ethers v6新增的方法,而你安装的@nomiclabs/hardhat-deploy-ethers是适配Ethers v5的插件,两者API不匹配。- 你之前用的
ethers.deployContract()也是Ethers v6的语法,和旧插件冲突。
两种修复方案
方案1:切换到Ethers v5语法
如果想继续用旧插件,修改代码并安装对应版本的Ethers:
- 安装Ethers v5:
npm install ethers@5
- 替换部署代码为v5的写法:
async function deployTokenFixture() { // 获取合约工厂(v5的标准写法) const TokenFactory = await ethers.getContractFactory("Token"); // 部署合约 const hardhatToken = await TokenFactory.deploy(); // 等待部署完成(v5用deployed()替代waitForDeployment()) await hardhatToken.deployed(); }
方案2:升级到Ethers v6(推荐)
适配Hardhat最新生态,用官方的v6插件:
- 卸载旧的冲突包:
npm uninstall @nomiclabs/ethers @nomiclabs/hardhat-deploy-ethers
- 安装Hardhat官方的Ethers v6插件:
npm install @nomicfoundation/hardhat-ethers ethers@6
- 在
hardhat.config.js中确保导入的是新插件:
require("@nomicfoundation/hardhat-ethers"); // 或者用ES模块语法:import "@nomicfoundation/hardhat-ethers";
- 你的原有代码就可以正常运行了,因为此时
ethers.deployContract()和waitForDeployment()都是Ethers v6的标准API。
为什么之前重装没用?
你安装的@nomiclabs系列包是针对Ethers v5的,和Ethers v6的API完全不兼容,单纯重装旧包无法解决版本冲突问题,必须统一Ethers版本和对应的Hardhat插件。
内容的提问来源于stack exchange,提问作者FortuneSeeker
相关产品推荐
相关产品推荐

