Solidity. Смарт контракты и аудит – Telegram
Solidity. Смарт контракты и аудит
2.62K subscribers
246 photos
7 videos
18 files
547 links
Обучение Solidity. Уроки, аудит, разбор кода и популярных сервисов
Download Telegram
Кто точно планирует пойти на Летний модуль?
Final Results
50%
Я точно иду!
50%
Пропускаю (уже был, имею опыт, не хочу)
Какие знания нужны для прохождения Летнего модуля?

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

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

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

Курс также включает ключевые аспекты для начинающих разработчиков: настройку профессионального рабочего пространства (ведь, несмотря на удобство Remix IDE, реальные проекты требуют более серьезных инструментов), работу с GitHub и терминалом, изучение структуры стандартов токенов, NFT и других важных компонентов.

Можно ли его покупать, если сейчас только начинаешь свой путь?

Думаю, да.

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

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

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

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

Не упустите последний шанс присоединиться — этот поток станет завершающим.

Старт программы запланирован на 30 июня!

Программа модуля

#курс
👍9
Про формат уроков и материалы модуля

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

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

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

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

Выпускники прошлых потоков подтвердят, что все уроки и задания остаются у вас бессрочно. Телеграм-канал и чаты не закрываются после окончания курса.

P.S. В следующем году откроется платформа — и все ученики получат бесплатный доступ к обновленным материалам.

Готовы учить Solidity без лишней суеты? Жду вас на Летнем модуле.

#курс
👍20
Отличие этого Модуля: челленджи для решительных

Летний модуль является логичным продолжением первого, где вы освоили основы Solidity и создали свои первые смарт-контракты в Remix IDE. Теперь мы двигаемся дальше: переходим к профессиональным инструментам — выбираем редактор кода, изучаем GitHub и терминал, а затем постепенно углубляемся в работу с токенами, EIP и паттернами.

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

Челлендж — это практическое задание, выходящее за рамки основных уроков. Каждую неделю вас ждет 5 задач на написание смарт-контрактов и 10 сложных вопросов, требующих глубокого понимания материала. Это не только отличный способ прокачать навыки, но и возможность собрать проекты, которые можно будет показать на собеседовании.

Всего за модуль вас ждет 7 челленджей — 35 практических задач и 70 вопросов, дополняющих основные задания после уроков.

Летний модуль я называю "практическим", потому что теория здесь сведена к необходимому минимуму — ровно столько, чтобы вы поняли, как что-то сделать. Но настоящие навыки вы получите только за практикой: садясь за компьютер и выполняя задания.

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

Если ваша цель — за год сменить профессию и быстро выйти на уровень уверенного разработчика смарт-контрактов, этот модуль станет для вас мощным ускорителем. Он даст не просто знания, а практические навыки, которые можно сразу применять в работе. Готовы к интенсивному погружению? Тогда вперёд!

Программа модуля

Старт: 30 июня

#курс
🔥121
Вайб кодинг и модуль

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

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

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

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

Главное преимущество этого формата обучения — вы учитесь на практике. Вместо абстрактных советов вы получаете конкретные примеры, разбираете их и сразу применяете знания. Это делает процесс более эффективным, поскольку вы не просто запоминаете теорию, а учитесь думать как разработчик.

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

Программа модуля

Старт: 30 июня

#курс
🔥5👍3
Личный ассистент, Cursor и все остальное

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

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

P.S. Отмечу, что это планируется именно как ассистент, а не как анализатор кода, который сам может находить баги.

Для ускорения процесса я решил использовать Cursor с Claude 4 и ChatGPT для написания Python скриптов, так как полагал, что огромное количество информации в сети, обилие библиотек и решений на stackoverflow по этому языку, должны помочь создавать код быстро и сразу.

Одной из задач было выделение текстовой информации из PDF файлов. И это именно то, что заставляет меня сейчас писать этот пост!

Сколько существует формат pdf? Сколько python? Какого уровня достигли AI?

Это вообще ничего не значит, если тебе надо просто взять текст из PDF, в которых могут быть представлены примеры кода Solidity. 99% решений, скриптов, библиотек оказываются абсолютно не подходящими для выполнения задач!

Я испробовал: pymupdf, pdfplumber, pdftotext, pdf2image, pdfminer. С каждой из этих библиотек нейронки божились, что это лучшее решение на рынке и оно точно сработает. И ничего!

Последней каплей со скриптами было pdf2htmlex. ChatGPT уверял, что это лучшее решение. Даже лучше предыдущих! А когда я узнал, что поддержка библиотеки была прекращена еще в 2018 году и написал об этом в чат, знаете, что модель мне выдала: "Ой, да вы правы, это устаревшее и не сработает...". Ну, вот нельзя ли было сразу об этом написать?!

Но я же упорный! Мне нужно перевести файлы из PDF в markdown, я искал другие варианты...

По рекомендации тех же "умных" ИИ я пошел качать Donut, PaddleOCR, TrOCR, Tesseract с их навороченным OCR-подходом.

И снова мимо! Текст еще более-менее распознают, но с Solidity кодом просто беда! Пропущенные типы данных, скобки, области видимости и т.д. Код получается абсолютно не читаемым!

И это блин современные решения!

Далее были одни из самых продвинутых подходом: MarkedItDown, Markdown и еще пара. И я... просто пока не знаю, что делать!

Простая идея с конвертированием pdf становится камнем преткновения...

К чему я это все рассказываю?

Не говоря уже о Solidity, нейронные сети еще долго не смогут заменить программистов и создавать 100% работающие решения.

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

А бекенд? Простые решения для записи данных в mysql и запуск простого сервера еще куда не шло. Но более сложные запросы ставят их в ступор.

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

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

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

Все это делает разработку "без знаний" абсолютно не рабочим процессом.

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

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

#offtop
🔥114👍1
Где следить на новостями в Твиттер?

Я давно планировал опубликовать новый пост с персональными рекомендациями аккаунтов в Twitter (X), за которыми стоит следить, чтобы оставаться в курсе новостей web3.

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

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

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

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

https://news.1rj.ru/str/solidityset/982

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

Если у вас есть свои рекомендации — буду рад увидеть их в комментариях.

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

1. https://x.com/0xMackenzieM - Тут сотрудник bug bounty платформы (там, где белые хакеры ищут уязвимости в коде) проводит разборы профилей других пользователей. Советы очень дельные.

2. https://x.com/PatrickAlphaC - вероятно один из самых видных разработчиков, аудиторов, креаторов в web3. Именно он создал 40 часовой курс по Solidity на Ютуб, платформу для аудиторов - CodeHawks, обучающую платформу - Updraft и много чего еще. На канале он выкладывает много интересных постов и роликов, которые всегда собирают много реакций.

3. https://x.com/pashovkrum - Пашов - один из самых популярных аудиторов, который начинал с конкурсных площадок еще в 2022 году. Набрал популярность, перешел в соло аудиты, потом запустил свою компанию.

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

4. https://x.com/realgmhacker - Белый хакер, глава отдела безопасности в Immunefi, учитель в RareSkills - все это только вершина его достижений. Публикует новости, разборы, порой расследования в крипто сфере. Много интересных статей я нашел именно по его рекомендациям.

5. https://x.com/PaulRBerg - основатель протокола Sablier. Не смотря на то, что он частенько делает посты про биохакинг и здоровый образ жизни (это я лично сам не очень люблю), он также пишет о Solidity и его нюансах, а также про программу тестирования смарт контрактов - Foundry.

6. https://x.com/DevDacian - Он работает вместе с Патриком Коллинсом в компании Cyfrin. Часто выкладывает свои обучающие статьи, сниппеты кода и рассказывает обо всех обновлениях в Cyfrin проектах: CodeHawks - для аудиторов, Updraft - обучающие курсы, Solodit - сборник багов и уязвимостей.

7. https://x.com/real_philogy - один из немногих пользователей в сети, которого можно назвать "разработчик до мозга костей"! Он прекрасно знает и понимает как работает весь Эфириум, Solidity, EVM, assembly и опкоды и много чего еще. Его посты могут вводить в ступор даже бывалых разработчиков смарт контрактов.

8. https://x.com/gakonst - еще один невероятный разработчик и видный деятель в мире web3. Во-первых, он один из глав (CTO) такой компании как Paradigm, которая инвестирует в крутые проекты в сфере блокчейна. Во-вторых, CEO другой компании Ithaca - акселератора для стартап компаний. Ну, и в-третьих, он один из основных разработчиков среды для тестирования смарт контрактов Foundry, а также Reth - программы для организации узла Эфириума.

9. https://x.com/uttam_singhk - Один из немногих разработчиков индийского/пакистанского происхождения, которого можно без сомнения рекомендовать. Мне нравятся его показательные видео, интересные посты и лайфхаки. Он один из первых, кто делал подробные разборы обновления блокчейна Pectra и делился своими взглядами на этот процесс.
🔥8
10. https://x.com/0xOwenThurm - известный аудитор смарт-контрактов, основатель компании Guardian, а также автор блога и образовательных видео по блокчейн-безопасности. На мой взгляд, он сочетает в себе черты аудитора Пашова (о котором я рассказывал ранее) и Патрика Коллинза — эксперта в области разработки и безопасности.

11. https://x.com/RareSkills_io - RareSkills — это команда экспертов, которая помогает делать блокчейн-технологии безопаснее. Они как "детективы" в мире криптовалют — разбирают случаи взломов, находят уязвимости в смарт-контрактах и объясняют, как их избежать. Особенно много работают

12. https://x.com/zachxbt - ZachXBT — один из самых известных крипто-расследователей в Twitter, специализирующийся на разоблачении мошенничеств и расследовании хакерских атак в блокчейн-пространстве. Он заслужил репутацию «криптодетектива» благодаря своим глубоким расследованиям, где тщательно анализирует транзакции в блокчейне, связывает кошельки мошенников и раскрывает схемы отмывания средств. ZachXBT не только публикует разоблачительные треды, но и помогает пострадавшим, а его расследования нередко приводят к реальным юридическим последствиям для злоумышленников.


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

Всем хорошего дня!

#twitter
1🔥15
Нейронки и Foundry

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

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

Iteratively modify this foundry test to explore edge cases until the cli command `forge test` shows a loss-of-funds or balance mismatch. After each run, analyze output, tweak the test, and repeat. Stop when a vulnerability is triggered.

Что в переводе:

Итеративно изменяйте этот тест foundry, исследуя крайние случаи, пока команда cli `forge test` не покажет потерю средств или несоответствие баланса. После каждого запуска анализируйте результаты, настраивайте тест и повторяйте. Остановись, когда обнаружится уязвимость.

Достаточно необычный вариант написания тестов и проверки некоторых случаев function flow на потенциальные проблемы.

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

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

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

#foundry #ai
🔥8💯2
Перерыв на канале из-за обучения

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

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

За последнее время я успел познакомиться с возможностями LLM, которые способны серьезно повлиять не только на разработку и тестирование смарт-контрактов, но и на их математические модели и сложную архитектуру. В ближайшем будущем появятся решения, автоматизирующие создание тестов в Foundry с проверкой всех возможных сценариев выполнения функций и логических потоков. Кроме того, нейросети смогут анализировать инварианты математических расчетов, выполняя сотни тысяч итераций, и помогать выявлять серьезные уязвимости уровня Med или High.

Примечательно, что это будут не массовые коммерческие модели вроде ChatGPT, Claude или Gemini, а специализированные локальные решения, оптимизированные под конкретные задачи. Крупные компании вряд ли в ближайшие годы будут заниматься узкой настройкой своих продуктов для отдельных областей, поскольку их основная цель — конкуренция на глобальном рынке.

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

В скором времени мы вернемся к изучению Solidity и актуальных трендов в этой области — у меня уже есть несколько интересных тем для обсуждения. Желаю вам продуктивной недели и отличного настроения!

Всем хорошего настроения и приятной недели!

#offtop
👏18
Держу в курсе и не пропадаю

В течение недели, посвященной учебному отпуску, я ознакомился с базовыми аспектами работы с моделями LLM. В частности, изучил принципы квантизации, основные библиотеки для ее реализации, структуру весов модели, а также такие понятия, как PTQ, QAT, GGUF и GPTQ. Кроме того, рассмотрел различные подходы к бенчмаркингу и другие сопутствующие вопросы. Это позволило более осознанно подходить к выбору моделей для конкретных задач и их настройке с учетом доступных вычислительных ресурсов.

Как часто бывает в процессе изучения сложных тем, углубление в материал порождает новые вопросы. В связи с этим я принял решение постепенно, в свободное время, осваивать основы машинного и глубокого обучения (ML/DL). Это обусловлено двумя ключевыми причинами.

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

Во-вторых, все чаще отмечаю рост интереса к применению LLM среди аудиторов и разработчиков. Например, в репозиториях блокчейн-протоколов появляются специализированные файлы (такие как llm.md), описывающие функционал моделей в контексте конкретных задач.

На ближайшие шесть месяцев я планирую сосредоточиться на изучении следующих аспектов ML/DL:

1. Базовые алгоритмы: линейная и логистическая регрессия, метод опорных векторов (SVM), деревья решений, ансамбли моделей.

2. Методы оценки качества моделей: кросс-валидация, метрики (accuracy, precision, recall, F1, ROC-AUC).

3. Регуляризация и методы оптимизации (градиентный спуск, Adam, RMSProp).

4. Архитектуры нейронных сетей.

5. Работа с функциями потерь (loss functions) и оптимизация гиперпараметров.

6. Техники ускорения обучения: batch normalization, dropout, early stopping.

7. Transfer Learning и Fine-Tuning.

8. Предобработка данных: аугментация, нормализация, работа с несбалансированными выборками.

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

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

Однако, чтобы канал не пустовал, выйдет пара коротких постов про Foundry на неделе.

Всем хорошего дня и приятной недели!

#offtop
🔥12👍53
This media is not supported in your browser
VIEW IN TELEGRAM
Подсказка по Foundry

Если вы часто пишите фазз и инвариант тесты в Foundry, то с флагом "--show-progress" вы сможете увидеть процесс самого тестирования. Бывает полезно, когда вы хотите отследить некоторые моменты - прогоны, успехи и неудачи в вызовах.

Подробнее на видео.

#foundry
🔥8
И еще одна подсказка по Foundry

Вы можете использовать команду:

forge inspect MyContract errors


чтобы получить селекторы ваших кастомных ошибок. Бывает полезно при работе с дебаггингом функция и function flow.

#foundry
👍92
Solidity hints. Часть 26

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

У нас ранее был цикл постов по материалам Chinmaya, где он делал список пунктов, на которые следует обратить внимание при разработке. Вот думаю продолжить некоторое время делать небольшие разборы.

Сегодня давайте посмотрим на пункт 44:

Library functions can only be called directly (i.e. without the use of DELEGATECALL ) if they do not modify the state (view or pure)

что в переводе:

Функции библиотек могут быть вызваны напрямую (без использования delegatecall), если они не изменяют состояние смарт контракта.

А теперь чуть подробнее.

В Solidity библиотеки (libraries, а не набор контрактов, типа Open Zeppelin) представляют собой наборы функций, которые можно повторно использовать в разных контрактах. Тут важно понимать, как именно вызываются их функции, особенно если они взаимодействуют с состоянием контракта.

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

Когда функция библиотеки вызывается напрямую (например, MyLibrary.doSomething()), код выполняется в контексте вызывающего контракта, но без изменения его хранилища (storage). Если бы библиотека могла изменять состояние при таком вызове, это привело бы к неоднозначности: откуда брать storage для записи? Поэтому Solidity запрещает вызов не-view/не-pure функций библиотек без использования DELEGATECALL, который явно указывает, что изменения должны применяться к storage вызывающего контракта.

Если функция библиотеки должна изменять состояние, её вызов должен происходить через DELEGATECALL. На практике это означает, что библиотеку нужно внедрить в контракт с помощью using ... for, а затем вызывать её методы для конкретных переменных. Например:

library Math {
function increment(uint256 storage num) external {
num += 1;
}
}

contract MyContract {
using Math for uint256;
uint256 public counter;

function increase() public {
counter.increment(); // Вызов через DELEGATECALL
}
}


Здесь increment изменяет storage контракта, поэтому вызывается через механизм DELEGATECALL.

Понимание этого механизма поможет избежать ошибок при разработке смарт-контрактов.

#libraries
👍61
Solidity hints. Часть 27

А вот об этом пункте деплоя контрактов с библиотеками в блокчейн даже я не знал.

Когда компилятор Solidity обрабатывает контракт, использующий библиотеку, он не знает, по какому адресу эта библиотека будет развернута в будущем. В результате скомпилированный байт-код содержит специальные заглушки, которые выглядят как $30bbc0abd4d6364515865950d3e0d10953$. Эти заглушки необходимы, так как на момент компиляции адрес библиотеки неизвестен, и их нужно заменить на реальные адреса после деплоя библиотеки в сеть.

Заглушка формируется как 34-символьный префикс от хеша keccak256 полного имени библиотеки. Например, если библиотека BigInt находится в файле bigint.sol внутри директории libraries, её полное имя будет выглядеть как libraries/bigint.sol:BigInt. Компилятор хеширует это имя и использует часть хеша в качестве временного заполнителя. Это позволяет однозначно идентифицировать библиотеку на этапе линковки.

Такой байт-код с заглушками считается неполным и не должен быть развернут в блокчейн в этом виде. Если контракт с не заменёнными плейсхолдерами всё же попадет в сеть, он окажется неработоспособным, так как виртуальная машина Ethereum не сможет найти библиотеку по несуществующему адресу. Поэтому перед деплоем необходимо выполнить линковку — замену всех заглушек на актуальные адреса развернутых библиотек.

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

#libraries
👍7
Как воспроизвести простую атаку с использованием MEV. Часть 1

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

Начнем с самого начала: что такое MEV?

MEV (Miner Extractable Value — «Стоимость, извлекаемая майнером», или Maximal Extractable Value — «Максимально извлекаемая стоимость») позволяет майнерам исключать, включать и изменять порядок транзакций в блоке до его добычи. После слияния Ethereum (The Merge) эта роль перешла от майнеров к валидаторам сети. Тем не менее, вектор атаки через MEV остаётся актуальным и широко распространённым в блокчейн-среде.

Существует множество способов, которыми злоумышленник может использовать MEV. Мы рассмотрим так называемую «сэндвич-атаку» (sandwich attack), которая осуществляется путём фронтраннинга и бэкраннинга транзакции обмена жертвы.

Фронтраннинг (Frontrunning)

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

Бэкраннинг (Backrunning)

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

Сэндвич-атака (Sandwich Attack)

При сэндвич-атаке злоумышленник отслеживает мемпул (список ожидающих транзакций) в поисках целевой транзакции, которую можно использовать в своих интересах. Как только такая транзакция обнаружена, злоумышленник отправляет две транзакции — одну до и одну после целевой, «зажимая» её, словно бутерброд. Цель такой атаки — повлиять на выполнение или результат целевой транзакции в свою пользу.

Используя методы, описанные выше, злоумышленник отправляет две транзакции — с более высокой и более низкой стоимостью газа по сравнению с транзакцией жертвы, чтобы успешно выполнить сэндвич-атаку. Альтернативно, он может отправить пакет транзакций (transaction bundle) через специализированные RPC-провайдеры, которые за плату гарантируют нужный порядок транзакций.

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

Далее рассмотрим, как протестировать такие транзакции в Hardhat и Foundry.

#mev
👍13
Как воспроизвести простую атаку с использованием MEV. Часть 2

Для того, чтобы создать PoC для демонстрации MEV-атаки, мы можем использовать такие инструменты, как Hardhat и Forge, для создания локального форка блокчейна.

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

В этом примере мы намеренно заставим жертву инициировать транзакцию обмена WETH на USDC в UniswapV2 с минимальной суммой 0. То, что делает эту транзакцию уязвимой для атаки «сэндвич», так это минимальная сумма, установленная на 0, что означает, что транзакция не будет отменена, даже если жертва получит только 0 USDC или 99% проскальзывания. Вот почему очень важно правильно установить минимальную сумму.

Router2.swapExactTokensForTokens(amount, 0, path, address(this), block.timestamp + 4200); 


Как все проверить в Foundry?

1. Для начала убедитесь, что Foundry все таки установлен у вас. Затем создайте отдельную папку и выполните forge init.

2. Измените контракт в папке src на контракт атакующего. Также замените тестовый файл в папке test на Sandwich.t.sol.

3. В результате у вас должен получиться такой же output в консоли, как на скрине.

Так нам удалось продемонстрировать атаку "сэндвич" с Forge. Как видно из результатов тестового случая, злоумышленник и жертва начали с начальным балансом в 1000 WETH, и хакеру удалось опередить и обойти транзакцию жертвы, что принесло ему прибыль в размере ~123 WETH. В результате жертва получает меньше USDC.

P.S. Для Hardhat, в целом, все так же для первоначальных настроек проекта, только использовать стоит файл sandwichAttack.js.

#mev
👍7
Solidity - деспотизм, Python - анархия

Хотел бы поделиться своими успехами в освоении machine learning и deep learning.

Стоит отметить, что мое изучение этой области не связано со сменой профессии, а направлено на интеграцию навыков работы с Web3 и LLM. Моя цель — научиться эффективно взаимодействовать с моделями и обучать их на примерах уязвимостей смарт-контрактов.

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

Несмотря на то, что я долгое время избегал этот язык, в сфере машинного обучения без него не обойтись. Популярные библиотеки для работы с LLM реализованы именно на Python, и для эффективной разработки необходимо понимать их устройство и принципы работы.

После недели изучения Python у меня сложилось четкое представление о его кардинальном отличии от Solidity.

Для тех, у кого Solidity был первым языком, переход на Python покажется довольно простым. Отсутствие строгой типизации, минималистичный синтаксис без избыточных скобок и точек с запятой, а также гибкость в обработке данных делают его значительно более доступным. Кортежи можно сравнить с calldata, а декораторы — с модификаторами в Solidity.

Обилие библиотек и подробной документации значительно упрощает процесс освоения. Базовое понимание кода на Python можно получить за несколько дней, а за месяц — научиться писать рабочие решения.

Разумеется, речь не идет о профессиональном уровне владения языком. Чтобы стать senior-разработчиком, потребуются годы практики. Однако для написания функционального кода при наличии опыта в других языках месяца будет достаточно.

В ближайших планах — изучение Fast API, который, вероятно, понадобится для взаимодействия с MCP-серверами, а затем детальное освоение библиотек для работы с моделями.

Кроме того, я подготовил roadmap по освоению профессии Machine Learning / Deep Learning Engineer, основанный на личном опыте и актуальных требованиях индустрии. В нем собраны ключевые темы, включая те, которые часто затрагиваются на собеседованиях. Этим планом можно свободно пользоваться и адаптировать под свои задачи.

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

Пока это основные итоги моего прогресса. Буду держать вас в курсе дальнейших достижений.

#ml
19
К разработчикам смарт контрактов будут предъявлять новые требования при найме?

Сегодняшний разработчик смарт-контрактов — это уже не просто человек за клавиатурой, который пишет код на Solidity и проверяет его через Foundry. Современный специалист должен понимать, как работают децентрализованные системы, как находить и устранять уязвимости, и при этом держать руку на пульсе технологических изменений. Одно из таких изменений — появление инструментов, которые позволяют искусственному интеллекту взаимодействовать с блокчейном и смарт-контрактами. И ключевую роль здесь начинают играть MCP-серверы — Model Context Protocol серверы. Это, по сути, мост между языковыми моделями и внешними системами, включая блокчейн, API и базы данных. Они позволяют ИИ безопасно получать данные и выполнять действия, не выходя за рамки заданного контекста.

Современные языковые модели уже умеют писать смарт-контракты на Solidity и других языках без дополнительных инструментов — они обучаются на огромных объёмах кода и могут воспроизводить шаблоны, включая использование библиотек вроде OpenZeppelin. Однако одно дело — сгенерировать код по памяти, и совсем другое — гарантировать, что он актуален, безопасен и соответствует последним версиям проверенных шаблонов. Именно здесь на помощь приходит MCP-сервер. Он позволяет модели не просто "вспоминать" код, а запрашивать его напрямую из доверенного источника — например, из официальных репозиториев OpenZeppelin. Сервер выступает в роли посредника, предоставляя модели доступ к точным, аудированным шаблонам и строго регламентируя, какие действия и с какими параметрами могут быть выполнены. Это превращает ИИ из пассивного генератора текста в активного участника разработки, способного безопасно и точно взаимодействовать с внешними системами.

Одна из ведущих компаний в области безопасности — Trail of Bits — уже занялась вопросами защиты таких взаимодействий. Они разработали mcp-context-protector — специальный слой безопасности, который защищает от атак, когда вредоносный сервер может подменить инструкции для модели. Например, через описания инструментов можно внедрить prompt-инъекцию и заставить модель выполнять нежелательные действия. Их решение работает как прокси: оно проверяет все, что приходит от сервера, до того как это попадёт в контекст модели. Это особенно важно, когда вы доверяете стороннему MCP-серверу, потому что теперь можно быть уверенным, что в коде или инструкциях не скрыто ничего опасного.

Но не только про безопасность. OpenZeppelin, известный своими шаблонами для безопасных контрактов, запустил свой MCP-сервер, который позволяет разработчикам генерировать готовые контракты на Solidity, Cairo и других языках. Представьте: вы просто говорите ассистенту — "создай ERC-20 токен с именем MyToken и общим объёмом 1 миллион", — а он, через MCP-сервер OpenZeppelin, получает шаблон, подставляет параметры и возвращает вам готовый, аудированный код. Это экономит время, снижает риск ошибок и делает процесс разработки доступнее даже для новичков.

Что особенно ценно — эти серверы не просто дают доступ к функциям, они делают это в стандартизированной и безопасной форме. MCP-сервер OpenZeppelin не просто генерирует код, он делает это на основе проверенных шаблонов, которые уже используются тысячами проектов. А благодаря интеграции с безопасными протоколами, вы можете быть уверены, что даже если ИИ что-то напутает, базовая архитектура останется надёжной. Это как если бы у вас был старший разработчик, который всегда проверяет ваш код перед тем, как он попадёт в продакшн.

Для разработчика это означает, что скоро будет недостаточно просто знать Solidity. Важно будет понимать, как работают внешние инструменты, как интегрировать их через MCP, и как обеспечивать безопасность этих взаимодействий. Умение настраивать, проверять и использовать MCP-серверы станет частью повседневной работы. И те, кто начнёт изучать это уже сейчас, получат серьёзное преимущество — не только в скорости разработки, но и в качестве итогового продукта.
🔥73
Всё это — часть более широкого сдвига: мы переходим от ручного кодирования к агент-ориентированной разработке, где ИИ становится активным участником процесса. Но с ростом возможностей растёт и ответственность. Поэтому важно не просто подключать MCP-серверы, а понимать, как они работают, что они делают и как их можно взломать. Будущее смарт-контрактов — это не только безопасный код, но и безопасные инструменты, которые помогают этот код создавать.

#llm #solidity
👍5🔥1