Skip to content

feat: Add ZoraSwapRouter to enable public Multi-Hop Swaps (#540) #542

@rdin777

Description

@rdin777

Описание 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).

🛠️ Изменения в коде

  1. Создан новый контракт ZoraSwapRouter.sol:

    • Импортирует: UniV4SwapToCurrency.sol и PoolKey.sol.
    • Добавлена функция: tradeCoinMultiHop(...), которая принимает массив PathKey[], количество amountIn и amountOutMinimum для защиты от проскальзывания.
  2. Функция tradeCoinMultiHop выполняет:

    • Проверку и перевод tokenIn от пользователя (предполагает, что SDK корректно установил approve или permit).
    • Вызов UniV4SwapToCurrency.swapToPath с предоставленным маршрутом PathKey[].
    • Проверку проскальзывания.
    • Перевод конечного токена tokenOut получателю.

⏭️ Следующие шаги (За пределами этого PR)

Для полного решения задачи #540, после слияния этого PR, необходимо обновить SDK:

  1. Реализовать модуль Pathfinding в Zora SDK для вычисления оптимального массива PathKey[].
  2. Обновить функцию tradeCoin в SDK, чтобы она использовала новый роутер и логику Pathfinding.
  3. Устранить проблему 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 (возможное обновление для включения нового интерфейса

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions