Учебник Solidity для начинающих
Полный практический курс по программированию смарт-контрактов на Solidity для Ethereum. От устройства виртуальной машины EVM и газа до токенов ERC-20/ERC-721 и безопасности: reentrancy, контроль доступа, оракулы. Каждый урок — с ASCII-схемами исполнения и запускаемыми Python-врезками, повторяющими логику контрактов.
Курс «Solidity: смарт-контракты» состоит из 6 разделов и 18 уроков: Введение, EVM и первый контракт, Типы данных и переменные состояния, Функции, модификаторы и события, Маппинги, структуры и массивы, Токены: ERC-20 и ERC-721 и Безопасность смарт-контрактов. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Введение, EVM и первый контракт
- Что такое смарт-контракт и Ethereum
Объясняем, что такое смарт-контракт, чем Ethereum отличается от обычного бэкенда и зачем нужен блокчейн для исполнения кода.
- Устройство EVM: стек, память и хранилище
Разбираем три области данных EVM — stack, memory, storage — и почему понимание их различий критично для газа и корректности.
- Remix, первый контракт и деплой
Пишем, компилируем и деплоим первый контракт в Remix IDE, разбираем структуру файла Solidity и SPDX-лицензию.
- Что такое смарт-контракт и Ethereum
2 Типы данных и переменные состояния
- Числовые типы и арифметика без переполнения
Целые типы uint/int, фиксированный размер, и встроенная защита от переполнения в Solidity 0.8.x.
- Адреса, булевы значения и байты
Тип address и address payable, bool, bytes и bytes32, а также разница между фиксированными и динамическими байтами.
- Переменные состояния, видимость и константы
Storage-переменные, модификаторы видимости public/private/internal, ключевые слова constant и immutable и их влияние на газ.
- Числовые типы и арифметика без переполнения
3 Функции, модификаторы и события
- Функции: видимость и мутабельность
public/external/internal/private и view/pure/payable: как объявлять функции и что они могут делать с состоянием.
- Модификаторы доступа и require
Кастомные модификаторы, require/revert/custom errors и паттерн onlyOwner для контроля доступа.
- События и логи
emit, indexed-параметры, для чего нужны логи и как их читают фронтенд и индексаторы.
- Функции: видимость и мутабельность
4 Маппинги, структуры и массивы
- Маппинги: ключ-значение в блокчейне
mapping как основная структура хранения, отличия от хэш-таблицы, вложенные маппинги и почему по ним нельзя итерироваться.
- Структуры и перечисления
struct для группировки данных, enum для состояний, и комбинация struct + mapping как основной паттерн хранения сущностей.
- Массивы, циклы и проблема газа
Динамические и фиксированные массивы, push/pop, и почему циклы по растущим массивам опасны из-за лимита газа.
- Маппинги: ключ-значение в блокчейне
5 Токены: ERC-20 и ERC-721
- Стандарт ERC-20: что такое токен
Интерфейс ERC-20, функции transfer/balanceOf/approve, decimals и почему стандарт делает токены совместимыми.
- approve, transferFrom и allowance
Паттерн делегированного списания: как approve и transferFrom позволяют контрактам тратить ваши токены, и риск гонки allowance.
- ERC-721 и NFT
Невзаимозаменяемые токены: ownerOf, tokenId, метаданные tokenURI и чем NFT отличается от ERC-20.
- Стандарт ERC-20: что такое токен
6 Безопасность смарт-контрактов
- Reentrancy: атака и защита
Как работает атака повторного входа, паттерн checks-effects-interactions и модификатор nonReentrant.
- Контроль доступа и tx.origin
Ownable, ролевой доступ, и почему авторизация по tx.origin открывает фишинговую атаку.
- Арифметика, оракулы и чеклист аудита
Переполнение и unchecked, риски ценовых оракулов и манипуляции, и практический чеклист перед деплоем.
- Reentrancy: атака и защита