Структура команды и транзакции
Структурно транзакция разделена на 2 элемента: команду и транзакцию.
Команда - конкретная операция в сети. Задается типом операции и набором необходимых для операции полей. Например, регистрация, перевод и т.д.
Транзакция - контейнер для нескольких команд, который и отправляется в сеть. Транзакция задает комиссию и ее плательщика.
Структура команды
version* : int
- версия формата.id* : String
- идентификатор команды (рассчитывается по хешу команды (по принципам ЭЦП) и времени создания команды, алгоритм хеширования определяется версией).type* : String
- тип операции.publisher* : String
- отправитель в сеть.timestamp* : long
- время создания команды.deadline* : long
- время жизни команды.data* : Map<String, Long|String|Map<...>>
- данные команды.note : String
- комментарий.confirmations*: Map<String, String>
- подписи (ID аккаунта - ЭЦП в Base64).reference : String
- зависимость от другой команды в транзакции.
*
- обязательные поля.
Пример:
Структура транзакции
version* : int
- версия формата.id* : String
- идентификатор транзакции (рассчитывается по хешу транзакции (по принципам ЭЦП) и времени создания транзакции, алгоритм хеширования определяется версией).commands* : List<Command>
- команды в транзакции.publisher* : AccId
- плательщик комиссии.fee* : long
- комиссия.confirmations*: Map<String, String>
- подписи (ID аккаунта - ЭЦП в Base64).timestamp* : long
- время создания транзакции.deadline* : long
- время жизни транзакции.tags : Map<String, String>
- теги.block : String
- идентификатор блока, в котором транзакция была подтверждена (используется только при запросе транзакции с пира).
*
- обязательные поля.
Пример:
Основные правила функционирования транзакции
Транзакцию подписывает отправитель транзакции, заданный в поле
publisher
.Транзакция выполняется атомарно. Ошибка в обработке любой команды в транзакции приведет к ошибке всей транзакции. Ни одна команда не будет принята.
Все команды в транзакции выполняются последовательно.
В команду включается поле
publisher
для того, чтобы только правильный аккаунт мог выпустить транзакцию в сеть.В команде есть поле
reference
, которое позволяет управлять взаимосвязью команд. Если поле задано, то указанная команда должна включаться в текущую транзакцию и располагаться раньше текущей команды в перечне команд транзакции.
Last updated