ru
Feedback
Solidity. Смарт контракты и аудит

Solidity. Смарт контракты и аудит

Открыть в Telegram

Обучение Solidity. Уроки, аудит, разбор кода и популярных сервисов

Больше
2 592
Подписчики
Нет данных24 часа
-17 дней
+430 день
Архив постов
⚡️⚡️⚡️ Менее 12 часов до закрытия продаж! ⚡️⚡️⚡️ Сегодня последний день продаж доступа на четвёртый модуль курса. Если опоздаете, то придется ждать следующего потока уже осенью или ещё позже! В этот раз собралась небольшая группа учеников, так как совсем не многие смогли дойти до сложных тем или вообще остаться в сфере web3 за полгода. Поэтому мы сможем дать еще больше внимания каждому ученику! В любой профессии легко начать, но продолжать могут только самые целеустремленные. Успейте занять свое место! Старт 5 февраля! #курс

Два дня до конца продаж 4 модуля На следующей неделе, уже с понедельника, стартует обучение на четвертом модуле нашего курса. В отличие от предыдущих модулей, где вы могли докупать предыдущие в момент запуска нового, купить доступ на 4 модуль не получится до осени, а может и позже. Потом будет перезапуск курса с самого начала и вам придется ждать, пока остальные ученики дойдут до этого уровня. Также если вы обучаетесь самостоятельно, то освоение темы storage, memory, calldata и также опкоды с assembly могут занять очень долгое время без должного объяснения. Тут даже хорошие разработчики тратят часы на освоение, поэтому очень важно научиться работать с ними под присмотром ментора или того, кто сможет правильно направить и указать на ошибки! Успейте зайти на 4 модуль! Осталось два дня продаж! Старт 5 февраля! #курс

Первые ученики уже на канале! Если вы только пришли с работы или учебы, то пост для вас! Сегодня старт продаж 4 модуля нашего курса! Если вы уже работали с темами прокси контрактов и подписями в Solidity, то сейчас у вас есть хорошая возможность еще лучше разобраться с работой storage, memory и calldata, а также понять как работают опкоды и assembly. В ру чатах и каналах мало кто может дать дельный совет по работе с низкоуровневым языком, а на курсе у вас будет возможность задать свой вопрос напрямую и получить ответ от преподавателя, который написал не один контракт с assembly! Продажи открыты только до конца недели! Успейте занять свое место! Программа и условия оплаты в посте выше. Старт 5 февраля! #курс

🥳🥳🥳 Открытие продаж курса: Модуль 4 🥳🥳🥳 Прошло уже достаточно времени после проведение первых трех модулей, многие ученики успели допройти весь материал и готовы идти дальше! Я не представляю, как некоторые пользователи в сети пишут, что можно выучить Solidity и стать разработчиком всего за месяц или два, ведь даже этот базовый курс уже рассчитан на 4 месяца обучения! А ведь еще куча всего! А мы уже с понедельника начинаем обучение на 4 модуле нашего курса! Готовы? Присоединяйтесь!   Сегодня я открываю продажи и начинаю добавлять участников в закрытый Телеграм канал. Как пройти запись и попасть на канал: 1. Оплачиваем курс по реквизитам ниже. 2. Скидываем мне в личные сообщения (@Zaevlad) чек об оплате или хеш транзакции; 3. После этого я добавляю Вас в закрытый канал модуля. Продажи будут открыты до конца этой недели! Реквизиты для оплаты: 1. Перевод на карту: 4276520014513846 Владилен Александрович З 2. Перевод на криптокошелек: 0x331d8654Ff5c314E2baDAAfA83Fdf635650a9E59 . Переводы необходимо делать в сети Polygon, в криптовалютах: USDT или USDC. Цена: 5000 рублей или 60 (USDT...) По всем вопросам можете писать в чат или личные сообщения. Программа курса. Старт 5 февраля! #курс

4-5 модули, перезапуск и планы Уже завтра стартуют продажи 4 модуля нашего курса, а пока я хочу поделиться некоторыми планами. Прежде всего, 4 модуль - это завершающая часть курса. Если вы прошли темы всех четырех модулей, то уже понимаете как работает язык Solidity, знаете, где брать информацию по нюансам и у вас достаточно ресурсов для дальнейшего самостоятельного обучения. Вы можете дальше изучать язык JavaScript, для получения профессии фронтенд разработчика, где вам потребуется изучить TypeScript, Hardhat, ethers.js, web.js и другие библиотеки для "связывания" контрактов с обычным сайтом. Либо начать изучать Foundry, чтобы писать продвинутые тесты. Да, я также говорил и о 5 модуле курса, где разбирались бы темы DeFi протоколов, их версий и интеграций, а также работа с оракулами, сложные паттерны и EIP стандарты, как например account abstraction. Но это уже скорее всего будет осенью, когда пройдет еще один поток курса. Кстати, о нем пару слов... Весной я планирую перезапустить обучение с нуля с 1 модуля. Я добавлю материал в программу, сделаю его еще более понятным (основываясь на вопросах и затруднениях первых учеников) и, скорее всего, еще более практическим. На канале же дальше будут идти общетематические посты про Solidity, тестирование и все новое, что появляется в сети. Приятного дня и позитивного обучения! #курс

Assembly, yul и opcodes на 4 модуле Я встречал на многих курсах и обучениях, что эти темы дают чуть ли не в начале всего. Типа: "Посмотрите, как работает EVM, что использует и это все может быть в контракте". Я был слегка не согласен с этим и на своем курсе решил подождать до 4 модуля с этими темами, когда ученики уже освоят обычный Solidity, получат навыки написания контрактов и будут готовы воспринимать более сложную информацию. Признаться честно, мне и сейчас порой сложно работать с низкоуровневым языком, а аудировать его сложнее. Для меня эти операции все еще вызывают желание закрыть окно редактора кода и уйти из web3... Именно по этой причине на 4 модуле будет второй преподаватель @elawbek, который прекрасно понимает все детали работы storage, memory, calldata, opcodes и может с нуля писать сложные функции. Например, в одной из библиотек, что он лично писал, есть такая функция:

function pow(uint256 a, uint256 b) pure returns (uint256 result) {
    /// @solidity memory-safe-assembly
    assembly {
        switch b
        case 0x00 {
            result := 0x01
        }
        case 0x01 {
            result := a
        }
        default {
            switch a
            case 0x00 {
                // do nothing, result already zero
            }
            case 0x01 {
                result := 0x01
            }
            case 0x02 {
                if gt(b, 0xff) {
                    mstore(0x00, 0x35278d12)
                    revert(0x1c, 0x04)
                }
                result := shl(b, 0x01)
            }
            default {
                switch or(
                    and(lt(a, 0x0b), lt(b, 0x4e)),
                    and(lt(a, 0x133), lt(b, 0x20))
                )
                case 0x01 {
                    result := exp(a, b)
                }
                default {
                    let maxUint256 := not(0x00)
                    let helper := 0x01

                    for {
                        let one := helper
                    } one {

                    } {
                        if gt(a, div(maxUint256, a)) {
                            mstore(0x00, 0x35278d12)
                            revert(0x1c, 0x04)
                        }

                        switch and(b, one)
                        case 0x00 {
                            b := shr(one, b)
                        }
                        case 0x01 {
                            helper := mul(a, helper)
                            b := shr(one, b)
                        }

                        a := mul(a, a)

                        if gt(b, one) {
                            continue
                        }

                        break
                    }

                    if gt(helper, div(maxUint256, a)) {
                        mstore(0x00, 0x35278d12)
                        revert(0x1c, 0x04)
                    }

                    result := mul(helper, a)
                }
            }
        }
    }
}
Она вызовет "взрыв мозга" даже у бывалого разработчика. Да, для такого уровня придется потратить немалое количество часов практики с assembly, а на курсе мы научим вас основам и вы сможете сами начать разбираться в этих самых опкодах и читать более простые функции. Это будет еще один крутой месяц обучения! До старта продаж уже совсем немного времени! #курс

Сложные темы 4 модуля Уже достаточно долгое время мы пишем 4 модуль курса, стараясь сделать его более простым и понятным для учеников. Огромное количество уязвимостей постоянно находится на конкурсных аудитах по каждой из этих тем. Если зайти на проект Solodit (тот, который собирает отчеты с аудитов) и поискать сколько багов было найдено, то мы увидим, что: - 594 проблемы в контрактах с подписями, - 513 репортов по теме прокси, - 160 не правильно использовали assembly, - 37 ошиблись с Merkle tree, И это количество постоянно растет! После последних трех конкурсов на code4rena, с уверенностью могу сказать, что прибавятся еще репорты связанные с неправильной работой с EIP-712! Нашей задачей на 4 модуль будет научить вас не только, как правильно работать с этими темами, но и дать практические навыки по поиску уязвимостей, чтобы вы могли просматривать свой проект после его завершения и делать его еще более безопасным. В итоге, у нас будет 17 уроков и 3 мини аудита реальных протокола, как финальный практикум! 2 преподавателей будут отвечать на ваши вопросы по темам уроков. В этот раз стоимость чуть выше: 5000 рублей или 60 USDT. Время запуска зависит от количества учеников, которые продолжат обучение. Если вас будет мало, то придется еще немного подождать. А так, сможем начать уже совсем скоро! #курс

4 модуль и результат опроса Интересная статистика опроса получилась в этот раз: 32 - за, 35 - пропускают (на момент написания поста). Полагаю, это из-за того, что 4 модуль проводится с достаточно большим перерывом и многие участники уже успели пройти эти темы самостоятельно. Если у кого-то не так, буду рад узнать в комментариях. А для тех, кто решился пойти, будет больше преимуществ и возможностей задавать вопросы в небольшой группе. Обучение в этом случае пойдет чуть более интенсивнее и эффективнее! Я также хочу узнать, какие темы для модулей или канала вам было бы интересно изучить? За полтора года ведения канала я написал кучу постов на самые разные темы Solidity и аудита. Может я что-то пропустил? #курс

Хочу узнать, сколько человек планирует пойти на 4 модуль?
Anonymous voting

Что нужно знать перед 4 модулем Вчера в личку была пара вопросов на тему, а что нужно знать, чтобы было комфортно учиться на 4 модуле. Вопрос достаточно актуальный для тех, кто впервые хочет зайти на курс и не был ни на одном из предыдущих модулей. Вообще, несмотря на то, что это все еще курс для начинающих разработчиков, некоторые знания и умения уже должны быть. Приведу короткий список: 1. Знание базового синтаксиса языка; 2. Умение писать простые смарт контракты; 3. Умение работать с библиотеками и наследованиями; 4. Знать популярные стандарты: ERC20, ERC721; 5. Базовые знания Hardhat / Foundry (уметь подготовить проект); 6. Понимать популярные паттерны, типа голландского аукциона, DAO, ролевую системы; 7. Уметь работать с не популярными стандартами, например, ERC4626; 8. Уметь работать с Ремикс и одном из редакторов кода, например, VS Code; Это тот необходимый минимум, чтобы продолжить обучение на 4 модуле. Здесь будут подниматься уже довольно серьезные темы, и придется также читать технические статьи, которые могут показаться сложными без должной подготовки. Запуск уже скоро! #курс

Еще про 4 модуль курса На 4 модуле поднимаются достаточно сложные темы даже для тех, кто продолжает свое обучение в Solidity. Практически в каждом протоколе, который пытается реализовать систему работы с подписями EIP-712 аудиторы находят какие-либо проблемы: хеширование подписей, правильная передача и верификация, следование стандарту и многое другое. Также дело обстоит и с прокси контрактами. Разработчикам нужно погрузиться в код не только как создателям кода, но и со стороны аудитора, который увидит потенциальные проблемы... Про assembly я вообще молчу. Знаю, что многие просто пропускают эти участки кода на ревью, потому что просто не понимают, как это работает! Вот и на 4 модуле мы хотим дать не только информацию, как работать с подписями, прокси и опкодами, а научить смотреть на код глазами аудитора. На предыдущем модуле было в уроках часто были примеры из реальных протоколов, где ученики могли увидеть, как та или иная тема реализована в "боевых" контрактах. Многие оценили этот подход, сказав, что это было крайне полезно. Поэтому сейчас на модуле мы пойдем немного дальше и научим вас базовым аспектам аудирования смарт контрактов, чтобы вы могли просматривать свой код по завершению проекта. В целом это будет так, мы проходим тему, делаем упражнения, изучаем протоколы, а в конце - проводит аудит реального проекта, где описываем возможные проблемы и, что самое главное, влияние этих проблем на сам контракт! Это будет достаточно сложный модуль, после которого вы получите твердые знания и умения обращаться с кодом и видеть в нем несоответствия! Запуск уже скоро! #курс

Пока идет какой-то не реальный загруз, выложу этот скрин, который описывает дейтствия функции call(). Нашел когда-то в Твитте
Пока идет какой-то не реальный загруз, выложу этот скрин, который описывает дейтствия функции call(). Нашел когда-то в Твиттере, сохранил, а тут просматривал заметки и решил, что можно выложить и на своем канале. Кстати, продолжается работа над 4 модулем курса. Хочется сделать его не похожим на обучающие программы других школ. Дать не только навыки по заявленным темам, но научить искать правильные паттерны, строить архитектуру и избегать популярных проблем / уязвимостей. На днях расскажу чуточку больше! #call

Текстовые уроки по аудиту Хотел еще пару дней назад выложить на канале, да как-то забыл. В Твиттере достаточно много хороших отзывов было по урокам по безопасности смарт контрактов и аудиту от Zokyo, еще одной аудиторской компании. Всего у них вышло 24 урока. В каждом уроке описание уязвимости и примеры. В целом, для опытных аудиторов там не будет ничего нового, а вот для начинаюищих может оказаться весьма кстати. https://zokyo-auditing-tutorials.gitbook.io/zokyo-tutorials/ Хорошо то, что команда потихоньку развивает свой проект и будут выходить новые уроки со временем. #zokyo #audit

Новости модуля 4 Вчера я упоминал, что этот модуль я буду писать вместе с другим преподавателем. И это @elawbek! Вот что он пишет о своем пути: "Разработчик смарт-контрактов для EVM сетей с опытом работы около 1.5 лет. С 2021 года активно изучаю Solidity и глубоко интересуюсь внутренним устройством Ethereum Virtual Machine (EVM). Стремление понять, как контракты попадают в сеть, как устроен вызов контракта и какие действия происходят на более низком уровне, побудило меня систематически исследовать данную тематику. Я сосредотачивался на поиске материалов, раскрывающих внутреннее устройство EVM, чтобы более глубоко понять принципы работы кода в различных сценариях. Понимаю, что low-level аспекты Ethereum Virtual Machine несравненны с другими языками программирования, так как EVM была разработана с учетом ограниченной области применения в блокчейне. Тем не менее, с развитием технологий и инфраструктуры уверен, что мои знания и опыт, накопленные до настоящего времени, будут востребованы в будущем. Готов поделиться своими знаниями на курсе и внести свой вклад в обучение других участников!" Вы могли часто видеть, как он помогает участникам нашего чата и других тематических по web3 с ответами на вопросы по тому, как работают опкоды / memory / storage, что делает assembly в коде или почему EVM работает так, как она работает. К нему всегда можно было обратиться за советом! На 4 модуле он будет рассказывать вам последние 8 уроков: работа с памятью, assembly / yul, побитовые операции и дебаггинг! Вы сможете детально изучить эти темы и с легкостью разбираться в них в своей работе. Запуск уже совсем скоро! #курс

Новости и программа 4 модуля курса Многие в прошлом году спрашивали про 4 модуль курса и его темы, поэтому потихоньку буду раскрывать детали. Прежде всего начнем с программы, которая рассчитана на 4 недели обучения: Модуль 4 Неделя 1 1. Древо Меркла: общее 2. Подписи и стандарты 3. ecrecover и ECDSA 4. Безопасность подписей Неделя 2 5. Прокси. Общее 6. Transparent и UUPS proxy 7. Beacon proxy, Diamond 8. Безопасность proxy Неделя 3 9. Работа с памятью: code 10. Работа с памятью: storage 11. Работа с памятью: memory 12. Работа с памятью: calldata 13. Работа с памятью: stack Неделя 4 14. Опкоды 15. Yul и assembly 16. Побитовые операции 17. Дебаггинг контрактов В этом модуле будут уже более серьезные темы, но в простом изложении и с понятными примерами. Напоминаю, что 4 модуль это продолжение курса для начинающих разработчиков, поэтому мы касаемся тем только связанных с Solidity, исключая материал про Hardhat с javascript / typescript, и фокусируясь исключительно на практических знаниях. Кроме того, к написанию уроков и поддержке учеников подключится новый преподаватель! Но об этом в следующем посте! Ориентировочный запуск модуля будет в конце января. Не пропустите! #курс

Чеклист от Solodit Знаю, что уже немного опоздал с этим постом, но вдруг еще кто не видел об этой возможности для самопроверки контрактов перед деплоем. Есть такая платформа Solodit, которая собирает отчеты по уязвимостям со многих площадок (типа С4) и частных аудиторов (типа Trust). Так вот в конце прошлого года они выпустили чеклист, который могут использовать все для проверки своих контрактов. https://solodit.xyz/checklist Все разбито по темам и категориям. Вы можете выбрать те, которые относятся к вашему проекту и "пробежаться" по ним. Как минимум, узнаете о некоторых проблемах в других протоколах, как максимум - найдете уязвимость в своем. Так или иначе лучше потратить еще немного времени на проверки и тесты, прежде чем отдавать его на аудит. #solodit

Забытый скрин к посту выше)
Забытый скрин к посту выше)

Foundry и старые pragma На канале в комментариях где-то были вопросы, а как писать тесты, когда контракты имеют разную версию pragma? Ведь может быть и 0.6.0 и 0.8.19 в одном проекте! В Foundry есть специальный читкод, который помогает деплоить контракты разных версий в тестах:
function deployCode(string memory what) public returns (address);
Пример использования этого читкода вы можете видеть выше на скрине! Больше о нем можно прочитать тут: https://book.getfoundry.sh/reference/forge-std/deployCode Теперь тесты можно писать еще быстрее! #foundry

RareSkills выпустила книгу по Compound RareSkills уже некоторое время выпускает потрясающие обучающие твиты и статьи по теме Compound. И теперь они решили все объединить в одну электронную "книгу" - Compound V3. https://www.rareskills.io/compound-v3-book Вообще здорово, что сейчас много компаний и разработчиков уделяют время написанию таких детальных разборов. В свое время такая же книга по Uniswap V3 здорово помогла мне разобраться с тиками. Если вам интересна работа одного из крупнейших DeFi протоколов, крайне рекомендую к изучению! #compound

Как научиться видеть инварианты Для практики тестов в Foundry сейчас важно уметь видеть и проверять различные состояния кода, в том числе инварианты. В презентациях от компании Certora можно найти много полезного по этой теме, например: https://github.com/Certora/Tutorials/blob/master/06.Lesson_ThinkingProperties/Categorizing_Properties.pdf А здесь, посмотреть варианты properties для различных контрактов: https://github.com/crytic/properties/blob/main/PROPERTIES.md Ну, или выполнить предлагаемое упражнение: https://github.com/Certora/Tutorials/tree/master/06.Lesson_ThinkingProperties/ThinkingPropertiesExercise На самом деле, научиться мыслить "состояниями" контракта может быть очень полезно не только для разработчика, но и хорошего аудитора. #invariant