• API и библиотеки
    API и библиотеки
  • Подключение кошелька WX Network
    Подключение кошелька WX Network
  • CCXT
    CCXT
  • Комиссии
    Комиссии
  • Матчер
    • Протокол WX Network
      Протокол WX Network
    • Комиссия матчера
      Комиссия матчера
    • Установка матчера на Ubuntu из Deb-пакета
      Установка матчера на Ubuntu из Deb-пакета
    • Настройки матчера
      Настройки матчера
    • API Матчера
      • Правила валидации ордера
        Правила валидации ордера
      • Правила валидации ExchangeTransaction
        Правила валидации ExchangeTransaction
      API Матчера
    • WebSocket API Матчера
      • Ошибки и отладка
        Ошибки и отладка
      • Common Streams
        Common Streams
      WebSocket API Матчера
    Матчер
  • API шлюза
    • Токен доступа
      • Получить токен в интерфейсе
        Получить токен в интерфейсе
      • POST /v1/oauth2/token
        POST /v1/oauth2/token
      Токен доступа
    • Внесение средств
      • [Deprecated] GET /v1/deposit/addresses/{currency}
        [Deprecated] GET /v1/deposit/addresses/{currency}
      • GET /v1/deposit/addresses/{currency}/{platform}
        GET /v1/deposit/addresses/{currency}/{platform}
      • GET /v1/deposit/currencies
        GET /v1/deposit/currencies
      • [Deprecated] GET /v1/deposit/currencies/{currency}
        [Deprecated] GET /v1/deposit/currencies/{currency}
      • GET /v1/deposit/currencies/{currency}/{platform}
        GET /v1/deposit/currencies/{currency}/{platform}
      • Terms of Deposit
        Terms of Deposit
      Внесение средств
    • Вывод средств
      • [Deprecated] GET /v1/withdraw/addresses/{currency}/{address}
        [Deprecated] GET /v1/withdraw/addresses/{currency}/{address}
      • GET /v1/withdraw/addresses/{currency}/{address}/{platform}
        GET /v1/withdraw/addresses/{currency}/{address}/{platform}
      • GET /v1/withdraw/currencies
        GET /v1/withdraw/currencies
      • [Deprecated] GET /v1/withdraw/currencies/{currency}
        [Deprecated] GET /v1/withdraw/currencies/{currency}
      • GET /v1/withdraw/currencies/{currency}/{platform}
        GET /v1/withdraw/currencies/{currency}/{platform}
      • Условия вывода
        Условия вывода
      Вывод средств
    • История операций
      История операций
    • Список платформ
      Список платформ
    • Коды ошибок
      Коды ошибок
    API шлюза
  • Получить список сделок (Get Trades)
    Получить список сделок (Get Trades)
  • Годовая процентная ставка стейкинга (API)
    Годовая процентная ставка стейкинга (API)
  • API платежей
    API платежей
  • API авторизации
    API авторизации
  • Протокол WX-токена
    Протокол WX-токена
  • Глоссарий
    Глоссарий
      • English
      • Русский
      On this page
        • Режимы комиссии
        • Методы API матчера
        • Расчет минимальной комиссии для ордера

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

          Комиссия, указанная в ордере (заявке на обмен), должна быть не ниже минимальной величины, установленной матчером.

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

          executedAmount * orderMatcherFee / orderAmount.

          Оставшаяся сумма комиссии за этот ордер будет включена в другие транзакции до полного исполнения ордера.

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

          # Режимы комиссии

          В текущей версии WX Network матчер взимает динамическую (режим dynamic) или процентную (режим percent) комиссию в зависимости от пары ассетов в ордере (торговой пары).

          • Для отдельных пар ассетов установлена индивидуальная процентная комиссия (режим percent). Например:

            • для пары L2MP / ETH — 0.1% от суммы обмена, не менее эквивалента 0.01 WAVES;
            • для промо-пары WAVES / WBTC — 0% от суммы обмена, эквивалент 0.005 WAVES.

            Такая комиссия уплачивается в расходуемом ассете (тип ассета комиссии — spending) или в WX. Например, если пользователь обменивает L2MP на ETH (расходует L2MP), то платит комиссию в L2MP или WX, а если обменивает ETH на L2MP (расходует ETH), то платит в ETH или WX.

            Для некоторых пар комиссия является асимметричной: ее размер зависит от расходуемого ассета.

          • Для пар, в которых один из ассетов — WAVES, WX, USDT, USDT-ERC20, USDT-BEP20, USDC, USDC-ERC20, USDC-BEP20, ETH или WBTC (кроме пар из предыдущего пункта), установлена процентная комиссия (режим percent), которая составляет 0.1% от суммы обмена, не менее эквивалента 0.01 WAVES. Уплачивается в WAVES (тип ассета комиссии — fixedAsset) или в WX.

          • Для остальных пар применяется динамическая комиссия (режим dynamic), которая составляет 0.01 WAVES за ордер независимо от суммы обмена. Уплачивается в WAVES или WX.

          # Методы API матчера

          Получить данные для расчета комиссии можно с помощью следующих методов API Матчера:

          • POST /matcher/orderbook/calculateFee — рассчитывает комиссию для заданных параметров ордера.
          • GET /matcher/settings — предоставляет список торговых пар с процентной комиссией, параметры и курсы ассетов, используемые при расчете комиссии, и другие настройки матчера.
          • GET /matcher/settings/rates — предоставляет отдельно курсы ассетов для расчета комиссии.

          ⚠️ Мы рекомендуем запрашивать настройки хотя бы раз в минуту, чтобы не пропустить изменения процентных пар.

          Пример запроса:

          curl -X 'GET' 'https://matcher.wx.network/matcher/settings' -H 'accept: application/json'
          

          Пример ответа:

          {
             "orderVersions": [1, 2, 3, 4],
             "success": true,
             "rates": {
                "DGbqkzM6Ds5NAF2B3GHYfyZRmWKt7xLYRYcwpMm7D6V4": 725.3637577238987,
                "HZk1mbfuJpmxU1Fs4AX5MWLVYtctsNcg6e2C6VKqK8zk": 0.12088302939218537,
                ...
                "C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS": 0.5997213538068408
             },
             "matcherPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
             "orderFee": {
                "composite": {
                   "default": {
                      "dynamic": {
                         "baseFee": 1000000
                      }
                   },
                   "custom": {
                      "7scqyYoVsNrpWbTAc78eRqNVcYLxMPzZs8EQfX7ruJAg-3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13": {
                         "percent": {
                            "type": "spending",
                            "minFee": 0.1,
                            "minFeeInWaves": 1000000
                         }
                      },
                      ...
                      "GAzAEjApmjMYZKPzri2g2VUXNvTiQGF7KDYZFFsP3AEq-WAVES": {
                         "percent": {
                            "type": "spending",
                            "minFee": 10,
                            "minFeeInWaves": 10000000,
                            "price": {
                               "minFee": 0,
                               "minFeeInWaves": 10000000
                            }
                         }
                      },
                      ...
                   },
                   "verified": {
                      "assets": [
                         "WAVES",
                         "Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on",
                         "G5WWWzzVsWRyzGf32xojbnfp7gXbWrgqJT8RcVWEfLmC",
                         ...
                         "2Fge5HEBRD3XTeg7Xg3FW5yiB9HVJFQtMXiWMQo72Up6"
                      ],
                      "settings": {
                         "percent": {
                            "type": "fixedAsset",
                            "fixedAsset": "WAVES",
                            "minFee": 0.1,
                            "minFeeInWaves": 1000000
                         }
                      }
                   },
                   "discount": {
                      "assetId": "Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on",
                      "value": 0
                   }
                }
             },
             "networkByte": 87,
             "matcherVersion": "2.5.4",
             "status": "SimpleResponse",
             "priceAssets": [
                "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 
                "9LNqjybyCX1oexCub4yY7hdJf6aeP4HeV5LpsjcNHwRR",
                ...
                "AhGJvjtYmRG2pKwXvTh8N6sX1M2wNTpkjxaWKQfzJe7q"
             ]
          }
          

          # Приоритет параметров комиссии

          Для расчета комиссии за ордер могут использоваться параметры из следующих секций, в порядке убывания приоритета:

          1. custom — индивидуальные настройки для отдельных пар ассетов.
          2. verified — настройки для пар, которых нет в секции custom и в которых хотя бы один из ассетов есть в списке verified.assets (примечание: данный список НЕ имеет отношения к токенам, проверенным сообществом).
          3. default — настройки для остальных пар.

          # Параметры режима percent

          • type — тип ассета, используемого для оплаты комиссии. Возможные значения:

            • spending — расходуемый ассет: комиссия за ордер на продажу уплачивается в amountAsset, а за ордер на покупку — в priceAsset;
            • receiving — получаемый ассет;
            • amount — токен суммы amountAsset;
            • price — токен цены priceAsset;
            • fixedAsset — ассет, указанный в поле fixedAsset.

            Примечание: комиссия c любым типом может быть также уплачена в токене WX.

          • fixedAsset — токен комиссии для "type": "fixedAsset".

          • minFee — минимальная комиссия в процентах от суммы ордера: 0.1 означает 0.1%.

          • minFeeInWaves — минимальная комиссия в WAVES. Независимо от суммы ордера комиссия должна быть не менее чем эквивалент minFeeInWaves.

          • amount — минимальная комиссия для ордера на продажу, то есть в случае расходования amountAsset.

          • price — минимальная комиссия для ордера на покупку, то есть в случае расходования priceAsset.

          # Асимметричная комиссия

          Для пары с процентной комиссией может присутствовать только одна из структур amount и price (или ни одна из них). Настройки, вложенные в amount или price, имеют приоритет над настройками minFee и minFeeInWaves на уровне выше.

          Так, в приведенном выше примере для пары PETE-WAVES указана структура price. Это значит, что:

          • для ордеров на покупку в этой паре (расходуется priceAsset — WAVES) применяются настройки из price.minFee и price.minFeeinWaves: комиссия составляет 0% от суммы обмена, не менее эквивалента 0.1 WAVES;
          • для ордеров на продажу в этой паре (расходуется amountAsset — PETE) применяются настройки на уровне выше: комиссия составляет 10% от суммы обмена, не менее эквивалента 0.1 WAVES.

          # Комиссия в токене WX

          Независимо от того, какой режим комиссии и тип токена комиссии установлен для торговой пары, комиссия может быть уплачена в токене WX.

          Секция discount содержит параметры комиссии в токене WX (discountAsset):

          • asset — ID токена WX.
          • value — процент скидки: 0 (в настоящее время скидка не предоставляется).

          # Расчет минимальной комиссии для ордера

          # Константы

          PriceConstantExp = 8
          PriceConstant = 10 ** PriceConstantExp
          

          # Функции

          correctedRate(rate, assetDecimals) = rate * 10 ** (assetDecimals - PriceConstantExp)
          

          # Режим dynamic

          В расчете комиссии участвует параметр baseFee и курс WX (см. ответ метода GET /matcher/settings выше).

          Комиссия в WAVES:

          baseFee + 400000 * scripts_count
          

          scripts_count — это количество смарт-контрактов, задействованных в выполнении ордера.

          Комиссия в WX (discountAsset):

          rate = correctedRate(rates[discountAsset], discountAssetDecimals)
          
          (baseFee + 400000 * scripts_count) * correctedRate * (100 - discount) / 100
          

          # Режим percent

          В расчете комиссии участвуют параметры minFee, minFeeInWaves и курсы ассетов (см. ответ метода GET /matcher/settings выше).

          Для ордера на продажу

          Комиссия в amountAsset:

          order.amount * minFee / 100
          

          Комиссия в WX (discountAsset):

          discountAssetRate = correctedRate(rates[discountAsset], discountAssetDecimals)
          amountAssetRate = correctedRate(rates[amountAsset], amountAssetDecimals)
          
          order.amount * minFee / 100 * (discountAssetRate / amountAssetRate) * (100 - discount) / 100
          

          Для ордера на покупку

          Комиссия в priceAsset:

          order.amount * order.price / PriceConstant * minFee / 100
          

          Комиссия в WX (discountAsset):

          discountAssetRate = correctedRate(rates[discountAsset], discountAssetDecimals)
          priceAssetRate = correctedRate(rates[priceAsset], priceAssetDecimals)
          
          order.amount * order.price / PriceConstant * minFee / 100 * (discountAssetRate / priceAssetRate) * (100 - discount) / 100
          

          Проверка minFeeInWaves

          Комиссия за ордер должна быть не менее, чем эквивалент minFeeInWaves. Чтобы сравнить комиссию, рассчитанную с использованием minFee, и minFeeInWaves, умножьте minFeeInWaves на нормализованный FeeAssetRate. Скидка также применяется к minFeeInWaves при использовании discountAsset для оплаты комиссии.

          # Пример

          В примере используются следующие настройки:

          {
             "percent" : {
                "type" : "spending",
                "minFee" : 0.14,
                "minFeeInWaves" : 300000
             }
          }
          

          Обменяем 0.00032173 BTC по цене 42611.43 XTN за BTC. Считаем, что смарт-контракты не задействованы.

          pair = BTC/XTN

          price = 42611430000

          amount = 32173

          Сумма ордера:

          • в токене цены — 13.709237 XTN

          • в токене суммы — 0.00032173 BTC

          rates[BTC] = 0.000329

          rates[XTN] = 13.9

          rates[discountAsset] = 10.534

          Corrected rates:

          • priceAsset = rates[XTN] * 10 ** (-2) = 0.1390

          • amountAsset = rates[BTC] = 0.000329

          • discountAsset = rates[discountAsset] = 10.534

          minFee = 0.14%

          minFeeInWaves = 300000

          discount = 50%

          priceAssetDecimals = 6

          amountAssetDecimals = 8

          discountAssetDecimals = 8

          minFeeInWaves converted:

          • priceAsset = 41700

          • amountAsset = 98

          • discountAsset = 3160200

          Для ордера на продажу

          Комиссия в amountAsset:

          32173 * 0.14 / 100 = 45 (0.00000045 BTC ~ 0.019 XTN)
          

          Комиссия в discountAsset:

          32173 * 0.14 / 100 * (10.534 / 0.000329) * (100 - 50) / 100 = 721085
          

          Для ордера на покупку:

          Комиссия в priceAsset:

          32173 * 42611430000 / 100000000 * 0.14 / 100 = 19193 (0.019 XTN)
          

          Комиссия в discountAsset:

          32173 * 42611430000 / 100000000 * 0.14 / 100 * (10.534 / 0.139) * (100 - 50) / 100 = 727267
          

          Проверка minFeeInWaves

          Для комиссии в priceAsset:

          300000 * 0.139 = 41700 (0.041700 XTN)
          

          Для комиссии в amountAsset:

          300000 * 0.000329 = 99 (0.00000099 BTC)
          

          Для комиссии в discountAsset:

          300000 * 10.534 * (100 - 50) / 100 = 1580100 (0.015801 discountAsset)
          

          Поскольку комиссия, рассчитанная с использованием minFee, оказалась ниже, чем эквивалент minFeeInWaves, минимальная комиссия для ордера равна эквиваленту minFeeInWaves.

          Протокол WX Network
          Установка матчера на Ubuntu из Deb-пакета
          Протокол WX Network
          Установка матчера на Ubuntu из Deb-пакета