Semolina Code Solidity – Telegram
Semolina Code Solidity
549 subscribers
27 links
Канал про кодинг и крипту
Download Telegram
Я буду начинать изучения solidity с ютуба (потому что мне так удобно. До официальной документации тоже обязательно доберемся):

Лично я смотрю видос и записываю в тетрадь всю основную информацию оттуда
Для меня это самый продуктивный способ изучения нового языка
👍3
Первый урок (Введение, Remix IDE, аккаунты, газ, первый контракт)

Код с первого урока с комментариями:

Полезные ссылки из первого урока:
remix ide онлайн
скачать remix ide
язык solidity
документация ethereum
цены на газ
👍3🔥1
Второй урок (Типы данных bool, uint, int)

Код со второго урока с комментариями (комментарии супер краткие. Если солидити - ваш первый язык программировния, то лучше смотрите видео самостоятельно)
👍1🔥1
Третий урок (Типы данных string, address, mapping)

Не уверен на 100%, но вроде нашёл баг Remix IDE
если в функцию, которая принимает строку, передать параметр типа:
"parametr""
то IDE умрет

код с комментариями:

Кусочек документации по типам данных
👍2🔥1
Четвертый урок (Типы данных array, bytes, enum, struct)
Код с комментариями
👍1
Пятый урок (Тестирование, Hardhat, Waffle, Ethers, Mocha, Chai)

Установочник NodeJS

Где-то может потребоваться установка с sudo

Node-gyp
Я устанавливал на мак с помощью
npm install --location=global node-gyp

Hardhat
В директории создаем новый проект:
npm init -y

Устанавливаем hardhat (quick start):
npm install --save-dev hardhat

Заходим в мастер:
npx hardhat
Create a JavaScript project

Устанавливаем нужные библиотеки
npm install --save-dev "hardhat@^2.10.0" "@nomicfoundation/hardhat-toolbox@^1.0.1"

Будем использовать библиотеки (установятся сами как hardhat-toolbox):
EthersJS (для взаимодействия со смарт контрактами)
MochaJS (для написания тестов)
ChaiJS (для написания ожиданий)
WaffleJS (Надстройка над MochaJS для тестирования смарт контрактов)

Буду работать через VS Code + консоль
В VS Code можно установить расширение "Solidity"

Компиляция проектов:
npx hardhat compile

Удаление скомпилированных контрактов:
npx hardhat clean

Для тех, кто как и я не работали с nodeJS и не знаю как работают импорты/експорты

Запустить все тесты:
npx hardhat test

Проверки через to для эфира находятся в библиотеке waffle

Код контракта
Код тестов
👍1🔥1
Шестой урок (Функции, транзакции, pure, view, payable, fallback)

Запустить hardhad
npx hardhat node

Плагин я не устанавливал. У меня hardhat по-умолчанию стоял в ремиксе

Код контракта
👍1
Седьмой урок (События, модификаторы, require/revert и тесты)

Мой код на гите - код с супер развернутыми комментариями
По сути даже урок на ютубе смотреть не надо чтобы понять что к чему

Код контракта
Код тестов
Судя по описанию - норм гайд
После окончания своего обучения по ютубу обязательно прочитаю этот
Если не понравится, удалю с канала
Forwarded from Max Wayld Dev (Max Wayld マキシ)
Статья с роадмапом по изучению Solidity за 30 дней.

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

Как тебе пригодится этот навык? Вариантов огромное множество: от реального вклада в эту сферу и разработки любых интересующих тебя продуктов, до выноса тех же NFT-сейлов.

Welcome к разбору:

>
https://teletype.in/@maxycrypto/solidity_30days

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

P.S: также, к концу этой недели выйдет моя ретроспектива по всем материалам для Solidity.
Восьмой урок (Древо Меркла, хэши, 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 так как он там никак функционально не задействован

Мой код с комментариями
Гемная инфа на будущее
Тоже надо будет со всем этим ознокомиться после ютуба
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
Девятый урок (Оптимизация смарт-контрактов и газ)
Мой код с комментариями
Десятый урок (Стрим: практика "Голандский аукцион")

Для урока потребуется установка:
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 с готовыми базовыми контрактами от которых можно наследоваться

Мой код с комментариями
Двенадцатый урок (Интерфейсы, библиотеки, тесты)

Практика к тому, что уже изучено:
Сделать голосовалку, к примеру. У кого есть токены - тот может голосовать. Можно сделать ещё сложнее и совместить голосовалку с 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

Импортируем токены по адресу (берем из консоли после деплоя контракта)

Код интерфейса
Код контракта
Код тестов
Код деплоя
По сути, закончив этот урок, я своими ручками написал интерфейс ERC20, реализовал его в своём токене (токен получается свой создал), создал «магазин» где этот токен можно купить/продать и задеплоил это всё в тестовый блокчейн
Ну и с этим всем можно взаимодействовать через метамаск

Прикольное ощущение
Особенно когда понимаешь на практике, что почти любой токен и ваш баланс в нем - по сути «словарик» в одном из миллионов смарт контрактов
На эти 2 дня курс по солидити был поставлен на паузу так как готовил бесплатный мини-курс из 8 уроков "python с нуля для криптанов (и не только)"
Кидаю линк на чатик, в котором будут задаваться вопросы по курсу и в этот же чат будут скидываться сами уроки по 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 буду скидывать сюда