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

如何编写脚本实现Solidity合约自动化部署及前置操作(适配Remix)

解决方案:合约自动化部署+前置操作脚本(适配Remix+Ganache)

一、用Remix内置脚本搞定自动化部署+前置步骤

Remix自带JS脚本支持,直接写个脚本就能一键完成部署+新增航司/航班这些前置操作,不用每次手动重复操作:

  1. 在Remix文件管理器里新建deploy-script.js,把下面的代码贴进去(记得替换成你自己的合约名和函数名):
async function main() {
  // 拿到合约编译后的ABI和字节码(Remix自动处理编译流程)
  const artifact = await remix.call('compiler:getArtifact', 'FlightBooking.sol');
  const contractName = 'FlightBooking';

  // 连接Ganache节点,用第一个账户作为部署者
  const provider = new ethers.providers.JsonRpcProvider('http://127.0.0.1:8545');
  const signer = (await ethers.getSigners())[0];

  // 部署合约
  const factory = new ethers.ContractFactory(artifact.abi, artifact.bytecode, signer);
  const contract = await factory.deploy();
  await contract.deployed();

  console.log(`合约部署完成,地址:${contract.address}`);

  // 自动执行前置操作:新增航空公司和航班
  await contract.addAirline('AirChina', 'CA');
  console.log('已自动新增航空公司 AirChina');
  
  await contract.addFlight('CA123', 'BEIJING', 'SHANGHAI', 100, ethers.utils.parseEther('0.005'));
  console.log('已自动新增航班 CA123');
}

main().catch(err => console.error('脚本执行出错:', err));
  1. 切换到Remix的「Scripts」面板,选中这个脚本点击「Run」,执行完成后直接去「Deployed Contracts」里找到你的合约,就能直接测试购票函数了。

二、解决Truffle部署后Remix找不到合约的问题

Truffle部署的合约地址存在build/contracts下的JSON文件里,Remix不会自动识别,手动导入即可:

  • 部署完成后,找到build/contracts/FlightBooking.json
  • 在Remix里点击「Import」,选择这个JSON文件
  • 然后在「Deploy & Run Transactions」面板点击「At Address」,输入Truffle返回的合约地址,就能加载已部署的合约继续测试。

嫌Truffle麻烦的话,换Hardhat更省心,和Remix兼容性更好:

  1. 初始化Hardhat项目:npx hardhat init
  2. 编写部署脚本scripts/deploy.js:
const { ethers } = require("hardhat");

async function main() {
  const FlightBooking = await ethers.getContractFactory("FlightBooking");
  const contract = await FlightBooking.deploy();
  await contract.deployed();

  console.log(`合约地址:${contract.address}`);

  // 自动执行前置步骤
  await contract.addAirline('AirChina', 'CA');
  await contract.addFlight('CA123', 'BEIJING', 'SHANGHAI', 100, ethers.utils.parseEther('0.005'));
}

main().catch(error => {
  console.error(error);
  process.exitCode = 1;
});
  1. 在hardhat.config.js里配置localhost网络:
module.exports = {
  solidity: "0.8.19",
  networks: {
    localhost: {
      url: "http://127.0.0.1:8545"
    }
  }
};
  1. 部署到Ganache:npx hardhat run scripts/deploy.js --network localhost
  2. 回到Remix,要么直接输入合约地址点击「At Address」,要么导入Hardhat生成的artifacts/contracts/FlightBooking.sol/FlightBooking.json,就能加载合约继续测试。

三、另一种思路:用Remix测试套件批量执行

不想写脚本的话,用Remix的测试功能也行,把前置步骤放到beforeEach钩子中,每次跑测试自动完成部署+前置操作:

const { expect } = require("chai");

describe("FlightBooking", function () {
  let contract;

  beforeEach(async function () {
    // 部署合约
    const FlightBooking = await ethers.getContractFactory("FlightBooking");
    contract = await FlightBooking.deploy();
    await contract.deployed();

    // 自动执行前置操作
    await contract.addAirline('AirChina', 'CA');
    await contract.addFlight('CA123', 'BEIJING', 'SHANGHAI', 100, ethers.utils.parseEther('0.005'));
  });

  it("测试购票功能", async function () {
    const signer = (await ethers.getSigners())[0];
    await contract.bookFlight('CA123', { value: ethers.utils.parseEther('0.005') });
    const ticketCount = await contract.getTicketCount(signer.address);
    expect(ticketCount).to.equal(1);
  });
});

在Remix的「Testing」面板运行这个测试用例,改完合约后直接跑测试,全流程自动完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:03:23