Что дальше: продвинутый Solidity
Базовый синтаксис освоен, рабочий контракт написан. Пора честно посмотреть, что отделяет учебный код от боевого, и куда ведёт следующий курс.
- честный список того, чего нашему краудфандингу пока не хватает;
- карта обучения дальше;
- анонс продвинутого курса и первое задание к нему.
7.1Чего мы ещё не касались
Наш контракт хорош для учёбы, но доверять ему чужие деньги в основной сети пока рано. Вот что осталось за кадром базового курса:
| Тема | Почему это важно |
|---|---|
| Наследование, интерфейсы, библиотеки | Переиспользование кода и взаимодействие контрактов между собой. |
| Стандарты токенов (ERC-20, ERC-721) | Язык, на котором «разговаривают» все кошельки и биржи. |
| Библиотека OpenZeppelin | Проверенные реализации Ownable, ReentrancyGuard, токенов - не пишите их сами. |
| Паттерны проектирования | Повторяющиеся решения: доступ, пауза, фабрики, обновляемость. |
| Оптимизация газа | В основной сети каждая операция стоит реальных денег. |
| Низкоуровневое: ABI, delegatecall, подписи | То, на чём держатся прокси, кошельки и мета-транзакции. |
7.2Карта обучения
Три курса идут по нарастанию: сначала вы научились писать, дальше научитесь проектировать, а в конце - ломать и защищать. Последний шаг совсем не для галочки: лучшие разработчики смарт-контрактов думают как взломщики. Желательно - раньше настоящих взломщиков.
7.3Анонс: продвинутый курс
В продвинутом курсе мы возьмём наш краудфандинг и доведём его до «боевого» вида, а затем с нуля спроектируем полноценное децентрализованное приложение - mini-DAO с собственным токеном управления, казной, предложениями и голосованием.
- наследование, интерфейсы, абстрактные контракты и библиотеки;
- стандарты токенов и библиотека OpenZeppelin;
- повторяющиеся паттерны: Ownable, AccessControl, Pausable, Pull Payments, Factory, прокси и обновляемость;
- оптимизация газа: упаковка в storage, calldata, unchecked, события вместо хранения;
- низкий уровень: ABI, call / delegatecall, хеши и подписи (EIP-712), create2;
- большой проект - собственное dApp от модели данных до логики голосования.
- Найдите в нашем контракте все места, где используется проверка прав, и подумайте, как бы вы вынесли её в отдельный базовый контракт
Ownable, от которого можно наследоваться. - Представьте, что кампаний должно быть много. Набросайте идею «фабрики», которая разворачивает новый
Crowdfundingпо запросу и хранит список всех созданных. - Прикиньте, какие переменные состояния можно было бы упаковать в одно 256-битное слово ради экономии газа.
Если контракт краудфандинга стал вам полностью понятен - вы готовы. Продолжение - в курсе «Продвинутый Solidity: паттерны и собственное dApp». Там учебный код превращается в инженерную практику.