Как автоматизировать развертывание смарт-контракта на Sonic с использованием Hardhat
В этом гайде я покажу, как с помощью Hardhat и простого Bash-скрипта можно автоматизировать процесс развертывания смарт-контракта на тестовой сети Sonic. Мы также обеспечим безопасное хранение приватного ключа в файле .env
.
Шаг 1: Подготовка окружения
Для работы нам понадобятся Node.js и npm. Если они не установлены на вашей системе, их можно легко установить:
Установка Node.js и npm
sudo apt update curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt install -y nodejs
Шаг 2: Создание Bash-скрипта для автоматизации
Создадим Bash-скрипт, который будет инициализировать проект Hardhat, устанавливать зависимости, создавать контракт и выполнять его развертывание.
Создание скрипта deploy.sh
nano deploy.sh
Вставьте следующий код в файл:
#!/bin/bash # Проверка наличия .env файла с приватным ключом if [ ! -f .env ]; then echo "Не найден файл .env. Создайте его и добавьте приватный ключ:" echo "SONIC_PRIVATE_KEY=your_private_key_here" > .env echo "Пример файла .env создан. Добавьте ваш приватный ключ и повторите запуск." exit 1 fi # Чтение приватного ключа из .env export $(grep -v '^#' .env | xargs) # Проверка наличия приватного ключа if [ -z "$SONIC_PRIVATE_KEY" ]; then echo "Приватный ключ не задан в файле .env. Добавьте его и повторите запуск." exit 1 fi # Если в директории уже существует Hardhat проект, пропускаем инициализацию if [ ! -f "hardhat.config.js" ]; then echo "Инициализация проекта Hardhat..." npx hardhat init sonic-deployment --force cd sonic-deployment else echo "Проект Hardhat уже инициализирован." fi # Установка необходимых зависимостей echo "Установка зависимостей..." npm install --save-dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-ethers ethers dotenv # Создание файла hardhat.config.js echo "Создание файла конфигурации hardhat.config.js..." cat <<EOL > hardhat.config.js require("@nomicfoundation/hardhat-toolbox"); require("dotenv").config(); const SONIC_PRIVATE_KEY = process.env.SONIC_PRIVATE_KEY; module.exports = { solidity: "0.8.24", networks: { sonic: { url: "https://rpc.testnet.soniclabs.com", accounts: [SONIC_PRIVATE_KEY] } } }; EOL # Создание контракта HelloWorld.sol echo "Создание контракта HelloWorld.sol..." mkdir -p contracts cat <<EOL > contracts/HelloWorld.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract HelloWorld { string public greeting = "Hello, Sonic!"; function setGreeting(string memory _greeting) public { greeting = _greeting; } } EOL # Создание скрипта для развертывания deploy.js echo "Создание скрипта для развертывания deploy.js..." mkdir -p scripts cat <<EOL > scripts/deploy.js async function main() { const HelloWorld = await ethers.getContractFactory("HelloWorld"); console.log("Deploying HelloWorld contract..."); const helloWorld = await HelloWorld.deploy(); await helloWorld.waitForDeployment(); console.log("HelloWorld deployed to:", helloWorld.target); } main().catch((error) => { console.error("Error during deployment:", error); process.exitCode = 1; }); EOL # Компиляция и развертывание контракта echo "Развёртывание контракта в сети Sonic..." npx hardhat run scripts/deploy.js --network sonic
Скрипт автоматизирует все шаги, включая инициализацию проекта, установку зависимостей и развертывание контракта.
Шаг 3: Настройка приватного ключа
Для безопасности приватный ключ хранится в файле .env
. Скрипт создаст пример этого файла, если его нет. Вам нужно добавить ваш реальный приватный ключ в этот файл:
nano .env
SONIC_PRIVATE_KEY=your_private_key_here
Шаг 4: Запуск скрипта
После того как приватный ключ добавлен, сделайте скрипт исполняемым и запустите его:
chmod +x deploy.sh ./deploy.sh
Что делает этот скрипт:
- Проверяет, существует ли файл
.env
, и предлагает создать его, если нет. - Инициализирует проект Hardhat (если это ещё не было сделано).
- Устанавливает зависимости.
- Создает контракт и развертывает его на тестовой сети Sonic.
Шаг 5: Изменение приватного ключа
Чтобы изменить приватный ключ, просто отредактируйте файл .env
:
nano .env
SONIC_PRIVATE_KEY=your_new_private_key_here
После изменения приватного ключа запустите скрипт снова:
./deploy.sh
Заключение
Этот простой Bash-скрипт автоматизирует процесс развертывания смарт-контрактов в сети Sonic с использованием Hardhat. Приватный ключ хранится безопасно в файле .env
, и процесс можно легко повторить, изменив ключ или сам контракт.
Преимущества:
- Простота в использовании и настройке.
- Безопасность хранения приватных ключей.
- Полная автоматизация процесса развертывания.
Попробуйте этот скрипт и наслаждайтесь автоматическим развертыванием смарт-контрактов!