第十一章 | 智能合约主网部署与验证详解
前面我们写了各种合约,ERC20、NFT、DAO……
但只在本地测试或测试网上部署运行,项目还没“上链”!
主网上线部署,是任何区块链项目走向用户的关键一步。
写代码只是 50%,剩下的 50% 是部署和验证。
合约要上主网,必须:
- 正确部署
- 代码公开验证
- 保证合约安全
- 优化 Gas,降低使用成本
这一章,从测试网到主网部署、Etherscan 验证,全面讲解每个细节,确保你的项目“看得懂、能用、能信任”。
工具 | 说明 |
---|---|
Hardhat | 部署、编译、测试工具 |
Node.js | v16.x 以上,运行 Hardhat |
Alchemy/Infura | 远程节点提供 RPC,连接主网 |
钱包 | MetaMask,签名部署交易 |
Etherscan API | 合约代码验证 |
mkdir my-dapp
cd my-dapp
npm init -y
npm install --save-dev hardhat
npx hardhat
选择 Create a basic sample project
安装依赖
npm install --save-dev @nomiclabs/hardhat-ethers ethers @nomiclabs/hardhat-etherscan dotenv
require("@nomiclabs/hardhat-ethers");
require("@nomiclabs/hardhat-etherscan");
require("dotenv").config();
module.exports = {
solidity: "0.8.19",
networks: {
goerli: {
url: process.env.GOERLI_RPC,
accounts: [process.env.PRIVATE_KEY],
},
sepolia: {
url: process.env.SEPOLIA_RPC,
accounts: [process.env.PRIVATE_KEY],
}
},
etherscan: {
apiKey: process.env.ETHERSCAN_API_KEY,
}
};
.env
GOERLI_RPC=https://eth-goerli.g.alchemy.com/v2/xxxx
SEPOLIA_RPC=https://eth-sepolia.g.alchemy.com/v2/xxxx
PRIVATE_KEY=你的部署钱包私钥
ETHERSCAN_API_KEY=你的 Etherscan API 密钥
❗ 私钥不要上传 GitHub!
文件路径 scripts/deploy.js
async function main() {
const [deployer] = await ethers.getSigners();
console.log("部署账户:", deployer.address);
console.log("账户余额:", (await deployer.getBalance()).toString());
const Token = await ethers.getContractFactory("MyToken");
const token = await Token.deploy();
await token.deployed();
console.log("合约地址:", token.address);
}
main()
.then(() => process.exit(0))
.catch((error) => { console.error(error); process.exit(1); });
npx hardhat run scripts/deploy.js --network goerli
networks: {
mainnet: {
url: process.env.MAINNET_RPC,
accounts: [process.env.PRIVATE_KEY],
},
polygon: {
url: process.env.POLYGON_RPC,
accounts: [process.env.PRIVATE_KEY],
},
bsc: {
url: process.env.BSC_RPC,
accounts: [process.env.PRIVATE_KEY],
}
}
MAINNET_RPC=https://eth-mainnet.g.alchemy.com/v2/xxxx
POLYGON_RPC=https://polygon-rpc.com
BSC_RPC=https://bsc-dataseed.binance.org/
npx hardhat run scripts/deploy.js --network mainnet
❗ 主网部署前请三思,部署后合约代码无法修改(非代理合约)
建议部署到测试网 Goerli / Sepolia / Mumbai 反复测试
npx hardhat verify --network goerli 合约地址 参数1 参数2
npx hardhat verify --network goerli 0xAbC123... "MyToken" "MTK" 1000000
.env
内容优化项 | 说明 |
---|---|
编译优化 | Hardhat 编译打开优化选项 |
immutable |
部署时初始化,减少状态读写 |
constant |
编译时写死变量,省 Gas |
事件精简 | 只使用必要 indexed 参数 |
最小代理 | Clone 工厂批量部署子合约 |
solidity: {
version: "0.8.19",
settings: {
optimizer: {
enabled: true,
runs: 200,
},
},
}
公链 | RPC 地址 |
---|---|
Ethereum | Alchemy / Infura |
Polygon | polygon-rpc.com |
BNB Chain | bsc-dataseed.binance.org |
Arbitrum | arbitrum-rpc.com |
zkSync Era | zksync2-mainnet.zksync.io |
推荐用 Dune 公开展示社区透明数据
部署 MyToken
,符号 MTK
,总量 1000000
npx hardhat run scripts/deploy.js --network goerli
npx hardhat verify --network goerli 0xAbC123... "MyToken" "MTK" 1000000
Transfer
事件这一章完成了智能合约的完整主网部署流程:
✔️ 环境配置 + 硬件钱包保护私钥
✔️ 测试网反复测试
✔️ 主网安全部署
✔️ Etherscan 验证透明
✔️ Dune Analytics 数据展示
✔️ 多链部署 + 升级合约实战
Solidity 智能合约前后端集成实战
Ethers.js + React 前端交互
MetaMask 钱包集成登录/签名
DApp 完整项目开发
钱包授权 / 链上调用 / 交易签名流程
️ 完整项目代码上传 GitHub,评论区见!
下一章继续冲第十二章!
要直接做前后端集成 or DApp 快速开发?随时安排!
确认下第十一章!
需要补充 Layer2 主网部署(Arbitrum、zkSync)或批量发币工厂项目实战?
你拍板,我们继续!