Развертывание смарт-контрактов и их тестирование в контролируемой среде — важнейший аспект разработки 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();