$ sudo teach IT
Модуль 7 из 7

Что дальше: продвинутый Solidity

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

В этом модуле
  • честный список того, чего нашему краудфандингу пока не хватает;
  • карта обучения дальше;
  • анонс продвинутого курса и первое задание к нему.

7.1Чего мы ещё не касались

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

Тема Почему это важно
Наследование, интерфейсы, библиотеки Переиспользование кода и взаимодействие контрактов между собой.
Стандарты токенов (ERC-20, ERC-721) Язык, на котором «разговаривают» все кошельки и биржи.
Библиотека OpenZeppelin Проверенные реализации Ownable, ReentrancyGuard, токенов - не пишите их сами.
Паттерны проектирования Повторяющиеся решения: доступ, пауза, фабрики, обновляемость.
Оптимизация газа В основной сети каждая операция стоит реальных денег.
Низкоуровневое: ABI, delegatecall, подписи То, на чём держатся прокси, кошельки и мета-транзакции.

7.2Карта обучения

Схема
Базовый курс
синтаксис + краудфандинг
Продвинутый курс
паттерны + своё dApp
Solidity Audit
уязвимости, взломы, тест

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

7.3Анонс: продвинутый курс

В продвинутом курсе мы возьмём наш краудфандинг и доведём его до «боевого» вида, а затем с нуля спроектируем полноценное децентрализованное приложение - mini-DAO с собственным токеном управления, казной, предложениями и голосованием.

Что будет в продвинутом курсе
  • наследование, интерфейсы, абстрактные контракты и библиотеки;
  • стандарты токенов и библиотека OpenZeppelin;
  • повторяющиеся паттерны: Ownable, AccessControl, Pausable, Pull Payments, Factory, прокси и обновляемость;
  • оптимизация газа: упаковка в storage, calldata, unchecked, события вместо хранения;
  • низкий уровень: ABI, call / delegatecall, хеши и подписи (EIP-712), create2;
  • большой проект - собственное dApp от модели данных до логики голосования.
Задание для разминки перед продвинутым курсом
  1. Найдите в нашем контракте все места, где используется проверка прав, и подумайте, как бы вы вынесли её в отдельный базовый контракт Ownable, от которого можно наследоваться.
  2. Представьте, что кампаний должно быть много. Набросайте идею «фабрики», которая разворачивает новый Crowdfunding по запросу и хранит список всех созданных.
  3. Прикиньте, какие переменные состояния можно было бы упаковать в одно 256-битное слово ради экономии газа.
Переход к следующему курсу

Если контракт краудфандинга стал вам полностью понятен - вы готовы. Продолжение - в курсе «Продвинутый Solidity: паттерны и собственное dApp». Там учебный код превращается в инженерную практику.