4 Создание ABI-файла
Бинарный интерфейс приложения ABI (англ. Application Binary Interface) — это описание в JSON-формате методов преобразования действий пользователя между JSON и двоичным представлениями. ABI также описывает методы для преобразования состояния базы данных в JSON-формат и обратно. После того, как контракт описан через ABI, разработчики и пользователи могут с ним легко взаимодействовать через JSON.
Для создания ABI-файла используется утилита eosio-cpp, размещенная в cyberway.cdt. Иногда для отладки участков программы или анализа различных ситуаций приходится в ручном режиме вносить изменения в уже созданный ABI-файл. Поэтому разработчикам необходимо ознакомиться с его структурой, а также с описанием его отдельных компонентов. Структура ABI-файла имеет следующий вид:
structs — описание структур, которые используются для обработки действий (actions) пользователя. Также структуры могут использоваться для описания полей объектов, которые хранятся в таблицах tables, или полей (параметров) функций в actions.
types — описание пользовательских типов, которые используются в качестве параметров в любом публичном действии (action) пользователя или структуре. Также могут использоваться в публичных действиях или структурах. Как правило, следует описывать свои собственные типы.
actions — описание публичных действий пользователя, объединяет все функции, описанные в заголовочном файле контракта.
events — описание событий, каждое из которых представляет собой реакцию (ответ) контракта на определенное действие (action) пользователя.
tables — описание таблиц, которые используются для обработки действий (actions) пользователя. Таблицы представляют собой контейнеры типа multi_index
или eosio::singleton
, которые хранят данные в базе данных узла блокчейна. Внутри таблицы находятся объекты structs
. Создание, получение, изменение или удаление объектов выполняется в операциях actions
.
abi_extensions — описание дополнительных возможностей ABI (резерв, не используется).
Структуры (structs)
Пример описания структуры в ABI-файле:
Пример описания поля структуры в ABI-файле:
Пример описания структуры операции create
для создания токенов в ABI-файле:
Типы (types)
Пример описания типа в ABI-файле:
Действия (actions)
Пример описания действия в ABI-файле:
События (events)
Пример описания событий для контракта публикации в ABI-файле:
Таблицы (tables)
Пример описания таблицы в ABI-файле:
Описание векторов
Для описания вектора в ABI-файле необходимо добавить тип с помощью символов []
. Таблицы должны быть точно описаны в ABI-файле. Например, в случае использования cleos
при добавлении таблицы в контракт с искаженным ABI-описанием возможна потеря данных при отсутствии сообщения об ошибке.
После каждого изменения в контракте структуры, таблицы, действия или события, а также после введения нового типа необходимо обновлять ABI-файл. Во многих случаях сбой, возникающий при обновлении ABI-файла, не приводит к появлению сообщения об ошибке, из-за чего затрудняется анализ работы контракта.
Last updated