Всесторонний обзор синтаксиса Solidity, типов данных и управляющих структур

1. Что такое солидность?

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

2. Что такое РЕМИКС?

REMIX (URL — https://remix.ethereum.org) — это IDE на основе браузера. Проще говоря, это чем-то похоже на VS Code, но специально для написания смарт-контрактов. Контракты написаны на языке Solidity.

3. Как использовать РЕМИКС?

Использовать REMIX довольно просто, вам просто нужно написать смарт-контракт, скомпилировать и развернуть его.

4. Основы Solidity

Как и в любом другом языке, в Solidity есть формат, которому необходимо следовать.

Вот так выглядит типовой договор.

Давайте сломаем это для вас.

· прагматическая прочность ^0.8.0; — Это прагма версии, указывающая версию Solidity, используемую для компиляции контракта.

· контракт SomeContract { } — это определение контракта, где «SomeContract» — это имя контракта.

· Код контракта записывается между фигурными скобками ‘{‘ & ‘}’.

5. Типы данных в Solidity

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

· Значения — это данные, в которых хранится значение. Они могут быть многих типов. Например — логическое значение, целое число, строка и т. д.

· Ссылки — в них хранится ссылка (адрес) на место, где хранятся фактические данные.

6. Наиболее распространенные типы значений и ссылок в Solidity

Наиболее распространенным типом значения в Solidity является uint, что означает целое число без знака. Этот тип данных представляет собой неотрицательные целые числа и может иметь различный размер от 8 до 256 бит. Тип данных uint обычно используется для представления таких значений, как балансы, метки времени и другие числовые значения в смарт-контрактах. Он также используется для арифметических операций, таких как сложение, вычитание, умножение и деление.

Другим распространенным типом значения в Solidity является тип данных адреса. Этот тип данных представляет адреса Ethereum и может использоваться для отправки и получения эфира или других токенов.

Solidity также поддерживает другие типы значений, такие как bool (логическое значение), string (текст), bytes (двоичные данные) и массивы. Эти типы значений необходимы для создания сложных смарт-контрактов, которые могут обрабатывать различные типы данных.

7. Базовый синтаксис для написания функции в Solidity

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

Разберем этот синтаксис:

  • функция: ключевое слово, указывающее, что вы определяете функцию.
  • functionIntro: Имя функции. Это должно быть описательное имя, указывающее, что делает функция.
  • pure или view или payable: модификатор изменчивости состояния функции. Это указывает, изменяет ли функция состояние контракта или нет, и может ли он получать эфир или нет. pure означает, что функция не читает и не изменяет состояние контракта и не получает эфир, view означает, что функция не изменяет состояние контракта, но может читать состояние, а payable означает, что функция может получать эфир и может изменить состояние контракта.
  • return: тип возвращаемого значения функции. Если функция не возвращает значение, вы можете использовать void в качестве типа возвращаемого значения.

8. Переменные в Solidity

В Solidity существует три типа переменных: локальные переменные, переменные состояния и глобальные переменные.

· Локальные переменные: Локальные переменные объявляются внутри функции или блока и доступны только в пределах этой области. Они создаются при вызове функции и уничтожаются при выходе из функции. Локальные переменные могут быть любого типа, включая uint, bool, string, bytes, enum, struct, array и mapping. Локальные переменные используются для хранения промежуточных результатов или для упрощения кода, избегая необходимости многократного вычисления одного и того же значения.

· Переменные состояния: переменные состояния объявляются вне какой-либо функции и хранятся в блокчейне как часть хранилища контракта. Они доступны из любой функции внутри контракта, а также из внешних контрактов и транзакций. Переменные состояния могут быть любого типа, включая uint, bool, string, bytes, enum, struct, array и mapping. Переменные состояния используются для хранения данных, которые необходимо сохранять при вызовах функций, таких как баланс контракта или пользовательские данные.

· Глобальные переменные: глобальные переменные — это предопределенные переменные, доступные для всех контрактов в блокчейне Ethereum. Среди них msg.sender, msg.value, block.timestamp, block.number и now. Эти переменные используются для предоставления контекста и информации о текущем состоянии блокчейна, например номер текущего блока, отметка времени и отправитель транзакции.

9. Конструктор в Solidity

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

Пример. В приведенном ниже примере в contractstructorExample создается конструктор для инициализации переменной состояния str.

10. Модификатор функции

В Solidity модификатор функции — это отдельный фрагмент кода, который можно применять к нескольким функциям в рамках контракта, что позволяет повторно использовать код и упростить структуру контракта.

Его синтаксис выглядит примерно так

Вот пример простого модификатора функции в Solidity, который добавляет простой контроль доступа к функции:

Эту же функцию можно записать и без модификатора.

11. Выдает ошибку в Solidity

В Solidity вы можете использовать функции revert(), require() и assert() для выдачи ошибок и отмены вызова функции при определенных условиях.

· revert(): Эта функция используется для отмены текущей транзакции и возврата оставшегося газа вызывающей стороне. Он часто используется для обозначения ожидаемого состояния ошибки, такого как неверный ввод или недостаточно средств. Вы можете включить строку сообщения об ошибке в качестве аргумента, чтобы предоставить больше информации об ошибке.

· require(): эта функция аналогична revert(), но обычно используется для проверки ввода и контроля доступа. Если условие, указанное в операторе require(), не выполняется, функция вернется в исходное состояние, и весь использованный газ будет израсходован.

· assert(): Эта функция используется для проверки наличия непредвиденных или невозможных условий в коде контракта. Если условие, указанное в операторе assert(), не выполняется, это указывает на ошибку в коде, и функция вернется.

Вот пример того, как использовать require(), чтобы проверить, равна ли переменная определенному значению, и вернуть функцию, если это не так:

В этом примере функция myFunction() проверяет, равен ли аргумент newValue 42, используя оператор require(). Если условие не выполняется, функция вернется в исходное состояние, и весь использованный газ будет израсходован. Если условие выполнено, функция установит значение myVariable в новое значение.

12. События в Solidity

В Solidity событие — это способ отправки контрактом уведомления или сообщения журнала, которые могут быть обнаружены внешними приложениями или другими контрактами. События полезны для отслеживания важных изменений состояния контракта, а также для предоставления пользователям или другим контрактам способа уведомления об этих изменениях.

События определяются с помощью ключевого слова event и обычно объявляются в верхней части контракта, например:

Вот как это выглядит на REMIX:

13. Что такое ERC?

ERC расшифровывается как Ethereum Request for Comment и представляет собой техническую спецификацию для реализации стандартного интерфейса для смарт-контрактов в блокчейне Ethereum.
Стандарт ERC определяет набор правил и рекомендаций, которым должны следовать разработчики при создании смарт-контрактов на Ethereum. . Целью стандарта ERC является обеспечение функциональной совместимости и совместимости между различными смарт-контрактами и приложениями в сети Ethereum.