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

部署Hardhat项目遇TypeError:无法读取undefined的ethUsdPriceFeed属性

问题排查与解决

核心错误原因

错误Cannot read properties of undefined (reading 'ethUsdPriceFeed')指向两个关键问题:

  • 出错的01-deploy-fund-me.js文件未正确导入networkConfig,或该配置对象中没有当前网络chainId对应的ethUsdPriceFeed字段;
  • 当前部署的网络chainId未在networkConfig中定义。

分步修复方案

1. 检查01-deploy-fund-me.js的导入语句

确保文件顶部已导入networkConfig:

const { networkConfig, developmentChains } = require("../helper-hardhat-config")

如果缺失这行,networkConfig会是undefined,自然无法读取ethUsdPriceFeed属性。

2. 验证helper-hardhat-config.js的配置完整性

打开helper-hardhat-config.js,确认networkConfig包含当前部署网络的chainId,且对应配置中存在ethUsdPriceFeed字段。示例配置:

const networkConfig = {
    5: { // Goerli测试网chainId
        name: "goerli",
        ethUsdPriceFeed: "0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e"
    },
    31337: { // 本地Hardhat网络chainId
        name: "localhost"
        // 本地网络用mock合约,无需真实喂价地址
    }
    // 其他网络配置...
}

3. 完善01-deploy-fund-me.js的部署逻辑

区分开发链与主网/测试网的喂价地址来源:

const { network, getNamedAccounts, deployments } = require("hardhat")
const { networkConfig, developmentChains } = require("../helper-hardhat-config")

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

    let ethUsdPriceFeedAddress
    if (developmentChains.includes(network.name)) {
        // 开发链下获取已部署的Mock合约地址
        const mockAggregator = await get("MockV3Aggregator")
        ethUsdPriceFeedAddress = mockAggregator.address
    } else {
        // 非开发链下使用networkConfig中的真实喂价地址
        ethUsdPriceFeedAddress = networkConfig[chainId]["ethUsdPriceFeed"]
    }

    // 部署FundMe合约
    await deploy("FundMe", {
        from: deployer,
        args: [ethUsdPriceFeedAddress],
        log: true,
        waitConfirmations: network.config.blockConfirmations || 1
    })
}

module.exports.tags = ["all", "fundme"]

4. 修复mock部署代码的语法错误

你提供的mock部署代码中,args参数应该用数组而非括号,否则会导致部署失败:

// 错误写法
args: (DECIMALS, INITIAL_ANSWER),
// 正确写法
args: [DECIMALS, INITIAL_ANSWER],

验证步骤

  1. 先执行npx hardhat deploy --tags mocks确保mock合约部署成功;
  2. 再执行npx hardhat deploy部署FundMe合约,确认错误消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:31:10