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

Байткод контрактов обычно начинается с 6080604052, который генерируется за счет операции mstore(0x40,0x80). Но возможен и такой вариант:

Попробуйте выполнить операцию mstore(0x40,returndatasize()) в самом начале. Ваш байткод будет начинаться с 3d604052!

Пример кода можно увидеть на скрине выше.

P.S. По слухам, это может помешать верификации на Etherscan, так что пробуйте с осторожностью.  

#bytecode #tip
1👍1
Работа с оракулами Chainlink

Увидел в твиттере пост gmhacker.eth, который поделился ссылкой на репо LiquidityProtocol.

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

1. Когда система получает данные о цене от Chainlink;
2. Когда система получает данные от другого оракула;
3. Когда оба оракула не заслуживают доверия;
4. Использование другого оракула, когда Chainlink заморожен;
5. Использование Chainlink, когда нет доверия другому оракулу;

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

Рекомендую всем обратиться к первоисточнику и изучить контракт!

https://github.com/liquity/dev/blob/main/packages/contracts/contracts/PriceFeed.sol

А как вы работаете с оракулами?

#oracle #chainlink
Проблемы с Древом Меркла

Ранее в этом году я выкладывал небольшой пост со ссылкой на ветку в Твиттере, в которой разбиралась уязвимость Древа Меркла в библиотеке от Open Zeppelin.

Чуть позже в одном из чатов видел дискуссию о комментарии в этом же контракте:

You should avoid using leaf values that are 64 bytes long prior to hashing, or use a hash function other than keccak256 for hashing leaves.

И вот только сейчас встретил статью, которая помогла многие вещи поставить на место. В ней рассказывается об second preimage attack и почему разработчики должны избегать хеширования листьев древа в 64 байта. Более того, в статье показываются способы, как избежать этой проблемы.

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

Поэтому рекомендую каждому ее прочитать от и до:

https://www.rareskills.io/post/merkle-tree-second-preimage-attack

Ну, а если вы, как и я, зададитесь вопросом, почему это SECOND preimage attack, а где же FIRST, то вот эта статья поможет ответить на вопрос.

Надеюсь, вопросов по Древу Меркла у вас стало теперь меньше.

#merkletree #merkle
🔥41
Подключение WSL для Windows

В последнее время у меня появилась необходимость работы с некоторыми программами, которые не работают на Windows и требуются либо Mac, либо Linux. Поэтому я решил попробовать установить WSL на свой компьютер, описать процесс и возникшие сложности.

Подсистема Windows для Linux (WSL) позволяет разработчикам запускать среду GNU/Linux с большинством программ командной строки, служебных программ и приложений непосредственно в Windows без каких-либо изменений и необходимости использовать традиционную виртуальную машину или двойную загрузку.

Простыми словами - это виртуалка Linux на Windows. Вот тут можно узнать об этом чуть больше:

https://learn.microsoft.com/ru-ru/windows/wsl/about

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

https://learn.microsoft.com/ru-ru/windows/wsl/install

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

При попытке выполнить команду wsl --install в терминале, у меня возникла ошибка 0xc004000d. Немного погуглив, я нашел ее решение.

Вам нужно зайти в панель управление в Windows (обратите внимание, не Параметры, а именно Панель управления), дальше идем в раздел Программы и кликаем на пункт Включение и отключение компонентов Windows. Появится новое окошко и там нужно поставить флажок на пункте Подсистема Windows для Linux. Затем перезагружаем компьютер.

Теперь можно выполнить необходимую команду.

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

wsl --install -d Ubuntu 2

После этого возможна еще одна перезагрузка компьютера или же откроется окно Ubuntu и система попросит вас придумать имя и пароль.

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

Дальше можно настроить совместимость нашего редактора кода - VS Code.

Запускаем редактор, открываем раздел плаггинов и ищем Remote Development от Microsoft. Это пакет из 4 приложений, так что устанавливаем их все.

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

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

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

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

Это делается с помощью команд:

mkdir Audits
cd Audits/


Также, есть вероятность, что потребуется заново установить и настроить git, python, Node.js, npm, yarn и другие программы, которыми вы пользовались на Windows.

Хочу обратить ваше внимание на то, что есть две версии WSL и WSL2.

Не могу сейчас сказать, в чем там разница, но в моем случае возникали проблемы при обновлении Node.js и npm с первой версией WSL.

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

#wsl
👍1
Курс по безопасности от Патрика Коллинса

Если вы не в курсе, то Патрик Коллинс (тот кто создал 32 часовой курс по Solidity и 27 часовой по Foundry), планирует запустить платформу для обучения всем необходимым навыкам по web3 - Cyfrin Updraft.

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

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

Этот курс по Безопасности и аудиту. Рассчитан на 27 часов. Как я понял, сейчас это "звездный" курс для привлечения внимания от популярных деятелей в сфере аудита: Tincho, Owen Thrum, Andi Li, Johny Time, Pashov и других.

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

Пройти курс можно тут:

https://updraft.cyfrin.io/courses/security

Будет интересно узнать ваше мнение об этом.

#updraft
🔥11👍1
Тесты с хуками для V4

Небольшой пост - заметка.

Как вы знаете в Uniswap V4 появились так называемые хуки.

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

Я сам еще не экспериментировал с "песочницей", поэтому просто оставляю ссылку на документацию:

https://docs.uniswapfoundation.org/overview/conduit-testnet

Мало ли кому будет интересно поразбирать хуки на новогодних праздниках.

#v4 #unswap #hooks
👍1
Ethereum Yellow Paper Course

Как мы знаем, одним из основополагающих документов блокчейна Эфириум является его Yellow Papers. Будем честны, мало кто из разработчиков осиливает его, да и вообще читал "от и до" хотя бы раз.

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

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

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

Посмотрите небольшой курс в свободное время:

https://youtu.be/e84V1MxRlYs

Полчаса в день и к концу недели вы справитесь с ним!

#yellowpapers #yellow #course
👍91
С нуля до PRO в ZK

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

Да, ее выложили еще до того аудита-миллионика, но все руки никак не доходили просмотреть. Здесь Hickup выложил свой путь, по которому он учился этой технологии.

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

Если же вы совсем новичок, но очень хотите изучить эту тему, то начните с канала Ильи, в частности посмотрите те уроки, в которых говорится про роллапы и zero knowledge.

А уже потом обратитесь к подборке Hickup:

https://sunrise-clerk-234.notion.site/Hickup-s-ZK-Journey-affa9ce9cdf44a33b3549c37f908521a

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

#zk #hickup
3
Foundry Cheatsheet от MiloTruck

Если вы не в курсе, MiloTruck стал лучшим аудитором на площадке code4rena в этом году, заработав на конкурсах 160К!

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

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

Вы можете открыть его в отдельном окошке и подглядывать при написании своих тестов:

https://milotruck.github.io/blog/Foundry-Cheatsheet/

P.S. Вы также можете скопировать его к себе, постепенно дополняя или обновляя информацию в нем.

#foundry #test #cheatsheet
❤‍🔥7👍2
Где следить за новостями?

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

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

1. Ethereum Ru

2. Solidity DEV (Ethereum)

3. DEV: Рубиновые тона: ЧАТ

4. Learn solidity audit - для аудиторов


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


1. Solodit | Auditors

2. Daily Security Web3

3. DEFI Scam Check

4. Kotya security

5. Rektoff

6. rekt.news Newsflash

7. Web3 Security as a Business


Дискорд каналы:


1. Code4rena

2. Cyfrin (от Патрика Коллинса)

3. Guardian Audits (от Owne Thum)

4. Immunefi

5. Secureum

6. Open Sence

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

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


Для начала мой канал:

1. RightNowIn

Не спрашивайте, почему такое название... Так сложилось исторически...


И другие каналы:


1. Akshay Srivastav

2. Vlad B.

3. Dimitar Tsvetanov

4. Koolex

5. DadeKuma

6. MiloTruck

7. Alex the Entreprenerd

8. btk

9. Kristian Apostolov

10. HE1M

11. 0xladboy

12. HickupHH3

13. Chinmay Farkya

14. 0x52

15. bytes032.xyz

16. Faith

17. patrickd

18. zzykxx

19. Trust

20. afeli.eth

21. WINTΞR

22. philogy

23. WATCHPUG

24. 0xrudra

25. Samrat Gupta

26. Christoph Michel

27. Officer's Notes

28. samczsun

29. Gerard Persoon

30. peakbolt


Компании


1. Chainlink

2. Trail of Bits

3. OpenZeppelin

4. Uniswap Labs

5. Hardhat

6. Code4rena

7. Alchemy | The web3 developer platform

8. Etherscan

9. Immunefi

10. rekt

11. Paradigm CTF

12. QuillAudits

13. RareSkills


Если у вас есть кто-то еще на примете, буду рад увидеть рекомендации в комментариях!

#twitter #discord #telegram
👍151
Последний пост этого года

С понедельника я ухожу в отпуск на две недели, поэтому время немного порефлексировать о прошедшем годе.

Если говорить кратко:

1. На канале вышло более 970 постов;
2. За год количество участников +800!
3. Был запущен наш мини курс для начинающих;
4. Проведены 3 модуля курса;
5. Модуль 4 выйдет уже в следующем месяце;
6. Написан крутой цикл из 39 постов по Foundry;
7. Я изучил несколько дополнительных программ для проведения тестов;
8. Принял участие в 10+ конкурсных аудитах (полноценно и 30+ изучая код);
9. Нашел 5 high и 15 med в конкурсах;
10. Провел 4 соло аудита, в которых нашел 10 high и 30+ med проблем;
11. Дал 15 консультаций о том, как начать карьеру в web3;
12. Прошел отбор и стажировался в Pessimistic;

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

Вообще, у мои планы входит:

По курсу и модулям:

1. Провести 4 модуль курса;
2. Если будет достаточное количество желающих, провести и 5 модуль.
3. Если будет достаточное количество желающих, повторить курс с 1 модуля;

По Телеграм каналу:

1. Написать цикл постов про опкоды и assembly;
2. Написать цикл постов про математику в Defi;

По аудиту и конкурсам:

1. Больше времени уделять конкурсным аудитам;
2. Пробиться в топ 50 на code4rena за год;
3. Провести 10+ соло аудитов;

По проектам:

1. Запустить, наконец, проект по тестам на зарубежный рынок;

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

Если хотите вступить на этот путь, будьте готовы постоянно учиться. И учится много!

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

1. Писать смарт контракты и различные протоколы;
2. Проводить аудит и стать белым хакером;
3. Уйти в тестирование;
4. Разбирать взломы и отслеживать транзакции в разных сетях;
5. Заниматься узлами и стать валидатором;

Все это направления, которые каждый выбирает для себя после первых уроков с EVM и Solidity.

Сложно? Да. Интересно? Еще бы! Прибыльно? Определенно!

Однажды мы сделали правильный выбор!

Желаю вам всем успехов в профессиональной среде в новом году!

С Наступающим!

#last2023
🔥347👍6❤‍🔥1
Медленно, но верно, возвращаемся к работе

Фух, надеюсь ваши праздники прошли также хорошо, как и мои. Голова пустая, мозг способен воспринимать новую информацию и, что самое главное, есть желание вернутся к работе!

Так, чем займемся в январе?

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

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

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

Для тех, кто хотел попробовать участие в конкурсных аудитах, есть прекрасная возможность посетить онлайн встречу команды Code4rena: Getting started with c4, которая пройдет в этот четверг в 22:00 по мск.

Вот ссылка: https://discord.com/events/810916927919620096/1193677104433348728

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

Кстати, это прекрасный повод, наконец, зарегистрироваться в Дискорде.

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

Ну, а пока, настраиваемся на рабочий ритм, вспоминаем, как открывать VS Code и, что такое конструктор в контракте.

Всем приятного старта недели и легкого обучения!

#first2024
🔥182👍1
Временная группа для начинающих конкурсные аудиты?

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

Хотите соберем небольшую группу на ближайший конкурсный аудит?

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

Просто - как начать.

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

Кто хочет попробовать? Пройдите опрос ниже)
🔥13👍1
Соберем группу для начинающих в конкурсные аудиты?
Final Results
81%
Да, я готов присоединиться
19%
Может позже
1
🔥 Круто! 35 желающих за 15 минут) не думал, что тема такая востребованная)

Думаю, тогда завтра уже и начнем) как раз пара конкурсов идет на разных площадках)
15
Группа для начинающих в конкурсных аудитах

Офигеть! Не ожидал такого спроса от участников начать свой путь в конкурсных аудитах! 79 человек за ночь!

Открыл для вас чат-группу, где буду выкладывать гайды по площадкам. Будем разбирать по 1 платформе в день.

Сегодня начнем с Code4rena. Присоединяйтесь!

https://news.1rj.ru/str/+P7lY7zRXSEFmYjk6

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

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

#chat #audit
9👍4
Secureum Races теперь на Youtube

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

На данный момент вышло уже 25 Races! Посмотреть эти тесты можно в официальном дискорд сервере: https://discord.gg/RVD6YAUE

Более того, с недавнего времени, организатор этих билц-тестов, Патрик (не Коллинс), запустил свой ютуб канал, на котором разбирает вопросы и ответы с прошедших тестов.

Самое интересное то, что он не только говорит правильный ответ, но и детально рассказывает и объясняет некоторые нюансы работы языка, компилятора, EVM и сетей блокчейна в целом!

Вот ссылка на его канал: https://www.youtube.com/@patrickd_de/videos

За эти 5 - 10 минут в день можно не хило так прокачать свои знания. Очень рекомендую!

#races
11👍2🔥2
Как научиться видеть инварианты

Для практики тестов в 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
🔥8
RareSkills выпустила книгу по Compound

RareSkills уже некоторое время выпускает потрясающие обучающие твиты и статьи по теме Compound. И теперь они решили все объединить в одну электронную "книгу" - Compound V3.

https://www.rareskills.io/compound-v3-book

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

Если вам интересна работа одного из крупнейших DeFi протоколов, крайне рекомендую к изучению!

#compound
👍14
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
🔥7👏1🤯1
Забытый скрин к посту выше)
2👍1