﻿---
title: "Срок, проскальзывание и calldata свопа: что проверить перед подписью"
description: "Узнайте, как декодировать вызов DEX-свопа и перед подписью проверить роутер, функцию, ограничения суммы, маршрут, получателя и срок."
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Срок, проскальзывание и calldata свопа: что проверить перед подписью

> Только в образовательных целях; не является инвестиционным советом или рекомендацией. Инвестиции могут привести к убыткам.

<a id="answer"></a>

## Краткий ответ

Перед подписью DEX-свопа проверьте сеть, целевой контракт, декодированную функцию, адреса токенов, ограничение входа или выхода, маршрут, получателя и срок исполнения. Процент «проскальзывания» в интерфейсе сам по себе не является ончейн-инструкцией. Обычно по нему рассчитывают ограничение `amountOutMin` или `amountOutMinimum` для свопа exact-input либо `amountInMax` или `amountInMaximum` для exact-output.

Срок исполнения — это временное ограничение, а не гарантия цены. Если роутер проверяет срок и транзакция исполняется после него, вызов должен завершиться откатом. До срока она всё ещё может исполниться по любой цене, разрешённой ограничением суммы. Дальний срок дольше сохраняет разрешение пригодным к использованию; слишком близкий повышает вероятность истечения до включения в блок.

Calldata не является самоописываемой. Декодируйте её по верифицированному ABI именно того контракта в выбранной сети, включая вложенные multicall и команды Universal Router. Если кошелёк не показывает надёжно декодированные поля, не определяйте их смысл только по позициям байтов или базе названий функций.

<a id="mechanism"></a>

## Как это работает

### Декодирование фактического вызова

Согласно 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)` и перегрузку без срока. Поэтому нельзя считать, что срок есть в каждом свопе или всегда расположен в одних и тех же вложенных параметрах.

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

<a id="example"></a>

## Подробный пример

Котировка обещает `10,000 USDC` для свопа exact-input, а пользователь выбирает проскальзывание `1%`. Если не учитывать уже включённые в котировку комиссии, ожидаемый минимум равен `9,900 USDC`. У USDC `6 decimals`, поэтому исходное целое значение ограничения — `9900000000`.

Однако декодированный вызов содержит `amountOutMinimum = 9000000000`, то есть `9,000 USDC`. Это допускает результат на `10%` ниже котировки, а не на `1%`. Получатель также является незнакомым адресом, а срок наступит лишь через много часов. Любого из этих расхождений достаточно, чтобы отклонить запрос и создать его заново через доверенный интерфейс. Затем смоделируйте точно такую же неподписанную транзакцию на недавнем состоянии и ещё раз проверьте декодированную нагрузку перед подписью.

<a id="risks"></a>

## Контрольный список и риски

- Сверьте выбранную сеть и адрес роутера или прокси с официальным реестром развёртываний протокола.
- Декодируйте по ABI верифицированного контракта; раскройте вложенные вызовы и команды роутера, а не только внешнюю функцию.
- Сверьте адреса токенов, направление, decimals, фиксированную сумму, защитное ограничение, маршрут, уровни комиссий, получателя и нативный `value`.
- Преобразуйте срок в абсолютное время и решите, намеренно ли оставлено такое окно. Отсутствие срока считайте проектным решением, требующим отдельной проверки.
- Смоделируйте точную транзакцию от адреса подписанта на недавнем состоянии. Успех подтверждает лишь это состояние, но не гарантирует включение или итоговое исполнение.
- Отдельно проверяйте одобрения и разрешения Permit2. Хорошие ограничения свопа не делают безопасным безлимитное или вредоносное разрешение на токены.
- Узкие пределы могут вызвать откат при обычном движении цены; широкие повышают риск цены исполнения и сэндвич-атаки. Откатившаяся ончейн-транзакция всё равно может расходовать gas.

<a id="misconceptions"></a>

## Распространённые заблуждения

### Миф: подписывается показанный процент проскальзывания

Обычно подписываемая нагрузка содержит рассчитанные из настройки ограничения сумм. Проверяйте фактические целые значения и decimals токена: корректная надпись интерфейса не доказывает ту же допустимую величину в calldata.

### Миф: каждый своп использует `amountOutMin` и `deadline`

Названия и расположение зависят от роутера и функции. Свопы exact-output защищают вход, а некоторые точки входа опускают срок или помещают его во внешний вызов.

### Миф: срок предотвращает плохую цену

Он лишь ограничивает время исполнения, если вызываемый код действительно его применяет. Ценовую защиту даёт ограничение суммы, которое всё равно разрешает любое исполнение в своих пределах.

### Миф: достаточно декодировать внешнюю функцию

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

<a id="related"></a>

## Связанные темы

- [Декодирование calldata в кошельке](/ru/crypto/calldata-decoding-wallet/)
- [Проверка проскальзывания и маршрута DEX](/ru/crypto/dex-slippage-route-checklist/)
- [Сэндвич-атака](/ru/crypto/sandwich-attack/)
- [Проскальзывание в торговле криптоактивами](/ru/crypto/slippage-crypto/)
- [Симуляция транзакции](/ru/crypto/transaction-simulation/)

<a id="sources"></a>

## Источники

- [Contract ABI Specification](https://docs.soliditylang.org/en/latest/abi-spec.html) - Solidity Documentation (дата обращения: 2026-08-21)
- [IUniswapV2Router01.sol](https://github.com/Uniswap/v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router01.sol) - Uniswap (дата обращения: 2026-08-21)
- [ISwapRouter.sol](https://github.com/Uniswap/v3-periphery/blob/main/contracts/interfaces/ISwapRouter.sol) - Uniswap (дата обращения: 2026-08-21)
- [Universal Router Commands](https://developers.uniswap.org/docs/protocols/universal-router/concepts/commands) - Uniswap (дата обращения: 2026-08-21)

Source: https://wiki.fcontext.com/ru/crypto/swap-deadline-slippage-calldata/index.mdx
