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

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

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

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

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

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

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

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

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

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

#курс
👍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
Работа с памятью в Solidity. Большой сборник

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

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


На русском языке:

1. Большая заметка канала по работе с памятью. Тут я собрал краткие сведения по storage, memory, stack и code для удобства.

2. Структура. Хранение данных. Видео с канала Ильи

3. Memory и calldata. Видео с канала Ильи

4. Динамические массивы и мэппинги в storage. Видео с канала Ильи


На английском языке:

5. Solidity Tutorial: All About Stack

6. Understanding Ethereum Smart Contract Storage

7. Solidity Tutorial: All About Calldata

8. Solidity Tutorial: All About Code

9. Solidity Tutorial: All About Memory

10. All About Solidity Data Locations — Storage

11. Solidity Tutorial: All About Data Locations

12. Guide To Advanced Calldata


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

Приятного обучения и хорошей недели!

#storage #memory #stack #code #calldata
👍10🐳3🔥1💯1
Чаты и каналы

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

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

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

Итак, поехали:


Чаты на тему разработки:

1. Solidity DEV (Ethereum)

2. Ethereum Ru - самый большой чат

3. Ethereum Newbie

4. Ethereum — Jobs & CVs - тут, кстати, можно найти вакансии

5. крипта и web3 чат

6. Learn solidity audit - тут можно задавать вопросы по аудиту и безопасности

7. DEV: Рубиновые тона: ЧАТ - чат от канала Ильи


Пара классных каналов:

8. Kotya security

9. Rektoff Foundation

10. DEFI Scam Check

11. Officer's Channel

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

#chat
🔥13👍51
🌟🌟🌟 День Рождения канала! 🌟🌟🌟

Сегодня ровно год, как был создан этот канал!

Когда только появилась идея учить Solidity в группе, я был абсолютно уверен, что это будет всего лишь до конца лета. Открывая канал, я был в полной уверенности, что к осени закрою его. Но все пошло куда интереснее!

На сегодняшний момент вышло более 800 постов! Практически 2,5 поста в день в течение года! Да, у меня были и недельные каникулы тишины на канале, но порой тут выходило и по 18 постов в день. До сих пор не могу поверить!

За этот год вместе с вами я прошел путь с нуля до аудитора, ежедневно обучаясь шаг за шагом. Возможно, это лучшее подтверждение принципа "Лучше регулярно, чем интенсивно".

Хочу сказать спасибо всем вам за то, что были всегда рядом: давали советы, делились ресурсами, поправляли множество моих постов и много чего еще. Здесь я нашел свое сообщество, многие из вас стали моими коллегами в сфере аудита!

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

С Днем Рождения, друзья!
🔥377❤‍🔥2🎉2
Интересный баг в протоколе EigenLayer

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

Вот ссылка на него.

Дело в том, что разработчики создавали цикл for и уже внутри него были условия if/esle. И если для условия else они поставили ++i, т.е. переход на следующий шаг цикла, то для if условия - забыли. В итоге получилось, что цикл исполнялся один раз в if, что приводило к проблемам в дальнейшем коде.

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

Будьте внимательны с циклами!

#for #loop
👍8