# Бинарный формат транзакции вызова скрипта
Узнать больше о транзакции вызова скрипта.
# Версия 2
Бинарный формат версии 2 соответствует protobuf-схеме transaction.proto. Описание полей, общих для всех типов транзакций, представлено в разделе Бинарный формат транзакции.
Версия 2 доступна с момента активации фичи № 15 “Ride V4, VRF, Protobuf, Failed transactions”.
message InvokeScriptTransactionData {
Recipient d_app = 1;
bytes function_call = 2;
repeated Amount payments = 3;
};
message Recipient {
oneof recipient {
bytes public_key_hash = 1;
string alias = 2;
};
};
message Amount {
bytes asset_id = 1;
int64 amount = 2;
};
Поле | Размер | Описание |
---|---|---|
d_app.public_key_hash | 20 байт | Хеш открытого ключа аккаунта dApp (компонент адреса, см. раздел Бинарный формат адреса) |
d_app.alias | От 4 до 30 байт | Псевдоним адреса аккаунта dApp |
function_call | Имя и аргументы вызываемой функции. Бинарный формат вызова аналогичен версии 1 (см. п. 7 в таблице) | |
payments.asset_id | • 32 байта для ассета • 0 для WAVES | ID токена в платеже |
payments.amount | 8 байт | Количество токена в платеже, в атомарных единицах |
Количество платежей — не более 10. (До активации фичи № 16 “Ride V5, dApp-to-dApp invocations” количество платежей не превышало 2.)
Максимальный размер InvokeScriptTransactionData
— 5120 байт.
# Версия 1
№ | Поле | Название JSON-поля | Тип поля | Размер поля в байтах | Комментарий |
---|---|---|---|---|---|
1 | Флаг версии | Byte | 1 | Указывает, что версия транзакции является второй или выше. Значение должно быть равно 0 | |
2 | ID типа транзакции | type | Byte | 1 | Значение должно быть равно 16 |
3 | Версия транзакции | version | Byte | 1 | Значение должно быть равно 1 |
4 | Байт сети | Byte | 1 | 87 — для Mainnet 84 — для Testnet 83 — для Stagenet | |
5 | Открытый ключ аккаунта отправителя транзакции | senderPublicKey | Array[Byte] | 32 | |
6 | Адрес или псевдоним | dApp | См. Бинарный формат адреса, Бинарный формат псевдонима | S | Если первым байтом поля является 1, то за ним следует адрес. В этом случае S = 26.Если первым байтом поля является 2, то за ним следует псевдоним. В этом случае 8 <= S <= 34 |
7.1 | Флаг наличия функции | Byte | 1 | 0 — в dApp вызывается функция по умолчанию. 1 — в dApp должна быть вызвана функция из текущей транзакции | |
7.2 | Идентификатор вызова функции | Byte | 1 | Константа. Значение должно быть равно 9 | |
7.3 | Идентификатор типа функции | Byte | 1 | Константа. Значение должно быть равно 1 | |
7.4 | Длина имени функции | Int | 4 | ||
7.5 | Имя функции | function | String | До 255 | |
7.6.1 | Количество аргументов функции | Int | 4 | ||
7.6.2 | ID типа аргумента 1 | type | Byte | 1 | 0 — длинное целое. 1 — массив байтов. 2 — строка. 6 — логическое значение True. 7 — логическое значение False. 11 — список. Возможность передавать список в качестве аргумента появилась с момента активации фичи № 15 “Ride V4, VRF, Protobuf, Failed transactions” |
7.6.3 | Аргумент 1 | value | - Long - Array[Byte] - String - логическое значение True - логическое значение False - List | S | S = 8, если типом является длинное целое.Eсли типом является массив байтов, строка или список, то размер поля ограничен только общим размером транзакции. Если типом является список, то - его длина не должна превышать 1000 элементов, - количество элементов в нем представляют первые 4 байта текущего поля, - каждый элемент сериализуется так же, как и аргумент функции: сначала размещается ID типа элемента, затем его значение. S = 0, если типом является логическое значение True или False |
7.6.4 | ID типа аргумента 2 | type | Byte | 1 | 0 — длинное целое. 1 — массив байтов. 2 — строка. 6 — логическое значение True. 7 — логическое значение False. 11 — список. Возможность передавать список в качестве аргумента появилась с момента активации фичи № 15 “Ride V4, VRF, Protobuf, Failed transactions” |
7.6.5 | Аргумент 2 | value | - Long - Array[Byte] - String - логическое значение True - логическое значение False - List | S | S = 8, если типом является длинное целое.Eсли типом является массив байтов, строка или список, то размер поля ограничен только общим размером транзакции. Если типом является список, то - его длина не должна превышать 1000 элементов, - количество элементов в нем представляют первые 4 байта текущего поля, - каждый элемент сериализуется так же, как и аргумент функции: сначала размещается ID типа элемента, затем его значение. S = 0, если типом является логическое значение True или False |
... | ... | ... | ... | ... | ... |
7.6.[2 × N] | ID типа аргумента N | type | Byte | 1 | 0 — длинное целое. 1 — массив байтов. 2 — строка. 6 — логическое значение True. 7 — логическое значение False. 11 — список. Возможность передавать список в качестве аргумента появилась с момента активации фичи № 15 “Ride V4, VRF, Protobuf, Failed transactions” |
7.6.[2 × N + 1] | Аргумент N | value | - Long - Array[Byte] - String - логическое значение True - логическое значение False - List | S | S = 8, если типом является длинное целое.Если типом является массив байтов, строка или список, то размер поля ограничен только общим размером транзакции. Если типом является список, то - его длина не должна превышать 1000 элементов, - количество элементов в нем представляют первые 4 байта текущего поля, - каждый элемент сериализуется так же, как и аргумент функции: сначала размещается ID типа элемента, затем его значение. S = 0, если типом является логическое значение True или False |
8.1 | Количество платежей | Short | 2 | ||
8.2 | Длина платежа 1 | Short | 2 | ||
8.3 | Количество токена в платеже 1 | amount | Long | 8 | |
8.4 | Флаг токена платежа 1 | Byte | 1 | 0 — WAVES. 1 — другой токен | |
8.5 | ID токена платежа 1 | assetId | Array[Byte] | 32 | |
... | ... | ... | ... | ... | ... |
8.[4 × N – 2] | Длина платежа N | Short | 2 | ||
8.[4 × N – 1] | Количество токена в платеже N | amount | Long | 8 | |
8.[4 × N] | Флаг токена платежа N | Byte | 1 | 0 — WAVES. 1 — другой токен | |
8.[4 × N + 1] | ID токена платежа N | assetId | Array[Byte] | 32 | |
9 | Комиссия за транзакцию | fee | Long | 8 | |
10.1 | Флаг токена комиссии | Byte | 1 | 0 — WAVES 1 — другой токен | |
10.2 | ID токена комиссии | feeAssetId | Array[Byte] | S | S = 0, если токеном является WAVES.S = 32, если это другой токен |
11 | Временная метка транзакции | timestamp | Long | 8 | |
12 | Подтверждения транзакции | proofs | См. раздел Бинарный формат подтверждений | S | Если массив пустой, то S = 3. Если массив не пустой, то S = 3 + 2 × N + 64 × N , где N — количество подтверждений в массиве.Максимальное количество подтверждений в массиве — 8. Размер каждого подтверждения — 64 байта |
Поля, номера которых выделены жирным шрифтом, составляют байты тела транзакции.
Количество платежей — не более 10. (До активации фичи № 16 “Ride V5, dApp-to-dApp invocations” количество платежей не превышало 2. До активации фичи № 15 “Ride V4, VRF, Protobuf, Failed transactions” количество платежей не превышало 1.)
Максимальный размер транзакции, включая proofs
, — 5120 байт.