Роудмап: Как стать аудитором смарт контрактов. Часть 2. Первичное знакомство с аудитом
Далее, после того, как мы изучили базовые контракты и стандарты, лучше всего будет продолжить свой путь с задач Capture The Flag - CTF.
4. Прохождение CTF
Открою вам маленький секрет: вовсе не обязательно самому решать эти задачи, можно просто сразу смотреть ответы на них.
В самом начале пути мы может не представлять себе, что такое "баг" или уязвимость вообще. Другими словами, решение таких задач будет как "ищу то, не знаю что, не знаю где и как". И с помощью разбора CTF задач нам важно получить два скилла:
1. Умение читать и понимать контракты;
2. Понимание базовых проблем в протоколах;
И в последнее время я все больше убеждаюсь, что понимание контрактов и протокола в целом, куда важнее для поиска багов, чем знание каких-либо паттернов.
Тут необходимо научиться изучать код контракта буквально на детали:
1. Отслеживать движение токенов;
2. Отслеживать, кто является msg.sender при вызовах функций;
3. Отслеживать несоответствия стандартам EIP;
4. Отслеживать изменения в памяти контракта, его переменных состояния;
Как понять для себя, что вы разобрались в контракте? Попробуйте на листке бумаги или в отдельном файле просто накидать его архитектуру и функции: что за что отвечает, что сохраняет и зачем это вообще надо. Справились? Супер, значит вы поняли суть контракта.
Подсматривая ответы и разбирая их, вы учитесь осознавать, что в любом контракте есть проблемы. И с каждой новой задачей вы будете учиться либо новому багу, либо их комбинации.
Правда, не старайтесь решать такие задачи с нулевыми знаниями. Смотрите ответы и учитесь. Так будет гораздо быстрее. А искать проблемы лучше уже на боевых конкурсных аудитах. Но об этом позже.
Буквально за один месяц, разбирая по одной-две задачи в день, можно научиться поиску многих базовых проблем. На данный момент я бы рекомендовал следующие CTF задачи:
1. https://capturetheether.com/
2. https://ethernaut.openzeppelin.com/
3. https://www.damnvulnerabledefi.xyz/
4. https://cryptozombies.io/
5. https://speedrunethereum.com/
6. https://ciphershastra.com/
7. https://mrstealyocrypto.xyz/
8. https://cryptohack.org/challenges/
9. https://www.defihack.xyz/
10. https://etherhack.positive.com/#/
11. https://www.ctfprotocol.com/
12. https://github.com/minaminao/ctf-blockchain/
В обязательно порядке я бы порекомендовал пройти первые три. Остальные - на ваше усмотрение и свободное время.
5. Решение задач из сниппетов кода
После того как мы научились базовым уязвимостям в смарт контрактах, можно переходить к упрощенным задачам, в которых показан только участок кода, а не весь контракт. Преимущества таких задач в том, что многие из них были взяты с реальных контрактов, которые проходили конкурсные или соло аудиты. Другими словами, это ваше первое столкновение с профессиональным кодом и подготовка к своему первому аудиту.
Достаточно много задач по уровням вы можете найти тут:
https://auditprofile.xyz/challenges.php
либо на Твиттер аккаунте Шерлока, которые на момент ноября-декабря этого года, практически каждую неделю выставляют новую задачу, например:
https://x.com/sherlockdefi/status/1860668335777775786
С такими задачами вы сможете научиться видеть в коде то, чего нет, а быть должно! Так, к слову, вы начнете понимать, какие проверки могут потребовать в данном случае, какое несоответствие стандарту, где забыли обновить память контракта, и т.д.
6. Понимание чеклистов и weird erc20
Weird ERC20 Tokens - это сборник описаний токенов одного стандарта, но с разными поведениями при вызовах. Одни могут брать комиссию за перевод, другие менять балансы пользователей, третьи не возвращать ответ после трансфера и много чего еще. Всего на данный момент описано около 20 не стандартных поведений. Все их можно и нужно прочитать тут:
https://github.com/d-xo/weird-erc20
Как лучше работать с ними, чтобы понять потенциальную проблему?
Далее, после того, как мы изучили базовые контракты и стандарты, лучше всего будет продолжить свой путь с задач Capture The Flag - CTF.
4. Прохождение CTF
Открою вам маленький секрет: вовсе не обязательно самому решать эти задачи, можно просто сразу смотреть ответы на них.
В самом начале пути мы может не представлять себе, что такое "баг" или уязвимость вообще. Другими словами, решение таких задач будет как "ищу то, не знаю что, не знаю где и как". И с помощью разбора CTF задач нам важно получить два скилла:
1. Умение читать и понимать контракты;
2. Понимание базовых проблем в протоколах;
И в последнее время я все больше убеждаюсь, что понимание контрактов и протокола в целом, куда важнее для поиска багов, чем знание каких-либо паттернов.
Тут необходимо научиться изучать код контракта буквально на детали:
1. Отслеживать движение токенов;
2. Отслеживать, кто является msg.sender при вызовах функций;
3. Отслеживать несоответствия стандартам EIP;
4. Отслеживать изменения в памяти контракта, его переменных состояния;
Как понять для себя, что вы разобрались в контракте? Попробуйте на листке бумаги или в отдельном файле просто накидать его архитектуру и функции: что за что отвечает, что сохраняет и зачем это вообще надо. Справились? Супер, значит вы поняли суть контракта.
Подсматривая ответы и разбирая их, вы учитесь осознавать, что в любом контракте есть проблемы. И с каждой новой задачей вы будете учиться либо новому багу, либо их комбинации.
Правда, не старайтесь решать такие задачи с нулевыми знаниями. Смотрите ответы и учитесь. Так будет гораздо быстрее. А искать проблемы лучше уже на боевых конкурсных аудитах. Но об этом позже.
Буквально за один месяц, разбирая по одной-две задачи в день, можно научиться поиску многих базовых проблем. На данный момент я бы рекомендовал следующие CTF задачи:
1. https://capturetheether.com/
2. https://ethernaut.openzeppelin.com/
3. https://www.damnvulnerabledefi.xyz/
4. https://cryptozombies.io/
5. https://speedrunethereum.com/
6. https://ciphershastra.com/
7. https://mrstealyocrypto.xyz/
8. https://cryptohack.org/challenges/
9. https://www.defihack.xyz/
10. https://etherhack.positive.com/#/
11. https://www.ctfprotocol.com/
12. https://github.com/minaminao/ctf-blockchain/
В обязательно порядке я бы порекомендовал пройти первые три. Остальные - на ваше усмотрение и свободное время.
5. Решение задач из сниппетов кода
После того как мы научились базовым уязвимостям в смарт контрактах, можно переходить к упрощенным задачам, в которых показан только участок кода, а не весь контракт. Преимущества таких задач в том, что многие из них были взяты с реальных контрактов, которые проходили конкурсные или соло аудиты. Другими словами, это ваше первое столкновение с профессиональным кодом и подготовка к своему первому аудиту.
Достаточно много задач по уровням вы можете найти тут:
https://auditprofile.xyz/challenges.php
либо на Твиттер аккаунте Шерлока, которые на момент ноября-декабря этого года, практически каждую неделю выставляют новую задачу, например:
https://x.com/sherlockdefi/status/1860668335777775786
С такими задачами вы сможете научиться видеть в коде то, чего нет, а быть должно! Так, к слову, вы начнете понимать, какие проверки могут потребовать в данном случае, какое несоответствие стандарту, где забыли обновить память контракта, и т.д.
6. Понимание чеклистов и weird erc20
Weird ERC20 Tokens - это сборник описаний токенов одного стандарта, но с разными поведениями при вызовах. Одни могут брать комиссию за перевод, другие менять балансы пользователей, третьи не возвращать ответ после трансфера и много чего еще. Всего на данный момент описано около 20 не стандартных поведений. Все их можно и нужно прочитать тут:
https://github.com/d-xo/weird-erc20
Как лучше работать с ними, чтобы понять потенциальную проблему?
🔥6👍1
Есть такой прекрасный сайт - Solodit.xyz - который собрал многие отчеты с конкурсных платформ и от частных аудиторов. Когда вы откроете его, в левой части экрана будет располагаться фильтр и поиск. С помощью него можно искать проблемы с различными токенами.
Например, вы вбиваете в поиск "fee-on-transfer" и медленно, вникая в проблему, начинаете изучать отчет. Так можно пройтись по всему списку Weird и научиться находить проблемы, связанные с разными токенами.
Вместе с токенами и Solodit можно начать потихоньку разбирать некоторые чеклисты с описанием багов и моментов, на которые стоит обращать внимание при аудите.
Вообще не переживайте, если что-то будет не понятно. Зачастую такие чеклисты пишутся разработчиками для разработчиков, или продвинутыми аудиторами для коллег. Там часто бывают недосказанности в пунктах. И их можно спокойно пропускать.
Для своего обучения можно пройтись по следующим чеклистам:
1. https://solodit.xyz/checklist
2. https://betterprogramming.pub/the-ultimate-100-point-checklist-before-sending-your-smart-contract-for-audit-af9a5b5d95d0
3. https://github.com/0xJuancito/multichain-auditor
4. https://github.com/spearbit/portfolio/blob/master/content/bridges/BridgeSecurityChecklist.md
5. https://x.com/sigp_io/status/1703363387592462633?s=20
6. https://officercia.mirror.xyz/d798TVQyA1ALq3qr1R9vvujdF7x-erXxK2wQWwbgRKY
7. https://github.com/Decurity/audit-checklists/blob/master/lsd.md
8. https://www.beirao.xyz/blog/Security-checklist
9. https://docs.layerzero.network/v1/developers/troubleshooting/integration-checklist
10. https://github.com/aviggiano/security/blob/main/audit-checklists/ERC-4337.md
11. https://github.com/crytic/building-secure-contracts/blob/master/development-guidelines/guidelines.md
Эти три пункта могут занять у вас месяц и более, но точно помогут лучше разобраться в уязвимостях и современных багах.
В следующей части мы поговорим, как продолжить свое обучение и начать принимать участие в конкурсах.
#audit
Например, вы вбиваете в поиск "fee-on-transfer" и медленно, вникая в проблему, начинаете изучать отчет. Так можно пройтись по всему списку Weird и научиться находить проблемы, связанные с разными токенами.
Вместе с токенами и Solodit можно начать потихоньку разбирать некоторые чеклисты с описанием багов и моментов, на которые стоит обращать внимание при аудите.
Вообще не переживайте, если что-то будет не понятно. Зачастую такие чеклисты пишутся разработчиками для разработчиков, или продвинутыми аудиторами для коллег. Там часто бывают недосказанности в пунктах. И их можно спокойно пропускать.
Для своего обучения можно пройтись по следующим чеклистам:
1. https://solodit.xyz/checklist
2. https://betterprogramming.pub/the-ultimate-100-point-checklist-before-sending-your-smart-contract-for-audit-af9a5b5d95d0
3. https://github.com/0xJuancito/multichain-auditor
4. https://github.com/spearbit/portfolio/blob/master/content/bridges/BridgeSecurityChecklist.md
5. https://x.com/sigp_io/status/1703363387592462633?s=20
6. https://officercia.mirror.xyz/d798TVQyA1ALq3qr1R9vvujdF7x-erXxK2wQWwbgRKY
7. https://github.com/Decurity/audit-checklists/blob/master/lsd.md
8. https://www.beirao.xyz/blog/Security-checklist
9. https://docs.layerzero.network/v1/developers/troubleshooting/integration-checklist
10. https://github.com/aviggiano/security/blob/main/audit-checklists/ERC-4337.md
11. https://github.com/crytic/building-secure-contracts/blob/master/development-guidelines/guidelines.md
Эти три пункта могут занять у вас месяц и более, но точно помогут лучше разобраться в уязвимостях и современных багах.
В следующей части мы поговорим, как продолжить свое обучение и начать принимать участие в конкурсах.
#audit
🔥13👍1
Роудмап: Как стать аудитором смарт контрактов. Часть 3. Боевое крещение
Ну, и завершаем наш роудмап для начинающего аудитора парой дополнительных пунктов.
7. Чтение отчетов прошедших конкурсных аудитов
Вообще читать отчеты по прошедшим аудитам я бы рекомендовал не только всем аудиторам, но и разработчикам, создающим уникальный протокол.
С помощью таких отчетов вы научитесь сразу нескольким вещам:
1. Понимать современные уязвимости;
2. Писать отчеты;
3. Разбирать доказательства багов (PoC);
Самый первый вопрос, который мне задавали: а как выбирать отчет для изучения, ведь я не знаю протокол и, скорее всего, не пойму проблему?
В это нет ничего страшного или сложного.
В отчетах бывают как простые примеры уязвимостей, которые вы сможете понять просто взглянув на код, так и уникальные для протокола. Баги из второго вида вы можете спокойно пропускать или же попытаться вникнуть, если планируете поучаствовать в следующем конкурсном аудите этого же проекта.
Будет также здорово, если заведете для себя файл/таблицу, куда будете записывать интересные для себя уязвимости. Вам будет намного проще вспоминать примеры или формулировки для своих бедующих конкурсов с помощью таких файлов.
Также, еще один отличный вариант практики для начинающего аудитора будет поиск похожих уязвимостей на Solodit. Например, вы встретили баг с темой некорректных подписей RC712, и тут же нашли еще 5 примеров, которые записали в свою таблицу.
Я бы назвал следующие темы багов популярными в современных аудитах:
1. Подписи;
2. Прокси и обновляемые контракты;
3. Интеграция с Uniswap v2/v3;
4. Различия l2 сетей, в частности zk synk и base;
5. Математические операции: потеря точности при делении, округление вверх/вниз;
6. Timelock и governance;
В целом, вы можете сразу зайти на Solodit и разобрать для себя по 10 багов каждого пункта. Так вы получите первый опыт чтения репортов и начнете вести файл.
8. Участие в конкурсах и разбор протоколов
А тут самый первый вопрос будет: "Какую платформу выбрать для новичка?".
В Твиттере был прекрасный пост от пользователя Flint, который написал небольшой обзор на современные платформу. И далее пойдет перевод этого поста.
1. Code4rena : «Нежный гигант»
Изначальная конкурсная платформа, которая зажгла искру для всей индустрии web3-аудита, @code4rena приняла на работу тысячи и тысячи новых аудиторов и остается известным всем именем. Под руководством всегда приветливого sockdrawermoney, C4 продолжает внедрять новые продукты и идеи почти ежемесячно.
Преимущества:
- Наиболее зрелая платформа с установленными правилами и процедурами.
- Постоянный поток новых конкурсов.
- Пригласительные аудиты и Про-лига для лучших аудиторов.
- Солидная судейская репутация и единственная платформа, позволяющая вызывать трибунал, чтобы оспорить решение судьи.
Недостатки:
- Крайне переполненная площадка, 1000+ заявок на один конкурс - очень частое явление.
- Единственная платформа, где вы можете иметь 3 высоких и 2 средних балла и все равно не заработать достаточно, чтобы купить бургер в McDonalds.
- Пока вы не получите доступ за кулисы, вы не сможете присоединиться к PJQA и убедиться, что ваши заявки не были признаны недействительными по ошибке.
2. CodeHawks: "Занятие в школе"
Нельзя говорить о CodeHawks, не обсуждая Cyfrin Audits. Основанная Патриком Коллинсом и Алексом Роаном, компания Cyfrin является одновременно аудиторской, конкурсной и образовательной платформой. Сочетание солидных курсов от Cyfrin Updraft с «Первыми полетами» не вызывает сомнений, что это лучшее место для обучения.
Преимущества:
- «Первые полеты», обучающие аудиты, которые CH предлагает на ежемесячной основе, - отличный способ начать участвовать в конкурсах.
- Более мягкая платформа с меньшей конкуренцией, поскольку у высококвалифицированных аудиторов нет стимула фокусироваться исключительно на CH.
Недостатки:
Ну, и завершаем наш роудмап для начинающего аудитора парой дополнительных пунктов.
7. Чтение отчетов прошедших конкурсных аудитов
Вообще читать отчеты по прошедшим аудитам я бы рекомендовал не только всем аудиторам, но и разработчикам, создающим уникальный протокол.
С помощью таких отчетов вы научитесь сразу нескольким вещам:
1. Понимать современные уязвимости;
2. Писать отчеты;
3. Разбирать доказательства багов (PoC);
Самый первый вопрос, который мне задавали: а как выбирать отчет для изучения, ведь я не знаю протокол и, скорее всего, не пойму проблему?
В это нет ничего страшного или сложного.
В отчетах бывают как простые примеры уязвимостей, которые вы сможете понять просто взглянув на код, так и уникальные для протокола. Баги из второго вида вы можете спокойно пропускать или же попытаться вникнуть, если планируете поучаствовать в следующем конкурсном аудите этого же проекта.
Будет также здорово, если заведете для себя файл/таблицу, куда будете записывать интересные для себя уязвимости. Вам будет намного проще вспоминать примеры или формулировки для своих бедующих конкурсов с помощью таких файлов.
Также, еще один отличный вариант практики для начинающего аудитора будет поиск похожих уязвимостей на Solodit. Например, вы встретили баг с темой некорректных подписей RC712, и тут же нашли еще 5 примеров, которые записали в свою таблицу.
Я бы назвал следующие темы багов популярными в современных аудитах:
1. Подписи;
2. Прокси и обновляемые контракты;
3. Интеграция с Uniswap v2/v3;
4. Различия l2 сетей, в частности zk synk и base;
5. Математические операции: потеря точности при делении, округление вверх/вниз;
6. Timelock и governance;
В целом, вы можете сразу зайти на Solodit и разобрать для себя по 10 багов каждого пункта. Так вы получите первый опыт чтения репортов и начнете вести файл.
8. Участие в конкурсах и разбор протоколов
А тут самый первый вопрос будет: "Какую платформу выбрать для новичка?".
В Твиттере был прекрасный пост от пользователя Flint, который написал небольшой обзор на современные платформу. И далее пойдет перевод этого поста.
1. Code4rena : «Нежный гигант»
Изначальная конкурсная платформа, которая зажгла искру для всей индустрии web3-аудита, @code4rena приняла на работу тысячи и тысячи новых аудиторов и остается известным всем именем. Под руководством всегда приветливого sockdrawermoney, C4 продолжает внедрять новые продукты и идеи почти ежемесячно.
Преимущества:
- Наиболее зрелая платформа с установленными правилами и процедурами.
- Постоянный поток новых конкурсов.
- Пригласительные аудиты и Про-лига для лучших аудиторов.
- Солидная судейская репутация и единственная платформа, позволяющая вызывать трибунал, чтобы оспорить решение судьи.
Недостатки:
- Крайне переполненная площадка, 1000+ заявок на один конкурс - очень частое явление.
- Единственная платформа, где вы можете иметь 3 высоких и 2 средних балла и все равно не заработать достаточно, чтобы купить бургер в McDonalds.
- Пока вы не получите доступ за кулисы, вы не сможете присоединиться к PJQA и убедиться, что ваши заявки не были признаны недействительными по ошибке.
2. CodeHawks: "Занятие в школе"
Нельзя говорить о CodeHawks, не обсуждая Cyfrin Audits. Основанная Патриком Коллинсом и Алексом Роаном, компания Cyfrin является одновременно аудиторской, конкурсной и образовательной платформой. Сочетание солидных курсов от Cyfrin Updraft с «Первыми полетами» не вызывает сомнений, что это лучшее место для обучения.
Преимущества:
- «Первые полеты», обучающие аудиты, которые CH предлагает на ежемесячной основе, - отличный способ начать участвовать в конкурсах.
- Более мягкая платформа с меньшей конкуренцией, поскольку у высококвалифицированных аудиторов нет стимула фокусироваться исключительно на CH.
Недостатки:
❤4👍1
- Становление лучшим аудитором в CH в настоящее время не имеет никаких преимуществ. Здесь нет пригласительных аудитов, нет ведущего старшего Ватсона или других возможностей для лучших аудиторов.
- Малое количество конкурсов по сравнению с C4 или Шерлоком.
- Cyfrin пытается делать все. Иногда непонятно, что это - образовательная платформа с конкурсами или платформа для конкурсов с образованием.
3. Шерлок: «Хардкорное PvP»
Примечание: Если вы читаете X, то вскоре узнаете, что у Sherlock ужасная репутация, когда речь идет о судействе и эскалации. Хотя они, безусловно, заслужили такую репутацию, важно также признать, что они - единственная платформа, которая полностью прозрачна во всем. У других платформ также есть некоторые из этих проблем, но они держат их в секрете. Поэтому при сравнении платформ не следует рассматривать их как черно-белые, а скорее как светло-серые/темно-серые.
Компания Шерлок предлагает клиентам гибридную модель между частными аудитами и публичными конкурсами. В каждом конкурсе есть ведущий старший Ватсон - эксперт, который получает фиксированный процент от конкурсного пула. Затем LSW соревнуется с каждым участвующим аудитором за оставшуюся часть банка.
Основная ценность «Шерлока» - меритократия. Хотите стать LSW? Тогда победите его и займите его место. Хотите стать ведущим судьей? Тогда победите нынешнего судью и станьте судьей. Все - это соревнование, в котором побеждает тот, кто стоит первым.
Преимущества:
- Если вы любите бесконечные споры и безжалостную конкуренцию, это место для вас.
- Это делают немногие, поэтому количество участников ниже, чем на других платформах.
- Постоянный поток небольших конкурсов с очень коротким циклом обратной связи.
- Если вы сможете стать LSW, вы будете в большом плюсе.
Недостатки:
- Судьи выбираются через соревновательную систему лидерборда, подобную LSW, где они соревнуются в судействе сообщества после каждого конкурса. Лучший участник может стать ведущим судьей конкурса. Однако вознаграждение судьи чрезвычайно мало по сравнению с другими платформами. В результате у тех, кто обладает необходимым опытом для правильного судейства, нет экономического стимула участвовать в конкурсе. Следовательно, зачастую ведущий судья не обладает необходимыми знаниями.
- Отсутствие объяснений, почему результат признан недействительным, и недоверие к ведущему судье приводят к неприличному количеству эскалаций в каждом конкурсе.
- Каждая эскалация быстро превращается в перепалку между участниками, которые экономически стимулированы делать все, чтобы победить. Если вам удастся подтвердить недействительный вывод, судья потеряет деньги. Если вы можете признать недействительным чужой вывод, вы получаете деньги. В сущности, предательство выгодно, а «твоя потеря - моя выгода», так что это становится нормой.
- Эскалация может затянуться на недели.
-Интерпретация правил судейства Шерлока может меняться в разных конкурсах, а также рамки конкурса могут меняться во время или даже после его завершения.
4. Hats: «Скорость - это любовь, скорость - это жизнь»
Уникальная платформа Hats Finance полностью основана на скорости. Каждый конкурс - это гонка, в которой вознаграждается только тот, кто первым представит находку. Заявка подается на цепочке с доказательством концепции, и временная метка решает, получите ли вы все или ничего.
Преимущества:
- Если вы любите адреналин, то вам обязательно понравится Hats.
- Банк не разбавляется дубликатами. Так что если вы попали в банк, то вы попали в него по-крупному.
Многим не нравится давление, поэтому конкуренция намного ниже, чем на других платформах.
Недостатки:
- Высокая дисперсия. Вы можете подать 10 правильных заявок и получить 0 долларов только потому, что опоздали на 1 секунду.
- Психический стресс. Мало того, что вы не знаете, будет ли ваша находка признана достоверной, так еще и дополнительный стресс от того, что вы не знаете, были ли вы первыми.
5. Cantina: «There Be Dragons»
- Малое количество конкурсов по сравнению с C4 или Шерлоком.
- Cyfrin пытается делать все. Иногда непонятно, что это - образовательная платформа с конкурсами или платформа для конкурсов с образованием.
3. Шерлок: «Хардкорное PvP»
Примечание: Если вы читаете X, то вскоре узнаете, что у Sherlock ужасная репутация, когда речь идет о судействе и эскалации. Хотя они, безусловно, заслужили такую репутацию, важно также признать, что они - единственная платформа, которая полностью прозрачна во всем. У других платформ также есть некоторые из этих проблем, но они держат их в секрете. Поэтому при сравнении платформ не следует рассматривать их как черно-белые, а скорее как светло-серые/темно-серые.
Компания Шерлок предлагает клиентам гибридную модель между частными аудитами и публичными конкурсами. В каждом конкурсе есть ведущий старший Ватсон - эксперт, который получает фиксированный процент от конкурсного пула. Затем LSW соревнуется с каждым участвующим аудитором за оставшуюся часть банка.
Основная ценность «Шерлока» - меритократия. Хотите стать LSW? Тогда победите его и займите его место. Хотите стать ведущим судьей? Тогда победите нынешнего судью и станьте судьей. Все - это соревнование, в котором побеждает тот, кто стоит первым.
Преимущества:
- Если вы любите бесконечные споры и безжалостную конкуренцию, это место для вас.
- Это делают немногие, поэтому количество участников ниже, чем на других платформах.
- Постоянный поток небольших конкурсов с очень коротким циклом обратной связи.
- Если вы сможете стать LSW, вы будете в большом плюсе.
Недостатки:
- Судьи выбираются через соревновательную систему лидерборда, подобную LSW, где они соревнуются в судействе сообщества после каждого конкурса. Лучший участник может стать ведущим судьей конкурса. Однако вознаграждение судьи чрезвычайно мало по сравнению с другими платформами. В результате у тех, кто обладает необходимым опытом для правильного судейства, нет экономического стимула участвовать в конкурсе. Следовательно, зачастую ведущий судья не обладает необходимыми знаниями.
- Отсутствие объяснений, почему результат признан недействительным, и недоверие к ведущему судье приводят к неприличному количеству эскалаций в каждом конкурсе.
- Каждая эскалация быстро превращается в перепалку между участниками, которые экономически стимулированы делать все, чтобы победить. Если вам удастся подтвердить недействительный вывод, судья потеряет деньги. Если вы можете признать недействительным чужой вывод, вы получаете деньги. В сущности, предательство выгодно, а «твоя потеря - моя выгода», так что это становится нормой.
- Эскалация может затянуться на недели.
-Интерпретация правил судейства Шерлока может меняться в разных конкурсах, а также рамки конкурса могут меняться во время или даже после его завершения.
4. Hats: «Скорость - это любовь, скорость - это жизнь»
Уникальная платформа Hats Finance полностью основана на скорости. Каждый конкурс - это гонка, в которой вознаграждается только тот, кто первым представит находку. Заявка подается на цепочке с доказательством концепции, и временная метка решает, получите ли вы все или ничего.
Преимущества:
- Если вы любите адреналин, то вам обязательно понравится Hats.
- Банк не разбавляется дубликатами. Так что если вы попали в банк, то вы попали в него по-крупному.
Многим не нравится давление, поэтому конкуренция намного ниже, чем на других платформах.
Недостатки:
- Высокая дисперсия. Вы можете подать 10 правильных заявок и получить 0 долларов только потому, что опоздали на 1 секунду.
- Психический стресс. Мало того, что вы не знаете, будет ли ваша находка признана достоверной, так еще и дополнительный стресс от того, что вы не знаете, были ли вы первыми.
5. Cantina: «There Be Dragons»
❤1👍1
Основанная элитной аудиторской компанией SpearbitDAO, Кантина - это конкурсная платформа, на которой элитные аудиторы соревнуются за код высочайшего качества.
Преимущества:
- Вы можете проверить свои силы в борьбе с легендами индустрии.
- Если у вас есть достоверные результаты, вознаграждение часто в 10 раз превышает вознаграждение на других платформах.
- Элитные исполнители могут получить приглашение на Spearbit.
Недостатки:
- Вы будете раздавлены легендами индустрии.
- Код часто сначала проверяется самим Spearbit, поэтому найти что-то гораздо сложнее.
- Полученные результаты сразу же становятся известны команде протокола, что может привести к нежелательным последствиям в крайних случаях.
- В настоящее время в общий доступ выкладывается очень мало информации о внутренней работе (выводы/суждения/эскалации), их админ заявил, что это работа в процессе.
6. Immunefi: «Охота на китов»
Хотя существует множество конкурсных платформ, для получения вознаграждений есть только одна. Immunefi предлагает сотни миллионов в виде багов за развернутые web3-контракты. С прошлого года они также начали проводить ограниченные по времени конкурсы Boosted и совсем недавно - Attackathons, которые сочетают в себе обширное обучение и конкурс.
Преимущества:
- Каждый месяц на Immunefi зарабатываются миллионеры.
- На аудит кодовой базы вы можете потратить столько времени, сколько захотите. В отличие от конкурсов, здесь нет ограничений по времени.
- С помощью бустов вы можете проводить классические конкурсы по аудиту с гарантированным призовым фондом.
- Атакатоны позволяют глубоко изучить определенный протокол/язык/фреймворк, а затем проверить свои приобретенные навыки в конкурсе.
Недостатки:
- Чрезвычайная вариативность. Крупные выигрыши очень публичны, а месяцев, когда вы получали $0, - не так уж и много. Я знаю людей, которые в один год заработали 100 тысяч долларов, а в другой - 2 тысячи.
- Протоколы часто могут решить не платить за действительную заявку. Посредничество Immunefi делает все возможное, но часто вы оказываетесь во власти протокола.
Как не самый профессиональный аудитор, для себя выбрал code4rena и codehawks. Мне нравится, что там дают развернутую причину не валидности бага, что делает мое обучение намного эффективнее.
Однако вы можете попробовать каждую и решить для себя, где будет работать комфортнее.
Надеюсь, эта серия постов смогла дать вам всю необходимую информацию по старту пути в аудите и безопасности смарт контрактов.
#audit
Преимущества:
- Вы можете проверить свои силы в борьбе с легендами индустрии.
- Если у вас есть достоверные результаты, вознаграждение часто в 10 раз превышает вознаграждение на других платформах.
- Элитные исполнители могут получить приглашение на Spearbit.
Недостатки:
- Вы будете раздавлены легендами индустрии.
- Код часто сначала проверяется самим Spearbit, поэтому найти что-то гораздо сложнее.
- Полученные результаты сразу же становятся известны команде протокола, что может привести к нежелательным последствиям в крайних случаях.
- В настоящее время в общий доступ выкладывается очень мало информации о внутренней работе (выводы/суждения/эскалации), их админ заявил, что это работа в процессе.
6. Immunefi: «Охота на китов»
Хотя существует множество конкурсных платформ, для получения вознаграждений есть только одна. Immunefi предлагает сотни миллионов в виде багов за развернутые web3-контракты. С прошлого года они также начали проводить ограниченные по времени конкурсы Boosted и совсем недавно - Attackathons, которые сочетают в себе обширное обучение и конкурс.
Преимущества:
- Каждый месяц на Immunefi зарабатываются миллионеры.
- На аудит кодовой базы вы можете потратить столько времени, сколько захотите. В отличие от конкурсов, здесь нет ограничений по времени.
- С помощью бустов вы можете проводить классические конкурсы по аудиту с гарантированным призовым фондом.
- Атакатоны позволяют глубоко изучить определенный протокол/язык/фреймворк, а затем проверить свои приобретенные навыки в конкурсе.
Недостатки:
- Чрезвычайная вариативность. Крупные выигрыши очень публичны, а месяцев, когда вы получали $0, - не так уж и много. Я знаю людей, которые в один год заработали 100 тысяч долларов, а в другой - 2 тысячи.
- Протоколы часто могут решить не платить за действительную заявку. Посредничество Immunefi делает все возможное, но часто вы оказываетесь во власти протокола.
Как не самый профессиональный аудитор, для себя выбрал code4rena и codehawks. Мне нравится, что там дают развернутую причину не валидности бага, что делает мое обучение намного эффективнее.
Однако вы можете попробовать каждую и решить для себя, где будет работать комфортнее.
Надеюсь, эта серия постов смогла дать вам всю необходимую информацию по старту пути в аудите и безопасности смарт контрактов.
#audit
🔥7❤4👍1
Конкурсные аудиты с пулом "по условию" - Conditional Pool
И последний пост про аудиты, так как на следующей неделе, хочу разобрать одну тему, которой еще не было на канале.
В последнее время в сфере конкурсных площадок все чаще проявляется такое сомнительное решение как Conditional Pool, или пул наград аудиторам, который может быть изменен в зависимости от найденных багов. Например, конкурс с наградой в 1 миллион: если в протоколе будут найдены криты, то размер пула - 1 млн, если только Med , то пул 250к, если Low - 50к. От этого раздувается рекламная кампания в соцсетях и многие восторгаются очередным "Рекордным конкурсом".
Но сколько в действительности получали аудиторы за такие конкурсы?
В одном посте в Твиттере пользователь с ником guhu сделал несколько примечательных выводов. Далее идет перевод:
Это в основном предупреждение для будущих участников. Знайте, чего ожидать, и корректируйте свой EV-калькулятор. Ниже приведены несколько примеров и «рекордов».
1. Uniswap
- Раздутый как крупнейший в истории конкурс на 2,35 млн, выплатил только 12% от суммы шумихи (300 тыс.)
- 🏆Рекорд побит: крупнейшее в истории завышенное обещание ✨ 2,050,000 в USDC!!! ✨ (маркетинг любит нули и запятые)
- 2 хая (ИМХО) понижены в рейтинге: одно отклонено, другое понижено. На обоих проект отменил решение судьи (назначив «независимую» комиссию из 3 анонов-судей). Я отстаивал один из выводов, вот откуда я знаю.
- Но есть и положительный момент: это, по крайней мере, полупублично, так что вы знаете, как ваши отчеты о вознаграждениях могут быть обработаны и опосредованы.
2. Euler
- В течение нескольких месяцев его рекламировали как (вы угадали!) крупнейший в истории конкурс на 1,25 млн.
- Результаты так сильно снизились, что по правилам они должны были выплатить всего 1% (!!!) от суммы шумихи (20k). От стыда добавили 180к (так что 16%).
- 🏆Рекорд побит: самое отвратительное понижение рейтинга в промышленных масштабах, которое я когда-либо видел. Тошнит от одного только чтения эскалаций.
- Понизили (ИМХО!) как минимум один хай до лоу (!), как минимум один средний.
- Опять же, полупублично, так что, по крайней мере, вы можете выбирать цели для баунти с умом.
3. Maker
- Отношение к проекту было на самом деле хорошим, этот в основном на Шерлоке.
- Раздули до 1,35М (самый большой в истории!!), а заплатили 0 ревьюверам! Вместо этого 430к были выплачены людям, которые ... застейкали поинты. Я считаю, что участникам было выплачено 0%, но вы можете считать это 31%, если хотите.
- Вот что: на 2 и 3 местах в итоговой таблице лидеров было по 0 заявок. А 2 место (с 0 заявок!) активно боролось с эскалациями против (!) других. Вот это действительно мышление атакующего, да?
- 🏆Побит рекорд: больше всего «Я даже не могу...»
4. Другие заметные ООООффффффы
- Balancer (еще в процессе): 500к, похоже, будет 25% (125к).
- Panoptic: рекламировался как 80k, заплатили только 6% (5k) от шумихи.
- Fluid: 250k, заплатили 20% (50k).
- AAVE: 150k, заплатили 13% (20k).
Далее от меня лично.
При этом всем, протоколы имеют доступ к вашим находкам и исправят все проблемы, которые посчитают нужными. И даже если вы нашли "твердый Med", который на судействе опустили до Low или даже Info, и вы не получили с него выплаты, протокол все равно будет в плюсе.
Я считаю, что такие конкурсы должны судиться абсолютно сторонними судьями, которые никак не связаны с площадкой, а сами находки должны быть полностью анонимными, чтобы исключить любое выделение "любимчиков" конкурсной платформы и аудиторов на контракте.
В противном случае - это просто превратится в цирк.
#audit
И последний пост про аудиты, так как на следующей неделе, хочу разобрать одну тему, которой еще не было на канале.
В последнее время в сфере конкурсных площадок все чаще проявляется такое сомнительное решение как Conditional Pool, или пул наград аудиторам, который может быть изменен в зависимости от найденных багов. Например, конкурс с наградой в 1 миллион: если в протоколе будут найдены криты, то размер пула - 1 млн, если только Med , то пул 250к, если Low - 50к. От этого раздувается рекламная кампания в соцсетях и многие восторгаются очередным "Рекордным конкурсом".
Но сколько в действительности получали аудиторы за такие конкурсы?
В одном посте в Твиттере пользователь с ником guhu сделал несколько примечательных выводов. Далее идет перевод:
Это в основном предупреждение для будущих участников. Знайте, чего ожидать, и корректируйте свой EV-калькулятор. Ниже приведены несколько примеров и «рекордов».
1. Uniswap
- Раздутый как крупнейший в истории конкурс на 2,35 млн, выплатил только 12% от суммы шумихи (300 тыс.)
- 🏆Рекорд побит: крупнейшее в истории завышенное обещание ✨ 2,050,000 в USDC!!! ✨ (маркетинг любит нули и запятые)
- 2 хая (ИМХО) понижены в рейтинге: одно отклонено, другое понижено. На обоих проект отменил решение судьи (назначив «независимую» комиссию из 3 анонов-судей). Я отстаивал один из выводов, вот откуда я знаю.
- Но есть и положительный момент: это, по крайней мере, полупублично, так что вы знаете, как ваши отчеты о вознаграждениях могут быть обработаны и опосредованы.
2. Euler
- В течение нескольких месяцев его рекламировали как (вы угадали!) крупнейший в истории конкурс на 1,25 млн.
- Результаты так сильно снизились, что по правилам они должны были выплатить всего 1% (!!!) от суммы шумихи (20k). От стыда добавили 180к (так что 16%).
- 🏆Рекорд побит: самое отвратительное понижение рейтинга в промышленных масштабах, которое я когда-либо видел. Тошнит от одного только чтения эскалаций.
- Понизили (ИМХО!) как минимум один хай до лоу (!), как минимум один средний.
- Опять же, полупублично, так что, по крайней мере, вы можете выбирать цели для баунти с умом.
3. Maker
- Отношение к проекту было на самом деле хорошим, этот в основном на Шерлоке.
- Раздули до 1,35М (самый большой в истории!!), а заплатили 0 ревьюверам! Вместо этого 430к были выплачены людям, которые ... застейкали поинты. Я считаю, что участникам было выплачено 0%, но вы можете считать это 31%, если хотите.
- Вот что: на 2 и 3 местах в итоговой таблице лидеров было по 0 заявок. А 2 место (с 0 заявок!) активно боролось с эскалациями против (!) других. Вот это действительно мышление атакующего, да?
- 🏆Побит рекорд: больше всего «Я даже не могу...»
4. Другие заметные ООООффффффы
- Balancer (еще в процессе): 500к, похоже, будет 25% (125к).
- Panoptic: рекламировался как 80k, заплатили только 6% (5k) от шумихи.
- Fluid: 250k, заплатили 20% (50k).
- AAVE: 150k, заплатили 13% (20k).
Далее от меня лично.
При этом всем, протоколы имеют доступ к вашим находкам и исправят все проблемы, которые посчитают нужными. И даже если вы нашли "твердый Med", который на судействе опустили до Low или даже Info, и вы не получили с него выплаты, протокол все равно будет в плюсе.
Я считаю, что такие конкурсы должны судиться абсолютно сторонними судьями, которые никак не связаны с площадкой, а сами находки должны быть полностью анонимными, чтобы исключить любое выделение "любимчиков" конкурсной платформы и аудиторов на контракте.
В противном случае - это просто превратится в цирк.
#audit
6👍3😱3
Планы на две недели и отпуск
Тему с аудитами продолжим чуть позже, пока жду результатов с последнего конкурса и хочу поучаствовать еще в двух на с4. Если будет что-то интересное по работе с записями или какие-то интересные функции в контрактах, то обязательно дам знать.
Также через две недели с 15 декабря, я решил взять долгий отпуск на целый месяц! У меня получился очень насыщенный год и хочу взять время отдохнуть, пересмотреть свои идеи, понять, чего хочу, и куда двигаться дальше, и уже с новыми силами врываться в новый год!
А на этой неделе планирую разобрать, что такое RSA подписи, прочитав статью с RareSkills: Solidity RSA signatures for aidrops and presales: Beating ECDSA and Merkle Trees in Gas Efficiency.
Вообще, на эту тему меня навела другая статья про Tornado Cash.
Если помните, у меня была идеи завести отдельный канал / ресурс для разбора DeFi протоколов и их механик. Я долго выбирал, где это будет удобнее делать и решил, что пока не хочу заморачиваться с созданием какой-то библиотеки, типа GitBook или что-то типа того. Для этого нужно больше материала и переведенных постов. Поэтому, по привычке, завел отдельный телеграм канал.
Сначала переносил туда некоторые статьи из этого, основного, канала, а с прошлой недели потихоньку начали разбирать новую тему - Tornado Cash.
В целом, пока что я планирую там пару раз в неделю размещать просто переводы статей о DeFi протоколах с различных ресурсов, например, RareSkills, Alchemy, Updraft и других. Если вам интересно, то присоединяйтесь:
https://news.1rj.ru/str/+CTsJv2XzxacwM2Ji
Это будет абсолютно не спешные переводы и разборы.
А так, все прекрасной первой неделе зимы и легкого обучения!
#offtop
Тему с аудитами продолжим чуть позже, пока жду результатов с последнего конкурса и хочу поучаствовать еще в двух на с4. Если будет что-то интересное по работе с записями или какие-то интересные функции в контрактах, то обязательно дам знать.
Также через две недели с 15 декабря, я решил взять долгий отпуск на целый месяц! У меня получился очень насыщенный год и хочу взять время отдохнуть, пересмотреть свои идеи, понять, чего хочу, и куда двигаться дальше, и уже с новыми силами врываться в новый год!
А на этой неделе планирую разобрать, что такое RSA подписи, прочитав статью с RareSkills: Solidity RSA signatures for aidrops and presales: Beating ECDSA and Merkle Trees in Gas Efficiency.
Вообще, на эту тему меня навела другая статья про Tornado Cash.
Если помните, у меня была идеи завести отдельный канал / ресурс для разбора DeFi протоколов и их механик. Я долго выбирал, где это будет удобнее делать и решил, что пока не хочу заморачиваться с созданием какой-то библиотеки, типа GitBook или что-то типа того. Для этого нужно больше материала и переведенных постов. Поэтому, по привычке, завел отдельный телеграм канал.
Сначала переносил туда некоторые статьи из этого, основного, канала, а с прошлой недели потихоньку начали разбирать новую тему - Tornado Cash.
В целом, пока что я планирую там пару раз в неделю размещать просто переводы статей о DeFi протоколах с различных ресурсов, например, RareSkills, Alchemy, Updraft и других. Если вам интересно, то присоединяйтесь:
https://news.1rj.ru/str/+CTsJv2XzxacwM2Ji
Это будет абсолютно не спешные переводы и разборы.
А так, все прекрасной первой неделе зимы и легкого обучения!
#offtop
2👍3❤2
10 часов аудита, 1 High и $606
Вчера пришли результаты одного из конкурсов, с площадки CodeHawks. Мне засчитали 1 находку из 7, оценив ее в 606 USDC. Не плохо, но могло быть и лучше.
Вот несколько моментов, которые я вынес для себя из результатов конкурса:
1. Подавай все, что считаешь валидным. Я уже писал за этот пункт и сам попался на него. Тогда я читал правила и отчеты с Шерлока, готовясь к конкурсу на их платформе, где проблемы с реорганизацией сети, форками с chainId и временными метками в подписях чаще всего признавались не валидными. И почему-то, решил, что и на CH будет так же. В итоге я просто не отправил два отчета, которые... сюрприз, оказались валидными тут. В общем, не делайте за судей их работу, и подавайте все, что считаете нужным.
2. Читайте описание протокола в конкурсе и его документацию. Меня интересовала практика "быстрее разобраться в коде", поэтому на описание и документация я забил. Один High был найден как раз из понимания документации и как должен работать протокол.
3. Лучше валидируйте свои находки. На один отчет я потратил не так много времени, не корректно описав ход исполнения функции. На это указал судья - кстати, еще один способ обучения (на codehawks и c4 судьи пишут, почему твоя находка не валидна, что помогает учится). Из-за этого в комментариях я указал на другую проблему в коде, но так как это было уже вне конкурса, понятное дело, находку не засчитали.
В итоге, только 1 High про невозможность обновлять прокси.
Единственное, что не понял, почему засчитали эту находку: https://codehawks.cyfrin.io/c/2024-11-one-world/s/885
Я много раз видел в протоколах такую функцию с такими же проверками и реализацией. И формулировка: "Манипулирование msg.value может привести к непреднамеренным изменениям состояния, неудачным внешним вызовам или даже потере средств, если логика контракта зависит от количества Эфира, отправленного с транзакцией." - на мой взгляд слишком размыта и не определенна. Более того, хакеру пришлось бы отсылать свой собственный Эфир для атаки... В общем, тут я бы оставил только Info статус, а не Low баг.
Этим постом я хочу сказать, что вам не нужно ждать, когда вы научитесь всем багам и уязвимостям и начнете находить все 100% проблем в протоколах. Даже за один-два бага вы можете получить некоторую сумму за несколько часов работы.
На с4 будут сразу два небольших конкурса, заходите и пробуйте!
#audit
Вчера пришли результаты одного из конкурсов, с площадки CodeHawks. Мне засчитали 1 находку из 7, оценив ее в 606 USDC. Не плохо, но могло быть и лучше.
Вот несколько моментов, которые я вынес для себя из результатов конкурса:
1. Подавай все, что считаешь валидным. Я уже писал за этот пункт и сам попался на него. Тогда я читал правила и отчеты с Шерлока, готовясь к конкурсу на их платформе, где проблемы с реорганизацией сети, форками с chainId и временными метками в подписях чаще всего признавались не валидными. И почему-то, решил, что и на CH будет так же. В итоге я просто не отправил два отчета, которые... сюрприз, оказались валидными тут. В общем, не делайте за судей их работу, и подавайте все, что считаете нужным.
2. Читайте описание протокола в конкурсе и его документацию. Меня интересовала практика "быстрее разобраться в коде", поэтому на описание и документация я забил. Один High был найден как раз из понимания документации и как должен работать протокол.
3. Лучше валидируйте свои находки. На один отчет я потратил не так много времени, не корректно описав ход исполнения функции. На это указал судья - кстати, еще один способ обучения (на codehawks и c4 судьи пишут, почему твоя находка не валидна, что помогает учится). Из-за этого в комментариях я указал на другую проблему в коде, но так как это было уже вне конкурса, понятное дело, находку не засчитали.
В итоге, только 1 High про невозможность обновлять прокси.
Единственное, что не понял, почему засчитали эту находку: https://codehawks.cyfrin.io/c/2024-11-one-world/s/885
Я много раз видел в протоколах такую функцию с такими же проверками и реализацией. И формулировка: "Манипулирование msg.value может привести к непреднамеренным изменениям состояния, неудачным внешним вызовам или даже потере средств, если логика контракта зависит от количества Эфира, отправленного с транзакцией." - на мой взгляд слишком размыта и не определенна. Более того, хакеру пришлось бы отсылать свой собственный Эфир для атаки... В общем, тут я бы оставил только Info статус, а не Low баг.
Этим постом я хочу сказать, что вам не нужно ждать, когда вы научитесь всем багам и уязвимостям и начнете находить все 100% проблем в протоколах. Даже за один-два бага вы можете получить некоторую сумму за несколько часов работы.
На с4 будут сразу два небольших конкурса, заходите и пробуйте!
#audit
2🔥8🎉6👍1
RSA алгоритмы. Часть 1
Как и говорил ранее, мы разберем новую для канала тему, которая может быть кстати при изучении такого DeFi протокола, как Tornado Cash. Итак, поехали!
Введение в ECDSA и RSA
Создание контракта, предоставляющего определенным адресам прав, имеет несколько названий: airdrops, presale, whitelist, allowlist и так далее. Но суть идеи заключается в том, что есть набор адресов, которые имеют специальное разрешение на покупку токена высокого спроса по желаемой цене (иногда бесплатно). Для этого есть три устоявшихся решения: маппинги, деревья Меркла и ECDSA подписи.
Mapping presale работает следующим образом: продавец вводит адреса покупателей в маппинг, с аргументами от адреса к булеву, чтобы отметить, является ли адрес привилегированным или нет. После того как покупатель завершит транзакцию, в маппинге устанавливается значение false.
Таким образом, только адреса, отмеченные как true, могут совершить покупку. Это очень экономит газ для покупателя, но сам продавец может потратить очень много газа на составление этих allowlist для тысяч адресов (добавление каждого адреса в allowlist обойдется минимум в 22 100 газа). Поэтому деревья Меркла и подписи ECDSA (с использованием ecerecover) часто предпочитаются маппингам.
Стоимость газа (для покупателя) при выполнении проверки подписи ECDSA составляет 29 293 газа. Сюда входит 21 000 на инициирование транзакции, поэтому стоимость ECDSA составляет 8 293. Обратите внимание, что сюда входит чтение адреса подписи из хранилища, но эти затраты необходимы, иначе мы не сможем признать подпись недействительной.
Деревья Меркла различаются по стоимости в зависимости от размера дерева (большие деревья требуют больших доказательств), но если в древе более 1 000 адресов, то проверка адреса обойдется как минимум в 32 000 газа (или больше). Такая стоимость явно уступает ECDSA.
Итак, наша задача состоит в том, чтобы побить ECDSA, который стоит 8 293 газа. Для того, чтобы решения не отличались друг от друга, альтернативное решение должно:
1. Уметь обнулять адреса из списка разрешенных. Деревья Меркла могут менять свой корень, ECDSA - адрес подписи, а маппинги - устанавливать значения true/false;
2. Не налагать существенного бремени расходов на продавца, как это делают маппинги;
3. Стоить менее 8 200 единиц газа для покупателя (включая нагрузку на хранилище);
4. Не подвергаться риску в плане безопасности;
И далее мы поговорим о самом RSA алгоритме.
#rsa
Как и говорил ранее, мы разберем новую для канала тему, которая может быть кстати при изучении такого DeFi протокола, как Tornado Cash. Итак, поехали!
Введение в ECDSA и RSA
Создание контракта, предоставляющего определенным адресам прав, имеет несколько названий: airdrops, presale, whitelist, allowlist и так далее. Но суть идеи заключается в том, что есть набор адресов, которые имеют специальное разрешение на покупку токена высокого спроса по желаемой цене (иногда бесплатно). Для этого есть три устоявшихся решения: маппинги, деревья Меркла и ECDSA подписи.
Mapping presale работает следующим образом: продавец вводит адреса покупателей в маппинг, с аргументами от адреса к булеву, чтобы отметить, является ли адрес привилегированным или нет. После того как покупатель завершит транзакцию, в маппинге устанавливается значение false.
Таким образом, только адреса, отмеченные как true, могут совершить покупку. Это очень экономит газ для покупателя, но сам продавец может потратить очень много газа на составление этих allowlist для тысяч адресов (добавление каждого адреса в allowlist обойдется минимум в 22 100 газа). Поэтому деревья Меркла и подписи ECDSA (с использованием ecerecover) часто предпочитаются маппингам.
Стоимость газа (для покупателя) при выполнении проверки подписи ECDSA составляет 29 293 газа. Сюда входит 21 000 на инициирование транзакции, поэтому стоимость ECDSA составляет 8 293. Обратите внимание, что сюда входит чтение адреса подписи из хранилища, но эти затраты необходимы, иначе мы не сможем признать подпись недействительной.
Деревья Меркла различаются по стоимости в зависимости от размера дерева (большие деревья требуют больших доказательств), но если в древе более 1 000 адресов, то проверка адреса обойдется как минимум в 32 000 газа (или больше). Такая стоимость явно уступает ECDSA.
Итак, наша задача состоит в том, чтобы побить ECDSA, который стоит 8 293 газа. Для того, чтобы решения не отличались друг от друга, альтернативное решение должно:
1. Уметь обнулять адреса из списка разрешенных. Деревья Меркла могут менять свой корень, ECDSA - адрес подписи, а маппинги - устанавливать значения true/false;
2. Не налагать существенного бремени расходов на продавца, как это делают маппинги;
3. Стоить менее 8 200 единиц газа для покупателя (включая нагрузку на хранилище);
4. Не подвергаться риску в плане безопасности;
И далее мы поговорим о самом RSA алгоритме.
#rsa
2👍6
Упражнение для начинающих аудиторов
Сейчас проходит небольшой конкурс на платформе code4rena под названием LamboWin. Я потихоньку разбираю его, и вчера мне показалось, что он может стать прекрасным упражнением для начинающих аудиторов!
Во-первых, сам по себе он очень маленький, всего около 600 строк кода.
Во-вторых, там много "перекликаний" между контрактами.
В-третьих, есть интеграция с Uniswap V2.
И дело тут, скорее, не в том, чтобы найти какие-либо уязвимости (протокол хорошо написан), а в том, чтобы научиться понимать архитектуру протокола, внутренние вызовы, перетекания токенов и Эфира из контракта в контракт и т.д.
Если захотите потренироваться сами, то вот репо протокола:
https://github.com/code-423n4/2024-12-lambowin
И вам нужно будет ответить на следующие вопросы:
1. Что такое Lambo токен и Veth?
2. Как происходит создание Lambo токена?
3. Как происходит покупка Lambo токена?
4. Где хранятся Lambo токены?
5. Как на Uniswap v2 появляется ликвидность?
***
1. От чего зависит цена Lambo токена?
Также нарисуйте схемы:
1. Создание нового Lambo токена;
2. От отправки пользователем Эфира до получения токена;
3. Кто является msg.sender в каждом внутреннем вызове при покупке токена;
4. Процесс вывода токена с Uniswap v2 - что пользователю нужно отправить и что получит в конце;
Протокол не такой нудный и мне было интересно разбирать его и копаться в вызовах. Давно не встречал конкурс, чтобы в минимальном коде было столько общих тем по работе с токенами!
В общем, если вы хотите начать принимать участие в конкурсах, то это станет прекрасным упражнением!
#audit
Сейчас проходит небольшой конкурс на платформе code4rena под названием LamboWin. Я потихоньку разбираю его, и вчера мне показалось, что он может стать прекрасным упражнением для начинающих аудиторов!
Во-первых, сам по себе он очень маленький, всего около 600 строк кода.
Во-вторых, там много "перекликаний" между контрактами.
В-третьих, есть интеграция с Uniswap V2.
И дело тут, скорее, не в том, чтобы найти какие-либо уязвимости (протокол хорошо написан), а в том, чтобы научиться понимать архитектуру протокола, внутренние вызовы, перетекания токенов и Эфира из контракта в контракт и т.д.
Если захотите потренироваться сами, то вот репо протокола:
https://github.com/code-423n4/2024-12-lambowin
И вам нужно будет ответить на следующие вопросы:
1. Что такое Lambo токен и Veth?
2. Как происходит создание Lambo токена?
3. Как происходит покупка Lambo токена?
4. Где хранятся Lambo токены?
5. Как на Uniswap v2 появляется ликвидность?
***
1. От чего зависит цена Lambo токена?
Также нарисуйте схемы:
1. Создание нового Lambo токена;
2. От отправки пользователем Эфира до получения токена;
3. Кто является msg.sender в каждом внутреннем вызове при покупке токена;
4. Процесс вывода токена с Uniswap v2 - что пользователю нужно отправить и что получит в конце;
Протокол не такой нудный и мне было интересно разбирать его и копаться в вызовах. Давно не встречал конкурс, чтобы в минимальном коде было столько общих тем по работе с токенами!
В общем, если вы хотите начать принимать участие в конкурсах, то это станет прекрасным упражнением!
#audit
👍9🔥3
RSA алгоритмы. Часть 2
Алгоритм RSA
Если мы хотим существенно превзойти ECDSA, нам нужно найти другой криптографический алгоритм, позволяющий доказать принадлежность к членству. ECDSA - это фактически новая, более "клевая" версия оригинального алгоритма цифровой подписи RSA. ECDSA опирается на то, что дискретные логарифмы над эллиптическими кривыми являются жесткими (отсюда и название - алгоритм цифровой подписи на эллиптических кривых). RSA (названный по имени его авторов - Ривеста, Шамира и Адлемана) основан на том, что большие целые числа трудно считать. По возрасту RSA был опубликован в 1970-х годах, а ECDSA стал общепринятым в начале 2000-х.
Мы не будем супер подробно разбирать RSA, но некоторые предварительные условия необходимы. Подписывающий выбирает два больших простых числа p и q и перемножает их вместе, чтобы получить n. Этот n - первая часть открытого ключа. Во-вторых, подписывающий выбирает небольшое простое число e (для нашего случая можно зафиксировать 3) и публикует пару (n, e) в качестве открытого ключа. За кулисами подписывающий вычисляет
Число d является закрытым ключом. Если бы кто-то мог разложить n на p и q, то вычисление d было бы простым делом. Но известно, что целочисленная факторизация сложна. Чтобы подписать сообщение, подписывающий хэширует сообщение m, получая h, и возводит h в степень d. То есть,
Подписант публикует (m, s) как сообщение и подпись. Верификатор хэширует m и возводит его в степень e mod n. Помните, что e и n - это открытый ключ. Если и только если
то подпись действительна для открытого ключа (n, e). Обратите внимание, что если n очень велико, то вероятность того, что s == s ^ e % n по случайному стечению обстоятельств исчезающе мала. Если равенство подтверждается, то мы знаем, что подпись действительна для открытого ключа. Чтобы сделать это в Ethereum, мы просто подпишем адрес как
и смарт-контракт будет проверять
Понимаю эти вычисления для нашего канала не свойственны, но в них можно разобраться, только если сами запишите все на бумаге. У меня, при чтении статьи, вообще "мозг вылетел", так как я с математикой не в ладах, поэтому переписать все на листик бумаги будет куда эффективнее.
На следующей неделе поговорим уже с меньшим количеством математики в постах.
#rsa
Алгоритм RSA
Если мы хотим существенно превзойти ECDSA, нам нужно найти другой криптографический алгоритм, позволяющий доказать принадлежность к членству. ECDSA - это фактически новая, более "клевая" версия оригинального алгоритма цифровой подписи RSA. ECDSA опирается на то, что дискретные логарифмы над эллиптическими кривыми являются жесткими (отсюда и название - алгоритм цифровой подписи на эллиптических кривых). RSA (названный по имени его авторов - Ривеста, Шамира и Адлемана) основан на том, что большие целые числа трудно считать. По возрасту RSA был опубликован в 1970-х годах, а ECDSA стал общепринятым в начале 2000-х.
Мы не будем супер подробно разбирать RSA, но некоторые предварительные условия необходимы. Подписывающий выбирает два больших простых числа p и q и перемножает их вместе, чтобы получить n. Этот n - первая часть открытого ключа. Во-вторых, подписывающий выбирает небольшое простое число e (для нашего случая можно зафиксировать 3) и публикует пару (n, e) в качестве открытого ключа. За кулисами подписывающий вычисляет
t = (p - 1) * (q - 1)
d = t^(-1) % n
Число d является закрытым ключом. Если бы кто-то мог разложить n на p и q, то вычисление d было бы простым делом. Но известно, что целочисленная факторизация сложна. Чтобы подписать сообщение, подписывающий хэширует сообщение m, получая h, и возводит h в степень d. То есть,
s = h(m) ^ d % n
Подписант публикует (m, s) как сообщение и подпись. Верификатор хэширует m и возводит его в степень e mod n. Помните, что e и n - это открытый ключ. Если и только если
s == s ^ e % n
то подпись действительна для открытого ключа (n, e). Обратите внимание, что если n очень велико, то вероятность того, что s == s ^ e % n по случайному стечению обстоятельств исчезающе мала. Если равенство подтверждается, то мы знаем, что подпись действительна для открытого ключа. Чтобы сделать это в Ethereum, мы просто подпишем адрес как
s = buyerAddress ^ d % n
и смарт-контракт будет проверять
msg.sender == s ^ e % n
Понимаю эти вычисления для нашего канала не свойственны, но в них можно разобраться, только если сами запишите все на бумаге. У меня, при чтении статьи, вообще "мозг вылетел", так как я с математикой не в ладах, поэтому переписать все на листик бумаги будет куда эффективнее.
На следующей неделе поговорим уже с меньшим количеством математики в постах.
#rsa
👍6🤯1
RSA алгоритмы. Часть 3
На этой неделе постараюсь уже закончить с RSA подписями, так как со следующей планирую уйти в долгий и долгожданный отпуск, о чем писал уже ранее. А пока что, продолжаем!
Использование только 256 бит небезопасно
Для прояснения ситуации: количество «бит» относится к размеру открытого ключа. Поэтому, когда мы говорим «RSA 2048», это означает, что число n, модуль, имеет 2048 бит. Сравнивая размеры ключей, важно помнить, что каждый дополнительный бит удваивает размер числа. Таким образом, 700 бит экспоненциально более безопасны, чем 350 бит, но не в два раза.
Самый большой ключ, который удалось взломать (разложить) на данный момент, состоял из 829 бит, и для этого потребовался современный суперкомпьютер. Команда использовала примерно 2700 процессорных ячеек в год, используя процессор Intel Xeon Gold 6130 с частотой 2,1 ГГц. Стоимость самого дешевого 16-ядерного процессора на AWS составляет 0,40 цента в час, поэтому стоимость взлома этого ключа составляет порядка 9,4 миллиона долларов. Даже при условии щедрых скидок от облачного провайдера стоимость будет исчисляться миллионами.
Модульная арифметика с более чем 256 битами в Solidity
Ethereum поддерживает только 32-байтовые типы данных, поэтому по умолчанию мы не можем выполнить:
К счастью, блокчейн ethereum добавил в EIP-198 прекомпилированный контракт специально для поддержки модульной арифметики.
Для его использования необходимо загрузить в память базу, экспоненту и модуль в кодированном формате abi. Затем вызывается контракт, находящийся по адресу 0x05. Хранение открытого ключа становится некоторой проблемой, если вы используете безопасное количество бит. Если размер ключа составляет 1024 бита, то для хранения потребуется 4 слота. Чтобы посчитать открытый ключ из хранилища, потребуется четыре операции SLOAD, что в общей сложности составит 8 400 газа.
Это само по себе уже менее эффективно, чем решение ECDSA, приведенное выше. Если мы используем неизменяемые переменные, эти затраты в значительной степени устраняются, но это создает слабое место, если мы не можем задним числом удалить кого-то из предварительной продажи аирдропа.
В традиционных ECDSA или деревьях Меркла мы бы просто заменили адрес подписи или корень Меркла. Это невозможно, если мы используем неизменяемую переменную. Однако ключевой идеей является хранение открытого ключа в байткоде, а не в памяти. Чтение байткода внешнего контракта (EXTCODECOPY) стоит 2 600 газа, что гораздо меньше, чем 8 400 газа при чтении каждой части открытого ключа в четырех экземплярах. Чтобы аннулировать открытый ключ, мы могли бы просто создать новый контракт и обновить переменную хранения, чтобы она указывала на новый адрес. Но это добавляет еще 2100 газа. И оказывается, что можно хранить адрес внешнего контракта (в байткоде которого хранится открытый ключ) в неизменяемой переменной, но при этом сделать открытый ключ недействительным, изменив байткод внешнего смарт-контракта.
Сложно, но интересно! Дальше больше!
#rsa
На этой неделе постараюсь уже закончить с RSA подписями, так как со следующей планирую уйти в долгий и долгожданный отпуск, о чем писал уже ранее. А пока что, продолжаем!
Использование только 256 бит небезопасно
Для прояснения ситуации: количество «бит» относится к размеру открытого ключа. Поэтому, когда мы говорим «RSA 2048», это означает, что число n, модуль, имеет 2048 бит. Сравнивая размеры ключей, важно помнить, что каждый дополнительный бит удваивает размер числа. Таким образом, 700 бит экспоненциально более безопасны, чем 350 бит, но не в два раза.
Самый большой ключ, который удалось взломать (разложить) на данный момент, состоял из 829 бит, и для этого потребовался современный суперкомпьютер. Команда использовала примерно 2700 процессорных ячеек в год, используя процессор Intel Xeon Gold 6130 с частотой 2,1 ГГц. Стоимость самого дешевого 16-ядерного процессора на AWS составляет 0,40 цента в час, поэтому стоимость взлома этого ключа составляет порядка 9,4 миллиона долларов. Даже при условии щедрых скидок от облачного провайдера стоимость будет исчисляться миллионами.
Модульная арифметика с более чем 256 битами в Solidity
Ethereum поддерживает только 32-байтовые типы данных, поэтому по умолчанию мы не можем выполнить:
s ^ e % n
К счастью, блокчейн ethereum добавил в EIP-198 прекомпилированный контракт специально для поддержки модульной арифметики.
Для его использования необходимо загрузить в память базу, экспоненту и модуль в кодированном формате abi. Затем вызывается контракт, находящийся по адресу 0x05. Хранение открытого ключа становится некоторой проблемой, если вы используете безопасное количество бит. Если размер ключа составляет 1024 бита, то для хранения потребуется 4 слота. Чтобы посчитать открытый ключ из хранилища, потребуется четыре операции SLOAD, что в общей сложности составит 8 400 газа.
Это само по себе уже менее эффективно, чем решение ECDSA, приведенное выше. Если мы используем неизменяемые переменные, эти затраты в значительной степени устраняются, но это создает слабое место, если мы не можем задним числом удалить кого-то из предварительной продажи аирдропа.
В традиционных ECDSA или деревьях Меркла мы бы просто заменили адрес подписи или корень Меркла. Это невозможно, если мы используем неизменяемую переменную. Однако ключевой идеей является хранение открытого ключа в байткоде, а не в памяти. Чтение байткода внешнего контракта (EXTCODECOPY) стоит 2 600 газа, что гораздо меньше, чем 8 400 газа при чтении каждой части открытого ключа в четырех экземплярах. Чтобы аннулировать открытый ключ, мы могли бы просто создать новый контракт и обновить переменную хранения, чтобы она указывала на новый адрес. Но это добавляет еще 2100 газа. И оказывается, что можно хранить адрес внешнего контракта (в байткоде которого хранится открытый ключ) в неизменяемой переменной, но при этом сделать открытый ключ недействительным, изменив байткод внешнего смарт-контракта.
Сложно, но интересно! Дальше больше!
#rsa
1❤2
RSA алгоритмы. Часть 4
Аннулирование открытого ключа с помощью шаблона метаморфного контракта
Смарт контракт создается путем загрузки байткода в память и возврата runtime кода. Когда смарт контракт создается с помощью команды create2, адрес контракта можно предсказать заранее. Адрес вычисляется из комбинации соли, деплоера и байткода инициализации. Если контракт самоуничтожится, то можно развернуть новый контракт по тому же адресу.
Обратите внимание, что адрес зависит от кода инициализации, а не от развертываемого кода. Можно развернуть разные байткоды, если код инициализации использует другой runtime код. Таким образом, мы можем иметь смарт контракт, первые k байт которого предназначены для самоуничтожения при определенном условии, а остальные байты - это открытый ключ RSA.
Поскольку адрес определен заранее, мы можем хранить адрес этого метаморфического контракта в неизменяемой переменной. Когда нам понадобится открытый ключ, мы можем выполнить EXTCODECOPY с этого адреса. Чтобы заменить открытый ключ, мы дадим контракту команду на самоуничтожение, а затем развернем новый контракт по этому адресу.
Экономим еще 100 единиц газа с помощью access lists
В EIP2930 добавлен новый тип транзакций, который позволяет пользователю заранее указать, к каким адресам и слотам хранения будет осуществляться доступ. Это позволяет узлам предварительно извлекать эти значения из хранилища, тем самым ускоряя время выполнения. Использование транзакции с access lists при вызове внешнего контракта позволяет сэкономить 100 газа. Обратите внимание, что эта экономия не распространяется на случаи, когда смарт контракт обращается к собственной переменной хранилища. Поскольку этот дизайн RSA presale airdrop полагается на внешний контракт для хранения открытого ключа, то использование списка доступа вполне уместно.
Бенчмарки: Затраты на газ в зависимости от размера ключа
Большая часть затрат на газ возникает из-за очень больших данных вызова в результате использования больших подписей. Если размер ключа установлен на 1024 бита, то данные вызова составят 128 байт. Каждый байт стоит 16 газа, так что общая стоимость газа для таких больших данных составляет 2 048 газа. По сравнению с большинством других сценариев использования, наш использует значительный объем памяти, и Ethereum взимает за это плату.
Почему это экономит газ по сравнению с ECDSA?
Из бенчмарков ясно, что чем больше ключ (и, следовательно, подпись), тем больше затраты на газ. Наш дизайн использует тот факт, что прекомпиляция назначает низкую цену за увеличение числа до низкой мощности. Стоимость выполнения прекомпилированного контракта в этих условиях при 0x05 составляет всего несколько сотен газа по сравнению с тысячами для выполнения прекомпиляции для ECDSA.
Выбор размера ключа
Хотя ключ с 829 битами и был взломан, для этого потребовался современный суперкомпьютер. Для таких задач, как выпуск в эфир токенов меньшей стоимости или предварительная продажа NFT, у злоумышленника нет стимула тратить от шестизначной суммы до миллиона долларов на взлом открытого ключа и получение NFT в ходе аирдропа.
Контрольные показатели размера ключа
RSA-896 (газ: 26 850)
RSA-960 (газ: 26 925)
RSA-1024 (газ: 27 033)
RSA-2048 (газ: 29 271)
#rsa
Аннулирование открытого ключа с помощью шаблона метаморфного контракта
Смарт контракт создается путем загрузки байткода в память и возврата runtime кода. Когда смарт контракт создается с помощью команды create2, адрес контракта можно предсказать заранее. Адрес вычисляется из комбинации соли, деплоера и байткода инициализации. Если контракт самоуничтожится, то можно развернуть новый контракт по тому же адресу.
Обратите внимание, что адрес зависит от кода инициализации, а не от развертываемого кода. Можно развернуть разные байткоды, если код инициализации использует другой runtime код. Таким образом, мы можем иметь смарт контракт, первые k байт которого предназначены для самоуничтожения при определенном условии, а остальные байты - это открытый ключ RSA.
Поскольку адрес определен заранее, мы можем хранить адрес этого метаморфического контракта в неизменяемой переменной. Когда нам понадобится открытый ключ, мы можем выполнить EXTCODECOPY с этого адреса. Чтобы заменить открытый ключ, мы дадим контракту команду на самоуничтожение, а затем развернем новый контракт по этому адресу.
Экономим еще 100 единиц газа с помощью access lists
В EIP2930 добавлен новый тип транзакций, который позволяет пользователю заранее указать, к каким адресам и слотам хранения будет осуществляться доступ. Это позволяет узлам предварительно извлекать эти значения из хранилища, тем самым ускоряя время выполнения. Использование транзакции с access lists при вызове внешнего контракта позволяет сэкономить 100 газа. Обратите внимание, что эта экономия не распространяется на случаи, когда смарт контракт обращается к собственной переменной хранилища. Поскольку этот дизайн RSA presale airdrop полагается на внешний контракт для хранения открытого ключа, то использование списка доступа вполне уместно.
Бенчмарки: Затраты на газ в зависимости от размера ключа
Большая часть затрат на газ возникает из-за очень больших данных вызова в результате использования больших подписей. Если размер ключа установлен на 1024 бита, то данные вызова составят 128 байт. Каждый байт стоит 16 газа, так что общая стоимость газа для таких больших данных составляет 2 048 газа. По сравнению с большинством других сценариев использования, наш использует значительный объем памяти, и Ethereum взимает за это плату.
Почему это экономит газ по сравнению с ECDSA?
Из бенчмарков ясно, что чем больше ключ (и, следовательно, подпись), тем больше затраты на газ. Наш дизайн использует тот факт, что прекомпиляция назначает низкую цену за увеличение числа до низкой мощности. Стоимость выполнения прекомпилированного контракта в этих условиях при 0x05 составляет всего несколько сотен газа по сравнению с тысячами для выполнения прекомпиляции для ECDSA.
Выбор размера ключа
Хотя ключ с 829 битами и был взломан, для этого потребовался современный суперкомпьютер. Для таких задач, как выпуск в эфир токенов меньшей стоимости или предварительная продажа NFT, у злоумышленника нет стимула тратить от шестизначной суммы до миллиона долларов на взлом открытого ключа и получение NFT в ходе аирдропа.
Контрольные показатели размера ключа
RSA-896 (газ: 26 850)
RSA-960 (газ: 26 925)
RSA-1024 (газ: 27 033)
RSA-2048 (газ: 29 271)
#rsa
2👍2🤔1
Про подготовку к аудиту
Проведение максимально эффективного аудита ложится на плечи не только самого аудитора, но и команды, которая должна сделать все, чтобы дать аудитору максимум полезной информации. Я уже не раз писал об этом, и хочу поднять эту тему еще раз в ключе одного из конкурсов, который проходит в данную минуту.
Пару дней назад начался конкурс для протокола SecondSwap. Это единственный конкурс на моей памяти, который переносился 4 раза! Изначально он должен был запуститься 24 ноября, потом его перенесли на 29, потом на 5 декабря, потом на 9!
Мне были очень интересны причины этого. И после старта они стали понятны. Подготовка к конкурсу просто ужасная. Пошли по порядку:
1. Отсутствие документации. Кроме как описания протокола на два абзаца и быстро сделанной схемы контрактов больше ничего нет. По ссылке на сайте проекта находится простой лендинг, без дополнительных ссылок на документацию или хотя бы на whitepaper протокола.
Да, аудитору, в целом, достаточно кода для хорошей проверки. При этом с подробной документацией он может сравнить "задумку" разработчиков с фактической реализацией, найти несоответствия или подсказать лучшие паттерны. Довольно часто в отчетах я встречал High/Med баги с ссылкой на формулировки в документации протокола.
2. Протокол заказывал аудит в другой компании, но к его началу аудиторам не показали отчет. Многие вышли из конкурса, так как по правилам все находки, даже acknowledged, уже не валидны для данного конкурса. Т.е. аудитор мог подать репорт, не зная, что в отчете уже описан этот баг и его бы не засчитали. Другими словами, это просто потраченное время для аудитора с нулем пользы для протокола.
И только вчера вечером администраторы платформы написали, что отчет вообще не будет показан аудиторам, но схожие баги все таки будут засчитаны. Но это полная хрень, как для аудиторов, так и для протокола.
3. Много рабочих комментариев от разработчиков по проблемам из аудиторского отчета, который не будет показан. Т.е. есть функция, в которой описан потенциальный баг: в одном случае он исправлен, в другом может быть нет, так как acknowledged. Это очень сильно сбивает с процесса.
Комментарии к коду при аудите должны быть чистыми и выверенными, которые помогут аудитору понять смысл function flow. Именно поэтому нужно фиксировать отдельный репо для аудита, а рабочие заметки держать у себя.
4. Связь с командой. В первые дни команда вообще не появлялась в чате. Все вопросы аудиторов игнорировались. И только со вчерашнего вечера пошли первые отчеты. Это тоже в корне не правильный подход.
По идее, команда должна выделять одного-двух человек, которые будут ответственны за коммуникацию и ответы на вопросы. Люди читают "жопой", и многим проще задать вопрос в чате, даже самый банальный, чем пытаться понять документацию.
Протоколу нужно хорошо подготовиться к аудиту: соло, от компании или конкурсу. Это напрямую влияет на ваши расходы сейчас и в будущем, и на безопасность протокола в целом!
Вот есть отличный гайд о подготовке протокола к аудиту:
https://auditprofile.xyz/plan.php
Если хотите нанять аудитора, то убедитесь, что соответствуете требованиям.
#audit
Проведение максимально эффективного аудита ложится на плечи не только самого аудитора, но и команды, которая должна сделать все, чтобы дать аудитору максимум полезной информации. Я уже не раз писал об этом, и хочу поднять эту тему еще раз в ключе одного из конкурсов, который проходит в данную минуту.
Пару дней назад начался конкурс для протокола SecondSwap. Это единственный конкурс на моей памяти, который переносился 4 раза! Изначально он должен был запуститься 24 ноября, потом его перенесли на 29, потом на 5 декабря, потом на 9!
Мне были очень интересны причины этого. И после старта они стали понятны. Подготовка к конкурсу просто ужасная. Пошли по порядку:
1. Отсутствие документации. Кроме как описания протокола на два абзаца и быстро сделанной схемы контрактов больше ничего нет. По ссылке на сайте проекта находится простой лендинг, без дополнительных ссылок на документацию или хотя бы на whitepaper протокола.
Да, аудитору, в целом, достаточно кода для хорошей проверки. При этом с подробной документацией он может сравнить "задумку" разработчиков с фактической реализацией, найти несоответствия или подсказать лучшие паттерны. Довольно часто в отчетах я встречал High/Med баги с ссылкой на формулировки в документации протокола.
2. Протокол заказывал аудит в другой компании, но к его началу аудиторам не показали отчет. Многие вышли из конкурса, так как по правилам все находки, даже acknowledged, уже не валидны для данного конкурса. Т.е. аудитор мог подать репорт, не зная, что в отчете уже описан этот баг и его бы не засчитали. Другими словами, это просто потраченное время для аудитора с нулем пользы для протокола.
И только вчера вечером администраторы платформы написали, что отчет вообще не будет показан аудиторам, но схожие баги все таки будут засчитаны. Но это полная хрень, как для аудиторов, так и для протокола.
3. Много рабочих комментариев от разработчиков по проблемам из аудиторского отчета, который не будет показан. Т.е. есть функция, в которой описан потенциальный баг: в одном случае он исправлен, в другом может быть нет, так как acknowledged. Это очень сильно сбивает с процесса.
Комментарии к коду при аудите должны быть чистыми и выверенными, которые помогут аудитору понять смысл function flow. Именно поэтому нужно фиксировать отдельный репо для аудита, а рабочие заметки держать у себя.
4. Связь с командой. В первые дни команда вообще не появлялась в чате. Все вопросы аудиторов игнорировались. И только со вчерашнего вечера пошли первые отчеты. Это тоже в корне не правильный подход.
По идее, команда должна выделять одного-двух человек, которые будут ответственны за коммуникацию и ответы на вопросы. Люди читают "жопой", и многим проще задать вопрос в чате, даже самый банальный, чем пытаться понять документацию.
Протоколу нужно хорошо подготовиться к аудиту: соло, от компании или конкурсу. Это напрямую влияет на ваши расходы сейчас и в будущем, и на безопасность протокола в целом!
Вот есть отличный гайд о подготовке протокола к аудиту:
https://auditprofile.xyz/plan.php
Если хотите нанять аудитора, то убедитесь, что соответствуете требованиям.
#audit
👍3
Последний пост этого года
Уже около трех лет я в теме web3, solidity, сетей, аудита и хочу сказать, что до сих пор не могу назвать себя не то, что сеньором, а даже твердым мидлом. Каждый раз, когда я читаю статьи от RareSkills или ветки обсуждений каких-то нишевых особенностей сети или языка от зарубежных коллег, я всегда такой: "Вау! Я тоже хочу знать это, на том же уровне!". Это и дает мне заряд мотивации вести канал, делиться интересными постами, делать переводы и много чего еще.
Многие спрашивали, а сколько нужно времени, чтобы научиться всему этому, и я до сих пор не знаю ответа. Научиться создавать свой токен с нуля можно за час, писать смарт контракт - за неделю, осмысленные проекты - за месяц, стать про - бесконечно... В обучение web3 нет временных рамок и ограничений, если встаете на этот путь будьте готовы учиться постоянно.
На следующий год я для себя выделил три ключевых направления для собственного обучения:
1. Аудит и безопасность. Эта тема меня действительно зажигает! Мне нравится читать отчеты, порой участвовать в конкурсах и помогать делать протоколы более безопасными. Я хочу освоить скилл создания видео, где в формате коротких роликов показывал бы баги из репортов и моменты, на которые стоит обращать внимание при разработке смарт контрактов. Это поможет как развитию канала, так и начинающим web3 разработчикам совершать меньше ошибок.
2. Разбор DeFi протоколов. При том, что я понимаю и разбираюсь в общих чертах финансовых протоколов, например, могу рассказать, чем отличаются версии Balancer v1 и v2, у меня все равно пробелы в знаниях о том, как работает все на уровне кода, и, кроме того, в чем особенности экономической модели. В общем, буду подтягивать эту тему.
3. Видео... Долбанный видео формат, который мне никак не удается совместить с демонстрацией кода в вертикальном формате. У меня давно было желание записывать видео по темам Solidity, безопасность и какие-нибудь разборы. Получилось провести даже два стрима (большое спасибо за вашу поддержку еще раз!). Но этот формат все никак не дается мне: то код маленький, то не знаю, как нарисовать схему на экране, то нужно много переключений между вкладками... Поэтому буду учиться этому весь следующий год.
Также весной, по мере желающих, будет перезапуск нашего курса "Начинающий разработчик смарт контрактов". Это уже третий поток учеников! Планирую добавить туда больше видео материала и примеров кода.
Размышляю также провести небольшой практический интенсив по Foundry. Открытие уроки уже выложены на канале, поэтому на интенсиве будет больше практической части: как писать unit / fuzz тесты, как делать форк сетей и интеграции с другими протоколами, как оптимизировать сами тесты и setup функцию, чтобы и вам, и другим разработчикам было удобнее работать с ними.
Это такие - глобальные - задачи на следующий год. А по мелочи, все также будем разбираться в тонкостях Solidity и сетей, делать разборы всяких интересных штук и обучаться дальше!
Спасибо всем, кто был со мной весь этот год! Спасибо всем, кто подписался на канал и комментировал посты! Спасибо всем, кто делился своими находками и материалами!
Встретимся с вами уже в Новом году! А я иду в долгожданный длинный отпуск!
#offtop
Уже около трех лет я в теме web3, solidity, сетей, аудита и хочу сказать, что до сих пор не могу назвать себя не то, что сеньором, а даже твердым мидлом. Каждый раз, когда я читаю статьи от RareSkills или ветки обсуждений каких-то нишевых особенностей сети или языка от зарубежных коллег, я всегда такой: "Вау! Я тоже хочу знать это, на том же уровне!". Это и дает мне заряд мотивации вести канал, делиться интересными постами, делать переводы и много чего еще.
Многие спрашивали, а сколько нужно времени, чтобы научиться всему этому, и я до сих пор не знаю ответа. Научиться создавать свой токен с нуля можно за час, писать смарт контракт - за неделю, осмысленные проекты - за месяц, стать про - бесконечно... В обучение web3 нет временных рамок и ограничений, если встаете на этот путь будьте готовы учиться постоянно.
На следующий год я для себя выделил три ключевых направления для собственного обучения:
1. Аудит и безопасность. Эта тема меня действительно зажигает! Мне нравится читать отчеты, порой участвовать в конкурсах и помогать делать протоколы более безопасными. Я хочу освоить скилл создания видео, где в формате коротких роликов показывал бы баги из репортов и моменты, на которые стоит обращать внимание при разработке смарт контрактов. Это поможет как развитию канала, так и начинающим web3 разработчикам совершать меньше ошибок.
2. Разбор DeFi протоколов. При том, что я понимаю и разбираюсь в общих чертах финансовых протоколов, например, могу рассказать, чем отличаются версии Balancer v1 и v2, у меня все равно пробелы в знаниях о том, как работает все на уровне кода, и, кроме того, в чем особенности экономической модели. В общем, буду подтягивать эту тему.
3. Видео... Долбанный видео формат, который мне никак не удается совместить с демонстрацией кода в вертикальном формате. У меня давно было желание записывать видео по темам Solidity, безопасность и какие-нибудь разборы. Получилось провести даже два стрима (большое спасибо за вашу поддержку еще раз!). Но этот формат все никак не дается мне: то код маленький, то не знаю, как нарисовать схему на экране, то нужно много переключений между вкладками... Поэтому буду учиться этому весь следующий год.
Также весной, по мере желающих, будет перезапуск нашего курса "Начинающий разработчик смарт контрактов". Это уже третий поток учеников! Планирую добавить туда больше видео материала и примеров кода.
Размышляю также провести небольшой практический интенсив по Foundry. Открытие уроки уже выложены на канале, поэтому на интенсиве будет больше практической части: как писать unit / fuzz тесты, как делать форк сетей и интеграции с другими протоколами, как оптимизировать сами тесты и setup функцию, чтобы и вам, и другим разработчикам было удобнее работать с ними.
Это такие - глобальные - задачи на следующий год. А по мелочи, все также будем разбираться в тонкостях Solidity и сетей, делать разборы всяких интересных штук и обучаться дальше!
Спасибо всем, кто был со мной весь этот год! Спасибо всем, кто подписался на канал и комментировал посты! Спасибо всем, кто делился своими находками и материалами!
Встретимся с вами уже в Новом году! А я иду в долгожданный длинный отпуск!
#offtop
1🔥17❤5👍5
С Новым Годом 🎄🎄🎄
Каждый год встречаюсь с дилеммой: а когда же все таки слать поздравления: в канун Нового года, типа как "с наступающим", или уже когда он наступил, т.е. 1 января? И тем не менее...
Дорогие друзья, поздравляю вас всех с Новым годом! Желаю чтобы каждый из вас исполнил свои заветные желания, перестал делать то, что совершенно не хочется, и развивался бы в той сфере, которая приносит удовольствие и мотивацию!
Наш путь в web3 это небольшая жизнь за гранью понимания большинства людей (пока что). Многие просто не понимают, чем мы занимаемся, другие называют криптовалюту скамом, третьи знают, но боятся нового. Мы те, кто меняет представление наших близких и друзей, и делает свой, пусть даже маленький, вклад в развитие сферы. Мы те, кто заряжает других!
Пусть каждый из вас не испугается объёма знаний, их сложности и продолжительности обучения! Пусть найдет то, что мотивирует двигаться дальше и зарабатывать большие деньги!
С Новым годом, друзья! Будьте счастливы в 2025 году!
🎄🎄🎄
Каждый год встречаюсь с дилеммой: а когда же все таки слать поздравления: в канун Нового года, типа как "с наступающим", или уже когда он наступил, т.е. 1 января? И тем не менее...
Дорогие друзья, поздравляю вас всех с Новым годом! Желаю чтобы каждый из вас исполнил свои заветные желания, перестал делать то, что совершенно не хочется, и развивался бы в той сфере, которая приносит удовольствие и мотивацию!
Наш путь в web3 это небольшая жизнь за гранью понимания большинства людей (пока что). Многие просто не понимают, чем мы занимаемся, другие называют криптовалюту скамом, третьи знают, но боятся нового. Мы те, кто меняет представление наших близких и друзей, и делает свой, пусть даже маленький, вклад в развитие сферы. Мы те, кто заряжает других!
Пусть каждый из вас не испугается объёма знаний, их сложности и продолжительности обучения! Пусть найдет то, что мотивирует двигаться дальше и зарабатывать большие деньги!
С Новым годом, друзья! Будьте счастливы в 2025 году!
🎄🎄🎄
3❤23🎉8🔥3
Выходим из отпуска и возвращаемся к работе
Фух, это был самый длинный мой отпуск за последние три года. Целый месяц практически без Solidity, аудитов, блога, сайта и всего другого связанного с web3. Голова немного проветрилась, мысли прояснились и появилась мотивация к новым действиям!
Как я и писал ранее, в этом году у меня будет сделан упор на аудиты, создание видео и погружение в DeFi протоколы. Кстати по поводу конкурсных аудитов: если бы меня попросили дать один лишь совет для начинающих в этой стезе, я бы сказал:
"Отслеживайте движения токенов в протоколе: перемещения с контракта на контракт и между пользователями, балансы токенов, какой токен, за что отвечает".
Только благодаря этому прокаченному скиллу вы сможете добиться значительных результатов к концу года и заработать кучу денег. Практически в каждом протоколе, который выходил на конкурсную площадку был High/Med баг связанный с этим советом.
В буквальном смысле, забейте на поиск остальных багов и учитесь отслеживать токены: рисуйте схемы, делайте записи (очень сильно помогает) и подписывайте код.
Помимо этого, в январе я хочу написать интенсив по Foundry: обновить некоторую информацию из открытого курса и сформировать большое количество практических заданий. Я хочу показать, что Foundry может намного больше, чем все привыкли думать, что он уже давно вышел за рамки простой программы для тестирования и стал полноценным инструментом разработчика смарт контрактов. Рассчитываю в феврале собрать первую группу учеников.
Также на DeFi канале мы закончим с разбором протокола Tornado Cash и его деревьями Меркла и начнем погружаться в тему: что такое perpetuals. Я вижу, что все больше протоколов так или иначе используют эти наработки и хочу сам разобраться в деталях.
Вместе с этим на канале будет выходить много постов про Solidity и разработку в целом. Мы поговорим про: обновляемые контракты, delegatecall, метадату и реорганизацию сетей. А на этой неделе, для легкого старта, поговорим про разные типы DAO систем.
В общем, год будет интересным! Приятного обучения!
#start
Фух, это был самый длинный мой отпуск за последние три года. Целый месяц практически без Solidity, аудитов, блога, сайта и всего другого связанного с web3. Голова немного проветрилась, мысли прояснились и появилась мотивация к новым действиям!
Как я и писал ранее, в этом году у меня будет сделан упор на аудиты, создание видео и погружение в DeFi протоколы. Кстати по поводу конкурсных аудитов: если бы меня попросили дать один лишь совет для начинающих в этой стезе, я бы сказал:
"Отслеживайте движения токенов в протоколе: перемещения с контракта на контракт и между пользователями, балансы токенов, какой токен, за что отвечает".
Только благодаря этому прокаченному скиллу вы сможете добиться значительных результатов к концу года и заработать кучу денег. Практически в каждом протоколе, который выходил на конкурсную площадку был High/Med баг связанный с этим советом.
В буквальном смысле, забейте на поиск остальных багов и учитесь отслеживать токены: рисуйте схемы, делайте записи (очень сильно помогает) и подписывайте код.
Помимо этого, в январе я хочу написать интенсив по Foundry: обновить некоторую информацию из открытого курса и сформировать большое количество практических заданий. Я хочу показать, что Foundry может намного больше, чем все привыкли думать, что он уже давно вышел за рамки простой программы для тестирования и стал полноценным инструментом разработчика смарт контрактов. Рассчитываю в феврале собрать первую группу учеников.
Также на DeFi канале мы закончим с разбором протокола Tornado Cash и его деревьями Меркла и начнем погружаться в тему: что такое perpetuals. Я вижу, что все больше протоколов так или иначе используют эти наработки и хочу сам разобраться в деталях.
Вместе с этим на канале будет выходить много постов про Solidity и разработку в целом. Мы поговорим про: обновляемые контракты, delegatecall, метадату и реорганизацию сетей. А на этой неделе, для легкого старта, поговорим про разные типы DAO систем.
В общем, год будет интересным! Приятного обучения!
#start
1🔥21👍3
Самые популярные типы DAO. Часть 1
На первой рабочей неделе мы будем немного раскачиваться, поэтому начнем с чего-то более легкого, чем технический разбор какой-нибудь особенности Solidity или смарт контрактов в целом. Поэтому предлагаю поговорить про системы DAO и чем они отличаются.
По мере того как мир блокчейнов и криптовалют продолжает развиваться, создание децентрализованных автономных организаций (DAO) становится популярным вариантом управления комьюнити. Если вы хотите лучше понять, какие виды DAO существуют сегодня, то давайте разбираться вместе.
Первая децентрализованная автономная организация
Прежде чем мы погрузимся в различные виды DAO, необходимо провести краткий урок истории.
Первая децентрализованная автономная организация, получившая название «The DAO», была построена на основе смарт-контрактов, использовала фреймворк с открытым исходным кодом и была ориентирована на венчурный капитализм.
К сожалению, из-за ошибки в смарт-контракте The DAO потеряла 3,6 миллиона ETH и не смогла восстановиться в финансовом плане. Тем не менее, The DAO проложила путь для многих других успешных DAO.
Лето DeFi в 2018 году принесло на блокчейн Ethereum флагманские проекты децентрализованных финансов, такие как Compound Finance (COMP), Uniswap (UNI) и Aave (AAVE), которые предлагали участникам сообщества привлекательные способы продемонстрировать свою приверженность децентрализации с помощью токенов управления DAO.
В конечном итоге успех DAO стал результатом инноваций в технологии блокчейна, таких как смарт-контракты, управление onchain (голосование), расширение прав и возможностей членов сообщества, переопределяющих порядок принятия решений, и новые организационно-правовые структуры без центрального органа власти.
По мере развития экосистемы web3, эволюции технологии блокчейн и экспериментов новаторов с новыми видами моделей, вероятно, мы продолжим наблюдать, как DAO расширяют границы возможного.
Можно выделить следующий типы DAO:
1. Protocol DAOs
2. Grant DAOs
3. Philanthropy DAOs
4. Social DAOs
5. Collector DAOs
6. Venture DAOs
7. Media DAOs
8. SubDAOs
Поскольку новые типы DAO разрабатываются регулярно, мы не сможем охватить все категории. Тем не менее, если вы хотите узнать, как создать свою собственную DAO, то давайте рассмотрим наиболее распространенные виды и их цели.
Protocol DAOs
Протокольный DAO - это тип DAO, который предназначен для управления децентрализованным протоколом, таким как приложение для займов/кредитования, децентрализованная биржа или другой тип dapp.
Примеры протокольных DAO
Три наиболее заметных примера протокольных DAO - MakerDAO, Uniswap и Yearn Finance.
MakerDAO
Одно из приложений DeFi в сети Ethereum, MakerDAO использует смарт-контракты, чтобы позволить пользователям кредитовать и занимать криптовалюты с индивидуальными ставками кредитования и суммами погашения.
MakerDAO использует токены управления MKR, чтобы держатели могли голосовать за изменения в протоколе Maker, включая сумму обеспечения для залоговых долговых позиций (CDP), ежегодные займы и прекращение работы в случае краха Ethereum.
Держатели MKR также выступают в качестве покупателей последней инстанции для займов DAI (алгоритмический стейблкоин, созданный MakerDAO). Если стоимость ETH в хранилищах Maker Vaults не покрывает количество DAI в обращении, MKR создается и продается на долговом аукционе, чтобы привлечь необходимое количество средств.
Uniswap
Компания Uniswap запустила токен управления UNI, предоставляющий сообществу право голоса в развитии и операциях Uniswap. Владельцы токенов UNI контролируют управление Uniswap, казначейские средства сообщества UNI, переключатель платы за протокол и многое другое.
Если держатели токенов хотят изменить Uniswap или ввести новые функции, для дальнейшего обсуждения необходимо подать предложение, набрав не менее 25 000 голосов «за» UNI.
Yearn Finance
На первой рабочей неделе мы будем немного раскачиваться, поэтому начнем с чего-то более легкого, чем технический разбор какой-нибудь особенности Solidity или смарт контрактов в целом. Поэтому предлагаю поговорить про системы DAO и чем они отличаются.
По мере того как мир блокчейнов и криптовалют продолжает развиваться, создание децентрализованных автономных организаций (DAO) становится популярным вариантом управления комьюнити. Если вы хотите лучше понять, какие виды DAO существуют сегодня, то давайте разбираться вместе.
Первая децентрализованная автономная организация
Прежде чем мы погрузимся в различные виды DAO, необходимо провести краткий урок истории.
Первая децентрализованная автономная организация, получившая название «The DAO», была построена на основе смарт-контрактов, использовала фреймворк с открытым исходным кодом и была ориентирована на венчурный капитализм.
К сожалению, из-за ошибки в смарт-контракте The DAO потеряла 3,6 миллиона ETH и не смогла восстановиться в финансовом плане. Тем не менее, The DAO проложила путь для многих других успешных DAO.
Лето DeFi в 2018 году принесло на блокчейн Ethereum флагманские проекты децентрализованных финансов, такие как Compound Finance (COMP), Uniswap (UNI) и Aave (AAVE), которые предлагали участникам сообщества привлекательные способы продемонстрировать свою приверженность децентрализации с помощью токенов управления DAO.
В конечном итоге успех DAO стал результатом инноваций в технологии блокчейна, таких как смарт-контракты, управление onchain (голосование), расширение прав и возможностей членов сообщества, переопределяющих порядок принятия решений, и новые организационно-правовые структуры без центрального органа власти.
По мере развития экосистемы web3, эволюции технологии блокчейн и экспериментов новаторов с новыми видами моделей, вероятно, мы продолжим наблюдать, как DAO расширяют границы возможного.
Можно выделить следующий типы DAO:
1. Protocol DAOs
2. Grant DAOs
3. Philanthropy DAOs
4. Social DAOs
5. Collector DAOs
6. Venture DAOs
7. Media DAOs
8. SubDAOs
Поскольку новые типы DAO разрабатываются регулярно, мы не сможем охватить все категории. Тем не менее, если вы хотите узнать, как создать свою собственную DAO, то давайте рассмотрим наиболее распространенные виды и их цели.
Protocol DAOs
Протокольный DAO - это тип DAO, который предназначен для управления децентрализованным протоколом, таким как приложение для займов/кредитования, децентрализованная биржа или другой тип dapp.
Примеры протокольных DAO
Три наиболее заметных примера протокольных DAO - MakerDAO, Uniswap и Yearn Finance.
MakerDAO
Одно из приложений DeFi в сети Ethereum, MakerDAO использует смарт-контракты, чтобы позволить пользователям кредитовать и занимать криптовалюты с индивидуальными ставками кредитования и суммами погашения.
MakerDAO использует токены управления MKR, чтобы держатели могли голосовать за изменения в протоколе Maker, включая сумму обеспечения для залоговых долговых позиций (CDP), ежегодные займы и прекращение работы в случае краха Ethereum.
Держатели MKR также выступают в качестве покупателей последней инстанции для займов DAI (алгоритмический стейблкоин, созданный MakerDAO). Если стоимость ETH в хранилищах Maker Vaults не покрывает количество DAI в обращении, MKR создается и продается на долговом аукционе, чтобы привлечь необходимое количество средств.
Uniswap
Компания Uniswap запустила токен управления UNI, предоставляющий сообществу право голоса в развитии и операциях Uniswap. Владельцы токенов UNI контролируют управление Uniswap, казначейские средства сообщества UNI, переключатель платы за протокол и многое другое.
Если держатели токенов хотят изменить Uniswap или ввести новые функции, для дальнейшего обсуждения необходимо подать предложение, набрав не менее 25 000 голосов «за» UNI.
Yearn Finance
👍3
Как и вышеупомянутые DAO с токенами управления, Yearn DAO делегирует финансирование DAO Vaults. Держатели YFI могут предоставлять средства DAO, одобренным для приема финансирования в экосистеме хранилищ DAO. Восполняя пробел в традиционной системе управления персоналом и начисления заработной платы, основатель YFI Андре Кронье создал Coordinape для автономного распределения средств и вознаграждения вкладчиков.
Далее поговорим про остальные виды.
#dao
Далее поговорим про остальные виды.
#dao
👍3