Solidity - это наиболее используемый язык для написания смарт контрактов. Он компилируется для виртуальной машины EVM Ethereum. Это статически типизированный язык высокого уровня, который включает в себя несколько функций ООП.

Смарт контракты - это маленькие программы, способные изменять состояния в сети Ethereum. Состояния - это информация (обычно создаваемая переменными, определенными в смарт контрактах), хранящаяся в блокчейне. Например, баланс Эфира (или другой базовой монеты) на данном счете - это состояние Ethereum. В широком смысле EVM - это машина, которая меняет состояния на основе транзакций.

Главная особенность Ethereum заключается в том, что это децентрализованная сеть. Ее мировое состояние (полное состояние) реплицируется на нескольких компьютерах (клиентах/серверах) по всему миру, называемых узлами. То, что все узлы поддерживают одинаковое состояние мира, обеспечивается механизмом консенсуса блокчейна.

Тот факт, что Ethereum является децентрализованной сетью, основанной на протоколе p2p (peer-to-peer), предполагает, что приложения, взаимодействующие с блокчейном, мы называем децентрализованными приложениями (dApps).

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


Remix IDE (среда проектирования и выполнения кода)

Виртуальная машина Ethereum имеет свой собственный язык ассемблера, и какой бы язык высокого уровня ни использовался, его необходимо скомпилировать для EVM. Компилятор, который компилирует Solidity для EVM, - это solc. Существуют и другие языки, которые компилируются для EVM, например Vyper, но наиболее используемым языком является Solidity.

Самый простой способ написать, скомпилировать и развернуть смарт контракт - это использование интегрированной платформы разработки, IDE. В этом курсе мы будем использовать онлайн IDE под названием Remix.

Доступ к Remix можно получить по адресу remix.ethereum.org.

Онлайн IDE Remix.
Онлайн IDE Remix.

Чтобы начать делать новый контракт, создайте новый файл в папке \textit{contracts}, расположенной в левой части экрана. Мы можем видеть это на рисунке ниже.

Создание нового файла на Remix.
Создание нового файла на Remix.

Назовем этот новый файл HelloWorld.sol. Расширение для файлов Solidity указывается как - ".sol". Remix откроет этот новый файл, и мы сможем начать писать смарт контракт.

Начнем с указания версии компилятора, которую мы хотим запустить, с помощью директивы pragma, как

pragma solidity ^0.8.7;

Существует несколько способов определить используемую версию компилятора. Самый простой - указать полную версию, например, 0.8.7. В общем случае, однако, мы хотим использовать любую версию, большую, чем указанная, если она не претерпела изменений, которые могут нарушить обратную совместимость. Для этого мы используем символ "^''". Это означает, что компилятор может быть версии 0.8.8, 0.8.9 и т.д., но не версии 0.9.x и выше.


Привет Мир (Hello World)

Чтобы указать, что мы начнем писать новый контракт, мы используем предложение contract, как в примере ниже

contract HelloWorld {...}

Solidity использует синтаксис, основанный на фигурных скобках { }, подобно C, Java, JavaScript и т.д. Все, что находится внутри contract, будет частью нашего контракта, но компилятор также будет использовать объявления за пределами этой области, как мы увидим в последующих уроках.

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

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

string name = "Hello World";

Solidity - типизированный язык, поэтому нам необходимо явно указать тип объявляемой переменной. Строка - это ссылочный тип Solidity (подробнее об этом в последующих уроках). Имя переменной - name, и она инициализируется значением Hello World.

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

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

Чтобы сохранить контракт, используйте Ctrl+S (или эквивалент в вашей операционной системе). Контракт автоматически скомпилируется. При этом обратите внимание, что компилятор выдал предупреждение, обозначенное оранжевым восклицательным знаком. См. рисунок ниже.

Remix предупреждает, что в коде что-то не так.
Remix предупреждает, что в коде что-то не так.

При наведении курсора на восклицательный знак указывается причина предупреждения. В нашем случае причина предупреждения следующая:

Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing “SPDX-License-Identifier: “ to each source file.

(Предупреждение: Идентификатор лицензии SPDX не указан в исходном файле. Перед публикацией рассмотрите возможность добавления комментария, содержащего "SPDX-License-Identifier: " к каждому исходному файлу.)

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

//SPDX-License-Identifier: MIT

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

Включив приведенную выше строку в качестве первой строки кода, сохраните файл и обратите внимание, что предупреждение исчезнет. Поздравляем, вы написали свой первый смарт-контракт на Solidity, хотя он не делает ничего, кроме хранения значения Hello World в качестве переменной состояния на Ethereum.


Развертывание контракта (деплой)

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

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

Развертывание может быть выполнено в четвертом пункте меню.
Развертывание может быть выполнено в четвертом пункте меню.

Пока не обращайте особого внимания на опции на экране. Просто убедитесь, что среда установлена на JavaScript VM (Лондон или Берлин). London и Berlin - это разные версии EVM, но разница между ними невелика.

Нажмите Deploy и обратите внимание, что в нижней части Remix появится новая информация.

Remix укажет, была ли транзакция успешной или нет, и покажет адрес контракта.
Remix укажет, была ли транзакция успешной или нет, и покажет адрес контракта.

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

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

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

Заключение

На данный урок это всё.
Кстати, мы сейчас ищем командных людей или желающих ими стать, для работы над единой большой целью. Если интересно, более подробную информацию смотрите в ссылках ниже.
Да прибудет с вами МуркаChain! :)

Ссылки

  1. Ссылка на мой профиль Вконтакте

  2. Ссылка на мои статьи в DTF

Комментарии (0)