-
Notifications
You must be signed in to change notification settings - Fork 191
Description
Описание PR (Тело):
Markdown
🚀 Feature: Реализация публичного роутера для Multi-Hop Swaps (Задача #540)
Этот PR вводит новый контракт ZoraSwapRouter.sol, который позволяет внешним пользователям выполнять многошаговые обмены (multi-hop swaps) токенов через пулы Uniswap V4.
💡 Проблема
Ранее логика многошаговой маршрутизации существовала только внутри контрактов Zora (в UniV4SwapToCurrency.sol) и использовалась для внутренних нужд (распределение комиссий). Не было публичной точки входа для выполнения произвольных свопов A → B → C.
✨ Решение
Мы добавляем ZoraSwapRouter.sol, который является публичным контрактом-оберткой. Он предоставляет функцию tradeCoinMultiHop, использующую существующую библиотеку UniV4SwapToCurrency.sol для исполнения маршрута, предоставленного пользователем (или SDK).
🛠️ Изменения в коде
-
Создан новый контракт
ZoraSwapRouter.sol:- Импортирует:
UniV4SwapToCurrency.solиPoolKey.sol. - Добавлена функция:
tradeCoinMultiHop(...), которая принимает массивPathKey[], количествоamountInиamountOutMinimumдля защиты от проскальзывания.
- Импортирует:
-
Функция
tradeCoinMultiHopвыполняет:- Проверку и перевод
tokenInот пользователя (предполагает, что SDK корректно установилapproveилиpermit). - Вызов
UniV4SwapToCurrency.swapToPathс предоставленным маршрутомPathKey[]. - Проверку проскальзывания.
- Перевод конечного токена
tokenOutполучателю.
- Проверку и перевод
⏭️ Следующие шаги (За пределами этого PR)
Для полного решения задачи #540, после слияния этого PR, необходимо обновить SDK:
- Реализовать модуль Pathfinding в Zora SDK для вычисления оптимального массива
PathKey[]. - Обновить функцию
tradeCoinв SDK, чтобы она использовала новый роутер и логику Pathfinding. - Устранить проблему Only the first ERC20 to ERC20 swap works with tradeCoin #532 (сбой повторного ERC20-свопа) в логике SDK, которая управляет
approve/permitпри взаимодействии сAutoSwapper.sol.
Затронутые файлы:
packages/coins/src/ZoraSwapRouter.sol(новый)packages/coins/src/interfaces/ISwapRouter.sol(возможное обновление для включения нового интерфейса