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

#accembly #memory #calldata #yul
🔥1
Найти строку в calldata немного сложнее. Так как после селектора есть еще 32 байта, после которых начинается информация о строке. Потом еще слот с байтовой длинной самой строки, и только после этого значение строки.

#accembly #memory #calldata #yul
🔥1
Найти строку в calldata немного сложнее. Так как после селектора есть еще 32 байта, после которых начинается информация о строке. Потом еще слот с байтовой длинной самой строки, и только после этого значение строки.

#accembly #memory #calldata #yul
🔥1
Найти массив с динамической длинной в calldata можно так. Сначала в слотах хранится селектор, потом количество элементов в массиве или его длина, затем идет первый элемент нашего массива.

#accembly #memory #calldata #yul
🔥1
Урок 16 - Hardhat Tasks

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

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

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

Видео урок - задачи hardhat.

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

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

Приятного дня и легкого понимания!

#урок
Задачи можно писать прямо в файле hardhat.config.js, но делать этого не рекомендуется, чтобы в дальнейшем не возникало никаких проблем с загрузкой hardhat или его настройкой, если вы ошибетесь с кодом.

Поэтому лучше создать новую директорию tasks с файлом "sampleTask.js" и уже его подключать в конфиг файл через require (или через import, если вы используете расширения .ts).

В новом файле нам нужно подключить некоторые модули, например сам task, как показано на скрине.

#hardhat #tasks
Вот пример задачи для hardhat, которая выведет баланс аккаунта, если в консоли прописать npx hardhat balance --account accAddress

По сути, тут все довольно просто. Сначала создаем саму задачу, называем ее и описываем действие. Потом говорим, какие обязательные и необязательные (при необходимости) параметры она будет принимать. Затем пишем функцию в setAction для выполнения запроса.

В setAction, вместе с передаваемыми параметрами, можно подключать и ethers.js, чтобы можно было вызывать функции из этой библиотеки.

#hardhat #tasks
Привет всем!

Сегодня будут пару постов подводящих итоги базового обучения. Я просто хочу собрать ссылки на уроки в одном посте, плюс немного другой инфы, чтобы можно было закрепить их. А завтра начнем разбор первого контракта!
🔥1
Базовый курс по Solidity

Под каждым уроком есть посты подсказки. Если вы забыли какую-либо часть урока или хотите уточнить тот или иной момент, то попробуйте воспользоваться поиском по тегам. Например, #enum, #event, #call и так далее.

Урок 1 - Введение в Solidity

Урок 2 - Типы данных: Bool, uint, int

Урок 3 - Типы данных: String, address, mapping

Урок 4 - Типы данных: array, enum, bytes, struct

Урок 5 - Функции

Урок 6 - События и модификаторы

Урок 7 - Работа с терминалом, основы node.js и npm

Урок 8 - Тестирование с Hardhat, Ethers & Waffle

Урок 9 - Оптимизация смарт-контрактов

Урок 10 - Вопросы для собеседования. Часть 1

Урок 11 - Наследование

Урок 12 - Интерфейсы и библиотеки

Урок 13 - Древо Меркла

Урок 14 - Низкоуровневые вызовы

Урок 15 - Работа с памятью в Solidity

Урок 16 - Hardhat tasks

В следующей части обучения мы будет разбирать смарт-контракты, популярные решения и паттерны.
🔥41
Solidity. Смарт контракты и аудит pinned «Базовый курс по Solidity Под каждым уроком есть посты подсказки. Если вы забыли какую-либо часть урока или хотите уточнить тот или иной момент, то попробуйте воспользоваться поиском по тегам. Например, #enum, #event, #call и так далее. Урок 1 - Введение…»
На что обращать внимание во время обучения разбора смарт-контрактов

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

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

Иногда просят выполнить тестовое задание и написать смарт-контракт прямо на собеседовании. Тебе говорят, мол:

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

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

Вот для этого я и хочу заняться разборами контрактов, чтобы мы могли переводить такой текст задания в код и понимать: " Так, объект это скорее всего через struct, список адресов через mapping. Потом проверки. " Как-то так.

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

На что я предлагаю обращать внимание в смарт-контрактах:

1. Общую задачу
2. Надобность переменных или за что они отвечают
3. Различные require
4. Наследования других контрактов
5. Подключенные import

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

Начинаем уже завтра.
4🔥1
Урок 17 - Голландский аукцион

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

Стрим - аукцион.

Так как это новый формат обучения, я еще не совсем уверен, какие скрины делать.

Тем не менее, вам стоит выделить час-два помимо видео и сами прописать весь контракт от и до.

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

#голландскийаукцион #аукцион #урок
👍1
В видео были показаны две переменные "constant" и "immutable", после которых имя переменных писалось капсом (большими буквами). Их особенность в том, что данные переменные уже нельзя будет нигде изменять.

Так вот, если мы пишем "constant" по значение переменной мы должны указать сразу.

Если же мы используем "immutable", то создать переменную можно в начале, а присвоить значение один раз позже.

#constant #immutable
👍1🔥1
Solidity поддерживает некоторые не стандартные форматы записи даты и времени.

Обычно во многих языках нужно указывать продолжительность времени в секундах или миллисекундах. И если мы хотим обозначить день, то нужно писать что-то типа - 60*60*24.

Однако в данном языке можно писать "3 hours", "5 minutes" или "2 weeks".

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

#date #time #formats
👍1🔥1
Хочу обратить внимание на упрощенную запись условия if\else, которое носит название тернарное выражение.

Это также, к слову, о красивом коде.

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

#тернарноевыражение #тернарное
🔥1
"С начала эпохи Unix" - произнес лектор в видео.

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

Для всех остальных сообщаю, что началом эпохи Unix принято считать 1 января 1970 года 00:00:00. Именно Unix была одной из основных платформ для интернет-узлов. Ее разработка велась с начала 1970-х, и за отправную точку была принята ближайшая круглая дата, а более ранние выражаются отрицательными числами.

Время Unix никогда не двигается назад.

#unix
👍1🔥1
Если вам нужно, чтобы функция в тесте сработала не сразу, а с некоторой задержкой, как например в уроке на видео, где требуется проверить, что цена упала спустя некоторое время, то вам необходимо для начала в тесте прописать

this.timeout(5000)

где 5000 - это 5 секунд.

Добавить функцию delay, как в примере на скрине. А затем вызвать ее уже в самом тесте.

#delay #timeout
Несколько примеров проверок.

#expect
Ethers из урока

ethers.utils.parseEther("0.001") - функция принимает значение в эфире и правильно конвертирует в единицу Wei.

ethers.provider.getBlock(#) - получить информацию о блоке в блокчейне

return (ethers.provider.getBlock(#)).timestamp - возвращает метку времени данного блока

#ethers