Как написать и развернуть первый смарт‑контракт на Solidity
Solidity — это язык программирования для смарт‑контрактов в сети Ethereum. Он статически типизирован и ориентирован на объекты. В языке используется семантическая схема версионирования X.Y.Z; небольшие исправления приходят в патч‑версиях (Z), а обратимо несовместимые изменения — в минорных релизах (Y).
В этом руководстве вы:
- создадите файл helloWorld.sol и вставите базовый контракт;
- скомпилируете его в Remix и развернёте на локальной среде тестирования;
- получите практические советы по отладке и безопасности;
- увидите альтернативы Remix и чек‑листы для ролей.
Что нужно знать перед началом
- Solidity: язык для определения логики смарт‑контрактов в Ethereum.
- Remix: веб‑IDE, удобна для быстрого прототипирования и обучения.
- Смарт‑контракт: программа, выполняющаяся на блокчейне; операции записываются в транзакции и могут стоить газ.
Коротко: установите Remix (он доступен в браузере), создайте файл с расширением .sol и следуйте шагам ниже.
Быстрые шаги
- Откройте Remix в браузере.
- Нажмите Create New File и создайте helloWorld.sol.
- Вставьте пример кода (ниже).
- Нажмите Solidity compiler → Compile helloWorld.sol.
- Перейдите в Deploy & run transactions и нажмите Deploy.
Пример: первый контракт
Создайте файл helloWorld.sol и вставьте этот код точно как есть:
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.1;
contract FirstContract {
uint var1;
function set(uint x) public {
var1 = x;
}
function get() public view returns (uint) {
return var1;
}
}Разбор по строкам:
- Первая строка — SPDX‑лицензия. В примере указана GPL‑3.0; можно заменить на MIT или другую открыто‑лицензию в зависимости от ваших требований.
- pragma solidity ^0.8.1; — ограничение версий компилятора: любое значение >=0.8.1 и <0.9.0. Это предотвращает неожиданное поведение при использовании несовместимых компиляторов.
- contract FirstContract { … } — контракт похож на класс в других ООП‑языках.
- uint var1; — состояние контракта: беззнаковое целое, хранящееся в состоянии блокчейна.
- function set(uint x) public { var1 = x; } — публичный сеттер: сохраняет значение в состояние контракта (генерирует транзакцию при вызове).
- function get() public view returns (uint) { return var1; } — публичный геттер: чтение состояния без модификации (не требует газа при локальном вызове).
Важно: public означает, что функцию сможет вызвать любой адрес или другой контракт. view помечает функцию как только для чтения.
Компиляция в Remix
- Нажмите кнопку Solidity compiler в левом меню.
- Выберите версию компилятора, совместимую с pragma (например 0.8.x).
- Нажмите Compile helloWorld.sol и исправьте ошибки, если они появятся.
Советы при ошибках компиляции:
- Проверьте pragma и версию компилятора.
- Убедитесь, что файл сохранён и имеет расширение .sol.
- Читайте текст ошибок: часто указываются строка и причина (тип, отсутствие точки с запятой и т. п.).
Развёртывание и тестирование
- Перейдите в секцию Deploy & run transactions.
- Выберите окружение (по умолчанию JavaScript VM — локальная симуляция, без gas‑платежей).
- Убедитесь, что имя контракта отображается правильно, нажмите Deploy.
После развёртывания вы увидите интерфейс контракта с кнопками set и get. Вызов set создаст транзакцию (если вы используете сеть с реальным газом, она будет стоить ETH), а get вернёт текущее значение var1.
Типичные ошибки и как их исправить
- Несовместимость версии компилятора: проверьте pragma и поставьте нужный компилятор.
- Ошибка типов (type error): убедитесь, что используемые типы совпадают (например, uint vs int).
- Неопределённая функция при вызове: проверьте область видимости (public/internal) и правильность имени.
- Ошибки доступа к состоянию: чтение через view не будет менять состояние — используйте транзакции для модификации.
Контрольный приём: при первой отладке работайте в JavaScript VM, затем переносите тесты в локальную сеть или тестнет.
Альтернативы Remix и когда их использовать
- Hardhat — рекомендуемый инструмент для сложных проектов, поддерживает тестирование (Mocha/Chai), скрипты миграции и плагины.
- Truffle — классический фреймворк для разработки и развёртывания с набором инструментов миграции и тестирования.
- Foundry — быстрый инструмент на Rust для тестирования и сборки, подходит для производительных CI‑процессов.
- VS Code + расширение Solidity — удобно для редактирования локально, интеграции с Git и линтерами.
Remix отлично подходит для обучения и прототипирования. Для CI/CD и сложной архитектуры смарт‑контрактов лучше использовать Hardhat/Foundry.
Чек‑листы по ролям
Чек‑лист для разработчика:
- pragma указан и совместим с версии компилятора
- объявлены лицензии (SPDX)
- минимальные права доступа для функций
- добавлены события для важных действий
- покрытие тестами основных сценариев
Чек‑лист для аудитора:
- отсутствие переполнений/underflow (в новых версиях Solidity защита встроена)
- проверены точки доступа и управление правами
- обработаны все возможные входные данные и граничные случаи
- логика без зависимости от внешнего состояния без проверки
- наличие тестов интеграции и симуляция атак
Факто‑бокс
- Язык: Solidity — статически типизированный язык для EVM (Ethereum Virtual Machine).
- Версионирование: семантическое X.Y.Z (например 0.8.1).
- Инструменты: Remix (онлайн), Hardhat, Truffle, Foundry, VS Code + плагины.
Критерии приёмки
- Контракт компилируется без ошибок под указанную версию компилятора.
- Контракт разворачивается в JavaScript VM и выполняет set/get корректно.
- Для реального развёртывания присутствуют автоматические тесты и проверка безопасности.
Краткий глоссарий
- Смарт‑контракт: код, выполняющийся на блокчейне и реагирующий на транзакции.
- Gas: плата за выполнение операций в Ethereum.
- Тестнет: сеть для тестирования без использования реальных средств.
Резюме
Вы написали и развернули базовый контракт на Solidity в Remix. Дальше: добавьте тесты, изучите управление правами и обработку ошибок, попробуйте переносить проект в Hardhat или Foundry для более серьёзной разработки и CI.
Важно: всегда проводите аудит критичных контрактов и тщательно тестируйте взаимодействие с внешними контрактами и пользовательским вводом.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone