Нагрузка на кошелёк при обмене через агрегатор измеряется не числом пулов, а числом контрактов-получателей разрешения. Маршрут через три пула и маршрут через один требуют одного разрешения на входной токен: его получает маршрутизатор, а не пулы. Разрешение переживает обмен и остаётся висеть на адресе. Снимается оно отдельной операцией — обнулением суммы для пары «токен и получатель» либо пакетным отзывом.
Как пользоваться агрегатором маршрутов обмена и оценить нагрузку на кошелёк
Оценка начинается с одного вопроса. Кому агрегатор просит выдать разрешение? Ответ почти всегда один адрес — маршрутизатор, который исполняет весь маршрут одной транзакцией.
Стандарт описывает это прямо. Функция approve(address _spender, uint256 _value) позволяет указанному адресу списывать средства многократно в пределах суммы, а повторный вызов перезаписывает прежний лимит новым — такова формулировка спецификации токенов ERC-20 от 19 ноября 2015 года. Остаток лимита читается функцией allowance. Привязки к конкретной сделке у лимита нет.
Отсюда главный вывод о нагрузке. Пулы разрешений не получают: средства к ним приносит маршрутизатор, уже списав их с вашего адреса. Пять пулов в маршруте не означают пять разрешений. Они означают одно разрешение и один вызов.
Сколько разрешений выдаётся на самом деле
Число зависит от трёх вещей: сколько разных входных токенов участвует в маршруте, сколько разных маршрутизаторов задействовано и каким из трёх способов выдаётся само разрешение. Третий пункт меняет картину сильнее остальных.
| Способ выдачи | Кому выдаётся | Операций при маршруте через три пула | Что остаётся после обмена |
|---|---|---|---|
| Разрешение по стандарту ERC-20 | Адресу маршрутизатора на входной токен | Две транзакции: выдача лимита и сам обмен | Неизрасходованный остаток лимита, бессрочно |
| Разрешение подписью по стандарту ERC-2612 | Тому же маршрутизатору, но через подпись со сроком | Одна транзакция: подпись передаётся внутри вызова обмена | Ничего, если срок подписи истёк и сумма израсходована |
| Разрешение через контракт-посредник | Сначала посреднику на токен, затем получателям внутри посредника | Две транзакции в первый раз, одна в последующие | Разрешение посреднику на токен и внутренние лимиты со сроком |
| Маршрут с двумя входными токенами | Маршрутизатору по каждому входному токену отдельно | Три транзакции: два лимита и обмен | Два неизрасходованных остатка вместо одного |
| Обмен нативной монеты сети | Никому: нативная монета передаётся вместе с вызовом | Одна транзакция, разрешение не требуется | Ничего не остаётся |
Последняя строка объясняет распространённое недоумение. Обмен нативной монеты проходит без разрешения, а обмен токена — с разрешением, хотя в интерфейсе действия выглядят одинаково. Причина в том, что нативная монета передаётся самим вызовом, а токен требует права на списание. Нестандартное поведение токена при переводе меняет и число операций, поэтому до выдачи лимита полезно проверить пул перед покупкой нового токена.
Что остаётся на адресе после обмена
Остаётся лимит. Если он выдавался «с запасом» или без ограничения, то после обмена на адресе сохраняется право списания на всю оставшуюся сумму, и ни одна из сторон сделки об этом остатке больше не напоминает. Срока у разрешения по базовому стандарту нет: оно действует, пока его не перезапишут нулём.
Подписной способ устроен иначе. Стандарт ERC-2612 от 13 апреля 2020 года ввёл функцию permit(owner, spender, value, deadline, v, r, s) именно для того, чтобы убрать вторую транзакцию и снять необходимость держать нативную монету на оплату включения, — так сформулирована мотивировка в тексте спецификации. У подписи есть срок. После его истечения она недействительна.
Третий слой — контракт-посредник для разрешений. В его интерфейсе лимит описан структурой с четырьмя полями: адрес токена, сумма в 160 битах, срок в 48 битах и счётчик в 48 битах. Сумма, равная максимуму типа, означает неограниченное разрешение. Срок прямо назван моментом, после которого лимиты получателя становятся недействительными.

Как снять оставшиеся разрешения
Способов три, и они не взаимозаменяемы. Первый: вызвать выдачу разрешения с нулевой суммой для той же пары «токен и получатель». Повторный вызов перезаписывает лимит, поэтому ноль его стирает. Одна транзакция на одну пару.
Второй способ работает в контракте-посреднике. Там предусмотрен пакетный отзыв: функция lockdown принимает список пар из адреса токена и адреса получателя и отзывает их разрешения одним вызовом. Рядом с ней — функция обнуления счётчика для пары, которая делает недействительными ранее выданные подписи. Описание структур приведено в исходном интерфейсе контракта разрешений Permit2.
Третий способ — не выдавать лишнего. Сумма разрешения задаётся вручную, и ограничение её размером конкретной сделки снимает необходимость в последующем отзыве, потому что лимит исчерпывается тем же обменом, под который выдавался. Платить за это приходится новым разрешением перед каждым обменом. Выбор между двумя подходами сводится к тому, что дешевле: лишняя транзакция сейчас или висящий лимит потом.
Условный подсчёт операций. Маршрут через три пула, один входной токен, стандартный способ: две транзакции — выдача лимита и обмен. Число пулов на это не влияет.
За год работы с четырьмя токенами и тремя разными маршрутизаторами накапливается до 12 пар «токен и получатель». Отзыв по одной паре — 12 транзакций.
Через контракт-посредник те же 12 пар отзываются пакетно: один вызов со списком. Экономия по числу операций — 11 из 12.
Плата за включение каждой транзакции зависит от сети и момента. Стоимость отзыва сопоставима со стоимостью выдачи, потому что это та же запись в хранилище.
Числа условны. Сверяйте текущую плату за включение и фактический список разрешений на дату операции.
Чек-лист перед обменом
- Посмотреть, какому адресу выдаётся разрешение, и сверить его с адресом маршрутизатора из документации
- Проверить, предлагается ли подписной способ: он убирает отдельную транзакцию
- Ограничить сумму разрешения размером сделки, если интерфейс это позволяет
- Выяснить, участвует ли контракт-посредник: тогда слоёв разрешения два, а не один
- Запомнить или записать пары «токен и получатель» для последующего отзыва
- После обмена проверить остаток лимита функцией чтения разрешения
- Снять ненужные лимиты: по одному обнулением или пакетно, если посредник поддерживает
Четвёртый пункт пропускают чаще прочих. Двухслойная схема выглядит удобнее: одно разрешение посреднику, дальше подписи со сроком. Но первое разрешение при этом обычно неограниченное и бессрочное, и его тоже надо держать в списке. Как складываются сами издержки обмена, мы разбирали в материале о том, как пользоваться агрегатором маршрутов обмена и понять структуру комиссий. Те же пары разрешений нужны и при фиксации результата: мы показывали, как перевести доход из протокола в стейблкоин.
Где схема подводит
Вторая ловушка — обновление маршрутизатора. Новая версия разворачивается по новому адресу, и прежнее разрешение остаётся у старого контракта, который больше не используется. Список таких забытых пар растёт незаметно. Перед работой с новым для вас протоколом разумно проверить, кто управляет параметрами протокола, и посмотреть, как у него устроена смена версий.
Итог
Нагрузка на кошелёк определяется числом получателей разрешения, а не длиной маршрута. Маршрут через пять пулов исполняется одним вызовом маршрутизатора и требует одного разрешения на входной токен. Подписной способ убирает отдельную транзакцию и добавляет срок, контракт-посредник переносит лимиты внутрь себя и даёт пакетный отзыв, но оставляет снаружи одно бессрочное разрешение. После обмена на адресе остаётся неизрасходованный остаток лимита, и снимать его нужно сознательно: обнулением по паре либо пакетно.
Материалы по теме:
- Как пользоваться агрегатором маршрутов обмена и понять структуру комиссий — из чего складывается итоговый курс
- Как проверить, кто управляет параметрами протокола — смена версий и адресов контрактов
- Как проверить пул перед покупкой нового токена — что смотреть в звене маршрута
- Как перевести доход из протокола в стейблкоин — ещё один обмен с теми же разрешениями
Частые вопросы
Сколько разрешений нужно при маршруте через несколько пулов?
Одно на входной токен. Разрешение выдаётся адресу маршрутизатора, который исполняет весь маршрут одной транзакцией, а пулы получают средства уже от него. Три пула, пять пулов и один пул требуют одинакового числа разрешений. Больше одного понадобится, только если в маршруте несколько разных входных токенов.
Остаётся ли разрешение после обмена?
Да, остаётся неизрасходованный остаток лимита. По базовому стандарту у разрешения нет срока: оно действует, пока его не перезапишут. Если сумма выдавалась с запасом или без ограничения, право списания сохраняется в полном объёме. Подписной способ в этом смысле чище — у подписи есть срок действия.
Как снять выданное разрешение?
Выдать разрешение той же паре «токен и получатель» с нулевой суммой: повторный вызов перезаписывает лимит. Это одна транзакция на одну пару. Если лимиты управляются контрактом-посредником, доступен пакетный отзыв: функция принимает список пар и отзывает их одним вызовом, а соседняя функция обнуляет счётчик подписей.
Чем двухслойная схема разрешений отличается от обычной?
В ней два уровня. Снаружи — одно разрешение контракту-посреднику на токен, обычно неограниченное и бессрочное. Внутри — лимиты для конкретных получателей с суммой, сроком и счётчиком. Последующие обмены обходятся без новых транзакций разрешения, но внешний бессрочный лимит тоже надо держать в списке на отзыв.
Стоит ли выдавать разрешение ровно на сумму сделки?
Это снижает риск, но добавляет транзакцию перед каждым обменом. Выбор зависит от частоты операций и платы за включение в сети. Компромисс — ограниченная сумма с запасом на несколько сделок плюс периодическая проверка остатка лимита функцией чтения разрешения. Бессрочное неограниченное разрешение — вариант с наибольшим риском.
Вердикт
Из редакционной практики: читатели переоценивают длину маршрута и недооценивают список забытых разрешений. Пулов в маршруте может быть пять, а разрешение всё равно одно — зато оно останется на адресе после обмена и переживёт обновление маршрутизатора. Разбирать нагрузку на кошелёк стоит по двум числам: сколько пар «токен и получатель» вы создали и сколько из них ещё действует. Редакция не советует конкретные агрегаторы и не называет безопасных адресов: сверяйте адрес получателя по документации на дату операции.
Разборы механик DeFi и правовые изменения разбираем в Telegram-канале Cryptium.
Обсуждение
Добавить комментарий