September 7, 2024

Как автоматизировать развертывание смарт-контракта на Sonic с использованием Hardhat

В этом гайде я покажу, как с помощью Hardhat и простого Bash-скрипта можно автоматизировать процесс развертывания смарт-контракта на тестовой сети Sonic. Мы также обеспечим безопасное хранение приватного ключа в файле .env.

Шаг 1: Подготовка окружения

Для работы нам понадобятся Node.js и npm. Если они не установлены на вашей системе, их можно легко установить:

Установка Node.js и npm

Для Ubuntu:

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

Создайте файл 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

Пример содержимого .env:

SONIC_PRIVATE_KEY=your_private_key_here

Сохраните файл.

Шаг 4: Запуск скрипта

После того как приватный ключ добавлен, сделайте скрипт исполняемым и запустите его:

chmod +x deploy.sh
./deploy.sh

Что делает этот скрипт:

  1. Проверяет, существует ли файл .env, и предлагает создать его, если нет.
  2. Инициализирует проект Hardhat (если это ещё не было сделано).
  3. Устанавливает зависимости.
  4. Создает контракт и развертывает его на тестовой сети Sonic.

Шаг 5: Изменение приватного ключа

Чтобы изменить приватный ключ, просто отредактируйте файл .env:

nano .env

Замените строку с ключом:

SONIC_PRIVATE_KEY=your_new_private_key_here

После изменения приватного ключа запустите скрипт снова:

./deploy.sh

Заключение

Этот простой Bash-скрипт автоматизирует процесс развертывания смарт-контрактов в сети Sonic с использованием Hardhat. Приватный ключ хранится безопасно в файле .env, и процесс можно легко повторить, изменив ключ или сам контракт.


Преимущества:

  • Простота в использовании и настройке.
  • Безопасность хранения приватных ключей.
  • Полная автоматизация процесса развертывания.

Попробуйте этот скрипт и наслаждайтесь автоматическим развертыванием смарт-контрактов!