Начните работу с 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 являются контракты, которые могут содержать переменные состояния, функции и другие структуры.