Содержание курса
Блокчейн и EVM глазами разработчика
8 уроков
1.
Что такое блокчейн как система хранения состояния
↗
2.
Аккаунты, ключи и адреса
↗
3.
Транзакции и подписи
↗
4.
Газ, комиссии и почему код стоит денег
↗
5.
EVM — виртуальная машина и её модель памяти
↗
6.
Что такое смарт-контракт и чем он не является
↗
7.
Ethereum, Polygon, L2 и совместимость EVM
↗
8.
Проект Passage — что мы построим
↗
Инструменты: Node.js, TypeScript 7, Hardhat 3, Viem
9 уроков
1.
Рабочее окружение и создание проекта Hardhat 3
↗
2.
hardhat.config.ts — конфигурация как код
↗
3.
TypeScript 7 в проекте контрактов
↗
4.
Первый контракт: Ledger
↗
5.
Сеть Hardhat: симуляция EVM локально
↗
6.
Viem: клиенты, транспорты, аккаунты
↗
7.
Тесты на node:test — первый набор
↗
8.
Solidity-тесты и forge-std
↗
9.
Секреты, keystore и подготовка к тестовым сетям
↗
Solidity: типы, состояние и функции
10 уроков
1.
Структура файла и контракта
↗
2.
Значимые типы: числа, адреса, байты, bool
↗
3.
Расположение данных: storage, memory, calldata
↗
4.
Функции: видимость, модификаторы состояния, возврат значений
↗
5.
Ошибки: revert, require, custom errors
↗
6.
События и логи
↗
7.
Отображения, массивы и структуры
↗
8.
Перечисления, пользовательские типы и время
↗
9.
Модификаторы и контроль доступа на уровне языка
↗
10.
Практика — EventRegistry, первый контракт проекта Passage
↗
Solidity: контракты, наследование, взаимодействие
9 уроков
1.
Наследование и abstract-контракты
↗
2.
Интерфейсы и ERC-165
↗
3.
Библиотеки и using for
↗
4.
Вызовы между контрактами и передача ETH
↗
5.
delegatecall, контекст исполнения и msg.sender
↗
6.
Создание контрактов из контрактов: new, CREATE и CREATE2
↗
7.
Кодирование ABI: abi.encode, abi.encodePacked, abi.decode
↗
8.
Приём ETH: receive и fallback
↗
9.
Практика — SeatMap и связь с EventRegistry
↗
Тестирование смарт-контрактов в Hardhat 3
9 уроков
1.
Стратегия тестирования контрактов
↗
2.
Фикстуры и изоляция состояния
↗
3.
Проверка ошибок, событий и балансов через viem.assertions
↗
4.
Управление временем и блоками
↗
5.
Impersonation, балансы и форк сети
↗
6.
Solidity-тесты глубже: cheatcodes и fuzz
↗
7.
Invariant-мышление и тесты свойств
↗
8.
Покрытие, gas-статистика и CI
↗
9.
Практика — полный тестовый набор EventRegistry
↗
Токены ERC-20
8 уроков
1.
Стандарт ERC-20 как интерфейс
↗
2.
Реализация на OpenZeppelin 5
↗
3.
approve / transferFrom и модель разрешений
↗
4.
SafeERC20 и токены с сюрпризами
↗
5.
ERC-20 Permit (EIP-2612)
↗
6.
Голосующий токен ERC20Votes
↗
7.
Ошибки проектирования токенов
↗
8.
Практика — MockUSD в проекте и faucet-скрипт
↗
NFT: ERC-721, ERC-1155 и метаданные
8 уроков
1.
ERC-721 как стандарт уникальных токенов
↗
2.
Реализация TicketNFT на OpenZeppelin
↗
3.
Метаданные и tokenURI
↗
4.
Расширения: Enumerable, Burnable, Pausable
↗
5.
Роялти ERC-2981
↗
6.
ERC-1155: мульти-токен
↗
7.
Проверка интерфейсов и совместимость с кошельками
↗
8.
Практика — TicketNFT в проекте
↗
Passage: события, тарифы и первичная продажа
10 уроков
1.
Доменная модель протокола
↗
2.
EventRegistry: тарифы, окна продаж и статусы
↗
3.
BoxOffice: покупка билета за MockUSD
↗
4.
Покупка с permit одной транзакцией
↗
5.
Отмена события и возвраты
↗
6.
Pausable и аварийный стоп продаж
↗
7.
Treasury: разделение выручки и pull-выплаты
↗
8.
Продажа за ETH через ценовой фид
↗
9.
Merkle-предпродажа для ранних покупателей
↗
10.
Практика — сквозной сценарий продажи
↗
Контроль доступа и архитектурные паттерны
8 уроков
1.
Ownable и Ownable2Step
↗
2.
AccessControl и роли
↗
3.
Проверки на границе контракта
↗
4.
Checks-Effects-Interactions и reentrancy
↗
5.
Pull-over-push и withdrawal pattern
↗
6.
Состояние как машина состояний
↗
7.
Разделение контрактов и минимальные привилегии
↗
8.
Практика — карта ролей Passage
↗
Подписи и off-chain авторизация
8 уроков
1.
ECDSA и восстановление адреса
↗
2.
EIP-712 — типизированные данные
↗
3.
CheckIn: подписанный пропуск на вход
↗
4.
Nonces и защита от replay
↗
5.
Permit, meta-транзакции и кто платит за газ
↗
6.
Merkle-доказательства как второй способ off-chain списков
↗
7.
Подписи со стороны клиента на TypeScript
↗
8.
Практика — полный сценарий входа на мероприятие
↗
Viem и TypeScript: клиентский слой
10 уроков
1.
Архитектура клиентского кода
↗
2.
ABI и типизация
↗
3.
getContract и типизированные обёртки
↗
4.
Чтение состояния: readContract, multicall, блоки
↗
5.
Запись: simulate, estimateGas, nonce, ошибки
↗
6.
События и логи на клиенте
↗
7.
Индексатор событий Passage
↗
8.
Аккаунты и подписи на клиенте
↗
9.
Сети и мультичейн
↗
10.
Практика — CLI-клиент Passage
↗
Деплой, окружения и верификация
8 уроков
1.
Hardhat Ignition — декларативный деплой
↗
2.
Модули Passage: Tokens, Passage, Governance
↗
3.
Секреты и конфиг-переменные
↗
4.
Деплой на Sepolia и Polygon Amoy
↗
5.
Верификация исходников
↗
6.
Детерминированные адреса и CREATE2
↗
7.
Пост-деплой: адреса, ABI и артефакты для клиентов
↗
8.
Практика — развёртывание Passage в тестовую сеть
↗
Газ и оптимизация
9 уроков
1.
Модель стоимости операций
↗
2.
Раскладка storage и упаковка
↗
3.
Кэширование storage в memory и локальные переменные
↗
4.
Циклы, массивы и ограничения по газу
↗
5.
Custom errors, события и immutable как экономия
↗
6.
Bitmap и компактные структуры
↗
7.
Оптимизатор компилятора и viaIR
↗
8.
Транзиентное хранилище и новые опкоды
↗
9.
Практика — оптимизация BoxOffice и TicketNFT
↗
Обновляемые контракты
8 уроков
1.
Почему и когда контракты обновляют
↗
2.
Прокси и delegatecall
↗
3.
Раскладка хранилища и коллизии
↗
4.
UUPS против Transparent
↗
5.
Инициализаторы вместо конструкторов
↗
6.
Деплой и обновление через Ignition и viem
↗
7.
Управление обновлениями: роли, таймлок, проверки
↗
8.
Практика — EventRegistry V1 → V2
↗
Вторичный рынок, платежи и оракулы
8 уроков
1.
Marketplace: дизайн вторичного рынка билетов
↗
2.
Реализация Marketplace
↗
3.
Роялти и комиссии на практике
↗
4.
Оракулы цен
↗
5.
Платежи в ETH: сдача, отказ получателя, учёт
↗
6.
Front-running, MEV и защита пользователя
↗
7.
Escrow и споры
↗
8.
Практика — рынок в проекте
↗
Governance и Timelock
8 уроков
1.
Зачем протоколу DAO
↗
2.
TimelockController
↗
3.
Governor на OpenZeppelin
↗
4.
Голосование и делегирование
↗
5.
Предложение изменения комиссии протокола
↗
6.
Обновление контракта через DAO
↗
7.
Мультиподпись и off-chain голосование обзорно
↗
8.
Практика — DAO в проекте
↗
Базовый аудит и безопасность
8 уроков
1.
Модель угроз протокола
↗
2.
Классические уязвимости — часть 1
↗
3.
Классические уязвимости — часть 2
↗
4.
Статический анализ и линтеры
↗
5.
Fuzz и invariant-тесты как инструмент аудита
↗
6.
Ревью кода и аудит-чеклист
↗
7.
Эксплуатационная безопасность
↗
8.
Практика — аудит Passage
↗
Интеграция, эксплуатация и итоговый проект
8 уроков
1.
Финальность, реорганизации и подтверждения
↗
2.
Backend-интеграция: API поверх контрактов
↗
3.
Индексаторы и данные для UI
↗
4.
Особенности Polygon и L2 на OP Stack
↗
5.
Account abstraction и смарт-аккаунты обзорно
↗
6.
Обновление зависимостей и версий компилятора
↗
7.
Документация протокола
↗
8.
Итоговая сборка Passage
↗