Роудмап: Как стать аудитором смарт контрактов. Часть 1. Минимальный объем знаний
Пробовал записать видео по этой теме, но понял, что постом будет лучше, так как все равно нужно будет отдельно добавлять ссылки и гайды к нему. Поэтому распишу на свой взгляд, как лучше подготовиться к становлению аудитором.
В начале хотел бы сказать, что не рекомендовал бы покупать отдельные курсы по безопасности смарт контрактов. Дело не в том, что информация там может быть плохой, не структурированном или с некачественной подачей, а, скорее, в том, что практически во всех уроках, что я встречал, были описаны самые простые и базовые темы. Такие уязвимости исправляются уже самими разработчиками на этапе создания и тестирования протокола, и вы вряд ли найдете их в таком чистом виде в реальных проектах.
Я уже неоднократно писал, что с каждым годом баги становятся все сложнее, и то, что год назад можно было найти просто взглянув на код, сейчас требует его понимания на достаточно хорошем уровне.
Так с чего же начать свой путь?
1. Изучение и понимание Solidity.
Как бы просто это не звучало, но вам потребуется хорошее понимание самого языка и работы EVM. Можно знать как работает delagatecall, а можно и ясно понимать, как идет вызов на базовом уровне, и чем грозит его незащищенность.
Это не то, что можно выучить по гайдам и документации. Тут поможет только самостоятельная практика и работа с кодом. Чаще задавайтесь вопросом: "А как это работает? А что будет, если сделать так...?" и другие. Невозможно понять язык, просто читая его документацию.
2. Изучение и понимание популярных EIP и Open Zeppelin контрактов.
Каждый хороший разработчик и, тем более, аудитор должен хорошо знать часто используемые EIP:
1. https://eips.ethereum.org/EIPS/eip-20
2. https://eips.ethereum.org/EIPS/eip-721
3. https://eips.ethereum.org/EIPS/eip-712
4. https://eips.ethereum.org/EIPS/eip-1155
5. https://eips.ethereum.org/EIPS/eip-4626
6. https://eips.ethereum.org/EIPS/eip-165
7. https://eips.ethereum.org/EIPS/eip-1967
При чтении этих Предложений необходимо уделять пристальное внимание всем "warning", "must", "should" и нюансам использования. Так, например, возникает очень много проблем с реализацией стандарта подписей (712): правильным хешированием данных, domain separator и составлению подписи.
Вам также необходимо знать часто используемые контракты от Open Zeppelin:
1. ECDSA,
2. MerkleProof,
3. Math,
4. SafeCast,
5. Address,
6. Context,
7. Create2,
8. ReentrancyGuard,
9. AccessControl,
10. Ownable,
11. Ownable2Step
Более того, обязательно знать реализации OZ контрактов из обозначенных выше EIP. Все их можно постепенно изучать в этом репо:
https://github.com/OpenZeppelin/openzeppelin-contracts
Также будет здорово, если вы будете понимать работу обновляемых контрактов от OZ:
https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable
И две другие библиотеки:
1. Solady - https://github.com/Vectorized/solady
2. Solmate - https://github.com/transmissions11/solmate
Эти две библиотеки реализуют популярные стандарты токенов и некоторых других контрактов, которые могут попадаться в аудитах. Они немного отличаются от обще используемых контрактов OZ.
Это та база, на которую опираются 90% протоколов в своей разработке.
При изучении каждого контракта желательно обращать внимание на его версию и поискать, какие проблемы были обнаружены в предыдущей реализации. Например, почему нельзя использовать ECDSA от OZ ниже 4.8.2 версии. И не просто знать рекомендуемую версию, а именно "что было не так в предыдущей".
3. Изучение и понимание DeFi
Большинство сегодняшних протоколов - это DeFi проекты. Многие из них берут свои идеи от других финансовых протоколов или просто копируют его код. На начальном этапе вам не нужно знать как работают деривативы и фьючерсы, но иметь представление о нескольких наиболее копируемых протоколов все же надо.
На мой взгляд, обязательными к пониманию и изучению являются следующие DeFi:
Post #1267
1.15K
- 👍 3
- ❤ 1