Hardhat Ignition 是 Hardhat 的声明式部署系统,提供了更强大和可维护的部署方式:
核心概念:
-
模块化部署
- 使用模块定义部署逻辑
- 支持模块间的依赖关系
- 声明式配置而非命令式脚本
-
部署状态管理
- 自动跟踪部署状态
- 支持增量部署
- 避免重复部署
基本使用:
创建部署模块:
javascriptconst { buildModule } = require("@nomicfoundation/hardhat-ignition/modules"); module.exports = buildModule("TokenModule", (m) => { const token = m.contract("MyToken", ["MyToken", "MTK", 18]); return { token }; });
高级功能:
- 参数化部署
javascriptmodule.exports = buildModule("TokenModule", (m) => { const name = m.getParameter("name", "MyToken"); const symbol = m.getParameter("symbol", "MTK"); const token = m.contract("MyToken", [name, symbol, 18]); return { token }; });
- 依赖管理
javascriptmodule.exports = buildModule("DAppModule", (m) => { const token = m.contract("MyToken"); const sale = m.contract("TokenSale", [token]); // 调用 token 合约的函数 m.call(token, "transferOwnership", [sale]); return { token, sale }; });
- 现有合约使用
javascriptmodule.exports = buildModule("Module", (m) => { const existingContract = m.contractAt( "ExistingContract", "0x1234..." ); return { existingContract }; });
部署命令:
bash# 部署到本地网络 npx hardhat ignition deploy ./ignition/modules/Module.js # 部署到测试网 npx hardhat ignition deploy ./ignition/modules/Module.js --network sepolia # 使用参数部署 npx hardhat ignition deploy ./ignition/modules/Module.js --parameters name:CustomToken,symbol:CTK # 验证部署 npx hardhat ignition deploy ./ignition/modules/Module.js --verify
部署计划:
Ignition 会生成部署计划,显示将要执行的操作:
bashnpx hardhat ignition plan ./ignition/modules/Module.js
优势:
- 声明式配置更易理解
- 自动处理部署依赖
- 支持部署验证
- 更好的错误处理
- 适合复杂的多合约部署
- 便于团队协作