Hardhat部署智能合约报错:'upload.deployed is not a function'
解决Hardhat部署合约报错:'upload.deployed is not a function'
问题核心原因
这个错误本质是ethers.js版本兼容性问题:
- 在ethers v5及更早版本中,
Upload.deploy()返回的是ContractTransaction对象,需要调用.deployed()等待部署完成并获取合约实例; - 但在ethers v6(Hardhat v2.19+默认集成)中,
Upload.deploy()直接返回已部署完成的合约实例,.deployed()方法已被移除,调用它就会触发报错。
修复方案
根据项目使用的ethers版本选择对应修改方式:
方案1:适配ethers v6(推荐)
直接移除await upload.deployed()这一行代码,修改后的脚本如下:
const hre = require("hardhat"); async function main() { const Upload = await hre.ethers.getContractFactory("Upload"); const upload = await Upload.deploy(); // 移除deployed()调用,直接使用upload实例获取地址 console.log("Library deployed to:", upload.address); } main().catch((error) => { console.error(error); process.exitCode = 1; });
方案2:回退到ethers v5(仅当项目依赖旧版本时使用)
如果你的项目必须依赖ethers v5,可修改package.json中的依赖版本后重新安装:
- 修改
package.json的devDependencies:
{ "devDependencies": { "@nomicfoundation/hardhat-toolbox": "^2.0.0", "hardhat": "^2.17.0" } }
- 重新安装依赖:
npm install
完成后原脚本的await upload.deployed()即可正常运行。
额外排查点
- 执行
npx hardhat compile确认Upload合约编译无语法错误; - 检查
hardhat.config.js中的网络配置,确保部署目标网络可正常连接。
内容的提问来源于stack exchange,提问作者swarup
相关产品推荐
相关产品推荐

