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

基于Node.js调用Hardhat部署智能合约并传参的实现问询

实现方案

完全可以实现这个需求,以下是具体操作步骤:

1. 改造部署脚本为可导出函数

修改scripts/deploy.js,把原本直接执行的部署逻辑封装成可导出的异步函数,同时接收合约部署所需的参数:

const { ethers } = require("hardhat");

// 导出部署函数,接收Referral合约的部署参数
async function deployReferral(param1, param2, param3, param4) {
  // 获取合约工厂实例
  const Referral = await ethers.getContractFactory("Referral");
  // 传入参数部署合约
  const referral = await Referral.deploy(param1, param2, param3, param4);
  // 等待部署上链完成
  await referral.deployed();
  
  console.log(`Referral合约部署完成,地址:${referral.address}`);
  
  // 返回合约地址,供后续存储使用
  return referral.address;
}

// 保留原有的hardhat run执行入口(可选,不影响外部Node.js调用)
if (require.main === module) {
  deployReferral(0, 1, 2, 3)
    .then(() => process.exit(0))
    .catch((error) => {
      console.error(error);
      process.exit(1);
    });
}

// 导出函数,允许外部Node.js脚本调用
module.exports = { deployReferral };

2. 编写外部Node.js脚本触发部署并存储地址

创建一个新的Node.js脚本(比如trigger-deploy.js),引入部署函数,调用时传入自定义参数,再将合约地址存入目标存储介质:

const { deployReferral } = require("./scripts/deploy");
const fs = require("fs/promises");

async function main() {
  try {
    // 调用部署函数,传入自定义参数
    const contractAddress = await deployReferral(0, 1, 2, 3);
    
    // 示例:将地址存入本地JSON文件
    await fs.writeFile("./contract-address.json", JSON.stringify({
      referralAddress: contractAddress,
      deployedAt: new Date().toISOString()
    }, null, 2));
    
    console.log("合约地址已成功存入存储介质");
  } catch (error) {
    console.error("部署或存储失败:", error);
    process.exit(1);
  }
}

main();

3. 运行脚本触发部署

直接用Node.js执行这个脚本即可,无需通过npx hardhat run:

node trigger-deploy.js

关键说明

  • 不需要用exec捕获终端输出,直接通过函数返回值获取合约地址,逻辑更可靠
  • 部署函数的参数数量、类型可根据你的合约需求自由调整
  • 存储介质可替换为你需要的类型(比如MongoDB、Redis等),只需修改存储相关的代码逻辑
  • 确保hardhat.config.js已正确配置目标网络(本地Hardhat节点、测试网等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:22:13