如何在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
相关产品推荐
相关产品推荐

