Чтобы проверить исполнение лимитного ордера на DEX, сравните не только цену из заявки, но и фактически списанное количество токена, полученную сумму, комиссии и транзакцию settlement. Limit price задаёт худшее допустимое условие для ордера, а не обещает исполнить всю сумму именно по этому курсу. Заявка может заполниться частично, исполниться по более выгодной цене или остаться открытой.
Это руководство посвящено проверке уже отправленного ордера. Как устроены хранение и исполнение таких заявок в целом, объясняет отдельная статья об AMM и order book; здесь задача – проверить конкретный результат и понять, откуда взялась итоговая цена.
Сначала установите, где и как исполнялся ордер
Запишите сеть, адрес контракта токена, DEX или агрегатора, направление обмена, исходный размер заявки и её limit price. Одинаковые тикеры могут относиться к разным контрактам, обёрнутым активам и сетям. Перед сверкой откройте транзакцию или страницу ордера по официальному адресу приложения, а не по рекламной ссылке из сообщения.
У лимитных заявок нет единой схемы. В одной системе ордер подписывается вне сети, а затем settlement-контракт исполняет его в блокчейне. В другой пользователь взаимодействует с ончейн-контрактом напрямую. У агрегатора исполнение может координировать набор solver-ов. Поэтому наличие подписанного ордера ещё не доказывает, что обмен произошёл: нужен финальный статус в источнике данных и подтверждённая транзакция, если механизм использует ончейн settlement.
CoW Protocol, например, показывает limit price и отдельную оценку того, по какой цене ордер сможет исполниться с учётом сетевых расходов. Документация предупреждает, что исполнение может произойти не сразу при достижении указанного лимита, а по более выгодной для заявки цене, достаточной для покрытия расходов. Это поведение конкретного протокола, его нельзя автоматически переносить на любую DEX.
Проверьте статус и объём заполнения
Сверьте статус заявки: открыта ли она, исполнена, отменена, истекла или заполнена частично. Сопоставьте исходный объём с суммой всех fill-событий. Для частично исполняемого ордера остаток может оставаться действующим; повторное исполнение позже создаст ещё одну сделку или settlement. Не складывайте заявленный размер с исполненным как будто это независимые суммы.
Если интерфейс показывает «filled», найдите фактические события перевода токенов и сведения об исполнении. В EVM-обозревателе откройте транзакцию, убедитесь, что она успешна, и проверьте токеновые события Transfer для правильных адресов и контрактов. Сам статус интерфейса может запаздывать или кэшироваться, а успешная транзакция не обязательно означает, что весь исходный ордер заполнен: в ней могут исполняться несколько заявок или только один частичный fill.
У ордера на продажу базового токена полезно выписать фактическое количество, списанное с пользователя, и количество полученного встречного актива. Для ордера на покупку направление поменяется. Проверяйте decimals токенов по контракту: данные обозревателя часто показывают целое значение в минимальных единицах, тогда как интерфейс отображает десятичную сумму. Ошибка масштаба в 106 или 1018 делает ручной расчёт бессмысленным.
Рассчитайте фактический курс и сравните с лимитом
Для продажи токена A за токен B рассчитайте эффективный курс как количество B, реально зачисленное пользователю, делённое на количество A, реально списанное у него. Укажите единицы, например «B за 1 A». Для покупки вычислите стоимость A на одну единицу B или обратное отношение, но не меняйте направление цены посреди сравнения. Затем сопоставьте результат с лимитом, учитывая, что buy и sell limit трактуются в противоположных направлениях.
Сравнивать нужно один и тот же способ учёта комиссии. Комиссия может удерживаться отдельно, входить в расчёт полученной суммы или компенсироваться за счёт лучшей цены; сетевой gas обычно оплачивается отдельно в нативном активе. Сведите в таблицу исходную сумму, фактически списанный объём, зачисленный объём, токен комиссии, gas и рассчитанный курс. Так видно, сравнивается ли цена сделки с лимитом до комиссии или результат «на руки» после неё.
Лимит – это минимально приемлемый курс продажи или максимально приемлемая стоимость покупки в терминах конкретного протокола. Если fill прошёл по лучшей цене, отклонение от лимита может быть в пользу пользователя. Если интерфейс показывает курс, нарушающий подписанное условие, не делайте вывод только по округлённым цифрам карточки: проверьте направление пары, decimals, комиссию, сумму частичного fill и само условие в ордере или settlement-параметрах.
Свяжите исполнение с транзакцией
- Откройте ордер из истории приложения и найдите идентификатор fill, settlement или транзакции.
- Проверьте сеть и адрес контракта: транзакция в другой сети или перевод похожего токена не подтверждает исполнение этой заявки.
- Убедитесь в успешном результате транзакции и найдите входящие и исходящие token Transfer-события пользователя, settlement-контракта и промежуточного маршрута.
- Сверьте фактические суммы с интерфейсом. Если есть несколько fill-событий, рассчитайте как цену каждого, так и суммарную средневзвешенную цену.
- Отдельно учтите protocol fee и gas. Не вычитайте gas из полученного токена, если он был оплачен другим активом.
Для нескольких исполнений средняя цена продажи вычисляется как сумма реально полученных встречных токенов, делённая на сумму списанного базового токена. Это не среднее арифметическое цен отдельных fills, если размеры сделок различаются. Для покупки используйте согласованный знаменатель в соответствии с направлением сделки. Храните ссылки на транзакции и снимок заявки – это помогает воспроизвести расчёт при споре с интерфейсом или при самостоятельной бухгалтерской сверке.
Если транзакция settlement отсутствует, выясните, не была ли заявка отменена, истекла или всё ещё ожидает подходящей цены. Подписанная off-chain заявка может не иметь отдельной транзакции при создании. Отмена такой заявки тоже может иметь гонку: если settlement уже начался, он может быть подтверждён раньше, чем отмена. Сначала проверяйте фактический порядок событий и состояние ордера в контракте или официальном API.
Частичный fill, остаток и расчётный вывод
Частичное исполнение не обязательно означает ошибку. В CoW Swap частичная заполняемость установлена по умолчанию, и ордер может исполняться постепенно. Остаток иногда не закрывается, если его размер слишком мал для экономически разумного settlement с учётом сетевых расходов. В таком случае пользователь видит исполненную часть и оставшийся токен в кошельке.
Не рассчитывайте цену по исходной сумме, если исполнена только часть. Не учитывайте остаток как полученный актив и не смешивайте его с последующими переводами. Проверьте, остаётся ли остаток активным, можно ли отменить его и требует ли отмена ончейн-транзакции. Правила зависят от DEX: где-то отмена off-chain, где-то нужна транзакция и gas.
Для проверки действий через агрегатор полезно также изучить исполнение RFQ-котировки и передачу приватного order flow. Маршрут сделки может объединять несколько источников ликвидности, и итоговую сумму нужно связывать с адресом токена и событиями конкретного settlement, а не только с ценой одного пула до сделки.
Типичные ошибки и безопасность
Частые ошибки – сравнить курс в обратном направлении, забыть decimals, принять котировку до сделки за итоговый fill, сложить частичные объёмы дважды или считать «успешную» запись интерфейса подтверждённой без settlement. Ещё одна ловушка – использовать среднерыночную цену из графика как доказательство нарушения лимита. Ордер мог получить цену лучше своего предельного условия, даже если она отличается от текущей котировки из-за движения рынка.
Никогда не вводите seed-фразу на сайте для «проверки» исполнения. Для просмотра публичных данных достаточно ссылки на ордер, адреса кошелька или TxID. При сомнительном контракте отдельно проверьте адрес settlement-контракта, домен приложения и сеть. Подпись ордера может предоставлять разрешение на будущую передачу токена в пределах указанных параметров, поэтому перед подписанием проверяйте spender и срок действия.
Итог
Проверка DEX limit order сводится к трём данным: состояние заявки, подтверждённые суммы каждого fill и условия лимита с учётом комиссий. Рассчитайте фактический курс в правильном направлении, проверьте остаток и привяжите результат к settlement-транзакции. Это надёжнее, чем судить по одному статусу или текущей цене токена в интерфейсе.



