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

Если в других языках это, по большей части, не так важно, но в 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
В динамический массив мы можем помещать значения с помощью метода push, а проверить его длину с помощью length.

Эти методы не доступны для фиксированных массивов.

#array #массивы
🔥1
Можно также создавать временные массивы массивы.

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

#array #массивы
🔥1
В текущих укрока bytes будут использоваться редко. Тем не менее нужно запомнить, что информация в переменных bytes хранится именно как последовательность байтов, другими словами различные символы, буквы и цифры будут иметь измененный вид, как в примере на скрине.

#bytes #типыданных
🔥1