Судя по описанию - норм гайд
После окончания своего обучения по ютубу обязательно прочитаю этот
Если не понравится, удалю с канала
После окончания своего обучения по ютубу обязательно прочитаю этот
Если не понравится, удалю с канала
Forwarded from Max Wayld Dev (Max Wayld マキシ)
Статья с роадмапом по изучению Solidity за 30 дней.
Сразу говорю - благодаря этому гайду ты не станешь терн.крипто 2.0 за 30 дней, но сможешь стартануть в этой сфере и изучить все необходимые основы.
Как тебе пригодится этот навык? Вариантов огромное множество: от реального вклада в эту сферу и разработки любых интересующих тебя продуктов, до выноса тех же NFT-сейлов.
Welcome к разбору:
> https://teletype.in/@maxycrypto/solidity_30days
Я уже давно считаю что кодеры это самые важные люди в нашей сфере и толковых девов всегда будет недостаточно, поэтому пилить такие гайды на бесплатной основе - моя отдушина. Буду рад любому фидбеку с твоей стороны!
P.S: также, к концу этой недели выйдет моя ретроспектива по всем материалам для Solidity.
Сразу говорю - благодаря этому гайду ты не станешь терн.крипто 2.0 за 30 дней, но сможешь стартануть в этой сфере и изучить все необходимые основы.
Как тебе пригодится этот навык? Вариантов огромное множество: от реального вклада в эту сферу и разработки любых интересующих тебя продуктов, до выноса тех же NFT-сейлов.
Welcome к разбору:
> https://teletype.in/@maxycrypto/solidity_30days
Я уже давно считаю что кодеры это самые важные люди в нашей сфере и толковых девов всегда будет недостаточно, поэтому пилить такие гайды на бесплатной основе - моя отдушина. Буду рад любому фидбеку с твоей стороны!
P.S: также, к концу этой недели выйдет моя ретроспектива по всем материалам для Solidity.
Teletype
Выучить Solidity за 30 дней: роадмап по становлению tern.crypto
Статья, которая даст тебе всё необходимое для старта погружения в солидити и девелопинг в web3.
Восьмой урок (Древо Меркла, хэши, encode, циклы)
немного оптимизировал код, который заполняет хеши с индекса 4 (для начальной коллекции в 4 элемента)
То, что было:
uint offset = 0;
while (count > 0) {
for (uint i = 0; i < count - 1; i += 2) {
hashes.push(keccak256(
abi.encodePacked(
hashes[offset + i], hashes[offset + i + 1]
)
));
}
offset += count;
count /= 2;
}
То, что стало:
for (uint i = 0; i <= count + 1; i += 2) {
hashes.push(keccak256(
abi.encodePacked(
hashes[i], hashes[i + 1]
)
));
}
Убрал 1 цикл, убрал создание дополнительной переменной
Возможно для понимания проще код с урока, но мой будет работать быстрее и эффективней
Так же из функции verify убрал параметр index так как он там никак функционально не задействован
Мой код с комментариями
немного оптимизировал код, который заполняет хеши с индекса 4 (для начальной коллекции в 4 элемента)
То, что было:
uint offset = 0;
while (count > 0) {
for (uint i = 0; i < count - 1; i += 2) {
hashes.push(keccak256(
abi.encodePacked(
hashes[offset + i], hashes[offset + i + 1]
)
));
}
offset += count;
count /= 2;
}
То, что стало:
for (uint i = 0; i <= count + 1; i += 2) {
hashes.push(keccak256(
abi.encodePacked(
hashes[i], hashes[i + 1]
)
));
}
Убрал 1 цикл, убрал создание дополнительной переменной
Возможно для понимания проще код с урока, но мой будет работать быстрее и эффективней
Так же из функции verify убрал параметр index так как он там никак функционально не задействован
Мой код с комментариями
Гемная инфа на будущее
Тоже надо будет со всем этим ознокомиться после ютуба
Тоже надо будет со всем этим ознокомиться после ютуба
Forwarded from Ortomich
Ретроспектива!
———————
EVM для задротов, часть 1 - https://teletype.in/@ortomich/EVM_Advanced_1
EVM для задротов, часть 2 - https://teletype.in/@ortomich/EVM_Advanced_2
EVM для задротов, часть 3 - https://teletype.in/@ortomich/EVM_Advanced_3
EVM для задротов, часть 4 - https://teletype.in/@ortomich/EVM_Advanced_4
EVM для задротов, часть 5 - https://teletype.in/@ortomich/EVM_Advanced_5
EVM для задротов, часть 6 - https://teletype.in/@ortomich/EVM_Advanced_6
———————
Погружение в Юнисвап - https://teletype.in/@ortomich/Uniswap_V3_deepdive_1
SeaPort - https://teletype.in/@ortomich/SeaPort_fast
Новый вид скама - https://teletype.in/@ortomich/new_scam
———————
MEV 1.1 - https://teletype.in/@ortomich/MEV_1.1
MEV 1.2 - https://teletype.in/@ortomich/MEV_1.2
Флэшботы: короли мемпула - https://teletype.in/@ortomich/flashbots_kings_of_the_mempool
———————
Легкий клиент - https://teletype.in/@ortomich/light_client_eth
Оммер блоки - https://teletype.in/@ortomich/Ommer_Block
Дерево меркла - https://teletype.in/@ortomich/Merkle_Tree
Сумбурный конспект по эфиру - https://teletype.in/@ortomich/ethereum_start
Memory / Calldata / Storage - https://teletype.in/@ortomich/memory_calldata_storage
Что такое веб3 - https://teletype.in/@ortomich/simple_web3
NFT мини техничка - https://teletype.in/@ortomich/NFT_mini_advanced
Ораклы - https://teletype.in/@ortomich/oracles_junior
Войс «Развитие в крипто дев» - https://news.1rj.ru/str/ortomich_crypto/402
Переминт - https://teletype.in/@ortomich/remint
Unix - https://teletype.in/@ortomich/unix_fast
Адреса ethereum - https://teletype.in/@ortomich/address_eth
———————
Мой гитхаб - https://github.com/ortomich
———————
EVM для задротов, часть 1 - https://teletype.in/@ortomich/EVM_Advanced_1
EVM для задротов, часть 2 - https://teletype.in/@ortomich/EVM_Advanced_2
EVM для задротов, часть 3 - https://teletype.in/@ortomich/EVM_Advanced_3
EVM для задротов, часть 4 - https://teletype.in/@ortomich/EVM_Advanced_4
EVM для задротов, часть 5 - https://teletype.in/@ortomich/EVM_Advanced_5
EVM для задротов, часть 6 - https://teletype.in/@ortomich/EVM_Advanced_6
———————
Погружение в Юнисвап - https://teletype.in/@ortomich/Uniswap_V3_deepdive_1
SeaPort - https://teletype.in/@ortomich/SeaPort_fast
Новый вид скама - https://teletype.in/@ortomich/new_scam
———————
MEV 1.1 - https://teletype.in/@ortomich/MEV_1.1
MEV 1.2 - https://teletype.in/@ortomich/MEV_1.2
Флэшботы: короли мемпула - https://teletype.in/@ortomich/flashbots_kings_of_the_mempool
———————
Легкий клиент - https://teletype.in/@ortomich/light_client_eth
Оммер блоки - https://teletype.in/@ortomich/Ommer_Block
Дерево меркла - https://teletype.in/@ortomich/Merkle_Tree
Сумбурный конспект по эфиру - https://teletype.in/@ortomich/ethereum_start
Memory / Calldata / Storage - https://teletype.in/@ortomich/memory_calldata_storage
Что такое веб3 - https://teletype.in/@ortomich/simple_web3
NFT мини техничка - https://teletype.in/@ortomich/NFT_mini_advanced
Ораклы - https://teletype.in/@ortomich/oracles_junior
Войс «Развитие в крипто дев» - https://news.1rj.ru/str/ortomich_crypto/402
Переминт - https://teletype.in/@ortomich/remint
Unix - https://teletype.in/@ortomich/unix_fast
Адреса ethereum - https://teletype.in/@ortomich/address_eth
———————
Мой гитхаб - https://github.com/ortomich
Teletype
EVM для задротов
Всем привет! С вами Тёма!
Десятый урок (Стрим: практика "Голандский аукцион")
Для урока потребуется установка:
npm install --save-dev solidity-coverage
Так же добавить в файл hardhat.config.js:
require("solidity-coverage");
После этого сможем использовать команду для измерения покрытия тестами
npx hardhat coverage
Далее можно в файл package.json в объект noscripts добавить строку:
"test": "npx hardhat coverage"
Это позволит писать:
npm test
вместо:
npx hardhat coverage
Так же в директории проекта можно найти папку coverage->index.html и смотреть покрытие тестами в браузерной версии (можно прям по строчкам проверять какая строчка сколько раз была вызвана)
Мой код контракта с комментариями
Мой код тестов
У меня не 100% покрытие тестами так как в контракте есть пара функций, которых нет в уроке
Можно использовать эту возможность как практику)
Для урока потребуется установка:
npm install --save-dev solidity-coverage
Так же добавить в файл hardhat.config.js:
require("solidity-coverage");
После этого сможем использовать команду для измерения покрытия тестами
npx hardhat coverage
Далее можно в файл package.json в объект noscripts добавить строку:
"test": "npx hardhat coverage"
Это позволит писать:
npm test
вместо:
npx hardhat coverage
Так же в директории проекта можно найти папку coverage->index.html и смотреть покрытие тестами в браузерной версии (можно прям по строчкам проверять какая строчка сколько раз была вызвана)
Мой код контракта с комментариями
Мой код тестов
У меня не 100% покрытие тестами так как в контракте есть пара функций, которых нет в уроке
Можно использовать эту возможность как практику)
❤1
Одиннадцатый урок (Наследование, конструкторы, super, override, virtual)
Сложный урок для тех, кто не сталкивался с ООП, абстрактными классами итд
Мне помогло, то что я в своё время учил C++ и понимаю как это работает там
С++, кстати, был моим первым языком программирования
Я так же учил по ютубу на канале SimpleCode
Всем советую)
Если пройдете 155 уроков +-, вы не станете гуру конечно, но будете понимать что к чему в любом языке программирования
Opensource проект openzeppelin-contracts с готовыми базовыми контрактами от которых можно наследоваться
Мой код с комментариями
Сложный урок для тех, кто не сталкивался с ООП, абстрактными классами итд
Мне помогло, то что я в своё время учил C++ и понимаю как это работает там
С++, кстати, был моим первым языком программирования
Я так же учил по ютубу на канале SimpleCode
Всем советую)
Если пройдете 155 уроков +-, вы не станете гуру конечно, но будете понимать что к чему в любом языке программирования
Opensource проект openzeppelin-contracts с готовыми базовыми контрактами от которых можно наследоваться
Мой код с комментариями
Двенадцатый урок (Интерфейсы, библиотеки, тесты)
Практика к тому, что уже изучено:
Сделать голосовалку, к примеру. У кого есть токены - тот может голосовать. Можно сделать ещё сложнее и совместить голосовалку с Timelock (видео есть про него на канале). То есть кто-то предлагает транзакцию и ставит в очередь, потом идёт голосование (с токенами), а через некоторое время, если нужное кол-во голосов набрано, то транзакцию можно выполнить
Код интерфейса
Код контракта Lesson, который реализует интерфейс
Код контракта Demo, который вызывает функции из сторонних контрактов
Код тестов контракта Demo
Код библиотек
Код с использованием библиотек
Код тестов использования библиотек
Практика к тому, что уже изучено:
Сделать голосовалку, к примеру. У кого есть токены - тот может голосовать. Можно сделать ещё сложнее и совместить голосовалку с Timelock (видео есть про него на канале). То есть кто-то предлагает транзакцию и ставит в очередь, потом идёт голосование (с токенами), а через некоторое время, если нужное кол-во голосов набрано, то транзакцию можно выполнить
Код интерфейса
Код контракта Lesson, который реализует интерфейс
Код контракта Demo, который вызывает функции из сторонних контрактов
Код тестов контракта Demo
Код библиотек
Код с использованием библиотек
Код тестов использования библиотек
Тринадцатый урок (Стрим: реализация ERC20)
Практика к контракту: написать функцию, позволяющая владельцу списать вырученные средства за продажу токенов + тесты к ней
Запускаем hardhat
npx hardhat node
Команда для деплоя контракта в хардхет:
npx hardhat run path_to_deploy.js
добавляем сеть hardhat в метамаск:
Имя сети: hardhar
Новый URL-адрес RPC: http://127.0.0.1:8545/
ID цепочки: 1337
Символ валюты: ETH
Импортируем токены по адресу (берем из консоли после деплоя контракта)
Код интерфейса
Код контракта
Код тестов
Код деплоя
Практика к контракту: написать функцию, позволяющая владельцу списать вырученные средства за продажу токенов + тесты к ней
Запускаем hardhat
npx hardhat node
Команда для деплоя контракта в хардхет:
npx hardhat run path_to_deploy.js
добавляем сеть hardhat в метамаск:
Имя сети: hardhar
Новый URL-адрес RPC: http://127.0.0.1:8545/
ID цепочки: 1337
Символ валюты: ETH
Импортируем токены по адресу (берем из консоли после деплоя контракта)
Код интерфейса
Код контракта
Код тестов
Код деплоя
По сути, закончив этот урок, я своими ручками написал интерфейс ERC20, реализовал его в своём токене (токен получается свой создал), создал «магазин» где этот токен можно купить/продать и задеплоил это всё в тестовый блокчейн
Ну и с этим всем можно взаимодействовать через метамаск
Прикольное ощущение
Особенно когда понимаешь на практике, что почти любой токен и ваш баланс в нем - по сути «словарик» в одном из миллионов смарт контрактов
Ну и с этим всем можно взаимодействовать через метамаск
Прикольное ощущение
Особенно когда понимаешь на практике, что почти любой токен и ваш баланс в нем - по сути «словарик» в одном из миллионов смарт контрактов
На эти 2 дня курс по солидити был поставлен на паузу так как готовил бесплатный мини-курс из 8 уроков "python с нуля для криптанов (и не только)"
Кидаю линк на чатик, в котором будут задаваться вопросы по курсу и в этот же чат будут скидываться сами уроки по python
Я понимаю, что сейчас как минимум половина подписчиков пришли из чата Money Flow, но скажу для потомков, что это гемный чат с Максом (@samege)
Макс, кстати, тоже будет проходить обучение)
Кидаю линк на чатик, в котором будут задаваться вопросы по курсу и в этот же чат будут скидываться сами уроки по python
Я понимаю, что сейчас как минимум половина подписчиков пришли из чата Money Flow, но скажу для потомков, что это гемный чат с Максом (@samege)
Макс, кстати, тоже будет проходить обучение)
Четырнадцатый урок (Фронт-энд на NextJS, часть 1)
Создаём next приложение с помощью команды
npx create-next-app
Код контракта
Код скрипта для деплоя
Разворачиваем hardhat
npx hardhat node
Деплоим контракт в hardhat:
npx hardhat run noscripts/deploy.js --network localhost
Не забываем добавить ethers в зависимости проекта next (файл package.json)
"ethers": "^5.6.4"
Далее создаем внутри проекта next директорию components и внутри неё файл ConnectWallet.js и NetworkErrorMessage.js
Код ConnectWallet.js
Код NetworkErrorMessage.js
В директории pages пишем файл index.js
Код этого файла
Когда всё готово, в директории next запускаем команду:
npm run dev
Если уже что-то делали в мм с аккаунтом в локальной сети, то переходим в мм -> settings -> advanced -> reset account
Чувствую, что придется подтянуть js (опять же по учебнику)
Ссылки на разделы, которые перечитываю по js буду скидывать сюда
Создаём next приложение с помощью команды
npx create-next-app
Код контракта
Код скрипта для деплоя
Разворачиваем hardhat
npx hardhat node
Деплоим контракт в hardhat:
npx hardhat run noscripts/deploy.js --network localhost
Не забываем добавить ethers в зависимости проекта next (файл package.json)
"ethers": "^5.6.4"
Далее создаем внутри проекта next директорию components и внутри неё файл ConnectWallet.js и NetworkErrorMessage.js
Код ConnectWallet.js
Код NetworkErrorMessage.js
В директории pages пишем файл index.js
Код этого файла
Когда всё готово, в директории next запускаем команду:
npm run dev
Если уже что-то делали в мм с аккаунтом в локальной сети, то переходим в мм -> settings -> advanced -> reset account
Чувствую, что придется подтянуть js (опять же по учебнику)
Ссылки на разделы, которые перечитываю по js буду скидывать сюда
Темы, которые я освежил по js:
• Оператор нулевого слияния
• Function Expression
• Стрелочные функции, основы
• Особенности JavaScript
• Автоматическое тестирование c использованием фреймворка Mocha
• Объекты
• Копирование объектов и ссылки
• Сборка мусора
• Методы объекта, "this"
• Конструкторы, создание объектов через "new"
• Опциональная цепочка '?.'
• Преобразование объектов в примитивы
• Методы примитивов
• Методы массивов
• Деструктурирующее присваивание
• Формат JSON, метод toJSON
• Остаточные параметры и оператор расширения
• Замыкания
• Глобальный объект
• Планирование: setTimeout и setInterval
• Привязка контекста к функции
• Повторяем стрелочные функции
• Введение: колбэки
• Промисы
• Цепочка промисов
• Async/await
• Модули, введение
• Экспорт и импорт
• Разница npm/npx
• Node JS - Быстрый Курс за 1 час
Полезные команды из видоса:
Запустить программу:
node filepath.js
Инициализация проекта (создание файла package.json):
npm init
Установка пакетов (в проекте создастся папка node_modules и название пакета добавится файл packege.json в поле Dependencies) :
npm install packagename
npm i packagename
Установка пакетов для разработки (тоже загрузит файл, но в файле packege.json будет находиться в поле devDependencies):
npm i packagename -D
Папку node_modules обычно никому не скидывают. Все зависимости устанавливаются автоматически с помощью команды:
npm i
• Next JS быстрый курс SSR на React JS с нуля до деплоя
Полезные команды из видоса:
Создание Next приложения:
npx create-next-app
Создание проекта с нуля:
1) Инициализируем проект:
npm init -y
2) Устанавливаем зависимости:
npm i next react react-dom
3) В packege.json можем добавить быстрые команды на вкладке noscripts:
"dev": "next dev"
4) создаем папку pages в корне проекта (тут будут все страницы приложения) и обязательно файл pages/index.js
rsc - сниппет для развертывания компонента в index.js
5) Запуск приложения:
npm run dev
Если создать новый файл в pages, то доступ к этому файлу будет осуществляться по пути:
http://domain:port/filename
Чтобы переход между страницами был без обновления браузера, используем компонент
import Link from "next/Link";
<Link><a>...</a></Link>
• Оператор нулевого слияния
• Function Expression
• Стрелочные функции, основы
• Особенности JavaScript
• Автоматическое тестирование c использованием фреймворка Mocha
• Объекты
• Копирование объектов и ссылки
• Сборка мусора
• Методы объекта, "this"
• Конструкторы, создание объектов через "new"
• Опциональная цепочка '?.'
• Преобразование объектов в примитивы
• Методы примитивов
• Методы массивов
• Деструктурирующее присваивание
• Формат JSON, метод toJSON
• Остаточные параметры и оператор расширения
• Замыкания
• Глобальный объект
• Планирование: setTimeout и setInterval
• Привязка контекста к функции
• Повторяем стрелочные функции
• Введение: колбэки
• Промисы
• Цепочка промисов
• Async/await
• Модули, введение
• Экспорт и импорт
• Разница npm/npx
• Node JS - Быстрый Курс за 1 час
Полезные команды из видоса:
Запустить программу:
node filepath.js
Инициализация проекта (создание файла package.json):
npm init
Установка пакетов (в проекте создастся папка node_modules и название пакета добавится файл packege.json в поле Dependencies) :
npm install packagename
npm i packagename
Установка пакетов для разработки (тоже загрузит файл, но в файле packege.json будет находиться в поле devDependencies):
npm i packagename -D
Папку node_modules обычно никому не скидывают. Все зависимости устанавливаются автоматически с помощью команды:
npm i
• Next JS быстрый курс SSR на React JS с нуля до деплоя
Полезные команды из видоса:
Создание Next приложения:
npx create-next-app
Создание проекта с нуля:
1) Инициализируем проект:
npm init -y
2) Устанавливаем зависимости:
npm i next react react-dom
3) В packege.json можем добавить быстрые команды на вкладке noscripts:
"dev": "next dev"
4) создаем папку pages в корне проекта (тут будут все страницы приложения) и обязательно файл pages/index.js
rsc - сниппет для развертывания компонента в index.js
5) Запуск приложения:
npm run dev
Если создать новый файл в pages, то доступ к этому файлу будет осуществляться по пути:
http://domain:port/filename
Чтобы переход между страницами был без обновления браузера, используем компонент
import Link from "next/Link";
<Link><a>...</a></Link>
Пятнадцатый урок (Фронт-энд на Next.js, часть 2)
Устанавливаем set-interval-async в наш проект next.js
Документация по методу componentWillUnmount
Этот урок превратился в настоящую головную боль из-за того, что в ММ ID цепочки был указал 31337 (так по умолчанию hardhat работает)
Я постоянно вылетал на ошибку «cannot estimate gas» когда пытался что-то купить с аукциона
Как лечить:
заходим в файл hardhat.config.js
И туда добавляем настройку:
Ещё столкнулся с проблемой, что после покупки, на странице постоянно висело сообщение "auction stopped!"
То есть hardhat не очищался
npx hardhat clean не помогал
Вылечилось как-то само после того, как я редактировал контракт (надо будет еще изучить этот вопрос)
Далее я столкнулся с проблемой "Nonce too high. Expected nonce to be 0 but got 2. Note that transactions can't be queued when automining."
Эта проблема решилась с помощью ресета аккаунта (про это я писал тут)
Следующая проблема была: "Transaction ran out of gas"
Ну тут понятно - в мм ставим побольше газа и погнали
Ссылка из урока про обработку старых событий
Гит Ильи (хозяин ютуб канала, по которому я обучаюсь) с кодом для каждого урока
Код компонента TransactionErrorMessage
Код компонента WaitingForTransactionMessage
Код index.js с комментариями
Устанавливаем set-interval-async в наш проект next.js
Документация по методу componentWillUnmount
Этот урок превратился в настоящую головную боль из-за того, что в ММ ID цепочки был указал 31337 (так по умолчанию hardhat работает)
Я постоянно вылетал на ошибку «cannot estimate gas» когда пытался что-то купить с аукциона
Как лечить:
заходим в файл hardhat.config.js
И туда добавляем настройку:
...
networks: {
hardhat: {
chainId: 1337
}
},
...Ещё столкнулся с проблемой, что после покупки, на странице постоянно висело сообщение "auction stopped!"
То есть hardhat не очищался
npx hardhat clean не помогал
Вылечилось как-то само после того, как я редактировал контракт (надо будет еще изучить этот вопрос)
Далее я столкнулся с проблемой "Nonce too high. Expected nonce to be 0 but got 2. Note that transactions can't be queued when automining."
Эта проблема решилась с помощью ресета аккаунта (про это я писал тут)
Следующая проблема была: "Transaction ran out of gas"
Ну тут понятно - в мм ставим побольше газа и погнали
Ссылка из урока про обработку старых событий
Гит Ильи (хозяин ютуб канала, по которому я обучаюсь) с кодом для каждого урока
Код компонента TransactionErrorMessage
Код компонента WaitingForTransactionMessage
Код index.js с комментариями
👍1
Оказывается, если текст в телеге преобразовать в моноширинный, он станет синим 😳
🤔1
Семнадцатый урок (Низкоуровненые вызовы и безопасность)
Сразу скажу, что 16 урок я не пропустил
Я его посмотрел и он будет постом ниже. Просто я считаю, что лучше сначала пройти 17 урок и только потом 16 (так как в 16 уроке есть низкоуровненые вызовы и для их понимания нужно обязательно посмотреть урок 17)
На этот урок я потратил больше всего времени (но зато разобрался) так как в видео была небольшая неточность (сообщение с описанием проблемы оставил в чате автора)
Линки, которые помогли разобраться:
1) Delegatecall | Solidity 0.8
2) Unsafe Delegatecall (part 1) | Hack Solidity (0.6)
3) Unsafe Delegatecall (part 2) | Hack Solidity (0.6)
Плейлист, который в будущем точно надо будет чекнуть: Hack Solidity (0.6 - 0.7)
Код работы call
Код работы delegatecall
Код с примером небезопасного использования delegatecall (в начале файла написал как работает delegatecall в этом случае)
Сразу скажу, что 16 урок я не пропустил
Я его посмотрел и он будет постом ниже. Просто я считаю, что лучше сначала пройти 17 урок и только потом 16 (так как в 16 уроке есть низкоуровненые вызовы и для их понимания нужно обязательно посмотреть урок 17)
На этот урок я потратил больше всего времени (но зато разобрался) так как в видео была небольшая неточность (сообщение с описанием проблемы оставил в чате автора)
Линки, которые помогли разобраться:
1) Delegatecall | Solidity 0.8
2) Unsafe Delegatecall (part 1) | Hack Solidity (0.6)
3) Unsafe Delegatecall (part 2) | Hack Solidity (0.6)
Плейлист, который в будущем точно надо будет чекнуть: Hack Solidity (0.6 - 0.7)
Код работы call
Код работы delegatecall
Код с примером небезопасного использования delegatecall (в начале файла написал как работает delegatecall в этом случае)