You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用hardhat-deploy部署多智能合约并将首个地址传入第二个构造函数

hardhat-deploy 依赖合约部署解决方案

核心原理

hardhat-deploy本身支持按顺序执行部署脚本,且可以读取已部署合约的地址信息,你可以选择单脚本内顺序部署或者多脚本依赖式部署两种方案,以下是可直接复用的实现:

方案1:单脚本内顺序部署(适合合约关联度高的场景)

在项目deploy目录下新建部署脚本,直接按顺序执行两个合约的部署逻辑:

// deploy/00_deploy_related_contracts.js
module.exports = async ({ getNamedAccounts, deployments }) => {
  const { deploy } = deployments;
  const { deployer } = await getNamedAccounts();

  // 部署第一个合约
  const firstContract = await deploy("FirstContract", {
    from: deployer,
    args: [], // 填入第一个合约自身的构造函数参数,无参数则留空数组
    log: true,
  });
  console.log("FirstContract 已部署,地址:", firstContract.address);

  // 部署第二个合约,传入第一个合约的地址
  const secondContract = await deploy("SecondContract", {
    from: deployer,
    args: [firstContract.address], // 按构造函数参数顺序填入,这里直接传入第一个合约的地址
    log: true,
  });
  console.log("SecondContract 已部署,地址:", secondContract.address);
};

module.exports.tags = ["all", "relatedContracts"];

方案2:多脚本拆分部署(适合合约独立度高的场景)

拆分两个合约的部署脚本,通过dependencies字段声明依赖关系,确保执行顺序正确:

第一步:编写第一个合约的部署脚本

// deploy/01_deploy_first_contract.js
module.exports = async ({ getNamedAccounts, deployments }) => {
  const { deploy } = deployments;
  const { deployer } = await getNamedAccounts();
  await deploy("FirstContract", {
    from: deployer,
    args: [],
    log: true,
  });
};

module.exports.tags = ["FirstContract"];

第二步:编写第二个合约的部署脚本

// deploy/02_deploy_second_contract.js
module.exports = async ({ getNamedAccounts, deployments }) => {
  const { deploy, get } = deployments;
  const { deployer } = await getNamedAccounts();
  // 读取已部署的FirstContract信息
  const firstContract = await get("FirstContract");
  await deploy("SecondContract", {
    from: deployer,
    args: [firstContract.address],
    log: true,
  });
};

module.exports.tags = ["SecondContract"];
// 声明依赖,确保FirstContract部署完成后才会执行当前脚本
module.exports.dependencies = ["FirstContract"];

前置配置要求

需要先在hardhat.config.js中完成基础配置,示例如下:

require("@nomiclabs/hardhat-ethers");
require("hardhat-deploy");

module.exports = {
  solidity: "0.8.19", // 替换为你使用的solidity版本
  namedAccounts: {
    deployer: {
      default: 0, // 默认使用钱包第一个地址作为部署账号
    }
  },
  networks: {
    // 你需要部署的网络配置,比如本地测试网、Goerli、主网等
  }
};

执行部署

运行以下命令即可自动完成整个部署流程:
npx hardhat deploy --network 你要部署的网络名称

注意事项

  • 若第二个合约还有其他构造函数参数,按顺序放在args数组内即可
  • 部署完成后可以在项目deployments文件夹下对应网络的目录中,查看两个合约的地址、ABI等部署信息
  • 部署过程中log: true配置会自动打印部署进度和地址,不需要额外写console也能看到部署结果

内容的提问来源于stack exchange,提问作者jwarshack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:54:04