Начинающие окунуться в Solidity

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

Все эти вещи казались такими далекими от досягаемости: предназначались для гениев математики со степенью CS. Хотя, когда я нашел Solidity, я понял, что это не так недостижимо, как я когда-то думал. Это не должно было быть сюрпризом… Раньше я думал то же самое о кодировании в целом, пока не нашел различные онлайн-ресурсы и не начал изучать кодирование в школе Flatiron.

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

Во-первых, что такое Solidity?

Solidity - это контрактно-ориентированный язык высокого уровня для реализации смарт-контрактов. На него повлияли C ++, Python и JavaScript, и он предназначен для виртуальной машины Ethereum (EVM).

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

Хорошо ... Я смутно понимаю, что это значит. Как насчет того, чтобы я прыгнул и посмотрел на код. Документы начинаются довольно просто:

Я вижу объявления некоторых функций, я знаю о них! Но что такое контракт? Это немного похоже на объект класса в javascript.

Контракт в смысле Solidity - это набор кода (его функции) и данных (его состояние), который находится по определенному адресу в цепочке блоков Ethereum. - документы

Хммм, это похоже на объект в Javascript!

Строка uint storedData; объявляет переменную с именем storedData типа uint. О, чувак ... почти что ... что такое uint? uint - это переменная состояния типа «целое число без знака». Только не снова! Что такое целое число без знака ?!

Я знаю это чувство, но давай продолжим читать и постараемся получить общую картину, пока мы не почувствовали себя такими потерянными. Из документов:

Вы можете думать об этом [переменной состояния] как об отдельном слоте в базе данных, который можно запрашивать и изменять, вызывая функции кода, управляющего базой данных. В случае Ethereum это всегда договор владения. И в этом случае функции set и get можно использовать для изменения или получения значения переменной.

Итак, как видите, функции в Solidity чем-то похожи на функции Javascript. Некоторые отличия заключаются в том, что вы должны объявить тип данных аргумента перед аргументом, и этот аргумент имеет соглашение о подчеркивании перед ним function example(uint _num, string _str). Кроме того, после того, как вы укажете аргументы, вы должны указать, какой тип данных вы планируете возвращать из функции, если вы планируете что-то возвращать, и будет ли этот возврат общедоступным или частным: function example(uint _num, string _str) public view returns (string) { //function body }. Это общедоступная функция, которая возвращает строку, доступную для просмотра всем.

На мой взгляд, довольно странно то, как создать массив в Solidity. Сначала нужно объявить, какие данные вы будете помещать в массив и хотите ли вы указать размер массива. Массив, размер которого вы указали, называется «фиксированным» массивом, а массив, размер которого не ограничен, - «динамическим» массивом. После того, как вы указали эти аспекты, вы можете назвать массив. Этот процесс выглядит так int[3] numArray;. Это создаст фиксированный массив «целых чисел со знаком» с 3 элементами, названный «numArray». Чтобы динамический массив выглядел похожим, но без номера в скобках: int[] numArray;.

Переменные состояния постоянно хранятся в цепочке блоков, поэтому «динамический массив» можно использовать как базу данных. Вы также можете сделать массив общедоступным, добавив его следующим образом: int[3] public numArray;.

Я использовал слова «подписанное» и «беззнаковое» целое число. В моем простейшем понимании предмета они оба могут представлять разные диапазоны. Например, при представлении 8-битного числа «целые числа без знака» могут представлять (0… 255), в то время как «целое число со знаком» может представлять (-128… 127).

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

Каждая переменная состояния, структура или функция, которую вы пишете в Solidity, будет принадлежать контракту.

Struct объявляется с именем, а затем получает блок. Внутри этого блока вы снова должны объявить тип данных, а затем имя данных. В приведенном выше примере: мы сначала объявили беззнаковое целое число с именем numExample. Следующим было целое число без знака с именем «anotherNumber», и, наконец, у нас есть строковый тип с именем «stringExample». Кажется, что Solidity очень четко описывает типы данных и их декларацию.

Заключение

Надеюсь, это небольшое погружение в Solidity показало вам, что это, как и все остальное, только сложно, но не невозможно. Как и любой другой язык программирования, вы должны попробовать его сами, заговорить на нем, напортачить и выучить его. Удачи!

Если вы хотите сыграть в классную игру, которая также учит вас Solidity, попробуйте CryptoZombies. Это похоже на code-academy и тому подобное, но для Solidity.

Если эта статья была хоть сколько-нибудь полезной, дайте мне знать: хлопайте в ладоши или пишите мне с любыми комментариями или вопросами, и поделитесь ими с друзьями. Спасибо за чтение!