乐闻世界logo
搜索文章和话题

如何在 Hardhat 中部署智能合约到不同网络?

2月21日 14:12

在 Hardhat 中部署智能合约到不同网络需要以下步骤:

1. 配置网络信息

hardhat.config.js 中配置目标网络:

javascript
networks: { sepolia: { url: process.env.SEPOLIA_RPC_URL, accounts: [process.env.PRIVATE_KEY], chainId: 11155111 }, mainnet: { url: process.env.MAINNET_RPC_URL, accounts: [process.env.PRIVATE_KEY], chainId: 1 } }

2. 创建部署脚本

scripts/ 目录下创建部署脚本:

javascript
const hre = require("hardhat"); async function main() { const Contract = await hre.ethers.getContractFactory("MyContract"); const contract = await Contract.deploy(); await contract.deployed(); console.log("Contract deployed to:", contract.address); // 验证合约(可选) if (hre.network.name !== "hardhat" && hre.network.name !== "localhost") { await contract.deployTransaction.wait(6); // 等待6个区块确认 await hre.run("verify:verify", { address: contract.address, constructorArguments: [] }); } } main() .then(() => process.exit(0)) .catch((error) => { console.error(error); process.exit(1); });

3. 执行部署

bash
# 部署到 Sepolia 测试网 npx hardhat run scripts/deploy.js --network sepolia # 部署到主网 npx hardhat run scripts/deploy.js --network mainnet

4. 使用 Hardhat Ignition(推荐)

Hardhat Ignition 提供了声明式的部署方式:

javascript
const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules"); module.exports = buildModule("MyModule", (m) => { const contract = m.contract("MyContract"); return { contract }; });

最佳实践:

  • 使用环境变量管理私钥和 RPC URL
  • 部署后等待足够的区块确认
  • 在 Etherscan 上验证合约代码
  • 保存部署地址和构造函数参数
  • 使用多签钱包部署到主网
  • 测试网充分测试后再部署到主网
标签:Hardhat