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

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

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

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

#timeout
22
Ретроспектива материалов на канале

Прошло практически 3 месяца с последнего сводного поста на канале. Теперь, на вопрос "Как стать Solidity разработчиком и аудитором?", можно смело отвечать: "Изучите все закрепы на канале!".

Итак, поехали:


Для разработчиков

The File Pattern

Storage Structs

Block scoping

Пример упаковки структур в маппинге

Один нюанс про библиотеки

Интересная библиотека SSTORE2

Необычная функция


Foundry

Foundry для продвинутых

Hardhat + Foundry

Шаблон для форка и тестов в Foundry

Foundry Safer Log


Аудит

Шаблон для аудиторского отчета

Ошибки в смарт контрактах

Странные ERC20

Немного о фантомных функциях

Аудит вне рамок (15 постов с тегом #outofbox)

Как проводить аудит в коопе

По следам аудита zkSync Era (3 поста)

Not So-Famous Solidity Attack Vectors

5 стадий обучения аудитора

Как читать аудиторские отчеты


DeFi

Сводный пост про биржи

Сводный пост про основные DeFi


Подготовка к собеседованиям

Подготовка к собеседованию в зарубежную компанию

Большая заметка по работе с памятью

Немного чисел EVM и Solidity

Сборник заметок по Solidity

Подборка статей для самообучения (2 поста)

Немного нового для общего развития


Уроки и другое

Новые задачи (5 штук)

Немного о EIP-1967

ERC2612, ERC20Permit, аппрув без газа, EIP712

ReentrancyGuard в прокси?

Больше о побитовых операциях

ERC4626: Tokenized vaults

Заметка по Access List и Transaction types


Приятного обучения! Как обычно, буду рад репостам.

#all
👍20🔥8
Возвращаемся к работе и обучению

Фух, две активных недели отпуска пролетели, как один день. Это было весьма необычно для меня не думать о конкурсах или Solidity, учитывая то, что практически весь год я каждый день что-то читал, изучал или проводил аудит. А тут только еда, море, дорога, горы и солнце! В целом, голова разгрузилась и можно снова в бой.

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

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

По сути, мне просто нужен был сервис с формированием диаграммы Ганта. Выходом для меня стал проект ClickUp.

Хоть там и присутствуют дополнительные фичи, но отслеживание сроков конкурсов удобнее всего.

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

Другой крутой проект, который я решил использовать при проведении аудита - это Whim. Он позволяет создавать визуальные графики и майндкарты. Порой бывает полезно представить визуально, как функции взаимодействуют друг с другом или как перекликаются контракты.

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

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

#all
👍16❤‍🔥1
Необычный require и работа с ошибками

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

В протоколе Unitas сформирована не совсем стандартная работа с отслеживанием возникающих ошибок в функциях по типу тех, что мы обычно пишем в require. Напомню, что условия для проверки пишутся так:

require(condition, "Error message...");

Можно создавать свои кастомные ошибки, типа "error Unauthorized();", но тогда нам придется использовать if/else вместо require.

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

uint256 internal constant ADDRESS_ZERO = 1000;

1000 - это код ошибки, а само ее описание сделано комментарием выше.

Далее они написали свою реализацию функции require:

function _require(bool condition, uint256 errorCode) pure {
if (!condition) {
_revert(errorCode);
}
}

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

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

_require(amount <= portfolio, Errors.AMOUNT_INVALID);

На самом деле, очень удобная система, когда все ошибки находятся в одном файле под своим кодом.

Саму реализацию файла можно посмотреть тут.

Надеюсь и вам понравится эта система так же, как и мне.

#error #require
👍22
Новые видео от Патрика Коллинса

Возможно, вы пропустили, но тот самый Патрик Коллинс, который выпустил 32 часовой курс на ютуб по Solidity, пошел дальше и выпустил крутой 27 часовой курс по Foundry! Машина!

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


Курс по Foundry в трех видео

Первое, второе и третье.


Видео про стейблкоины


Уверен, теперь вы знаете, чем занять свой июнь!

Приятного обучения!

#stablecoin #foundry #patrick
🔥11👍41
Держим руку на пульсе

Давно не было материалов на канале. Начало лета выдалось какое-то слишком активное. Даже на конкурсные аудиты пока не получается выделять достаточно времени.

При этом на канале уже 878 участников! Это огромное количество для меня! Хочу узнать немного про ваш уровень и планы с Solidity.

Поэтому буду благодарен, если пройдете опрос ниже. Интересно, сколько у нас новичков:
👍9
Мини курс для начинающих?

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

Я подумал, а что если запустить небольшой интенсив для вас?

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

Также понимаю, что не все готовы отдавать 100к - 150к+ за курсы, но желание учиться есть. Поэтому такое предложение:

- Небольшой интенсив для старта на месяц-два;
- Участники на отдельном канале с групповым чатом;
- Я буду отвечать на ваши вопросы и проведу по базе Solidity;
- После нескольких тем - тесты с вопросами, которые я встречал на собеседованиях;
- По ходу курса также буду акцентировать внимание на безопасности кода, чтобы вы начали понимать, где в языке есть слабые моменты;
- В начале уроки будут выходить через день, позже раз в 3-5 дней;
- Материалы будут из открытых источников, я буду давать комментарии к ним и указывать на нюансы;

По цене, думаю, около 2000 рублей в месяц. Сможете сами остановиться, когда захотите.

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

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

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

#интенсив
🔥15
Пойдете на курс для начинающих?
Anonymous Poll
57%
Я готов!
43%
Буду учится сам
🔥71
Курс для начинающих разработчиков

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

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

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

В общем, обратный отсчет до программы пошел. Еще 15 минут и будет выложена!

#курс
🔥10👍31
План курса "Начинающий разработчик Solidity"


Модуль 1

Неделя 1

0. Введение в Solidity: что такое смарт контракты, на чем их пишут и в каких блокчейнах.
1. Блокчейн, сайдчейн, l2, плазма. Общее
2. Для чего нужны смарт контракты в текущих реалиях: основные сферы применения;
3. Remix IDE. Из чего состоит смарт контракт.

Неделя 2

4. Типы данных. bool
5. Типы данных: uint, int
6. Типы данных: string, address
7. Типы данных: mapping

Неделя 3

8. Типы данных: array
9. Типы данных: bytes
10. Типы данных: struct
11. Типы данных: Enum.
12. Области видимости переменных

Неделя 4

13. Events, Errors.
14. Модификаторы
15. Функции. Общее
16. Функции: аргументы и block scope
17. Функции: возвращаемые значения
18. Арифметические операции, циклы и условия

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

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


Модуль 2

Неделя 5

19. Транзакции: общее.
20. Глобальные переменные msg
21. Низкоуровневые вызовы: call, staticcall
22. Низкоуровневые вызовы: delegatecall

Неделя 6

23. Наследование
24. Интерфейсы
25. Библиотеки
26. Библиотеки openzeppelin и solmate

Неделя 7

27. Работа с памятью: code
28. Работа с памятью: storage
29. Работа с памятью: memory
30. Работа с памятью: calldata
31. Работа с памятью: stack

Неделя 8

32. Опкоды: общее
33. Древо Меркла: общее
34. ERC20: общее
35. ERC721: общее
36. Другие ERC: общее

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


Модуль 3

Неделя 9

37. Стандарт ERC20. Общее
38. ERC20. Разбор кода и EIP
39. ERC20. Особенности и разнообразие
40. ERC20. Проблемы безопасности
41. ERC20 от Open Zeppelin

Неделя 10

42. ERC721. Общее
43. ERC721. Разбор кода и EIP
44. ERC721. Использование в проектах
45. ERC721. Проблемы безопасности

Неделя 11

46. Подписи и стандарты
47. ecrecover и ECDSA
48. Безопасность подписей
49. Популярные паттерны. Общее

Неделя 12

50. Голландский аукцион
51. MultiSig и Timelock
52. Commit/reveal
53. DAO и governance

Итог обучения: вы будете уверенно знать, как работают стандарты ERC20 и ERC721, получите примеры их использования и основы безопасности работы с ними. Также поймете принципы работы подписей в блокчейне и популярные паттерны.


Модуль 4

Неделя 13

54. Подготовка и настройка IDE
55. Терминал, Node js, NPM
56. Начало работы с Git и GitHub

Неделя 14

57. Hardhat. Общее
58. Foundry. Общее
59. Плагины для IDE

Неделя 15

60. Прокси. Общее
61. Transparent proxy
62. UUPS proxy
63. Beacon proxy

Неделя 16

64. Diamond proxy
65. Обновляемые прокси
66. Безопасность прокси

Итог обучения: вы узнаете, как работать с IDE (средой разработки) и популярными фреймворками (дополнениями) для тестирования смарт контрактов. Получите твердые навыки работы с прокси контрактами - другой очень важной и сложной темой в Solidity.


Модуль 5

Неделя 17

67. Оракулы. Общее
68. Оракулы Chainlink
69. Оракулы Uniswap
70. Безопасность работы с оракулами

Неделя 18

71. Введение в DeFi
72. Uniswap. Общее
73. Balancer. Общее
74. Compound. Общее

Неделя 19

75. Aave. Общее
76. Curve. Общее
77. MakerDAO. Общее

Неделя 20

78. Мосты и безопасность. Общее
79. l2 и роллапы. Общее
80. Yul и assembly
81. Побитовые операции

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

Планы на 6-7 модули:
🔥9👍1
1. Проведение тестов
2. Подключение Uniswap к своим проектам
3. Использование Chainlink в проектах
4. Работа MEV
5. Нюансы VM и безопасности
6. ERC4626, ERC2612, ERC1967, ERC1155 и другие
7. Деплой контрактов в другие сети
8. Дебаггинг
9. NatSpec и комментарии
10. Решение задач
11. Работа со Slither
12. Проведение аудита
13. Работа с газом
14. Сложные паттерны (file pattern, bitmap)

Есть вероятность, что после старта базового курса, я буду приглашать партнеров для написания материалов для последующих модулей. Например, в своей практике я больше использую Foundry, но Hardhat и ethers.js также желательно знать и уметь читать тесты, поэтому для этого будет приглашен гостевой преподаватель, который сможет донести материал гораздо лучше, чем я. То же самое с MEV, Yul, дебаггером и сложными паттернами разработки.

#курс
8🔥5
Курс Solidity разработчик с нуля. Описание и условия

Для кого:
подходит для всех, кто ни разу не работал с кодом и не знает, что такое программирование

Курс рассчитан на НЕСПЕШНОЕ прохождение каждой темы и времени на ее освоение, поэтому он длится 5+ месяцев. Сложность повышается с каждым модулем, по мере вашей готовности к новым темам, во избежание путаницы в голове из-за большого объема информации.

Задача: курс нацелен на плавное изучение языка Solidity и освоение новой профессии разработчика смарт контрактов. По окончанию всех модулей вы будете иметь достаточно знаний и сформированные скилы, чтобы претендовать на работу в зарубежных компаниях.

Особенности курса:

- Уроки с акцентами на безопасности кода;
- Тестовые вопросы, собранные из реальных собеседований;
- Написан простым языком, без технических усложнений;
- Основной принцип: регулярность лучше интенсивности;
- Основная цель: сформировать понимание языка Solidity, его характеристик и особенностей;

Количество уроков: 80+ в 5 модулях. После каждого модуля есть перерыв, чтобы повторить и закрепить пройденый материал, или завершить пропущенные задания.

Что входит в урок: Объяснение материала, описание проблем безопасности (если требуется), дополнительные источники для самообучения, практическое задание. Тестовое задание по окончанию модуля. Весь материал будет из открытых источников. Выполнение заданий проверяться не будет.

Проведение: Закрытый Телеграм канал на каждый модуль, плюс общий групповой чат

Формат: Текстовые уроки - посты, скриншоты, записи экрана по необходимости.

Условие: 1-2 часа на каждый урок.

Продолжительность: 1 модуль - 1 месяц. На данный момент всего 5 модулей.

Периодичность: 3-4 урока в неделю. Фокус на теме позволит проще и быстрее освоить материал.

Стоимость: 1 и 2 модуля - 2000 рублей, 3 и 4 - 3000 рублей, 5 - 5000 рублей. Оплата в начале каждого модуля. Можно остановиться в любой момент.

Оплата: варианты оплаты будут объявлены позже. Есть возможность оплаты криптой.

Вход на модуль: зайти в новый модуль можно не позднее первой недели. Если вы опоздаете, то пропустите его.

Открытие курса и набор группы: после 26 июня.

Программа курса.

Ориентировочный старт: 3 июля

#курс
👍30
Простота и легкость. Курс для разработчиков

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

Когда, около 10 лет назад, я стал учить php, свой первый язык, даже банальное слово "переменная" было не так уж и понятно, не говоря о других, более серьезных определениях.

И даже с хорошим опытом работы фулстек программистом, с хорошими знаниями javasript\typenoscript, Solidity порой вызывал некоторое недоумение.

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

И когда за месяц - два тебе предлагают выучить Solidity, да еще с элементами Javanoscript... Каша в голове просто обеспечена!

Я писал программу именно для тех, кто никогда ранее не сталкивался с программированием. Тут нет js в первых модулях, тут нет даже IDE до 4 модуля, так как нужно будет понять работу с терминалом, node.js и npm до этого.

Каждый урок - это маленькая деталь, которая расписана понятным языком, и простое упражнение для закрепления понимания.

Одна из целей у меня была избежать путаницы в голове из-за большого количества информации. Вы научитесь работать с языком постепенно. Легко и с пониманием "зачем вы это делаете".

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

Начинаем уже скоро!

#курс
👍311🔥1
Небольшое объявление

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

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

А после запуска, вернемся к обычному режиму. Я как раз успею собрать кучу крутого материала к тому моменту.

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

#offtop
22👍3
5+ месяцев - это долго? Курс для разработчиков

Научиться писать смарт контракт и создавать свой токен \ NFT можно и за неделю, так зачем же учиться так долго?

Здесь опять же вопрос в том, а какие цели вы преследуете? Написать NFT и закинуть ее на маркетплейс или же создать свой полноценный проект в DeFi и получить высокооплачиваемую работу? Или, например, понимать как там все устроено и научиться обходить скамные проекты?

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

Смотрите, написать контракт токена - это одно, сделать его безопасным - это уже другое, а внедрить его в архитектуру своего проекта - совсем третье!

Кстати, именно понимания "а для чего это?" мне порой сильно не хватало в своем обучении. Вот ты видишь, например, что в Solidity есть такой тип данных как uint8 и uint256, а в чем разница и в какой момент они используются - не понятно.

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

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

Время обучение окупается твердыми знаниями. 

Программа курса.   Описание курса.

Старт уже скоро!

#курс
14👍6
Нет видео уроков? Курс для разработчиков

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

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

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

К тому же, работа с самим кодом подразумевает построчное, внимательное чтение.

С текстовым форматом уроков вам будет проще в дальнейшем в работе. Вы привыкните читать объяснение и следовать инструкциям в нем.

Да, и искать в нужном уроке нюансы кода будет намного проще и быстрее, чем перематывать видео на нужный момент.  

Надеюсь, вы оцените такой подход в скором будущем!

Программа курса.     Описание курса.

Старт уже скоро!

#курс
👍25🔥8
Кто идет на 1 модуль курса?

Ниже опрос, прошу ответить всех, кто уже 100% идет на курс. Хочу немного понять, какая нагрузка будет у меня на следующие пять месяцев. Возможно, потребуется помощь куратора для ответов на вопросы.

#курс
👍7
40+ учеников уже готовы!

Очень порадовало количество желающих с твердым намерением! Вы супер! Уверенность в действиях очень сильно помогает в учебе! Знаю, у вас будет очень интересный путь Solidity разработчика!

Также интересно узнать мнение тех, кто сомневается, а вас 40+!

Напишите в комментариях, что вас останавливает. В чем ваши сомнения? Я постараюсь подготовить пост с ответом на ваши вопросы. Может своим вопросом и моим ответом, вы поможете принять решение и другим участникам нашего сообщества!

#курс
12
Ведь можно учиться и самому! Курс для разработчиков

Абсолютно точно! И я сам тому подтверждение!

Сейчас так много различных источников, крутых постов и интересных статей, что можно учиться самому в своем темпе! Более того ChatGPT достаточно хорошо объяснить то или иное понятие. Вопрос в том, какую программу вы для себя подберете и как регулярно будете заниматься.

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

Курс и призван решить эти проблемы, главная из которых - регулярность!

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

Программа курса.     Описание курса.    Как оплатить.

Старт 3 июля!

#курс
👍13