waves_logo Docs
  • Почему Waves
    Почему Waves
  • Основные понятия
    Основные понятия
  • Аккаунт
    • Создание аккаунта
      Создание аккаунта
    • Адрес
      Адрес
    • Баланс аккаунта
      Баланс аккаунта
    • Хранилище данных аккаунта
      Хранилище данных аккаунта
    • Псевдоним
      Псевдоним
    • dApp и смарт-аккаунт
      dApp и смарт-аккаунт
    Аккаунт
  • Токен (ассет)
    • NFT: невзаимозаменяемый токен
      NFT: невзаимозаменяемый токен
    • Смарт-ассет
      Смарт-ассет
    • ID токена
      ID токена
    • WAVES
      WAVES
    Токен (ассет)
  • Транзакция
    • Комиссия за транзакцию
      • Спонсирование комиссии
        Спонсирование комиссии
      Комиссия за транзакцию
    • Подпись и подтверждения
      Подпись и подтверждения
    • Типы транзакций
      • Вызов скрипта
        Вызов скрипта
      • Выпуск
        Выпуск
      • Генезис
        Генезис
      • Данные
        Данные
      • Довыпуск
        Довыпуск
      • Закрытие лизинга
        Закрытие лизинга
      • Лизинг
        Лизинг
      • Массовый перевод
        Массовый перевод
      • Обмен
        • Ордер
          Ордер
        Обмен
      • Обновление информации ассета
        Обновление информации ассета
      • Перевод
        Перевод
      • Сжигание токена
        Сжигание токена
      • Cоздание псевдонима
        Cоздание псевдонима
      • Спонсирование
        Спонсирование
      • Установка скрипта
        Установка скрипта
      • Установка скрипта ассета
        Установка скрипта ассета
      • Ethereum-like транзакция
        Ethereum-like транзакция
      Типы транзакций
    • Валидация транзакции
      Валидация транзакции
    Транзакция
  • Блок
    • Корневой хеш транзакций
      Корневой хеш транзакций
    • Блок генезиса
      Блок генезиса
    Блок
  • Нода
    • Лизинг
      Лизинг
    • Доход генератора блока
      Доход генератора блока
    • Монетарная политика
      Монетарная политика
    Нода
  • Mainnet, Testnet, Stagenet
    Mainnet, Testnet, Stagenet
  • Unit Zero
    Unit Zero
  • Оракул
    Оракул
  • Протоколы и форматы данных
    • [en] Cryptographic practical details
      [en] Cryptographic practical details
    • Leased Proof of Stake
      Leased Proof of Stake
    • [en] Waves-NG solution
      [en] Waves-NG solution
    • Протокол Waves-NG
      Протокол Waves-NG
    • Waves 1.5
      Waves 1.5
    • Типы данных блокчейна
      Типы данных блокчейна
    • Бинарные форматы
      • Бинарный формат адреса
        Бинарный формат адреса
      • Бинарный формат псевдонима
        Бинарный формат псевдонима
      • Бинарный формат блока
        Бинарный формат блока
      • [en] Network message binary format
        • [en] Block message binary format
          [en] Block message binary format
        • [en] Checkpoint message binary format
          [en] Checkpoint message binary format
        • [en] Get block message binary format
          [en] Get block message binary format
        • [en] Get peers message binary format
          [en] Get peers message binary format
        • [en] Get signatures message binary format
          [en] Get signatures message binary format
        • [en] Handshake message binary format
          [en] Handshake message binary format
        • [en] Peers message binary format
          [en] Peers message binary format
        • [en] Score message binary format
          [en] Score message binary format
        • [en] Signatures message binary format
          [en] Signatures message binary format
        • [en] Transaction message binary format
          [en] Transaction message binary format
        [en] Network message binary format
      • Бинарный формат ордера
        Бинарный формат ордера
      • Бинарный формат транзакции
        • Вызов скрипта
          Вызов скрипта
        • Выпуск
          Выпуск
        • Генезис
          Генезис
        • Данные
          Данные
        • Довыпуск
          Довыпуск
        • Лизинг
          Лизинг
        • Массовый перевод
          Массовый перевод
        • Обмен
          Обмен
        • Обновление информации ассета
          Обновление информации ассета
        • Отмена лизинга
          Отмена лизинга
        • Сжигание токена
          Сжигание токена
        • Cоздание псевдонима
          Cоздание псевдонима
        • Спонсирование
          Спонсирование
        • Перевод
          Перевод
        • Установка скрипта
          Установка скрипта
        • Установка скрипта ассета
          Установка скрипта ассета
        • Ethereum-like
          Ethereum-like
        Бинарный формат транзакции
      • Бинарный формат подтверждений
        Бинарный формат подтверждений
      Бинарные форматы
    • [en] Validation rules
      [en] Validation rules
    Протоколы и форматы данных
  • Термины
    Термины
      • English
      • Русский
      On this page
        • Версия 2
        • Версия 1
      waves_logo Docs

          # Бинарный формат транзакции вызова скрипта

          Узнать больше о транзакции вызова скрипта.

          # Версия 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 байт.

          Бинарный формат транзакции
          Выпуск
          Бинарный формат транзакции
          Выпуск