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

          # Транзакция обмена

          Транзакция обмена обменивает два различных токена между двумя аккаунтами.

          Транзакция содержит два встречных ордера: ордер на покупку и ордер на продажу. Блокчейн гарантирует, что условия обмена не хуже, чем указаны в каждом из ордеров.

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

          Как правило, транзакция обмена создается матчером — сервисом, который выполняет биржевые ордера на покупку и продажу токенов. Пример матчера — матчер WX Network, разработанный сторонней командой из сообщества, см. документацию WX Network .

          В паре обмениваемых токенов один является amount-ассетом (базовой валютой), а другой — price-ассетом (валютой котировки). В транзакции и входящих в нее ордерах указывается количество amount-ассета и его цена в price-ассете. Например, в паре WAVES/XTN amount-ассетом является WAVES, а price-ассетом — XTN, поэтому транзакция содержит количество WAVES к обмену и цену WAVES, выраженную в XTN.

          Количество price-ассета, передаваемое в обмен на amount-ассет, рассчитывается аналогично ордеру, см. формулы и пример в разделе Oрдер.

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

          Минимальная комиссия за транзакцию обмена — 0,003 WAVES. В случае обмена смарт-ассета на обычный ассет — 0,007 WAVES, обмена двух смарт-ассетов — 0,011 WAVES.

          Если отправитель транзакции — dApp или смарт-аккаунт, а сложность скрипта аккаунта или функции-верификатора dApp-скрипта больше порога сложности отправителя, минимальная комиссия увеличивается на 0,004 WAVES. (До активации фичи № 16 “Ride V5, dApp-to-dApp invocations” дополнительная комиссия 0,004 WAVES требовалась независимо от сложности скрипта аккаунта или наличия и сложности функции-верификатора скрипта dApp.)

          ⚠️ В случае если ордер отправлен со смарт-аккаунта или комиссия матчера задана в смарт-ассете, минимальная комиссия за транзакцию не увеличивается.

          # Комиссия матчера

          Матчер получает комиссию за выполнение ордера с отправителя каждого ордера. Матчер устанавливает минимальный размер комиссии. Отправитель указывает в ордере комиссию не менее минимальной.

          Если ордер полностью выполнен в результате транзакции обмена, матчер получает всю сумму комиссии, указанную в ордере. Если ордер выполнен частично, матчер получает часть комиссии. Блокчейн гарантирует, что суммарная комиссия матчера, полученная с отправителя ордера во всех транзакциях обмена, не превышает указанную в ордере.

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

          Приведенная ниже транзакция — это обмен 1 WAVES по цене заявка на покупку 15,637504 NSBT по цене не выше 1,21140511 WAVES за 1 NSBT.

          {
            "senderPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
            "amount": 100000000,
            "fee": 300000,
            "type": 7,
            "version": 2,
            "sellMatcherFee": 750,
            "sender": "3PEjHv3JGjcWNpYEEkif2w8NXV4kbhnoGgu",
            "feeAssetId": null,
            "proofs": [
              "LQD8VoFhHEW2b6o2e2ujzDHdZatwMMwigC2tmoSHcFNRGXrowA1yyVxD6nZBNeABLWjs59dnuLhgNP7UMfFKDuR"
            ],
            "price": 1134500,
            "id": "EHLccXcemZPEvUpM9UkASG1GciwMt9R5B3QuYFxywj9g",
            "order2": {
              "version": 3,
              "id": "JCiF3gmprLc8u7xdWR7KUkJ3YfM6yfgxB6CvhJYGJFAa",
              "sender": "3PRBeeFD64wvTMfS3HEoDDFPXfJs3gFdAxk",
              "senderPublicKey": "ytgWVbKG9e6TSsQ5buMryr2QyxNoL3RezXP3f9RJ2As",
              "matcherPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
              "assetPair": {
                "amountAsset": null,
                "priceAsset": "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
              },
              "orderType": "sell",
              "amount": 40000000000,
              "price": 1134500,
              "timestamp": 1591356602063,
              "expiration": 1593862202062,
              "matcherFee": 300000,
              "matcherFeeAssetId": null,
              "signature": "3D2Ngr7H6MQRs1izMQSix3dMHmDfg4bcRjxamFXFsb4Ku28neNWHdtwE6LtR3eq69Jqr1CvEsAKCWkQEeEEomcoK",
              "proofs": [
                "3D2Ngr7H6MQRs1izMQSix3dMHmDfg4bcRjxamFXFsb4Ku28neNWHdtwE6LtR3eq69Jqr1CvEsAKCWkQEeEEomcoK"
              ]
            },
            "order1": {
              "version": 3,
              "id": "FNvEGPgUqEWnrnpxevZQnaZS3DUTBGE2wa6L75xCw7mo",
              "sender": "3PDxxx7eSeYLgzTAtuAV7gUCtHeeXeU85fP",
              "senderPublicKey": "3WEkbavP3Sw4y5tsgxbZvKkWh87BdB3CPVVxhcRUDBsJ",
              "matcherPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
                "assetPair": {
                "amountAsset": null,
                "priceAsset": "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
              },
              "orderType": "buy",
              "amount": 100000000,
              "price": 1134500,
              "timestamp": 1591356752271,
              "expiration": 1593862352271,
              "matcherFee": 300000,
              "matcherFeeAssetId": null,
              "signature": "2gvqaYy2BFbK4BJZS8taRJnhgfQ1z2CytF2RqjcyEfzFiu9tkTjN5q4UyFXpPqS3E6eD2WQBUaYCTYDKv98iW1sy",
              "proofs": [
                "2gvqaYy2BFbK4BJZS8taRJnhgfQ1z2CytF2RqjcyEfzFiu9tkTjN5q4UyFXpPqS3E6eD2WQBUaYCTYDKv98iW1sy"
              ]
            },
            "buyMatcherFee": 300000,
            "timestamp": 1591356752456,
            "height": 2093333
          }
          
          Поле Описание
          amount Количество amount-ассета. Целое число, выраженное в минимальных неделимых единицах («копейках») amount-ассета
          price Стоимость 1 amount-ассета, выраженная в price-ассете, умноженная на коэффициент:
          • 108 для транзакции обмена версии 3;
          • 108 + priceAssetDecimals – amountAssetDecimals для транзакции обмена версии 2 или 1, где amountAssetDecimals, priceAssetDecimals — количество знаков после запятой (параметр токена)
          buyMatcherFee Комиссия матчера за выполнение ордера на покупку. ID токена комиссии указан в ордере на покупку
          sellMatcherFee Комиссия матчера за выполнение ордера на продажу. ID токена комиссии указан в ордере на продажу
          order1, order2 Ордер на покупку и ордер на продажу. См. раздел Oрдер

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

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

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

          # Структура Ride

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

          Массовый перевод
          Ордер
          Массовый перевод
          Ордер