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

Урок будет относительно простой.

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

Пока что давайте попробуем общение под последним постом на канале: задаем вопросы, получаем ответы, развиваемся!

Также дайте знать, в чем и если у вас возникли трудности, а также, как вам формат коротких постов в течение дня с моментами из урока, на которые стоит обратить внимание.
🔥1
Урок 2

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

Ссылка на видео урока.

Задание по уроку:

1. Записать в новый файл типы данных из урока и дать краткое описание.

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

#урок
👍1🔥1
Несколько слов о переменных в Solidity

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

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

3. Переменные должны быть определены типом данных (uint, int, book и другие).

#типданных #переменные
👍3🔥1
Пример логических операций к булевым значениям. Все понимают, что они значат?)
👍1🔥1
Обратите внимание на размерность переменных.

Если в других языках это, по большей части, не так важно, но в Solidity и смарт контрактам правильная размерность может сократить стоимость газа, а значит и финальную стоимость развертывания самого контракта в сети блокчейн!
👍2🔥1
Так можно узнать минимальное значение переменной.

А кто скажет, как можно узнать максимальное?)

#функция #размер
🔥1
Кстати, о красивом коде.

Автор уроков, преподаватель одной из московских школ программирования, пишет довольно красивый код: делает отступы, сокращает функции и т.д.

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

Хотите, чтобы я дальше тоже обращал внимание на такие штуки?
👍5🔥1
И вот последняя функция, на которую стоит обратить внимание.

Как я понял из урока, ее не было в ранних версиях Solidity, и появилась не так уж и давно.

Unchecked() позволяет отлавливать ошибки переполнения, и, если функция дошла до максимального или минимального значения, то она не вернет ошибку, а начнет сначала диапазона.

#unchecked #function
👍1🔥1
В завершение дня

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

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

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

Надеюсь вам пока заходит подобное обучение, как и мне. Если что не так, то я всегда открыт к предложениям.
🔥7
Урок 3. Типы данных 2.

Продолжаем осваивать базовые единицы языка.

Видео урока.

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

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

А так, приятного просмотра и легкого дня!

#урок #типыданных
🔥1
Пара слов, которые нужно запомнить о типе данных string

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

2. Мы не можем померит длину строки, так как они хранятся в байтовых массивах.

3. Строки нельзя склеивать, сравнивать, или обращаться к буквам по индексу.

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

#string #function
👍1🔥1
В Solidity есть уникальный тип данных - address, так как смарт-контракты и пользователи имеют свой уникальный адрес в сети блокчейн.

Вместе с этим, address имеет особенные методы для работы с переменными, такие как balance или transfer.

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

#address #method
🔥1
Если хотите, чтобы та или иная функция могла принимать деньги, то обязательно нужно указывать ее как payable.
🔥1
Mapping нужно уделить особо пристальное внимание, так как он, по моему опыту просмотренных видео о смарт-контрактах, используется довольно часто.

Mapping или сопоставление - это хранение данных в виде ключ-значение, например, "адрес кошелька => сумма пополнения".

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

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

#mapping
🔥1
Урок 4

Последний урок про типы данных в Solidity.

Видео урока.

Тем, кто пришел на обучение недавно, крайне советую пересмотреть предыдущие уроки, которые я выкладывал в понедельник, среду и четверг примерно в 11 утра.

Этот урок, скорее всего, покажется немного сложнее для новичков, чем предыдущие, так как тут рассматриваются сложные типы данных, вроде struct и array.

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

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

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

Приятного просмотра и хорошего дня!

#урок #типыданных
🔥1
Несколько слов о enum.

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

1. С помощью enum можно создавать свои собственные не сложные структуры типов данных.

2. Мы можем использовать enum для создания переменных и статусов для них.

3. В enum, при вызове функций, показывается не сам статус, а его индекс (порядок в списке).

#enum #типданных
👍3🔥1
Массивы, они же array, могут быть, как с фиксированной длинной, которая указывается в квадратных скобках, так и динамические.

Нужно отметить, что на данный момент, в Solidity нельзя создавать массивы, в которых хранятся разные типы данных.

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

#array #массивы
👍1🔥1
Массивы могут быть вложенными.

В этом случае длина массива, например, uint[10][5] будет равна 5, а длина вложенных - 10. Т.е. длина основного массива читается с конца.

Также обратите внимание, что значения в массивах нумеруются с "0".

#array #массивы #вложенныемассивы
👍3🔥1