Типы и функции Sophia
После изучения основ языка смарт-контрактов Sophia, давайте разберем несколько его типов и функций.
Вкратце: для определения договора в Sophia, его имя необходимо напечатать с заглавной буквы; запись состояния определена для хранения всех переменных состояний контракта; функция инициализации - не забудьте инициализировать все переменные состояния некоторыми данными. Развертывание контракта запускает функцию init.
NB - не забывайте делать отступы в кодовых блоках, включая скобки!
Развертывание контракта с SDK выполняется путем вызова функции init с экземпляром контракта, все остальное выполняется автоматически. (Для этого требуется правильно настроенный Javascript SDK).
Вы можете посмотреть видео-инструкцию на английском: Learn Building Sophia Contracts: Types & Functions - YouTube
Теперь о некоторых функциях Sophia!
Обратите внимание, что в предустановленных примерах в æstudio есть и другие ключевые слова - простые по своей природе, но эффективные в использовании. Например, функция точки входа может быть вызвана кем угодно извне, поэтому внимательно следите за их защитой.
Payable означает, что при вызове этой функции вам разрешено отправить большую сумму Æ. Сумма рассчитывается в ætos - наименьшей субъединице блокчейна æternity. В документации есть библиотечные функции, которые позволяют быстро совершать конвертацию. Если вы попытаетесь отправить Æ без отметки к оплате, вызов контракта не удастся. Æ хранится в контракте, и вы можете выбрать, куда его отправить, например, на другой кошелек или другой контракт. Обратите внимание, что контракты также должны быть помечены как подлежащие к оплате, чтобы иметь возможность получать Æ с простыми типами транзакций со значениями, не включая какие-либо вызовы функций.
Stateful означает, что эта функция изменяет переменные состояния вашего контракта. Опять же, вы можете увидеть это действиена видео: Aeternity Sophia 101:Your first token contract - YouTube
Полезно: вы всегда можете написать дополнительную вспомогательную функцию для тех переменных, которые вы часто используете при кодировании.
Наконец, функция объявления закрытой функции, которую можно вызвать только из контракта.
Внимание: для того, чтобы контракты Sophia функционировали, все входные параметры и данные, возвращаемые функциями, должны быть правильно типизированы. Имейте это в виду!
Давайте изучим типы данных в Sophia!
Во-первых, строки, целые числа и логические значения (которые, вероятно, вам уже знакомы из других языков). Они определяются и передаются во время вызова функции, как и в javascript.
Адрес соответствует кошельку или контракту в блокчейне æternity.
Биты представляют собой единицы и нули и передаются в код вашей функции в виде массива.
Байты - вы определяете, сколько байтов вам нужно, и передаете соответствующую область байтов в виде строк вашей функции через javascript SDK.
Карты - это сопоставление данных определенного типа с другим фрагментом данных. В Sophia карты могут быть как входными, так и возвращаемыми данными для функций и могут быть записанны почти бесконечно глубоко. В javascript SDK передайте карту с уникальными парами ключ-значений.
Записи - главное, что нужно знать о записях, которые могут напоминать вам об объектах, - это то, что у вас может быть много экземпляров этого типа. Однако имена ключей фиксированы, как и типы их значений. Когда вы передаете запись в качестве параметра вызова функции с помощью javascript SDK, используйте объект и всегда будьте осторожны, чтобы правильно сопоставить ожидаемые имена ключей и соответствующие типы значений.
Список или массив. Все записи этого типа должны быть одинаковыми в Sophia.
Tuple - как списки, но может содержать значения любого типа. Однако в нем могут быть списки. В javascript вы просто передаете tuple как список.
Хеш - эквивалент любых 32 байтов и существует, чтобы упростить использование встроенной хеш-функции Sophias.
Подпись - эквивалент любых 64 байтов.
Хеш и подпись могут использоваться для удивительных вещей, например, для проверки, создавались ли подписи закрытым ключом, соответствующим какому-либо адресу, без необходимости использования закрытого ключа.
Option. Из синтаксиса, такого как машинописный текст, вы можете знать, что параметры могут быть помечены как необязательные - они могут иметь или не получать какое-то значение. Например, в Sophia параметр integer означает, что данные могут быть целыми или просто неопределенными. Однако это целое число необходимо сначала определить, если вы хотите работать с ним в своем контракте. Вы можете сделать это с помощью конструкции switch, которая позволяет вам проверить, является ли это конкретным целым числом, некоторым целым числом или просто неопределенным.