Заметки по аудиту vVv LaunchpadНа прошлой неделе увидел, что на Шерлоке будет небольшой конкурс с четверга по воскресенье, всего 279 строк кода, и решил "залететь" на него.
К слову сказать, я не участвовал в аудитах на этой платформе около двух лет! Меня всегда сильно смущало разделение пула (когда его львиная доля уходит назначенному топу) и некоторые проблемы с судейством. Но это только мое мнение и мой выбор игнорирования этой площадки.
Но сейчас у меня другая цель - быстрое понимание протокола, и, по сути, мне не важны ни судейство, ни размер выигрыша. Поэтому решил попробовать и там.
Также стоит отметить, что Шерлок недавно изменил систему судейства, а также форму подачи самого репорта. Поэтому, если вы соберетесь участвовать в их конкурсе, оставьте время, чтобы разобраться, как правильно подавать отчет по багу. Оставив все на последний момент, можно не успеть добавить все репорты.
P.S. Документации с описанием подачи репортов я не нашел. Если скинете ссылку в комментах, буду признателен. Из-за моего некоторого предубеждения к этой платформе, я потратил всего 3 часа на аудит и отправил 5 репортов. Один пометил как Low, и он не попал в список на судейство. Вообще не понял почему, и как это исправить, ведь теги к отчету нельзя менять после завершение конкурса. При этом я также не увидел никаких пунктов о том, что Low не попадают в общую базу для судейства...
Также другие 2 репорта отправил, чтобы узнать больше о правилах судейства на платформе. Есть некоторые виды уязвимостей, которые могут быть валидны на одной платформе и нет - на другой. Посмотрим, как будет тут.
Обидно, что когда писал этот пост, увидел еще один очень простой и очевидный баг, но время уже прошло...
Что я могу сказать по этому протоколу?
Если вы знаете самые распространенные проблемы с подписями и EIP712, то у вас могли бы быть первые зачтенные баги на этой платформе.
Вы можете и сейчас попрактиковаться с этим аудитом, зайдя на страницу:
https://audits.sherlock.xyz/contests/647?filter=scope
и изучив эти два контракта. Вот прям открывайте solodit и EIP712, и сверяйте код.
Еще одна подсказка по работе со сложными структурами.
В контракте был такой struct:
struct InvestParams {
uint256 investmentRound;
uint256 investmentRoundLimit;
uint256 investmentRoundStartTimestamp;
uint256 investmentRoundEndTimestamp;
address paymentTokenAddress;
address kycAddress;
uint256 kycAddressAllocation;
uint256 amountToInvest;
uint256 exchangeRateNumerator;
uint256 feeNumerator;
uint256 deadline;
bytes signature;
}
Потратив некоторое время, конечно, можно и разобраться и понять каждую переменную. Но нам нужно запоминать все быстрее. Поэтому можно в заметках делать простые таблицы, как у меня на скрине, и разбивать их по логическим блокам:
- что относится к инвестиционному раунду;
- что к пользователю;
- что к подписи (так как это структура для ser signature).
В итоге у меня получилось:
1. Round: limit, start/end, token;
2. User: address, max amount limit;
3. Token: fee, exchange;
4. Signature: deadline, sign;
Скажите же, что так проще ориентироваться?
Я часто встречал большие структуры в протоколах, но никогда ранее не пробовал их упрощать у себя в заметках. Теперь буду так делать всегда.
Ну, что же, ждем результаты и движемся дальше!
Приятной рабочей недели и легкого обучения!
#audit