在 Hardhat 中部署智能合约到不同网络需要以下步骤:
1. 配置网络信息
在 hardhat.config.js 中配置目标网络:
javascriptnetworks: { 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/ 目录下创建部署脚本:
javascriptconst 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 提供了声明式的部署方式:
javascriptconst { buildModule } = require("@nomicfoundation/hardhat-ignition/modules"); module.exports = buildModule("MyModule", (m) => { const contract = m.contract("MyContract"); return { contract }; });
最佳实践:
- 使用环境变量管理私钥和 RPC URL
- 部署后等待足够的区块确认
- 在 Etherscan 上验证合约代码
- 保存部署地址和构造函数参数
- 使用多签钱包部署到主网
- 测试网充分测试后再部署到主网