Создание и деплой смарт-контракта Moonbeam используя hardhat
В данном документе мы расскажем как создать и задеплоить смарт-контракт Moonbeam используя локальную ноду, с помощью hardhat
1. Для запуска локальной ноды Moonbeam Development Node мы в нашем примере будем использовать docker. Подготовим наш сервер для использования докера :
sudo apt update
sudo apt install wget -y
wget -O get-docker.sh https://get.docker.com
sudo sh get-docker.sh
sudo apt install -y docker-compose
rm -f get-docker.sh
docker pull purestake/moonbeam:v0.14.2
docker run --rm --name moonbeam_development --network host \ purestake/moonbeam:v0.14.2 \ --dev
sudo apt install curl git
curl https://deb.nodesource.com/setup_12.x | bash -
sudo apt install nodejs
node --version
mkdir hardhat-dev && cd hardhat-dev
npm init --yes
npm install --save-dev hardhat
5. Создаем hardhat проект, на примере используются параметры по умолчанию. Вы можете выставить параметры которые нужны вам :
npx hardhat
npx hardhat compile
7. Теперь подготовим файлы для деплоя смарт контракта. Нам требуется файл конфига, файл скрит-деплоя и файл приватного ключа.
Сначала установим сеть в файл конфига:
nano hardhat.config.js
networks: { dev: { url: "http://127.0.0.1:9933", chainId: 1281, accounts: [privateKey] } }
!help Файл конфига должен выглядеть следующим образом :
require("@nomiclabs/hardhat-waffle"); // This is a sample Hardhat task. To learn how to create your own go to // https://hardhat.org/guides/create-task.html task("accounts", "Prints the list of accounts", async (taskArgs, hre) => { const accounts = await hre.ethers.getSigners(); for (const account of accounts) { console.log(account.address); } }); // You need to export an object to set up your config // Go to https://hardhat.org/config/ to learn more /** * @type import('hardhat/config').HardhatUserConfig */ const { privateKey } = require('./secrets.json'); module.exports = { solidity: "0.8.4", networks: { dev: { url: "http://127.0.0.1:9933", chainId: 1281, accounts: [privateKey] } } };
nano scripts/deploy.js
async function main() { // We get the contract to deploy const Greeter = await ethers.getContractFactory('Greeter'); console.log('Deploying...'); // Instantiating a new smart contract const greeter = await Greeter.deploy('Hi!'); // Waiting for the deployment to resolve await greeter.deployed(); console.log('Greeter deployed to:', greeter.address); } main() .then(() => process.exit(0)) .catch((error) => { console.error(error); process.exit(1); });
Создаем файл с приватным ключом от метамаска.
Ознакомится с ключами для разработки можете здесь .
nano secrets.json
{ "privateKey": "0x99b3c12287537e38c90a9219d4cb074a89a16e9cdb20bf85728ebd97c343e342" }
npx hardhat run scripts/deploy.js --network dev
Если видите такую картину, то вы не установили приватный ключ. Проверьте файл конфига и файл приватного ключа
Если видите такую картину, то вы пропустили аргумент в файле деплоя. В нашем примере это аргумент const greeter = await Greeter.deploy('Hi!');
https://docs.moonbeam.network/builders/get-started/moonbeam-dev/