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

使用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:

  1. 安装Ethers v5:
npm install ethers@5
  1. 替换部署代码为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插件:

  1. 卸载旧的冲突包:
npm uninstall @nomiclabs/ethers @nomiclabs/hardhat-deploy-ethers
  1. 安装Hardhat官方的Ethers v6插件:
npm install @nomicfoundation/hardhat-ethers ethers@6
  1. 在hardhat.config.js中确保导入的是新插件:
require("@nomicfoundation/hardhat-ethers");
// 或者用ES模块语法:import "@nomicfoundation/hardhat-ethers";
  1. 你的原有代码就可以正常运行了,因为此时ethers.deployContract()和waitForDeployment()都是Ethers v6的标准API。

为什么之前重装没用?

你安装的@nomiclabs系列包是针对Ethers v5的,和Ethers v6的API完全不兼容,单纯重装旧包无法解决版本冲突问题,必须统一Ethers版本和对应的Hardhat插件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:08:17