Задача для новичков
Еще одна простая задача, которая имеет статус Med Risk. Ее также можно назвать логической.
Решение
Ранее созданный market может быть переписан, так как нет проверок на существующие.
#task
Еще одна простая задача, которая имеет статус Med Risk. Ее также можно назвать логической.
Решение
👍2🔥1
Задача с популярным багом
Сегодня уже была одна задача, где не хватало одной популярной проверки. Угадали?
Решение
Нужна очередная проверка на нулевой адрес для beneficiary.
#task
Сегодня уже была одна задача, где не хватало одной популярной проверки. Угадали?
Решение
👍3
На внимательность
К этой задаче я обращался несколько раз, так как не мог понять, в чем может быть дело. Все оказалось очень просто. Поняли?
Решение
Так как функция имеет дело с msg.value то ее требуется определить как payable. Без этого она будет откатываться. Все просто.
#task
К этой задаче я обращался несколько раз, так как не мог понять, в чем может быть дело. Все оказалось очень просто. Поняли?
Решение
🔥2
Читаем отчеты вместе. 10
Вместе со всем не останавливаемся и продолжаем хреначить аудиторские отчеты!
Отчеты, как и задачи, помогают нам распознавать проблемы в коде там, где другие разработчики пропускают их. Совершенно не важно, сможете ли вы найти ответ на задачу, или распознать уязвимость в конкурсном аудите, в обучении важно, какой урок вы из этого извлечете.
Да, я и сам не мог решить многие задачи, провалил пару тестовых аудитов на вакансию, однако теперь и эти баги / ошибки / логические проблемы у меня в списке того, на что нужно обращать внимание.
Только за январь мы просмотрели уже около 15 различных примеров задач, 9 отчетов и массу других штук для профессии аудитора. Если вы двигались вместе со мной, то это уже как минимум 30+ моментов, которые мы сможем распознать в последующих задачах и аудитах! Главное регулярно заниматься!
Читаем вместе очередной отчет!
#report #audit
Вместе со всем не останавливаемся и продолжаем хреначить аудиторские отчеты!
Отчеты, как и задачи, помогают нам распознавать проблемы в коде там, где другие разработчики пропускают их. Совершенно не важно, сможете ли вы найти ответ на задачу, или распознать уязвимость в конкурсном аудите, в обучении важно, какой урок вы из этого извлечете.
Да, я и сам не мог решить многие задачи, провалил пару тестовых аудитов на вакансию, однако теперь и эти баги / ошибки / логические проблемы у меня в списке того, на что нужно обращать внимание.
Только за январь мы просмотрели уже около 15 различных примеров задач, 9 отчетов и массу других штук для профессии аудитора. Если вы двигались вместе со мной, то это уже как минимум 30+ моментов, которые мы сможем распознать в последующих задачах и аудитах! Главное регулярно заниматься!
Читаем вместе очередной отчет!
#report #audit
👍2
Особенность try/catch
Из Твиттера узнал, что с try/catch могут возникать проблемы при разработке кода. Дело в том, что если целью является адрес без кода (EOA), то выполнение функции откатывается.
Это связано с тем, что опкод EXTCODESIZE идет впереди самого call, и откатывает транзакцию, если кода нет.
Другими словами, try/catch не только может поймать откат, но и быть его причиной.
#trycatch
Из Твиттера узнал, что с try/catch могут возникать проблемы при разработке кода. Дело в том, что если целью является адрес без кода (EOA), то выполнение функции откатывается.
Это связано с тем, что опкод EXTCODESIZE идет впереди самого call, и откатывает транзакцию, если кода нет.
Другими словами, try/catch не только может поймать откат, но и быть его причиной.
#trycatch
👍1
Минт токенов в Foundry
Сегодня узнал, что Foundry позволяет использовать специальную команду, чтобы пополнить токенами счет.
Раньше, после создания контракта, нужно было делать дополнительные манипуляции, чтобы пополнить свой счет нужными токенами для последующих действий, а теперь можно выполнить такую команду:
deal({token: address(token), to, mgs.sender, give: amount});
Это прекрасно ускоряет проведение тестов. Пример на скрине.
#foundry #token
Сегодня узнал, что Foundry позволяет использовать специальную команду, чтобы пополнить токенами счет.
Раньше, после создания контракта, нужно было делать дополнительные манипуляции, чтобы пополнить свой счет нужными токенами для последующих действий, а теперь можно выполнить такую команду:
deal({token: address(token), to, mgs.sender, give: amount});
Это прекрасно ускоряет проведение тестов. Пример на скрине.
#foundry #token
👍3
Опасность с approve токена
Не помню поднималась ли эта тема на канале, но на всякий случай еще раз напомню про опасность, которая может быть с функцией approve, которая разрешает трансфер токенов от третьего лица.
Допустим, Алиса дала разрешение (approve) Бобу на перевод 100 токенов с ее счета. А затем передумала и понизила максимальную сумму до 50 токенов.
И все было бы ок, если бы Боб был порядочным. Но в данном примере это не так.
Как только Боб заметил, что Алиса запустила транзакцию на понижение, он отправил свою транзакцию на перевод вперед Алисы (фронтран), а затем еще одну, уже после изменения approve. Таким образом он получил сразу 150 токенов от Алисы, хотя максимальное разрешение было на 100.
В общем, поэтому в некоторых токенах, пользователю сначала нужно сделать нулевой approve, а потом изменять значение на новое.
#approve #token
Не помню поднималась ли эта тема на канале, но на всякий случай еще раз напомню про опасность, которая может быть с функцией approve, которая разрешает трансфер токенов от третьего лица.
Допустим, Алиса дала разрешение (approve) Бобу на перевод 100 токенов с ее счета. А затем передумала и понизила максимальную сумму до 50 токенов.
И все было бы ок, если бы Боб был порядочным. Но в данном примере это не так.
Как только Боб заметил, что Алиса запустила транзакцию на понижение, он отправил свою транзакцию на перевод вперед Алисы (фронтран), а затем еще одну, уже после изменения approve. Таким образом он получил сразу 150 токенов от Алисы, хотя максимальное разрешение было на 100.
В общем, поэтому в некоторых токенах, пользователю сначала нужно сделать нулевой approve, а потом изменять значение на новое.
#approve #token
👍1
Собрание подсказок по газу
Нашел интересный пост, где собраны 20 подсказок по экономии газа. Но, что самое интересное, они покрывают многие ошибки из аудиторских отчетов на code4rena и шерлок.
Другими словами, запомнив все эти подсказки, вы сможете сами писать хорошие gas reports.
Изучаем и запоминаем!
#gas
Нашел интересный пост, где собраны 20 подсказок по экономии газа. Но, что самое интересное, они покрывают многие ошибки из аудиторских отчетов на code4rena и шерлок.
Другими словами, запомнив все эти подсказки, вы сможете сами писать хорошие gas reports.
Изучаем и запоминаем!
#gas
❤4
Читаем отчеты вместе. 11
Ну, и в завершении дня, традиционный аудиторский отчет.
На этот раз мы посмотрим на последний отчет от Trust, затем вернемся к code4rena и остальным.
Читаем отчет вместе!
#report #audit
Ну, и в завершении дня, традиционный аудиторский отчет.
На этот раз мы посмотрим на последний отчет от Trust, затем вернемся к code4rena и остальным.
Читаем отчет вместе!
#report #audit
Gatekeeper Three от Ethernaut
Спасибо @arsln_galimov, что скинул в чат сообщества ссылку на прохождение новой задачи от Ethernaut. Самое классное тут, что в видео показан способ решения с Foundry и его cast командами.
Сама задача, в принципе, довольно простая. Первый модификатор решается с помощью опечатки в функции, второй - с помощью открытой информации в блокчейне, и третий - откатом приема Эфира на контракт хакера.
Из данного видео можно понять как работают следующие команды в Foundry:
1) Отправить транзакцию в напрямую в сеть (тестовую сеть) с помощью cast send и rpc ссылки;
2) Запросить информацию о конкретном блоке с помощью cast block;
3) Отправить Эфир на контракт;
4) Проверить баланс контракта;
5) Сделать деплой своего контракта в тестовую сеть с помощью forge create;
В общем, очень показательное видео для тех, кто хочет освоить Foundry.
Само видео прохождение.
Приятного просмотра!
#ethernaut #foundry
Спасибо @arsln_galimov, что скинул в чат сообщества ссылку на прохождение новой задачи от Ethernaut. Самое классное тут, что в видео показан способ решения с Foundry и его cast командами.
Сама задача, в принципе, довольно простая. Первый модификатор решается с помощью опечатки в функции, второй - с помощью открытой информации в блокчейне, и третий - откатом приема Эфира на контракт хакера.
Из данного видео можно понять как работают следующие команды в Foundry:
1) Отправить транзакцию в напрямую в сеть (тестовую сеть) с помощью cast send и rpc ссылки;
2) Запросить информацию о конкретном блоке с помощью cast block;
3) Отправить Эфир на контракт;
4) Проверить баланс контракта;
5) Сделать деплой своего контракта в тестовую сеть с помощью forge create;
В общем, очень показательное видео для тех, кто хочет освоить Foundry.
Само видео прохождение.
Приятного просмотра!
#ethernaut #foundry
👍1
ABI Smuggling от Damn Vulnerable DeFi
Ну, раз разобрали новую задачу от Ethernaut, то можно попробовать посмотреть и на новую задачу от DVD.
Кстати, тем кто хотел поупражняться со взломом DeFi, то вы можете заново перепройти DVD, так как они выпустили обновления и переписали некоторые контракты.
Но вернемся к нашей задаче. Вот ссылка на нее.
Сразу скажу, что я не смог решить ее сам, так как не понимал некоторых моментов. В оригинале прохождение взято из этой статьи.
Вообще, данное задание уже для уровня хорошего миддла или даже сеньора. Вам нужно знать не только, как хранится calldata и работает abi.encodePacked, но и понимать, что ее можно модифицировать.
Статья обязательна для изучения всем аудиторам, так как уже были реальные взломы, в которых использовались данные приемы.
Было бы очень долго переводить всю статью и инфографику, поэтому тут обозначу основные моменты.
Самое главное, если не помните, как хранится calldata, то изучите эту тему внимательно. Обратите особое внимание на хранение динамических типов: массивов и байтов. Напомню, сначала идет слот смещения, затем длина/количество calldata, а уже после - само значение calldata.
И вот модифицировав calldata так, чтобы он указывал на исполнение другой функции внутри себя, вы сможете решить задачу.
Она достаточно сложная, и, вероятнее всего, вам, как и мне, нужно будет просидеть час-два, перевести все дословно и понять суть работы с памятью calldata, чтобы разобраться, в чем там дело.
Могу с уверенность сказать, что это стоит своего времени. Статья очень подробная!
#dvd
Ну, раз разобрали новую задачу от Ethernaut, то можно попробовать посмотреть и на новую задачу от DVD.
Кстати, тем кто хотел поупражняться со взломом DeFi, то вы можете заново перепройти DVD, так как они выпустили обновления и переписали некоторые контракты.
Но вернемся к нашей задаче. Вот ссылка на нее.
Сразу скажу, что я не смог решить ее сам, так как не понимал некоторых моментов. В оригинале прохождение взято из этой статьи.
Вообще, данное задание уже для уровня хорошего миддла или даже сеньора. Вам нужно знать не только, как хранится calldata и работает abi.encodePacked, но и понимать, что ее можно модифицировать.
Статья обязательна для изучения всем аудиторам, так как уже были реальные взломы, в которых использовались данные приемы.
Было бы очень долго переводить всю статью и инфографику, поэтому тут обозначу основные моменты.
Самое главное, если не помните, как хранится calldata, то изучите эту тему внимательно. Обратите особое внимание на хранение динамических типов: массивов и байтов. Напомню, сначала идет слот смещения, затем длина/количество calldata, а уже после - само значение calldata.
И вот модифицировав calldata так, чтобы он указывал на исполнение другой функции внутри себя, вы сможете решить задачу.
Она достаточно сложная, и, вероятнее всего, вам, как и мне, нужно будет просидеть час-два, перевести все дословно и понять суть работы с памятью calldata, чтобы разобраться, в чем там дело.
Могу с уверенность сказать, что это стоит своего времени. Статья очень подробная!
#dvd
👍1
Немного о Zero Knowledge
Наконец-то, на канале Ильи на ютуб вышел ролик про ZK (Zero Knowledge). Это достаточно горячая тема в зарубежных постах и обсуждениях.
Я ушел в сторону безопасности и аудита, и решил, что буду изучать данную тему по мере поступления отчетов об уязвимостях и т.д.
Тем не менее, для тех, кто вообще не имеет представление, что это такое, данное видео прекрасно проливает свет.
Видео урок от Ильи.
Презентация из урока.
Ссылка на сборник материалов от Officer CIA.
Приятного и легкого изучения!
#zk #zeroknowledge
Наконец-то, на канале Ильи на ютуб вышел ролик про ZK (Zero Knowledge). Это достаточно горячая тема в зарубежных постах и обсуждениях.
Я ушел в сторону безопасности и аудита, и решил, что буду изучать данную тему по мере поступления отчетов об уязвимостях и т.д.
Тем не менее, для тех, кто вообще не имеет представление, что это такое, данное видео прекрасно проливает свет.
Видео урок от Ильи.
Презентация из урока.
Ссылка на сборник материалов от Officer CIA.
Приятного и легкого изучения!
#zk #zeroknowledge
YouTube
Solidity и смарт-контракты Ethereum, урок #42 | Zero knowledge rollups, layer 2, optimistic rollup
ХОТИТЕ СТАТЬ РАЗРАБОТЧИКОМ Solidity, узнать об Ethereum, блокчейне и многом другом ещё больше?!
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
🔥3👍1
Мой личный затык с аудитами
Хочу поделиться своей насущной проблемой при аудите контрактов и узнать, было ли у вас такое и как справляетесь.
Я довольно хорошо продвигаюсь с поиском уязвимостей в контракте: вижу проблемные места, понимаю, как можно обойти защиту, написать тест и т.д. Но в некоторых случаях прям сильно загоняюсь, что не могу понять общий смысл проекта.
В задачах просто: есть функция - есть уязвимость. В двух-трех контрактах тоже можно найти связи и понять flow (не знаю, как перевести общий смысл "потока" транзакций между контрактами). Но порой в конкурсных проектах я просто не могу "въехать" в описание проекта и перекликание контрактов.
В том смысле, что: "А какой контракт главный? Почему функции одинаковые? Где точка входа пользователя? Как связаны эти два контракта, которые даже в наследованиях никак не перекликаются?" и много других подобных вопросов.
С одной стороны, когда и документация в порядке, и комментарии к коду написаны, и описание контрактов есть - то все просто: не понимаешь - читай заново. А когда комментов нет, но есть доки и то "битые"? Вот как делать аудит тогда?
В особенности, когда кажется, что функция уязвима. А может это так и надо? А может она по смыслу где-то защищена...
Короче, некоторые конкурсные проекты прямо вызов на понимание. А ведь без этого хороший аудит не проведешь...
Пока что из 12 конкурсных аудитов, что я брал на code4rena и sherlock, 5 я пропустил. 2 из них были слишком сложные для меня пока что - Optimism и какой-то финансовый, а 2 - с ужасными доками и комментами, еще 1 - пробить не смог...
Запомните сами и передайте другим разработчикам: ДЕЛАЙТЕ КОММЕНТАРИИ! Я бы даже сказал: хреновые доки - хреновый аудит.
Фух, выговорился)
А так, принимаю советы и рекомендации из вашего опыта.
#audit
Хочу поделиться своей насущной проблемой при аудите контрактов и узнать, было ли у вас такое и как справляетесь.
Я довольно хорошо продвигаюсь с поиском уязвимостей в контракте: вижу проблемные места, понимаю, как можно обойти защиту, написать тест и т.д. Но в некоторых случаях прям сильно загоняюсь, что не могу понять общий смысл проекта.
В задачах просто: есть функция - есть уязвимость. В двух-трех контрактах тоже можно найти связи и понять flow (не знаю, как перевести общий смысл "потока" транзакций между контрактами). Но порой в конкурсных проектах я просто не могу "въехать" в описание проекта и перекликание контрактов.
В том смысле, что: "А какой контракт главный? Почему функции одинаковые? Где точка входа пользователя? Как связаны эти два контракта, которые даже в наследованиях никак не перекликаются?" и много других подобных вопросов.
С одной стороны, когда и документация в порядке, и комментарии к коду написаны, и описание контрактов есть - то все просто: не понимаешь - читай заново. А когда комментов нет, но есть доки и то "битые"? Вот как делать аудит тогда?
В особенности, когда кажется, что функция уязвима. А может это так и надо? А может она по смыслу где-то защищена...
Короче, некоторые конкурсные проекты прямо вызов на понимание. А ведь без этого хороший аудит не проведешь...
Пока что из 12 конкурсных аудитов, что я брал на code4rena и sherlock, 5 я пропустил. 2 из них были слишком сложные для меня пока что - Optimism и какой-то финансовый, а 2 - с ужасными доками и комментами, еще 1 - пробить не смог...
Запомните сами и передайте другим разработчикам: ДЕЛАЙТЕ КОММЕНТАРИИ! Я бы даже сказал: хреновые доки - хреновый аудит.
Фух, выговорился)
А так, принимаю советы и рекомендации из вашего опыта.
#audit
👍1🤔1
Читаем отчеты вместе. 12
Сегодня мы посмотрим на последний аудиторский отчет от Mixbytes.
Знаю, некоторые из вас проходят обучение от данной компании, поэтому будет вдвойне полезно посмотреть на результаты их работы.
Читаем отчет вместе!
#report #audit
Сегодня мы посмотрим на последний аудиторский отчет от Mixbytes.
Знаю, некоторые из вас проходят обучение от данной компании, поэтому будет вдвойне полезно посмотреть на результаты их работы.
Читаем отчет вместе!
#report #audit
🔥3👍1
Релиз Solidity 0.8.18
Если вы еще не в курсе, то вчера состоялся релиз новой версии Solidity 0.8.18.
Полное описание обновление можно прочитать тут.
Если говорить кратко, то основные изменения такие:
1) Упразднение selfdestruct. Теперь его не рекомендовано использовать;
2) Упразднение block.difficulty и появление block.prevrandao (и просто prevrandao в assembly);
2) Облегченная генерация байткода из кода yul;
3) Некоторая оптимизация yul, smtchecker, вместе с исправлением некоторых багов во втором;
Ранее писали, что будут изменения с пользовательскими определениями математических действий, но пока о них не заявлено. Может в уже более глобальном обновлении будет что-то такое.
#solidity
Если вы еще не в курсе, то вчера состоялся релиз новой версии Solidity 0.8.18.
Полное описание обновление можно прочитать тут.
Если говорить кратко, то основные изменения такие:
1) Упразднение selfdestruct. Теперь его не рекомендовано использовать;
2) Упразднение block.difficulty и появление block.prevrandao (и просто prevrandao в assembly);
2) Облегченная генерация байткода из кода yul;
3) Некоторая оптимизация yul, smtchecker, вместе с исправлением некоторых багов во втором;
Ранее писали, что будут изменения с пользовательскими определениями математических действий, но пока о них не заявлено. Может в уже более глобальном обновлении будет что-то такое.
#solidity
👍4
Аудит - это не скорый результат
Просто хочу поделиться с вами твитом одного из прекрасных аудиторов. Только подумайте, что в июне (7 месяцев назад от декабря), от только начал делать конкурсные аудиты на популярных площадках. Т.е. учился он безопасности и уязвимостям еще пару месяцев до этого! Я где-то встречал, возможно в интервью с ним, что первый баг с tx.origin он нашел еще год-полтора назад!
И при всем при этом, он еще не достиг топового уровня, как например аудитор и white hat hacker - Trust. К чему я это все?
Не ругайте себя, если что-то не понимаете или не можете сделать. На все требуется свое время.
Уделяйте час-два в день на практику, и через полгода вы сможете стать прекрасным разработчиком или аудитором. Тем более, благодаря тому, что многие пользователи создают новые задачи, делятся своими наработками и опытом, а также появляются новые сообщества, где можно задавать вопросы, есть огромная вероятность, что вы сможете пройти путь с 0 до первых денег в разы быстрее!
#pashov
Просто хочу поделиться с вами твитом одного из прекрасных аудиторов. Только подумайте, что в июне (7 месяцев назад от декабря), от только начал делать конкурсные аудиты на популярных площадках. Т.е. учился он безопасности и уязвимостям еще пару месяцев до этого! Я где-то встречал, возможно в интервью с ним, что первый баг с tx.origin он нашел еще год-полтора назад!
И при всем при этом, он еще не достиг топового уровня, как например аудитор и white hat hacker - Trust. К чему я это все?
Не ругайте себя, если что-то не понимаете или не можете сделать. На все требуется свое время.
Уделяйте час-два в день на практику, и через полгода вы сможете стать прекрасным разработчиком или аудитором. Тем более, благодаря тому, что многие пользователи создают новые задачи, делятся своими наработками и опытом, а также появляются новые сообщества, где можно задавать вопросы, есть огромная вероятность, что вы сможете пройти путь с 0 до первых денег в разы быстрее!
#pashov
👍6❤1
Читаем отчеты вместе. 13
Сегодня не получилось даже посидеть с новым конкурсным аудитом, так как весь день разбирался с контрактами Uniswap, начиная с первой версией и заканчивая третьей.
Я хочу за эту и следующую недели еще раз просмотреть контракты и логику популярных бирж, типа того же Uniswap, Curve, Balancer, Compound и других. Постараюсь выкладывать свои подборки в постах на эти темы.
Ну, а пока, по традиции на вечер, мы посмотрим но недавно выпущенный отчет от code4rena.
Читаем вместе!
#report #audit
Сегодня не получилось даже посидеть с новым конкурсным аудитом, так как весь день разбирался с контрактами Uniswap, начиная с первой версией и заканчивая третьей.
Я хочу за эту и следующую недели еще раз просмотреть контракты и логику популярных бирж, типа того же Uniswap, Curve, Balancer, Compound и других. Постараюсь выкладывать свои подборки в постах на эти темы.
Ну, а пока, по традиции на вечер, мы посмотрим но недавно выпущенный отчет от code4rena.
Читаем вместе!
#report #audit
Новые уроки по Foundry
Вчера на Дискорд сервере Spearbit прошел небольшой вебинар по Foundry. Я не успел попасть на эфир, но они выложили видео на ютуб канал.
Предлагаю вам посмотреть два видео от данного спикера. Первое было записано 10 месяцев назад.
How to Foundry with Brock Elmore
How to Foundry 2.0: Brock Elmore
Всего около 3 часов полезной информации. Приятного просмотра.
#foundry
Вчера на Дискорд сервере Spearbit прошел небольшой вебинар по Foundry. Я не успел попасть на эфир, но они выложили видео на ютуб канал.
Предлагаю вам посмотреть два видео от данного спикера. Первое было записано 10 месяцев назад.
How to Foundry with Brock Elmore
How to Foundry 2.0: Brock Elmore
Всего около 3 часов полезной информации. Приятного просмотра.
#foundry
YouTube
How to Foundry with Brock Elmore
How to Foundry with Brock Elmore | Brought to you by Spearbit & Nascent
Introduction: https://hackmd.io/vlEVlv7aQ7GdaQgg3-DYLQ
Follow Along: https://github.com/brockelmore/foundry_seminar
Resources -----------------------------
https://github.com/gakonst/foundry…
Introduction: https://hackmd.io/vlEVlv7aQ7GdaQgg3-DYLQ
Follow Along: https://github.com/brockelmore/foundry_seminar
Resources -----------------------------
https://github.com/gakonst/foundry…
Гайд по изучению Uniswap. Часть 1
Два дня потратил на понимание работы Uniswap и делюсь с вами подборкой ресурсов, которую составил в процессе.
Хочу обратить внимание, что в подборке не рассматриваются следующие темы:
1) Арбитраж;
2) Подключение функций Uniswap в свой контракт. По этому вопросу есть масса видео на ютуб;
3) Разбора математических расчетов. Я вряд ли смогу объяснить каждую формулу, поэтому лучше сами посмотрите их в документации.
Я ставил задачей узнать про составляющую основу смарт контрактов протокола и основные функции, которые там есть. Это позволит видеть схожие паттерны при аудитах.
Итак, приступим.
Для того, чтобы хорошо понимать работу Uniswap, прежде всего следует посмотреть, с чего он начинался, т.е. пройтись с первой версии до третьей.
Uniswap V1
Есть три прекрасные статьи на русском языке на Хабре, где переведено создание аналога V1. Очень хорошо объяснены и показаны основные функции и их работа.
Статья 1, статья 2, статья 3.
Этой информации будет вполне достаточно для понимания основ, так как v1 версия была довольно ограниченной.
Далее переходим к Uniswap v2
От этого же автора, но, к сожалению, не переведённые на русский язык, поэтому читаем статьи в оригинале. Там рассказывается, как создать свой V2 с объяснением основных идей протокола, его функций и контрактов.
Статья 1, статья 2, статья 3, статья 4.
Если данной информации, по каким-либо причинам будет мало, то остальные вопросы можно вполне себе найти в официальной документации.
Uniswap v3 оказался немного сложнее в понимании, поэтому про него будет отдельный пост.
P.S. Отдельное спасибо @arsln_galimov за то, что поделился ссылками на данные статьи.
#uniswap
Два дня потратил на понимание работы Uniswap и делюсь с вами подборкой ресурсов, которую составил в процессе.
Хочу обратить внимание, что в подборке не рассматриваются следующие темы:
1) Арбитраж;
2) Подключение функций Uniswap в свой контракт. По этому вопросу есть масса видео на ютуб;
3) Разбора математических расчетов. Я вряд ли смогу объяснить каждую формулу, поэтому лучше сами посмотрите их в документации.
Я ставил задачей узнать про составляющую основу смарт контрактов протокола и основные функции, которые там есть. Это позволит видеть схожие паттерны при аудитах.
Итак, приступим.
Для того, чтобы хорошо понимать работу Uniswap, прежде всего следует посмотреть, с чего он начинался, т.е. пройтись с первой версии до третьей.
Uniswap V1
Есть три прекрасные статьи на русском языке на Хабре, где переведено создание аналога V1. Очень хорошо объяснены и показаны основные функции и их работа.
Статья 1, статья 2, статья 3.
Этой информации будет вполне достаточно для понимания основ, так как v1 версия была довольно ограниченной.
Далее переходим к Uniswap v2
От этого же автора, но, к сожалению, не переведённые на русский язык, поэтому читаем статьи в оригинале. Там рассказывается, как создать свой V2 с объяснением основных идей протокола, его функций и контрактов.
Статья 1, статья 2, статья 3, статья 4.
Если данной информации, по каким-либо причинам будет мало, то остальные вопросы можно вполне себе найти в официальной документации.
Uniswap v3 оказался немного сложнее в понимании, поэтому про него будет отдельный пост.
P.S. Отдельное спасибо @arsln_galimov за то, что поделился ссылками на данные статьи.
#uniswap
👍3❤2🔥1
Гайд по изучению Uniswap. Часть 2
В Uniswap v3 было сделано большое обновление протокола, поэтому для понимания принципов его работы может уйти некоторое время.
Прежде всего стоит начать, что многие проекты копируют его код и структуру файлов в проекте, поэтому нам нужно знать, из чего вообще состоит Uniswap v3. Сделать это мы может, посетив его GitHub страницу.
Там мы увидим, что проект, в своей сути, разделен на два репозитория:
Uniswap v3 Core
и
Uniswap v3 Periphery
Core, как мы может догадаться, исполняет основную логику протокола - создание пулов (пар). Periphery используется как посредник между фронтендом, их сайтом, где проходят все манипуляции, и core контрактами. Более того, мы можем подключать функции и делать свапы в своих контрактах, используя именно периферийные контракты.
Для изучения работы протокола можно обращаться к его официальной документации или стороннему проекту, где описана вся его логика с примерами - Uniswap V3 Development Book.
Есть три видео, в которых авторы проходятся построчно в таких контрактах, как Position, Factory и делают общий обзор.
Рекомендую их посмотреть, чтобы наглядно представлять внутреннюю кухню Uniswap.
Также есть прекрасный канал, где рассказываются про математические формулы и расчеты в протоколе, а также приводятся примеры подключения некоторые популярных функций в свой контракт.
Для изучения Uniswap крайне важно понимать принципы работы работы, так называемых ticks, и концентрированной ликвидности пулов.
Вообще, tick - это некий диапазон цен, в котором находится токен для покупки или продажи. И пул, например, WETH/DAI, может иметь множество таких ticks.
Вот здесь можно почитать подробнее про оба этих принципа.
Статья 1, статья 2.
Ну, еще мне понравилась эта картинка для демонстрации.
Также, в процессе изучения ticks вы встретитесь с такими "монстрами", как tickSpacing и tick bitmap. В первом случае, это некий параметр для более эффективной итерации по тикам, во втором - специальная техника для индексации данных в компактном виде. Почитать подробнее можно в этих постах:
Про tickSpacing, иллюстрация tickSpacing, про tick bitmap.
Также, в Uniswap при минте токенов и при свапах вам потребуется реализовывать некоторые callback функции в своем контракте. Для этого стоит изучить данный пост.
В конце, хотел бы обратить ваше внимание на дополнительные материалы, которые будут полезны для большего изучения протокола:
Описание quoter контракта, которые помогает рассчитывать цены токенов на фронтенде, а также Multihop Swaps, которые помогают обменивать один токен на максимально возможное количество другого.
После всего пройденного, у меня остался всего один вопрос, на который я не смог найти ответа: зачем нужна функция snapshotCumulativesInside в контракте роутера? Если вы знаете ответ, прошу поделиться в комментариях.
Также буду раз, если поделитесь своими ссылками, которые проливают свет на работу Uniswap v3.
#uniswap
В Uniswap v3 было сделано большое обновление протокола, поэтому для понимания принципов его работы может уйти некоторое время.
Прежде всего стоит начать, что многие проекты копируют его код и структуру файлов в проекте, поэтому нам нужно знать, из чего вообще состоит Uniswap v3. Сделать это мы может, посетив его GitHub страницу.
Там мы увидим, что проект, в своей сути, разделен на два репозитория:
Uniswap v3 Core
и
Uniswap v3 Periphery
Core, как мы может догадаться, исполняет основную логику протокола - создание пулов (пар). Periphery используется как посредник между фронтендом, их сайтом, где проходят все манипуляции, и core контрактами. Более того, мы можем подключать функции и делать свапы в своих контрактах, используя именно периферийные контракты.
Для изучения работы протокола можно обращаться к его официальной документации или стороннему проекту, где описана вся его логика с примерами - Uniswap V3 Development Book.
Есть три видео, в которых авторы проходятся построчно в таких контрактах, как Position, Factory и делают общий обзор.
Рекомендую их посмотреть, чтобы наглядно представлять внутреннюю кухню Uniswap.
Также есть прекрасный канал, где рассказываются про математические формулы и расчеты в протоколе, а также приводятся примеры подключения некоторые популярных функций в свой контракт.
Для изучения Uniswap крайне важно понимать принципы работы работы, так называемых ticks, и концентрированной ликвидности пулов.
Вообще, tick - это некий диапазон цен, в котором находится токен для покупки или продажи. И пул, например, WETH/DAI, может иметь множество таких ticks.
Вот здесь можно почитать подробнее про оба этих принципа.
Статья 1, статья 2.
Ну, еще мне понравилась эта картинка для демонстрации.
Также, в процессе изучения ticks вы встретитесь с такими "монстрами", как tickSpacing и tick bitmap. В первом случае, это некий параметр для более эффективной итерации по тикам, во втором - специальная техника для индексации данных в компактном виде. Почитать подробнее можно в этих постах:
Про tickSpacing, иллюстрация tickSpacing, про tick bitmap.
Также, в Uniswap при минте токенов и при свапах вам потребуется реализовывать некоторые callback функции в своем контракте. Для этого стоит изучить данный пост.
В конце, хотел бы обратить ваше внимание на дополнительные материалы, которые будут полезны для большего изучения протокола:
Описание quoter контракта, которые помогает рассчитывать цены токенов на фронтенде, а также Multihop Swaps, которые помогают обменивать один токен на максимально возможное количество другого.
После всего пройденного, у меня остался всего один вопрос, на который я не смог найти ответа: зачем нужна функция snapshotCumulativesInside в контракте роутера? Если вы знаете ответ, прошу поделиться в комментариях.
Также буду раз, если поделитесь своими ссылками, которые проливают свет на работу Uniswap v3.
#uniswap
👍3🔥1
Немного о комментариях к коду
Я хочу еще раз поднять тему комментирования кода в процессе разработки и для проведения аудита.
В Solidity вы можете использовать специальные теги для пометки своего кода, вот их обозначения:
@noscript - заголовок
@author - автор кода
@notice -заметка о коде
@dev - пометка от разработчика
@param - описание параметров функции
@return - описание возвращаемой переменной
Как их использовать?
Например у нас есть простая функция:
functions example(uint256 amount, address receiver) external returs (uint128) {}
Ее описание может быть таким:
/*
*
* @noscript - кто написал эту функцию (разработчик);
* @noscript - что она должна делать?
* @notice - более детальное описание функции (можно на нескольких строках);
* @dev - пометка для других разработчиков;
* @param - amount отвечает за это...
* @param - receiver отвечает за это...
* @return - uint128 должна вернуть это...
*
*/
Такое описание должно быть практически для каждой функции в контракте. Для импортов и наследований достаточно оставлять @notice.
Для проведения аудита крайне рекомендую скачать приложение для VS Code - Inline Bookmarks от tintinweb, которое позволяет делать теговые заметки:
/*
*
* @audit - общие заметки по аудиту;
* @audit-info - дополнительная информация;
* @audit-issue - найденная уязвимость или проблема;
* @audit-ok - проверено и все ок;
*
*/
подобные теги очень облегчают процесс разработки, особенно в команде. Более того, при проведении аудита у проверяющего будет к вам меньше вопросов.
Ставьте комментарии и теги.
#natspec #comments
Я хочу еще раз поднять тему комментирования кода в процессе разработки и для проведения аудита.
В Solidity вы можете использовать специальные теги для пометки своего кода, вот их обозначения:
@noscript - заголовок
@author - автор кода
@notice -заметка о коде
@dev - пометка от разработчика
@param - описание параметров функции
@return - описание возвращаемой переменной
Как их использовать?
Например у нас есть простая функция:
functions example(uint256 amount, address receiver) external returs (uint128) {}
Ее описание может быть таким:
/*
*
* @noscript - кто написал эту функцию (разработчик);
* @noscript - что она должна делать?
* @notice - более детальное описание функции (можно на нескольких строках);
* @dev - пометка для других разработчиков;
* @param - amount отвечает за это...
* @param - receiver отвечает за это...
* @return - uint128 должна вернуть это...
*
*/
Такое описание должно быть практически для каждой функции в контракте. Для импортов и наследований достаточно оставлять @notice.
Для проведения аудита крайне рекомендую скачать приложение для VS Code - Inline Bookmarks от tintinweb, которое позволяет делать теговые заметки:
/*
*
* @audit - общие заметки по аудиту;
* @audit-info - дополнительная информация;
* @audit-issue - найденная уязвимость или проблема;
* @audit-ok - проверено и все ок;
*
*/
подобные теги очень облегчают процесс разработки, особенно в команде. Более того, при проведении аудита у проверяющего будет к вам меньше вопросов.
Ставьте комментарии и теги.
#natspec #comments
👍3