В следующем посте мы узнаем, как развернуть и верифицировать смарт-контракт в тестовой сети Rinkeby с помощью hardhat.
ПРИМЕЧАНИЕ: Rinkeby скоро будет устаревшим, нажмите здесь, если вы хотите узнать больше о нем, в любом случае этот пример может работать для любого другого тестнета, например Goerli, Kovan и т.д.
Что такое Hardhat?
Согласно официальной документации, Hardhat — это среда разработки для программного обеспечения Ethereum. Она состоит из различных компонентов для редактирования, компиляции, отладки и развертывания ваших смарт-контрактов и dApps, которые работают вместе, создавая полноценную среду разработки.
Необходимые условия
- Установленный Node.js
- Кошелек Metamask
- API-ключ Infura
- Учетная запись Etherscan
- У вас есть немного средств Rinkeby в вашем кошельке, в случае необходимости вы можете использовать этот кран
Создание нашего проекта
- откройте терминал и введите следующие команды
- mkdir hardhat-tutorial
- cd hardhat-tutorial
- npm init —y
- Откройте проект в удобном для вас редакторе кода
Зависимости
- dotenv
- hardhat
- @nomiclabs/hardhat-etherscan
- @nomicfoundation/hardhat-toolbox
Для установки зависимостей перейдите в папку проекта, откройте терминал и введите следующие команды:
npm i dotenv
npm i hardhat --save-dev hardhat @nomiclabs/hardhat-etherscan @nomicfoundation/hardhat-toolbox
Теперь выполните следующую команду
npx hardhat
Вы можете использовать опцию JavaScript для этого примера
Структура файла проекта
hardhat-tutorial/
├── contracts/
├── node_modules/
├── scripts/
├── test/
├── .env
├── hardhat.config.js
└── package.json
Оглавление
- Настройка нашего файла .env
- Настройка hardhat.config.js
- Создание контракта для развертывания
- Сценарий развертывания
- Развертывание и проверка
- Заключение
1. Настройка нашего файла .env
Давайте создадим файл .env
, если вы еще этого не сделали, и откроем его.
Нам нужно будет установить следующие переменные:
INFURA_API_KEY = your infura api key
METAMASK_ACCOUNT = your metamask account
ETHERSCAN_API_KEY = your etherscan api key
Если вы не знаете, как получить учетную запись Metamask, просто выполните следующие действия:
- Откройте расширение браузера metamask, нажмите на 3 точки.
- Нажмите на Детали учетной записи
- Нажмите на Экспорт закрытого ключа
- Наконец, введите свой пароль
2. Настройка файла hardhat.config.js
Сначала нам нужно настроить конфигурационный файл, поэтому давайте откроем hardhat.config.js
, вы увидите что-то похожее на это
require("@nomicfoundation/hardhat-toolbox");
require("@nomiclabs/hardhat-etherscan");
module.exports = {
solidity: "0.8.9",
};
Нам нужно указать сети, которые мы хотим использовать, в данном примере мы будем использовать только rinkeby.
require("@nomicfoundation/hardhat-toolbox");
require("@nomiclabs/hardhat-etherscan");
//dotenv
require("dotenv").config();
module.exports = {
solidity: "0.8.9",
networks: {
rinkeby: {
url: `https://rinkeby.infura.io/v3/${process.env.INFURA_API_KEY}`,
accounts: [`${process.env.METAMASK_ACCOUNT}`]
}
},
etherscan: {
apiKey: process.env.ETHERSCAN_API_KEY
}
};
3. Создание контракта для развертывания
Для этого примера мы будем использовать контракт Dummiy под названием Greeter.sol, поэтому давайте откроем его.
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;
import "hardhat/console.sol";
contract Greeter {
string public greeting = 'Hello World';
function setGreeting(string memory _greeting) public {
console.log("Changing greeting from '%s' to '%s'", greeting, _greeting);
greeting = _greeting;
}
}
4. Скрипт развертывания
Перейдите в папку scripts и откройте deploy.js, удалите все внутри.
- Сначала потребуем эфиры из hardhat.
- Затем создадим функцию, которая будет выполняться при выполнении скрипта
- мы будем использовать ethers.getSigners() для получения объекта с информацией о нашем счете ethereum
- затем с помощью getContractFactory() мы абстрагируем информацию о контракте, в данном случае Greeter.sol
- мы развернем эту информацию с помощью deploy().
- Наконец, мы ждем, пока контракт будет развернут, и получаем адрес контракта.
const { ethers } = require("hardhat");
async function main(){
const [deployer] = await ethers.getSigners();
console.log("Deploying contracts with the account: ", deployer.address);
const DummyContract = await ethers.getContractFactory("Greeter");
const dummyContract = await DummyContract.deploy();
await dummyContract.deployed();
console.log("DummyContract deployed to: ", dummyContract.address);
}
main()
.then(() => process.exit(0))
.catch(error => {
console.error(error);
process.exit(1);
})
5. Развертывание и проверка
Наконец, мы выполним следующие команды для развертывания и проверки нашего контракта.
npx hardhat run scripts/deploy.js --network rinkeby
вы получите что-то похожее на это:
DummyContract deployed to: 0x5c2E1BD82EDC0695cbA5AE64dA7aE34f073E167C
затем для проверки контракта введите следующую команду:
адрес, используемый в следующей команде, будет значением, которое вы ранее получили из консоли.
npx hardhat verify --network rinkeby 0x5c2E1BD82EDC0695cbA5AE64dA7aE34f07
В конце вы получите сообщение, подобное этому:
Successfully verified contract Greeter on Etherscan.
https://rinkeby.etherscan.io/address/0x5c2E1BD82EDC0695cbA5AE64dA7aE34f073E167C#code
Теперь, если вы перейдете по этой ссылке, вы сможете увидеть ваш контракт, а также код.
6. Заключение
Мы узнали, как развернуть и проверить смарт-контракт с помощью Hardhat.
Я очень надеюсь, что вы смогли следовать этому посту без каких-либо проблем, в противном случае я прошу прощения, пожалуйста, оставьте мне свои сомнения или комментарии.
Если вы ищете должность разработчика блокчейна или что-то другое, связанное с контентом, вам стоит заглянуть на сайт codenjobs.
Вы также можете посетить испанскую версию этого поста
Вы можете связаться со мной по telegram, если вам нужно нанять Full Stack разработчика.
Вы также можете добавить меня в Discord Appu#9136.
Спасибо за ваше время.