Начните работу с Solidity в Swift

Solidity — это объектно-ориентированный язык для написания смарт-контрактов, которые можно развернуть на блокчейне, например, Ethereum. Синтаксис похож на Javascript, но с другой стороны, семантика ближе к C++. Мы рассмотрим структуру и функции языка Solidity с точки зрения разработчика Swift.

Расширение Pragma и sfile

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

В отличие от Objective-C #pragma и Swift MARK, ключевое слово pragma в Solidity описывает, какую версию компилятора следует использовать. Имейте в виду, что он указывает компилятору проверить, совпадают ли версии. Он не включает и не выключает какие-либо языковые функции.

Например, если мы хотим сообщить компилятору Solidity, что хотим использовать версию 0.8.x, мы можем запустить исходный файл следующим образом:

pragma solidity ^0.8.0;

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

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

Исходные файлы Solidity сохраняются с расширением .sol.

Все начинается с договора

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

Как и классы, нам нужно назвать его, открыть и закрыть фигурными скобками.

contract HelloSwiftFromSolidity {
}

Переменные состояния

Переменные состояния — это переменные, объявленные внутри файла contract. Имейте в виду, что эта информация хранится в хранилище контрактов блокчейна после его развертывания. Нам не нужно беспокоиться о геттерах и сеттерах. Компилятор Solidity генерирует это для нас.

contract HelloSwiftFromSolidity {
  string hello;
}

Теперь вы можете заметить, что каждая строка выполнения должна заканчиваться точкой с запятой ;. Это не относится к языку Swift.

Функции

Функции могут быть объявлены внутри и снаружи contract, аналогично Swift. Они могут выполнить часть кода.

contract HelloSwiftFromSolidity {
  // visibility = public because access from outside
  string public hello = "Hello Swift";
  // visibility = public because access from outside
  // view = just view the data
  function helloSwift() public view returns(string memory) {
      return hello;
  }
}

Это происходит много, так что давайте сломаем это. Если мы хотим получить доступ к переменной состояния извне, нам нужно установить тип видимости public и сделать то же самое для функции. В нашем случае функция что-то возвращает, и мы можем пометить это как view. Он возвращает строку, которая сохраняется в памяти и удаляется после завершения выполнения.

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

  • memory - время жизни переменной ограничено областью действия функции, нигде не сохраняется;
  • storage — данные хранятся в хранилище смарт-контрактов на блокчейне;
  • calldata - данные хранятся снаружи от того места, где вызывается функция, мы обсудим подробнее и как использовать это в будущем.

Типы функций

Функции в Solidity могут выполнять инструкции, просматривать данные. Это может быть view или pure, когда мы просматриваем данные. Разница между ними в том, что чистые функции не изменяют и не считывают переменные состояния.

function helloWorld() public pure returns(string memory) {
  return "Hello World";
}

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

TL;DR

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

Ссылки