# Правила валидации ордера
Когда матчер получает новый ордер
происходит валидация следующих условий.
# Валидация настроек матчера
Ордер отправлен матчеру с правильным публичным ключом - параметр
matcherPublicKey
.Адрес отправителя ордера не находится в черном списке матчера - параметр
blacklistedAddresses
.Токен не находится в черном списке матчера.
Токен комиссии поддерживается матчером.
Заданная комиссия ордера не менее минимальной комиссии матчера. В данный момент комиссия должна быть не менее 0.003 WAVES или другого токена учитывая текущее значение asset rates.
Проверка суммы и цены:
0 <
amount
< MaxAmount = 10^180 <
price
0 <
corrected spent amount
< Long.MaxValueгде
corrected spent amount
:Если это
buy
ордер: = truncate (amount
*price
/PriceConstant
)в другом случае: =
amount
0 <
corrected received amount
< Long.MaxValueгде
corrected received amount
:Если это
buy
ордер: =amount
в другом случае: truncate(
amount
*price
/PriceConstant
)0 <
fee
< Long.MaxValue
PriceConstant
= 10^8
Проверка времени:
0 < timestamp
Срок ордера может истечь через (1 минуту; 30 дней] в зависимости от времени матчера. Значение
matcher time
синхронизируется через NTP.matcher time
+ 60 * 1000 (60000 ms or 1 minute) <expiration
30 * 24 * 60 * 60 * 1000 (2592000000 ms or 30 days) <= (
expiration
-matcher time
)
Проверка tick size:
- Ордер имеет тип
SELL
или его цена не должна быть меньше tick size(минимальное ценовое движение пары активов) после коррекции. При наличии тик сайзаBUY
ордер помещается в уровень c ценой, которая равна ближайшему меньшему кратному tick size числу.
Проверка по рынку: (по умолчанию выключена):
Цена
BUY
ордера не превышает кратно лучшую цену покупки, ценаSELL
ордера не кратно ниже лучшей цены продажи.Комиссия ордера должна соответствовать рынку, только для процентного режима работы матчера
Комиссия должна быть в пределах отклонений, например, комиссия ордера выше чем заданный процент комиссии, которую заплатит клиент за матчинг с лучшим контр-ордером. Применимо только для процентного режима работы матчера
Для
BUY
ордеров: fee >= fs * (1 - fd) * best ask * amountДля
SELL
ордеров: fee >= fs * (1 - fd) * best bid * amountгде:
fs = комиссия в процентах, заданных в настройках (order-fee.percent.min-fee)/100
fd = максимальное отклонение комиссии / 100
best bid = максимальная цена покупки
best ask = минимальная цена покупки
# Валидация блокчейна
Версия ордера поддерживается блокчейном (версия 2 требует активации фичи 10 (SmartAccountTrading), версия 3 требует активации фичи 12 (OrderV3)). Матчер WX Network в Mainnet и Testnet поддерживает ордеры версии 1, 2 и 3.
Примечание: Матчер WX Network работает в режиме динамической комиссии.
В динамическом режиме, заданная комиссия должна быть не менее минимальной. Для продавцов и покупателей комиссия может быть разной. В случае оплаты комиссии не в токене WAVES, который поддерживается матчером, комиссия должна быть не меньше минимальной в этом токене. Сумма комиссии рассчитывается динамически на основе значения
asset rate
(GET /matcher/settings/rates API метод) по следующей формуле:baseFee
+0.004
* (количество задействованных скриптов, кроме скриптов аккаунтов) *asset rate
округленное до минимального количества знаков после точки у токена. Например, если токен комиссии имеет значение decimals = 2 и комиссия составляет 0.01399, значит матчер возьмет комиссию 0.02 в заданном токене.Для каждого ордера на матчере вычисляется число insignificantDecimals = (price asset decimals - amount asset decimals).max(0). Цена ордера должна быть кратна 10^insignificantDecimals. Т.е. последние insignificantDecimals цифр цены должны быть нулями.
Amount и price ордера должны соответствовать требованиям матчера на максимальное/минимальное значение и быть кратны stepAmount/stepPrice соответственно (при наличии таких ограничений на паре). Ограничения могут быть получены по эндпоинту GET /matcher/orderbook/{amountAsset}/{priceAsset}/info, поле restrictions.
Скрипт аккаунта владельца ордера (при наличии) должен позволять ставить ордер.
Скрипты
amount
,price
иmatcher fee
токенов (при наличии) должны разрешать их использование в ордере.
# Валидация баланса
amount
ордера (включая комиссию ордера) должен быть не больше чемTradable Balance
, гдеTradable Balance
= (ваш баланс продаваемого токена и токена комиссии в блокчейне) - (all the spendings
+the reserved amount
)где:
all the spendings
подразумевает все исходящие лизинги и все траты в UTX, включая комиссии. Например, если вы переводите 10 WAVES с вашего адреса на другой и платите комиссию 1 XTN, тогда ваши траты составляют 10 WAVES + 1 XTN.the reserved amount
подразумевает сумму токенов зарезервированных в незавершенных ордерах, включая комиссию. Например, если вы продаете 5 WAVES за 4 XTN в паре WAVES/XTN с комиссией 0.001 BTC fee, тогда ваш зарезервированный баланс составляет 20 WAVES + 0.001 BTC.В данном случае, общая сумма
all the spendings
+the reserved amount
составляет 30 WAVES, 1 XTN и 0.001 BTC.