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

Hardhat部署FundMe报错:未找到MockV3Aggregator部署实例

问题描述

执行部署命令 yarn hardhat deploy --tags fundme 部署FundMe项目时,触发MockV3Aggregator相关错误,完整报错信息如下:

Error: ERROR processing /Users/mohameduzair/blockChain/JSweb3_2/fundMe_hardhat/deploy/01-deploy-fundMe.js:
Error: No deployment found for: MockV3Aggregator at Object.get (/Users/mohameduzair/blockChain/JSweb3_2/fundMe_hardhat/node_modules/hardhat-deploy/src/DeploymentsManager.ts:162:17)

现有相关代码

01-deploy-fundMe.js 部署脚本

module.exports = async ({ getNamedAccounts, deployments }) => {
    const { deploy, log } = deployments
    const { deployer } = await getNamedAccounts()
    const chainId = network.config.chainId

    let ethUsdPriceFeedAddress
    if (developmentChains.includes(network.name)) {
        // if (chainId === 31337) {
        const ethUsdAggregator = await deployments.get("MockV3Aggregator")
        ethUsdPriceFeedAddress = ethUsdAggregator.address
    } else {
        ethUsdPriceFeedAddress = networkConfig[chainId]["ethUsdPriceFeed"]
    }

    const fundMe = await deploy("FundMe", {
        from: deployer,
        args: [ethUsdPriceFeedAddress],
        log: true,
    })
    log(`FundMe deployed at ${fundMe.address}`)
    log(`-------------------------!!!--------------------------`)
}
module.exports.tags = ["all", "fundme"] 

MockV3Aggregator.sol 合约代码

// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
// pragma solidity >=0.6.6 <0.8.7;
import "@chainlink/contracts/src/v0.6/tests/MockV3Aggregator.sol";
错误原因

报错核心是:执行带fundme标签的部署命令时,Hardhat只会运行匹配fundme标签的部署脚本,不会自动执行Mock合约的部署逻辑,deployments.get("MockV3Aggregator")找不到已部署的MockV3Aggregator实例,直接抛出错误。

修复步骤

按以下顺序排查修复即可:

  • 补全MockV3Aggregator的部署脚本,在deploy目录下新建00-deploy-mocks.js(文件名前缀数字必须小于FundMe部署脚本的前缀,保证执行顺序在前),代码参考如下:
const { network } = require("hardhat")
// 从配置文件引入常量,需要提前在helper-hardhat-config.js中定义
const { developmentChains, DECIMALS, INITIAL_PRICE } = require("../helper-hardhat-config")

module.exports = async ({ getNamedAccounts, deployments }) => {
    const { deploy, log } = deployments
    const { deployer } = await getNamedAccounts()

    if (developmentChains.includes(network.name)) {
        log("Detected local development chain, deploying price feed mock...")
        await deploy("MockV3Aggregator", {
            from: deployer,
            args: [DECIMALS, INITIAL_PRICE],
            log: true
        })
        log("Mock contract deployed completed")
        log("----------------------------------------")
    }
}
module.exports.tags = ["all", "mocks"]

配置文件中需要定义的常量参考:developmentChains = ["hardhat", "localhost"],DECIMALS = 8,INITIAL_PRICE = 200000000000(对应ETH初始价格2000USD)

  • 检查01-deploy-fundMe.js顶部是否正确引入了developmentChains和networkConfig变量,否则判断本地链的逻辑不会生效。
  • 检查hardhat.config.js中是否已经注册hardhat-deploy、@nomiclabs/hardhat-ethers依赖插件,缺失插件会导致部署功能异常。
  • 部署时选择以下任意一种方式即可解决找不到Mock的问题:
    1. 先执行yarn hardhat deploy --tags mocks完成Mock合约部署,再执行yarn hardhat deploy --tags fundme部署FundMe
    2. 直接执行yarn hardhat deploy,hardhat-deploy会按文件名顺序执行所有带all标签的脚本,先部署Mock再部署业务合约,不会出现依赖缺失问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:57:18