Как автоматизировать развертывание смарт-контракта на 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, и процесс можно легко повторить, изменив ключ или сам контракт.
Преимущества:
- Простота в использовании и настройке.
- Безопасность хранения приватных ключей.
- Полная автоматизация процесса развертывания.
Попробуйте этот скрипт и наслаждайтесь автоматическим развертыванием смарт-контрактов!