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
        • Комиссия за транзакцию
        • Суммарная сложность
        • Размер транзакции
        • JSON-представление
        • Бинарный формат
        • Структура Ride
      waves_logo Docs

          # Транзакция вызова скрипта

          Транзакция вызова скрипта выполняет вызов функции dApp. Подробнее о dApp и о вызове скрипта

          Кроме адреса dApp, имени вызываемой функции и аргументов, транзакция вызова скрипта может содержать платежи в пользу dApp. Максимальное количество платежей — 10. (До активации фичи № 16 “Ride V5, dApp-to-dApp invocations” количество платежей не превышало 2. До активации фичи № 15 “Ride V4, VRF, Protobuf, Failed transactions” количество платежей не превышало 1.)

          # Комиссия за транзакцию

          Комиссия за транзакцию вызова скрипта может быть указана в спонсорском ассете, см. раздел Спонсирование комиссии.

          Минимальная комиссия в WAVES за транзакцию вызова скрипта рассчитывается по формуле:

          Fee = 0,005 + S + 1 × I

          • Если отправитель транзакции — dApp или смарт-аккаунт, а сложность скрипта аккаунта или функции-верификатора dApp-скрипта больше порога сложности отправителя, то S = 0,004, в ином случае S = 0.
          • Транзакция вызова скрипта может выполнить выпуск токенов. I (issue) — количество выпущенных токенов, не являющихся NFT.

          До активации фичи № 16 “Ride V5, dApp-to-dApp invocations”
          • Минимальная комиссия за транзакцию вызова скрипта увеличивалась на 0,004 WAVES каждое выполнение скриптов ассетов в платежах и действиях скрипта.
          • Дополнительная комиссия 0,004 WAVES за отправку транзакции со смарт-аккаунта или dApp требовалась независимо от сложности скрипта аккаунта или наличия и сложности функции-верификатора скрипта dApp.)

          # Суммарная сложность

          Вызываемая функция dApp-скрипта может, в свою очередь, вызывать функцию другого dApp или того же самого dApp, в том числе функция может вызвать сама себя. Все вызванные функции выполняются в рамках одной транзакции вызова скрипта. Подробнее о вызове dApp из dApp

          Максимальная суммарная сложность всех вызываемых функций и скриптов ассетов в одной транзакции зависит от версии Стандартной библиотеки dApp-скрипта, который вызван первым:

          • Если первый dApp-скрипт использует версию 6, 7 или 8, то суммарная сложность — не более 52 000.
          • Если первый dApp-скрипт использует версию 5, то суммарная сложность — не более 26 000. Если далее вызываются функции скриптов версии 6 и выше, их сложность может превышать 10 000 и ограничена только суммарной сложностью транзакции.

          Сложность скрипта отправителя не учитывается в этом лимите.

          Возможность вызова dApp из dApp появилась с момента активации фичи № 16 “Ride V5, dApp-to-dApp invocations”. До активации фичи № 16 суммарная сложность скриптов не была ограничена.

          # Размер транзакции

          • Для транзакции версии 2 максимальный размер InvokeScriptTransactionData (см. раздел Бинарный формат транзакции вызова скрипта) — 5120 байт.
          • Для транзакции версии 1 максимальный размер транзакции, включая подтверждения, — 5120 байт.

          # JSON-представление

          {
            "type": 16,
            "id": "6iYsfcVrty9piDkMtHEJ1CzQdbruGNaXUBSGmSpFuYN7",
            "sender": "3Mw48B85LvkBUhhDDmUvLhF9koAzfsPekDb",
            "senderPublicKey": "BvJEWY79uQEFetuyiZAF5U4yjPioMj9J6ZrF9uTNfe3E",
            "fee": 500000,
            "feeAssetId": null,
            "timestamp": 1640104777935,
            "proofs": [
              "2kQiPyBGn9uTnD7b4FNvtrNAGTpxPRVDbE4tQrJWuoNjXVs6TenCuYqSyBd4QeBQ7Ng2Fi5G9PdmiNBDXUz3wWqf"
            ],
            "version": 1,
            "dApp": "3N28o4ZDhPK77QFFKoKBnN3uNeoaNSNXzXm",
            "payment": [],
            "call": {
              "function": "foo",
              "args": [
                {
                  "type": "list",
                  "value": [
                    {
                      "type": "string",
                      "value": "theta"
                    },
                    {
                      "type": "string",
                      "value": "iota"
                    },
                    {
                      "type": "string",
                      "value": "kappa"
                    }
                  ]
                }
              ]
            },
            "height": 1844277,
            "applicationStatus": "succeeded",
            "spentComplexity": 57,
            "stateChanges": {
              "data": [
                {
                  "key": "3Mw48B85LvkBUhhDDmUvLhF9koAzfsPekDb",
                  "type": "string",
                  "value": "thetaiotakappa"
                }
              ],
              "transfers": [],
              "issues": [],
              "reissues": [],
              "burns": [],
              "sponsorFees": [],
              "leases": [],
              "leaseCancels": [],
              "invokes": []
            }
          }
          
          Поле Описание
          call.function Имя вызываемой функции. До 255 байт (1 символ может занимать до 4 байт)
          call.args.type Тип аргумента:
          - binary
          - boolean
          - integer
          - string
          - list (доступно после активации фичи № 15)
          call.args.value Значение аргумента. Бинарное значение должно быть в кодировке base64
          dApp Адрес dApp в кодировке base58 или псевдоним адреса c префиксом alias:<байт_сети>:, например alias:T:merry (см. Байт сети)
          payment.amount Количество токена в платеже, в атомарных единицах
          payment.assetId ID токена в платеже в кодировке base58. null означает, что платеж в WAVES
          spentComplexity spentComplexity
          stateChanges Действия скрипта, выполненные вызываемой функцией, и результаты вызовов dApp из dApp

          Если поле call не указано, в dApp вызывается функция по умолчанию.

          Поля spentComplexity и stateChanges не нужно заполнять при отправке транзакции: их добавляет нода при предоставлении данных о транзакции через REST API.

          Описание полей, общих для всех типов транзакций, представлено в разделе JSON-представление транзакции.

          # Бинарный формат

          См. раздел Бинарный формат транзакции вызова скрипта.

          # Структура Ride

          Для операций с транзакцией в смарт-контрактах используется структура InvokeScriptTransaction.

          Типы транзакций
          Выпуск
          Типы транзакций
          Выпуск