Только в образовательных целях; не является инвестиционным советом или рекомендацией. Инвестиции могут привести к убыткам.
Краткий ответ
Перед подписью DEX-свопа проверьте сеть, целевой контракт, декодированную функцию, адреса токенов, ограничение входа или выхода, маршрут, получателя и срок исполнения. Процент «проскальзывания» в интерфейсе сам по себе не является ончейн-инструкцией. Обычно по нему рассчитывают ограничение amountOutMin или amountOutMinimum для свопа exact-input либо amountInMax или amountInMaximum для exact-output.
Срок исполнения — это временное ограничение, а не гарантия цены. Если роутер проверяет срок и транзакция исполняется после него, вызов должен завершиться откатом. До срока она всё ещё может исполниться по любой цене, разрешённой ограничением суммы. Дальний срок дольше сохраняет разрешение пригодным к использованию; слишком близкий повышает вероятность истечения до включения в блок.
Calldata не является самоописываемой. Декодируйте её по верифицированному ABI именно того контракта в выбранной сети, включая вложенные multicall и команды Universal Router. Если кошелёк не показывает надёжно декодированные поля, не определяйте их смысл только по позициям байтов или базе названий функций.
Как это работает
Декодирование фактического вызова
Согласно ABI Solidity, первые 4 bytes calldata — селектор функции, а кодированные аргументы начинаются с пятого байта. Селекторы могут совпадать или иметь ошибочную подпись, поэтому сверяйте их с ABI верифицированного целевого контракта. Прокси, агрегатор или роутер может обернуть своп в multicall, execute или другую функцию; декодируйте каждую вложенную нагрузку, способную перевести токены или изменить конечного получателя.
В свопе exact-input вход фиксирован, а защитное поле задаёт минимально допустимый выход. В exact-output желаемый выход фиксирован, а защитное поле ограничивает вход. Нулевой или неожиданно широкий предел может устранить значимую ценовую защиту. Число десятичных знаков токена важно: перед сравнением исходных целых сумм сопоставьте каждому адресу правильные decimals и символ.
Проверка маршрута, получателя и value
Убедитесь, что маршрут начинается с расходуемого токена и заканчивается ожидаемым. Проверьте промежуточные токены, комиссии пулов и команды, которые оборачивают, разворачивают, собирают или переводят остатки. Получателем должен быть нужный кошелёк или контракт с понятным поведением. Проверьте и нативный value транзакции: он может быть отделён от сумм ERC-20, закодированных в calldata.
Поиск срока исполнения
Положение срока зависит от версии роутера. Функции роутеров в стиле Uniswap V2 содержат аргумент deadline, как и структуры исходного Uniswap V3 ISwapRouter. Universal Router предоставляет execute(commands, inputs, deadline) и перегрузку без срока. Поэтому нельзя считать, что срок есть в каждом свопе или всегда расположен в одних и тех же вложенных параметрах.
Обычно срок сравнивается с временной меткой блока, используемой при исполнении. Он не отменяет ожидающую транзакцию, не гарантирует быстрое включение и не защищает от невыгодной цены внутри ограничения суммы. Для отмены отправитель должен применить механизм замены транзакции своей сети и кошелька; после включения исходной транзакции замена не гарантирована.
Подробный пример
Котировка обещает 10,000 USDC для свопа exact-input, а пользователь выбирает проскальзывание 1%. Если не учитывать уже включённые в котировку комиссии, ожидаемый минимум равен 9,900 USDC. У USDC 6 decimals, поэтому исходное целое значение ограничения — 9900000000.
Однако декодированный вызов содержит amountOutMinimum = 9000000000, то есть 9,000 USDC. Это допускает результат на 10% ниже котировки, а не на 1%. Получатель также является незнакомым адресом, а срок наступит лишь через много часов. Любого из этих расхождений достаточно, чтобы отклонить запрос и создать его заново через доверенный интерфейс. Затем смоделируйте точно такую же неподписанную транзакцию на недавнем состоянии и ещё раз проверьте декодированную нагрузку перед подписью.
Контрольный список и риски
- Сверьте выбранную сеть и адрес роутера или прокси с официальным реестром развёртываний протокола.
- Декодируйте по ABI верифицированного контракта; раскройте вложенные вызовы и команды роутера, а не только внешнюю функцию.
- Сверьте адреса токенов, направление, decimals, фиксированную сумму, защитное ограничение, маршрут, уровни комиссий, получателя и нативный
value. - Преобразуйте срок в абсолютное время и решите, намеренно ли оставлено такое окно. Отсутствие срока считайте проектным решением, требующим отдельной проверки.
- Смоделируйте точную транзакцию от адреса подписанта на недавнем состоянии. Успех подтверждает лишь это состояние, но не гарантирует включение или итоговое исполнение.
- Отдельно проверяйте одобрения и разрешения Permit2. Хорошие ограничения свопа не делают безопасным безлимитное или вредоносное разрешение на токены.
- Узкие пределы могут вызвать откат при обычном движении цены; широкие повышают риск цены исполнения и сэндвич-атаки. Откатившаяся ончейн-транзакция всё равно может расходовать gas.
Распространённые заблуждения
Миф: подписывается показанный процент проскальзывания
Обычно подписываемая нагрузка содержит рассчитанные из настройки ограничения сумм. Проверяйте фактические целые значения и decimals токена: корректная надпись интерфейса не доказывает ту же допустимую величину в calldata.
Миф: каждый своп использует amountOutMin и deadline
Названия и расположение зависят от роутера и функции. Свопы exact-output защищают вход, а некоторые точки входа опускают срок или помещают его во внешний вызов.
Миф: срок предотвращает плохую цену
Он лишь ограничивает время исполнения, если вызываемый код действительно его применяет. Ценовую защиту даёт ограничение суммы, которое всё равно разрешает любое исполнение в своих пределах.
Миф: достаточно декодировать внешнюю функцию
Агрегаторы и универсальные роутеры могут содержать несколько вызовов, разрешения на токены, переводы и команды очистки. Важные для безопасности получатель или сумма могут находиться во вложенной нагрузке.
Связанные темы
- Декодирование calldata в кошельке
- Проверка проскальзывания и маршрута DEX
- Сэндвич-атака
- Проскальзывание в торговле криптоактивами
- Симуляция транзакции
Источники
- Contract ABI Specification - Solidity Documentation (дата обращения: 2026-08-21)
- IUniswapV2Router01.sol - Uniswap (дата обращения: 2026-08-21)
- ISwapRouter.sol - Uniswap (дата обращения: 2026-08-21)
- Universal Router Commands - Uniswap (дата обращения: 2026-08-21)