# Комиссия матчера
Комиссия, указанная в ордере (заявке на обмен), должна быть не ниже минимальной величины, установленной матчером.
Если ордер полностью выполнен одной транзакцией, вся комиссия матчера включается в эту транзакцию. Если ордер частично выполнен какой-либо транзакцией, плата за матчинг включается в эту транзакцию пропорционально выполненной сумме, то есть:
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"
]
}
# Приоритет параметров комиссии
Для расчета комиссии за ордер могут использоваться параметры из следующих секций, в порядке убывания приоритета:
custom
— индивидуальные настройки для отдельных пар ассетов.verified
— настройки для пар, которых нет в секцииcustom
и в которых хотя бы один из ассетов есть в спискеverified.assets
(примечание: данный список НЕ имеет отношения к токенам, проверенным сообществом).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.1390amountAsset
= rates[BTC] = 0.000329discountAsset
= rates[discountAsset] = 10.534
minFee
= 0.14%
minFeeInWaves
= 300000
discount
= 50%
priceAssetDecimals
= 6
amountAssetDecimals
= 8
discountAssetDecimals
= 8
minFeeInWaves
converted:
priceAsset
= 41700amountAsset
= 98discountAsset
= 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
.