Solidity. Смарт контракты и аудит – Telegram
Solidity. Смарт контракты и аудит
2.62K subscribers
246 photos
7 videos
18 files
547 links
Обучение Solidity. Уроки, аудит, разбор кода и популярных сервисов
Download Telegram
Курс Solidity разработчик с нуля. Описание и условия

Для кого:
подходит для всех, кто ни разу не работал с кодом и не знает, что такое программирование

Курс рассчитан на НЕСПЕШНОЕ прохождение каждой темы и времени на ее освоение, поэтому он длится 5+ месяцев. Сложность повышается с каждым модулем, по мере вашей готовности к новым темам, во избежание путаницы в голове из-за большого объема информации.

Задача: курс нацелен на плавное изучение языка Solidity и освоение новой профессии разработчика смарт контрактов. По окончанию всех модулей вы будете иметь достаточно знаний и сформированные скилы, чтобы претендовать на работу в зарубежных компаниях.

Особенности курса:

- Уроки с акцентами на безопасности кода;
- Тестовые вопросы, собранные из реальных собеседований;
- Написан простым языком, без технических усложнений;
- Основной принцип: регулярность лучше интенсивности;
- Основная цель: сформировать понимание языка Solidity, его характеристик и особенностей;

Количество уроков: 80+ в 5 модулях. После каждого модуля есть перерыв, чтобы повторить и закрепить пройденый материал, или завершить пропущенные задания.

Что входит в урок: Объяснение материала, описание проблем безопасности (если требуется), дополнительные источники для самообучения, практическое задание. Тестовое задание по окончанию модуля. Весь материал будет из открытых источников. Выполнение заданий проверяться не будет.

Проведение: Закрытый Телеграм канал на каждый модуль, плюс общий групповой чат

Формат: Текстовые уроки - посты, скриншоты, записи экрана по необходимости.

Условие: 1-2 часа на каждый урок.

Продолжительность: 1 модуль - 1 месяц. На данный момент всего 5 модулей.

Периодичность: 3-4 урока в неделю. Фокус на теме позволит проще и быстрее освоить материал.

Стоимость: 1 и 2 модуля - 2000 рублей, 3 и 4 - 3000 рублей, 5 - 5000 рублей. Оплата в начале каждого модуля. Можно остановиться в любой момент.

Оплата: варианты оплаты будут объявлены позже. Есть возможность оплаты криптой.

Вход на модуль: зайти в новый модуль можно не позднее первой недели. Если вы опоздаете, то пропустите его.

Открытие курса и набор группы: после 26 июня.

Программа курса.

Ориентировочный старт: 3 июля

#курс
👍30
Простота и легкость. Курс для разработчиков

Я уже не раз писал на канале и в чате, что современные курсы и гайды создаются разработчиками для разработчиков. В том смысле, что вы уже должны понимать базис программирования, чтобы схватывать информацию и продвигаться в обучении. Однако, не у всех в школе было программирование.

Когда, около 10 лет назад, я стал учить php, свой первый язык, даже банальное слово "переменная" было не так уж и понятно, не говоря о других, более серьезных определениях.

И даже с хорошим опытом работы фулстек программистом, с хорошими знаниями javasript\typenoscript, Solidity порой вызывал некоторое недоумение.

Я прекрасно понимаю людей, которые хотят освоить новую профессию с нуля, но "стопоряться" на некоторых элементах и забрасывают все. Порой ты просто не понимаешь, у кого можно спросить.

И когда за месяц - два тебе предлагают выучить Solidity, да еще с элементами Javanoscript... Каша в голове просто обеспечена!

Я писал программу именно для тех, кто никогда ранее не сталкивался с программированием. Тут нет js в первых модулях, тут нет даже IDE до 4 модуля, так как нужно будет понять работу с терминалом, node.js и npm до этого.

Каждый урок - это маленькая деталь, которая расписана понятным языком, и простое упражнение для закрепления понимания.

Одна из целей у меня была избежать путаницы в голове из-за большого количества информации. Вы научитесь работать с языком постепенно. Легко и с пониманием "зачем вы это делаете".

Если вы думали начать изучение сами, то попробуйте хотя бы месяц на курсе в группе. Вы всегда сможете остановиться в любой момент. А если вам зайдет такой формат, то продолжить учиться и дальше.

Начинаем уже скоро!

#курс
👍311🔥1
Небольшое объявление

Понимаю, что некоторых участников на канале куча постов про курс может напрягать, так как вы пришли сюда за "мясом".

Я еще недельку порассказываю про него, может получится смотивировать других участников попробовать свои силы в Solidity.

А после запуска, вернемся к обычному режиму. Я как раз успею собрать кучу крутого материала к тому моменту.

Думал, что курс пройдет в более легком формате, но уже чувствую, что вкладываю туда много сил, и на переработку сложного материала для постов, подготовку к курсу и участие в конкурсном аудите меня немного не хватает.

#offtop
22👍3
5+ месяцев - это долго? Курс для разработчиков

Научиться писать смарт контракт и создавать свой токен \ NFT можно и за неделю, так зачем же учиться так долго?

Здесь опять же вопрос в том, а какие цели вы преследуете? Написать NFT и закинуть ее на маркетплейс или же создать свой полноценный проект в DeFi и получить высокооплачиваемую работу? Или, например, понимать как там все устроено и научиться обходить скамные проекты?

Да, практически каждый язык программирования можно выучить за неделю. Вот тип данных, вот переменная, вот массив и цикл. При этом научиться работать с ним, узнать обо всех тонкостях и писать красивый код - вот на что уходит все время.

Смотрите, написать контракт токена - это одно, сделать его безопасным - это уже другое, а внедрить его в архитектуру своего проекта - совсем третье!

Кстати, именно понимания "а для чего это?" мне порой сильно не хватало в своем обучении. Вот ты видишь, например, что в Solidity есть такой тип данных как uint8 и uint256, а в чем разница и в какой момент они используются - не понятно.

Посмотрите программу этого курса и сравните ее с любым другим гайдом или программой в онлайн университете. То, что дается там в одном занятии, тут может быть разложено на неделю или даже модуль!

Здесь важно научиться оперировать деталями языка, чтобы не напортачить со своим проектом.

Время обучение окупается твердыми знаниями. 

Программа курса.   Описание курса.

Старт уже скоро!

#курс
14👍6
Нет видео уроков? Курс для разработчиков

Да, этот курс сделан в формате текстовых уроков, куда по необходимости будут включаться скриншоты и записи экрана. И этому есть пара причин.

Во-первых, я никогда ранее не делал видео уроки и не сильно разбираюсь в программах для этого, в том числе для монтажа. Можно было бы посоветоваться с сообществом, попробовать разные варианты, но это сильно бы увеличило время запуска курса. И начали бы мы только осенью.

Во-вторых, профессия разработчика предполагает, что вы будете очень много читать. Например, в проекте вам нужно будет подключить сторонний сервис, и первым делом вы будете искать официальную документацию, чтобы разобраться, как это сделать. а она порой бывает не самая понятная...

К тому же, работа с самим кодом подразумевает построчное, внимательное чтение.

С текстовым форматом уроков вам будет проще в дальнейшем в работе. Вы привыкните читать объяснение и следовать инструкциям в нем.

Да, и искать в нужном уроке нюансы кода будет намного проще и быстрее, чем перематывать видео на нужный момент.  

Надеюсь, вы оцените такой подход в скором будущем!

Программа курса.     Описание курса.

Старт уже скоро!

#курс
👍25🔥8
Кто идет на 1 модуль курса?

Ниже опрос, прошу ответить всех, кто уже 100% идет на курс. Хочу немного понять, какая нагрузка будет у меня на следующие пять месяцев. Возможно, потребуется помощь куратора для ответов на вопросы.

#курс
👍7
40+ учеников уже готовы!

Очень порадовало количество желающих с твердым намерением! Вы супер! Уверенность в действиях очень сильно помогает в учебе! Знаю, у вас будет очень интересный путь Solidity разработчика!

Также интересно узнать мнение тех, кто сомневается, а вас 40+!

Напишите в комментариях, что вас останавливает. В чем ваши сомнения? Я постараюсь подготовить пост с ответом на ваши вопросы. Может своим вопросом и моим ответом, вы поможете принять решение и другим участникам нашего сообщества!

#курс
12
Ведь можно учиться и самому! Курс для разработчиков

Абсолютно точно! И я сам тому подтверждение!

Сейчас так много различных источников, крутых постов и интересных статей, что можно учиться самому в своем темпе! Более того ChatGPT достаточно хорошо объяснить то или иное понятие. Вопрос в том, какую программу вы для себя подберете и как регулярно будете заниматься.

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

Курс и призван решить эти проблемы, главная из которых - регулярность!

Я постоянно говорю, что регулярность важнее интенсивности. Вместо того, чтобы пытаться самому "поглотить" непомерный обьем информации за один раз, лучше понемногу, но каждый день. Так и информация ложится лучше, и вы не перегораете.

Программа курса.     Описание курса.    Как оплатить.

Старт 3 июля!

#курс
👍13
Кто успеет, а кто опоздает. Курс для разработчиков

По опросу более 60 человек имели некоторые сомнения по поводу участия в курсе. Понимаю, что некоторые записались уже на другие курсы от онлайн школ, иные пытаются учиться сами, ну, а как же остальные?

Для вас данный базовый курс поможет не только получить качественную базу знаний и начать учиться, но приобрести привычку делать это регулярно.

Вы больше не сможете попасть на первые модули курса, если не запишитесь сейчас!

Если вы опоздаете, то придется ждать следующего года! И к тому времени, как большинство учеников курса получат необходимые знания для движения дальше, вы рискуете остаться все еще в самом начале и "стартовать с понедельника".

С курсом до конца лета у вас уже могут быть отличные знания про базовую структуру языка, к концу сентября - практика работы с токенами и NFT, а также понимание популярных паттернов разработки, а к концу осени - уверенные знания молодого разработчика смарт контрактов!

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

Не ждите! Можете опоздать! Присоединяйтесь сегодня!

Программа курса.     Описание курса.    Как оплатить.

Старт 3 июля!

#курс
🔥41
А кто автор? Курс для разработчиков

В чате были вопросы на тему автора курса, вот хотелось бы пару слов сказать о себе.

Свой путь в IT я начал около 12 лет назад, когда загорелся идеей создать свой проект по аналогу зарубежного meetup, который был популярен тогда в США. Идея сообществ и встреч была мне очень близка и я хотел перенести идею в наши страны.

При этом с программированием я не имел ничего общего. Искал разработчиков, дизайнеров, верстальщиков в команду. Весь процесс описания займет продолжительное время, поэтому сокращу его: я начал учить html и css, чтобы верстать сайты самому.

Через год, я понял, что готов выучить первый backend язык и выбор пал на PHP. Знаю, многие его ругают, но на тот момент были условия для его изучения.

Еще через пару лет я захотел научиться работать с фронтом и стал учить JavaScript. А вместе с ним и TypeScript, React, немного Next и другие библиотеки.

Работал в студии, работал в своей команде на фриланс, работал сам. В общей сложности около 6-7 лет фуллстек программирования.

С 2022 заинтересовался Solidity. Обучение шло не слишком активно, до тех пор пока 13 июля я не запустил этот канал, чтобы учиться с группой и постить пройденные материалы.

С тех пор, практически год я "пилю" контент сюда. На данный момент вышло уже более 780+ постов!

С января этого года начал активно участвовать в конкурсных аудитах на популярных площадках. Вот тут и пошло крутое самообучение нюансов Solidity и EVM.

Спасибо большое другим участникам канала, которые делились своей информацией и поправляли меня! Тут я нашел крутых друзей и спецов, с которыми мы растем вместе и у которых я могу спросить совета. Кстати, некоторые из них могут стать вашими учителями на курсе в скором времени!

Я знаю точно, что я умею учиться, и делаю это, как типичный "задрот": много и постоянно. 

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

Вся информация разбита по простым урокам и максимально полна. Присоединяйтесь!

Программа курса.     Описание курса.

Старт 3 июля!

#курс
👍13🤩2👏1
Учится правильно и не упустить время. Курс для разработчиков

Для записи на курс осталось менее 48 часов! Меньше двух дней, чтобы принять решение и открыть для себя мир разработки смарт контрактов.

Знаете, чем обучение в группе на курсе отличается от самостоятельного обучения? Временем и правильным вектором.

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

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

Я сам во время обучения, думал, что прекрасно научился писать контракты: создавать токены, NFT, простые ДАО и другое, но позже я открыл для себя мир аудита и безопасности! О, сколько же не самых очевидных моментов я переоткрыл! Простое вычитание двух переменных может сделать ваш контракт нерабочим. Простой порядок логики внутри функции может стоить вам всех денег. Упущенная проверка - и ваш NFT будет украден...

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

Именно поэтому важно учится правильно и с заданным вектором от преподавателя, который уже прошел этот путь и может уберечь вас от простых и сложных проблем, от тех нюансов кода, которые вы наверняка упустите.

Научитесь правильно на курсе в группе. С нами уже 40+ учеников! Старт в этот понедельник.

Программа курса.     Описание курса.    Как оплатить.

Начинаем 3 июля!

#курс
🔥8
⚡️⚡️⚡️ Менее 12 часов до закрытия продаж! Курс для разработчиков ⚡️⚡️⚡️

Только до конца этого дня у вас есть шанс попасть на первый модуль курса. Если опоздаете, то ждать придется до следующего года!

К тому моменту, как первые ученики уже будут писать свои смарт контракты и разбираться в теме Solidity с уверенностью, вы все еще можете топтаться на месте.

Напомню основные особенности данного курса:

1. Написан для тех, кто никогда ранее не учился программировать и не имеет технических знаний. Курс написан простым и понятным языком, без лишней информации. Вы не будете испытывать перегрузку в знаниях!

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

3. Вы научитесь правильным вещам с самого начала. Вместе с вами мы пройдем путь, где будут указаны нюансы кода и разработки, которые могут быть упущены при самостоятельном обучении. Вы сэкономите время и не нужно будет переучиваться базовым понятиям позже.

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

5. Начало обучения уже завтра, 3 июля! Больше не нужно откладывать на потом и терять мотивацию. Узнайте больше о блокчейн технологиях и начните изучать Solidity с самых основ.

45+ учеников уже с нами! Добьем до 50 вместе! Присоединяйтесь!

Программа курса.     Описание курса.   

Как оплатить.

#курс
👍1
Нюансы при аудите контрактов с подключенным Uniswap V3

Вот и закончилась неделя с продажей курса, поэтому мы возвращаемся в свое привычное русло с полезным контентом по аудиту и Solidity. Спасибо всем, кто остался и перетерпел все посты про курс; понимаю, что это могло быть немного "слишком" для тех, кто подписывался за уникальной информацией.

Итак, на сегодня я хотел поделиться интересной находкой от аудитора 0х52 протокола Blueberry. Тут указывается на то, что sqrtRatioLimit в контрактах Uniswap V3 не дает защиту от проскальзывания и может привести к частичным обменам, вместо отката транзакции.

Вообще, эта возможная проблема указывалась в самом контракте UniswapV3Pool, поэтому важно также изучать (или хотя бы просматривать) контракты подключенные к проекту.

Для предотвращения этой проблемы рекомендуется проверять сумму после свапа, равна ли она изначально указанной.

#uniswap #sqrtRatioLimit
👍91
Манипуляция оракулами

Вчера наткнулся на интересный репо на GitHub с подборкой ресурсов для изучения хаков, связанных с оракулами.

Это отличный источник новых знаний для аудиторов и разработчиков, которые хотят найти \ избежать проблем в своих контрактах.

awesome-oracle-manipulation

P.S. Возможно, вы его уже видели на других каналах, но тут я еще не выкладывал.

#oracle #manipulation
👍6🔥1
Уязвимость в древе Мерка в Open Zeppelin

Мы привыкли считать, что библиотеки от Open Zeppelin являются стандартом и абсолютно безопасны для использования в своих проектах. Но даже, если контракт был написан разработчиками с огромным стажем, в том числе прекрасно разбирающимися в безопасности, все равно могут быть найдены проблемные места.

Так получилось и с их контрактом древа Меркла.

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

В общем, Daniel Cohen Hillel нашел проблему в контракте OZ, сообщил в компанию и сделал разбор с показательными видео.

Ветка в Твиттер с разбором уязвимости

Если вы любитель подобных шифровании, то пост обязателен к изучению.

#merkle #tree #merkletree #oz
👍4🔥2👏1
Код - это не только ход, но и состояние

Не могу молчать.

Вышел аудиторский отчет по конкурсы Ajna, в котором я хотел поучаствовать, но ничего не нашел. А там 11 High и 14 Med проблем!

Я читаю отчет и такой постоянно: "Ну, блин! Я же мог такое найти! Ну, блин...". И такая досада берет.

А все потому, что я постоянно забываю, что код контракта - это не просто вектор выполнения проверок и функций в нем, а еще и состояние памяти на момент исполнения! Сейчас постараюсь объяснить, что я имею ввиду.

Мы привыкли искать уязвимости в коде по нескольким общим критериям:

1. Наличие необходимых проверок перед исполнением функций;
2. Валидация аргументов в функции;
3. Контроль доступа;
4. Наличие проблемных зон в подключенных контрактах и проектах;
5. Переменные и инварианты;

Ну, и так далее. Но иногда мы нужно еще фиксировать состояние действий пользователя на момент исполнения той или иной функции. Например, если пул будет на пороге ликвидации, что будет с наградами пользователям. Или при передвижении ликвидности из пула в пул, что будет не только с этой ликвидностью, но и с пользователями, которые работали с пулом: их наградами, бонусами, активами, LP токенами...

Порой кажется, что фиксация состояний кода в уме на момент его исполнения, отличает простого аудитора от более профессионального.

Возможно, пост будет сложен для осознания, но уверен, что аудиторы меня поймут.

Пошел дальше читать отчет и учиться на ошибках...

P.S. Отчет Ajna, для любопытствующих.

#audit
👍17🔥41
Заметка про Uniswap V4

Да, я опоздал на пару недель с момента выхода новости о V4. Тем не менее, многие могли упустить этот момент или как-то не правильно понять. Я постарался собрать свои сохранения и выделить их в один пост.

Итак, в середине июня команда Uniswap сделала громкое объявление о новой версии своего протокола, который призван решить некоторые проблемы предыдущих версий и значительно повысить качество работы. Был представлен ряд новых фич, а именно:

1. Хуки. Это некий функционал, который позволяет реализовать для пулов ликвидности совершенно новые функции вроде динамической корректировки комиссий, создания различных типов ордеров (например, лимитных), автоматические депозиты для протоколов кредитования и многое другое.

2. TWAMM (A time-weighted average market maker, средневзвешенный по времени маркетмейкер). Разработчики смогут создавать TWAMM, которые позволят пользователям продавать большие объемы криптовалюты небольшими партиями с течением времени. Это может помочь трейдерам избежать опережения ботов EVM или неблагоприятных колебаний цен. Также будут возможны лимитные ордера на блокчейне, поскольку пулы смогут включать логику, которая позволяет им выполнять ордер только тогда, когда цена токена достигает определенного значения.

3. Singleton. В Uniswap v3 для каждого пула развертывается отдельный смарт-контракт. В v4 для этого будет использоваться один контракт.

P.S. Привет, Balancer v2!

4. Экономия газа и гибкость. Благодаря новой архитектуре проекта и Singleton контракту будет достигнута невероятная экономия газа, по сравнению с контрактами V3. Более того, это также позволит избежать перерасхода газа на роутинг транзакций и управление ликвидностью пула.

5. ERC1155 вместо ERC721 будут использоваться минта позиций в LP и другого функционала.

6. DAO. V4 также будет управляться Uniswap DAO и будет включать переключатель protocol-fee, который может быть активирован держателями $UNI для каждого пула.

7. Поддержка ETH. Теперь V4 может работать в парах с нативным Эфиром вместо WETH, что также облегчает торговлю и снижает затраты.

При этом всем некоторые пользователи критикуют Uniswap по основным двум моментам:

1. Не смотря на то, что протокол позиционирует себя как полностью opensource, в V4 предусмотрена лицензия ограничения использования кода до 2027 года (BSL license).

2. Проблемы появления новых уязвимостей из-за хуков (его пример можно увидеть на скрине выше). Теперь с одной стороны недобросовестные пользователи начнут использовать их для обмана других, а с другой - аудиторам заметно прибавится работы. А многие ведь только научились правильно подключать контракты V3 и делать свапы без проблем...

Ссылка на Uniswap V4-core.

В целом, идея интересная. И наблюдается тенденция к унификации контрактов. Я хочу сказать, что каждый из DeFi протоколов следит за конкурентами, исследует использование их контрактов и в последующих версиях применят к себе.

Посмотрим, что из этого получится.

P.S. Если у вас еще что-то ест добавить, оставьте комментарий. Будет интересно почитать. Новость-то уже не новая...

#uniswap #v4
👍51
Двойной overflow

Хочу поделиться с вами статьей, которая, в некотором роде, до сих пор ставит меня в тупик.

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

Почему ставит меня в тупик, так это потому, что я до сих пор не могу понять концепцию double overflow. Если вы хороши в математике и понимаете, в чем тут речь, буду рад услышать ваш мини разбор в комментариях.

Ссылка на статью.

Думаю, для других разработчиков она тоже будет полезна, хотя бы в качестве разбора оригинального случая в контракте. Да, и просто, крутого чтива на выходные.

#overflow
3🔥1
Организация prank в Foundry

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

Обычно мы пишем тест и уже перед тем, как вызвать необходимую функции из под нужного аккаунта (владельца, пользователя, хакера), мы пишем

vm.startPrank(user);

и в завершении:

vm.stopPrank();

Порой для тестов это приходится прописывать довольно часто. Так вот, в этом контракте придумали поместить это все в модификатор:

modifier prank(address from) {
  vm.startPrank(from);
  _;
  vm.stopPrank();
}

А потом использовать его, как обычно, в функциях:

function test_addLiquidity() public prank(user) {}

На мой взгляд достаточно элегантное решение.

#foundry #test #modifier #prank
👍141