10 методов развертывания Hardahat-Waffle с LoadFixture в вашем Ethereum DApp

Развертывание смарт-контрактов и их тестирование в контролируемой среде — важнейший аспект разработки Ethereum. Hardhat и Waffle — популярные платформы для создания и тестирования децентрализованных приложений Ethereum (DApps). В этой статье мы рассмотрим 10 методов развертывания вашего DApp Hardhat-Waffle с использованием функции LoadFixture. Каждый метод будет сопровождаться примером кода, который поможет вам начать работу.

Метод 1: базовое развертывание

const { ethers } = require("hardhat");
async function main() {
  const MyContract = await ethers.getContractFactory("MyContract");
  const myContract = await MyContract.deploy();
  await myContract.deployed();
  console.log("MyContract deployed to:", myContract.address);
}
main();

Метод 2: развертывание с аргументами конструктора

const { ethers } = require("hardhat");
async function main() {
  const MyContract = await ethers.getContractFactory("MyContract");
  const myContract = await MyContract.deploy("Hello, World!");
  await myContract.deployed();
  console.log("MyContract deployed to:", myContract.address);
}
main();

Метод 3: развертывание с пользовательским лимитом газа

const { ethers } = require("hardhat");
async function main() {
  const MyContract = await ethers.getContractFactory("MyContract");
  const myContract = await MyContract.deploy({ gasLimit: 3000000 });
  await myContract.deployed();
  console.log("MyContract deployed to:", myContract.address);
}
main();

Метод 4. Развертывание с использованием собственной сети

const { ethers } = require("hardhat");
async function main() {
  const MyContract = await ethers.getContractFactory("MyContract");
  const myContract = await MyContract.deploy({ network: "rinkeby" });
  await myContract.deployed();
  console.log("MyContract deployed to:", myContract.address);
}
main();

Метод 5: развертывание с помощью пользовательской подписывающей стороны

const { ethers } = require("hardhat");
async function main() {
  const MyContract = await ethers.getContractFactory("MyContract");
  const signer = ethers.provider.getSigner();
  const myContract = await MyContract.connect(signer).deploy();
  await myContract.deployed();
  console.log("MyContract deployed to:", myContract.address);
}
main();

Метод 6: развертывание с помощью прокси-контракта

const { ethers } = require("hardhat");
async function main() {
  const MyContract = await ethers.getContractFactory("MyContract");
  const myContract = await upgrades.deployProxy(MyContract);
  await myContract.deployed();
  console.log("MyContract deployed to:", myContract.address);
}
main();

Метод 7. Развертывание с помощью LoadFixture

const { ethers, waffle } = require("hardhat");
const { loadFixture } = waffle;
async function deployWithFixture() {
  const fixture = await loadFixture(MyContractFixture);
  console.log("MyContract deployed to:", fixture.myContract.address);
}
async function MyContractFixture() {
  const MyContract = await ethers.getContractFactory("MyContract");
  const myContract = await MyContract.deploy();
  await myContract.deployed();
  return { myContract };
}
deployWithFixture();

Метод 8: развертывание с помощью LoadFixture и пользовательской инициализации

const { ethers, waffle } = require("hardhat");
const { loadFixture } = waffle;
async function deployWithFixture() {
  const fixture = await loadFixture(MyContractFixture);
  await fixture.myContract.initialize("Hello, World!");
  console.log("MyContract deployed to:", fixture.myContract.address);
}
async function MyContractFixture() {
  const MyContract = await ethers.getContractFactory("MyContract");
  const myContract = await MyContract.deploy();
  await myContract.deployed();
  return { myContract };
}
deployWithFixture();

Метод 9: развертывание с помощью LoadFixture и макетируемых зависимостей

const { ethers, waffle } = require("hardhat");
const { deployMockContract, loadFixture } = waffle;
async function deployWithFixture() {
  const fixture = await loadFixture(MyContractFixture);
  console.log("MyContract deployed to:", fixture.myContract.address);
}
async function MyContractFixture() {
  const MyContract = await ethers.getContractFactory("MyContract");
  const mockDependency = await deployMockContract(owner, IMyDependency.abi);
  const myContract = await MyContract.deploy(mockDependency.address);
  await myContract.deployed();
  return { myContract };
}
deployWithFixture();