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

如何在Hardhat部署脚本中获取当前运行的网络名称?

获取Hardhat部署脚本中--network参数值的实现方法

完全可以实现,不需要手动解析命令行参数,Hardhat运行时环境(HRE)会自动把当前执行上下文的网络信息注入到脚本环境中,直接读取内置属性即可。

核心用法

在部署脚本中从hardhat包引入network对象,它的name字段就对应命令行中--network后传入的<network-name>值。
你可以基于这个值做分支判断,给不同网络配置对应的部署参数,参考示例:

import { ethers, network } from "hardhat";

async function main() {
  // 读取当前执行的网络名
  const currentNetwork = network.name;
  console.log(`当前部署目标网络: ${currentNetwork}`);

  // 按网络区分部署参数
  let deployConfig;
  switch (currentNetwork) {
    case "sepolia":
      deployConfig = {
        initialSupply: ethers.parseEther("1000000"),
        feeAddr: "0x2345678901234567890123456789012345678901"
      };
      break;
    case "ethereum":
      deployConfig = {
        initialSupply: ethers.parseEther("10000000"),
        feeAddr: "0x1234567890123456789012345678901234567890"
      };
      break;
    case "hardhat":
      // 本地内置测试网络的默认配置
      deployConfig = {
        initialSupply: ethers.parseEther("100000000"),
        feeAddr: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" // Hardhat本地测试网第一个默认账户
      };
      break;
    default:
      throw new Error(`请先为网络 ${currentNetwork} 配置对应的部署参数`);
  }

  // 正常执行部署逻辑
  const Token = await ethers.getContractFactory("MyToken");
  const token = await Token.deploy(deployConfig.initialSupply, deployConfig.feeAddr);
  await token.waitForDeployment();
  console.log(`合约部署完成,地址: ${await token.getAddress()}`);
}

main().catch((err) => {
  console.error(err);
  process.exitCode = 1;
});

补充说明

  • 如果执行命令时没有传--network参数,network.name会默认返回hardhat,对应Hardhat内置的临时本地测试网络,不需要额外做兼容处理。
  • 除了网络名,你还可以通过network.config直接读取hardhat.config.ts中配置的对应网络的chainId、RPC地址、签名账户等信息,不需要重复维护多份配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:01:09