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

什么是 Hardhat Ignition 及其使用方法?

2月21日 15:59

Hardhat Ignition 是 Hardhat 的声明式部署系统,提供了更强大和可维护的部署方式:

核心概念:

  1. 模块化部署

    • 使用模块定义部署逻辑
    • 支持模块间的依赖关系
    • 声明式配置而非命令式脚本
  2. 部署状态管理

    • 自动跟踪部署状态
    • 支持增量部署
    • 避免重复部署

基本使用:

创建部署模块:

javascript
const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules"); module.exports = buildModule("TokenModule", (m) => { const token = m.contract("MyToken", ["MyToken", "MTK", 18]); return { token }; });

高级功能:

  1. 参数化部署
javascript
module.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 }; });
  1. 依赖管理
javascript
module.exports = buildModule("DAppModule", (m) => { const token = m.contract("MyToken"); const sale = m.contract("TokenSale", [token]); // 调用 token 合约的函数 m.call(token, "transferOwnership", [sale]); return { token, sale }; });
  1. 现有合约使用
javascript
module.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 会生成部署计划,显示将要执行的操作:

bash
npx hardhat ignition plan ./ignition/modules/Module.js

优势:

  • 声明式配置更易理解
  • 自动处理部署依赖
  • 支持部署验证
  • 更好的错误处理
  • 适合复杂的多合约部署
  • 便于团队协作
标签:Hardhat