Готово, v20260731k — выбор токена в Zap теперь тот же самый, что на Swap.
Что сделано
• Кнопка токена открывает ту же модалку Select Token: список из твоего кошелька сверху, отсортированный по стоимости, с балансом и суммой в $, иконка, адрес, число пулов. Второй механики не завёл — доработала существующую, она просто узнаёт, что её позвал Zap.
• Поиск по символу и по адресу — родной, из этой же модалки.
• Если токена нет ни в одном пуле Curve (в списке его не будет), запрос уходит роутеру и он появляется в той же выдаче. Проверила на BNB 0xB8c7…dD52: находится, выбирается, маршрут строится — 0x:swap → curve-dex:deposit, 742k gas.
• Под полем — 25 / 50 / 75 / MAX от баланса выбранного токена; на MAX по нативной монете оставляю немного на газ. Строка Balance: кликабельна, это тоже MAX.
• Добавила паузу перед обращением к роутеру: при быстром вводе адреса летело под сорок запросов за секунду, упиралось в лимит и выдача приходила пустой. Теперь один запрос на паузу в наборе.
Нашла кое-что, решай ты. Строка Route loss считается по ценам роутера, и на BNB она показала +4.18% — то есть будто вход дешевле выхода. Замер: 1 BNB по их цене 588.47 $, на выходе 607.96 LP по 1.0084 $ = 613.08 $. Разрыв не в маршруте, а в их ценовом фиде: цена BNB отстаёт от той, по которой реально идёт своп. Показывать пользователю «+4%» — врать про выгоду. Как поступаем:
1. оставить как есть, это редкий случай;
2. при «выгоде» больше процента писать n/a — pricing unreliable вместо цифры.
Мне ближе второе: цифра, которой нельзя верить, хуже прочерка. Но это твоё поле — скажи, и сделаю.
И висит с прошлого раза: где в ряду ставим вкладку — Deposit · Zap · Stake · Deposit & Stake (сейчас так) или сдвинуть.