Развертывание смарт-контракта в Ethereum — это загрузка скомпилированного кода в сеть блокчейна с помощью подписанной транзакции. После подтверждения транзакции сетью контракт получает уникальный адрес, становится доступным всем и выполняется в точности так, как написан.

Поскольку транзакции в Ethereum необратимы, а код нельзя просто переписать после развертывания, крайне важно безопасно освоить этот процесс в тестовой сети. В этом руководстве показано, как написать, скомпилировать, развернуть и проверить смарт-контракт с помощью Remix IDE и тестовой сети Sepolia.

Что понадобится перед началом

Чтобы пройти это руководство, не тратя настоящие деньги, подготовьте три вещи:

  1. Web3-кошелёк: установите расширение для браузера, например MetaMask.

  2. Отдельный тестовый аккаунт: создайте в кошельке новый аккаунт, предназначенный исключительно для разработки и тестирования. Никогда не используйте реальные средства с тестовыми ключами.

  3. Тестовые ETH: в Ethereum используются тестовые сети (тестнеты), которые воспроизводят условия основной сети, но работают с бесплатными тестовыми токенами. Вам понадобится небольшое количество ETH Sepolia, которое можно получить через онлайн-кран.

Шаг 1. Напишите и скомпилируйте смарт-контракт

Самый быстрый способ развернуть первый контракт — воспользоваться Remix IDE, средой разработки с открытым исходным кодом, работающей в браузере и поддерживаемой сообществом Ethereum.

1. Откройте Remix и создайте файл

Перейдите на remix.ethereum.org. На левой боковой панели в разделе File Explorer найдите папку contracts и создайте файл с именем Storage.sol.

2. Добавьте код Solidity

Вставьте в редактор простой автономный контракт:

  • Идентификатор лицензии SPDX: указывает лицензию с открытым исходным кодом, регулирующую использование кода.

  • pragma solidity: задаёт требуемую версию компилятора.

  • Функции get и set: позволяют пользователям изменять сохранённое целое число и читать его.

3. Скомпилируйте код

  1. Нажмите вкладку Solidity Compiler на левой боковой панели (значок в виде ромба Ethereum с фигурными скобками компилятора).

  2. Выберите версию компилятора, соответствующую строке pragma (например, 0.8.20).

  3. Нажмите Compile Storage.sol.

На значке появится зелёная галочка. Компилятор преобразует читаемый человеком код Solidity в два результата:

  • Байт-код: необработанные шестнадцатеричные инструкции, которые выполняет виртуальная машина Ethereum (EVM).

  • ABI (Application Binary Interface): файл JSON, определяющий, как внешние приложения (например, веб-интерфейсы) взаимодействуют с вашим контрактом.

Шаг 2. Настройка тестовой среды

Для транзакций в основной сети нужен настоящий Ether ($ETH ), а комиссии за газ могут значительно меняться. Прежде чем рассматривать развертывание в рабочей среде, всегда тестируйте контракты в публичной тестовой сети.

1. Переключите MetaMask на тестовую сеть Sepolia

  1. Откройте MetaMask и нажмите на переключатель сетей в левом верхнем углу.

  2. Включите параметр «Показывать тестовые сети».

  3. Выберите Sepolia.

2. Получите тестовые ETH для Sepolia

Для развертывания смарт-контракта нужен газ даже в тестовой сети. Чтобы получить бесплатные тестовые токены:

  • Воспользуйтесь публичным краном Sepolia (например, Google Cloud Web3 Faucet или Alchemy Sepolia Faucet).

  • Укажите публичный адрес своего кошелька и отправьте запрос.

  • Прежде чем продолжить, убедитесь, что на вашем балансе Sepolia появились полученные тестовые ETH.

Шаг 3. Развертывание контракта с помощью Remix

Теперь, когда контракт скомпилирован, а на кошельке есть средства для тестовой сети, можно отправить транзакцию развертывания.

1. Подключите Remix к MetaMask

  1. В Remix нажмите вкладку Deploy & Run Transactions на левой боковой панели.

  2. В раскрывающемся списке ENVIRONMENT выберите Injected Provider - MetaMask.

  3. MetaMask предложит подключиться. Выберите тестовый аккаунт и подтвердите подключение.

  4. Убедитесь, что идентификатор сети соответствует Sepolia, а рядом с адресом аккаунта отображается текущий баланс тестовой сети.

2. Отправьте транзакцию развертывания

  1. Убедитесь, что в раскрывающемся списке CONTRACT выбран SimpleStorage.

  2. Нажмите оранжевую кнопку Deploy.

  3. В MetaMask откроется окно транзакции с указанием:

    • Расчётной комиссии за газ (в тестовых ETH).

    • Общей стоимости транзакции.

  4. Нажмите Confirm.

Через несколько секунд транзакция подтвердится в блокчейне. В консоли Remix внизу появится зелёная галочка, а контракт отобразится в разделе Deployed Contracts в нижней части боковой панели.

Шаг 4. Взаимодействие с развернутым контрактом

Разверните экземпляр контракта в разделе Deployed Contracts в Remix:

  • Синие кнопки (get): соответствуют функциям только для чтения (view). Нажатие get запрашивает текущее состояние, хранящееся в блокчейне, не расходуя газ и не отправляя транзакцию.

  • Оранжевые кнопки (set): соответствуют функциям, изменяющим состояние. Введите число (например, 42) в поле рядом с set и нажмите кнопку. MetaMask откроет окно, где нужно будет подписать транзакцию и заплатить небольшую комиссию за газ, чтобы обновить состояние.

Шаг 5. Верификация контракта на Etherscan

После развертывания контракта обозреватель блоков показывает только необработанный скомпилированный байт-код. Пользователи не смогут узнать, что именно делает контракт, пока вы не верифицируете его и не опубликуете исходный код.

  1. Скопируйте адрес только что развернутого контракта из Remix.

  2. Перейдите на sepolia.etherscan.io и вставьте адрес в строку поиска.

  3. Нажмите вкладку Contract, затем выберите Verify and Publish.

  4. Настройте параметры верификации:

    • Тип компилятора: один файл (или стандартный ввод JSON).

    • Версия компилятора: точная версия, использованная при компиляции (например, v0.8.20).

    • Тип лицензии открытого исходного кода: MIT.

  5. Нажмите Continue, вставьте точный код SimpleStorage.sol в текстовое поле и отправьте его.

После верификации рядом с вкладкой Contract появится зелёная галочка. Теперь любой пользователь сможет просмотреть исходный код Solidity, изучить ABI и вызывать функции Read Contract и Write Contract прямо через Etherscan.

За пределами Remix: инструменты для рабочей среды

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

Безопасное хранение приватных ключей

При переходе на инструменты командной строки:

  • Никогда не прописывайте приватные ключи непосредственно в скриптах.

  • Храните ключи в файлах .env и добавьте .env в .gitignore, прежде чем отправлять какой-либо код в публичные репозитории.

  • Для развертывания в основной сети используйте аппаратные кошельки (например, Ledger) или шифрование хранилища ключей паролем, а не храните приватные ключи в открытом виде.

Распространённые ошибки при развертывании

  • Закончился газ: если развертывание завершается ошибкой Out of Gas, проверьте логику конструктора контракта на наличие бесконечных циклов или слишком больших массивов.

  • Ошибки в параметрах конструктора: если при создании контракта нужно указать аргументы (например, адрес владельца или название токена), их неправильная передача приведёт к отмене транзакции развертывания.

  • Потеря адреса развернутого контракта: всегда сохраняйте адрес, полученный из квитанции о транзакции. Если закрыть браузер, не сохранив его, придётся найти контракт через обозреватель блоков по адресу кошелька.

Часто задаваемые вопросы

Сколько стоит развертывание в основной сети Ethereum?

Стоимость в основной сети зависит от двух факторов: размера байт-кода контракта и текущих цен на газ в сети (измеряемых в Gwei). Развертывание простого контракта может стоить от 10 до 40 долларов, а сложных протоколов DeFi — несколько сотен долларов в периоды высокой загрузки сети. Развертывание в тестовых сетях полностью бесплатное.

Можно ли изменить смарт-контракт после его развертывания?

Нет. Смарт-контракты по своей природе неизменяемы. Если после развертывания обнаружится ошибка, нужно развернуть новый контракт и перенести пользователей или данные. В крупных проектах используют обновляемые прокси-шаблоны (например, ERC-1967), которые направляют вызовы к новым контрактам с логикой, сохраняя состояние. Однако изменить сам байт-код нельзя.

Нужно ли запускать полноценный узел Ethereum для развертывания?

Нет. Существуют сервисы удалённого вызова процедур (RPC), которые взаимодействуют с сетью от вашего имени. Когда вы используете Remix с MetaMask, MetaMask автоматически обрабатывает RPC-подключение.