Поиск оптимального маршрута с наимешьшим влиянием на цену в сети ethereum?
Я работаю над реализацией интеллектуальной маршрутизации ордеров (SOR) в сетях EVM с использованием CFMM, таких как Uniswap v2 и v3. Цель — найти наиболее прибыльный маршрут между двумя токенами, включая косвенные маршруты через белый список промежуточных токенов.
Например: поиск оптимального маршрута для USDT → WBNB.
Дано:
• У меня есть tokenIn и tokenOut.
• Список пар с разных децентрализованных бирж: tokenIn–indirectToken, indirectToken–tokenOut.
• Данные по каждой паре (резервы, тик, цена и т. д.).
У каждой пары токенов может быть несколько пулов ликвидности разной глубины. Это может привести к ситуациям, когда tokenIn → indirectToken прибыльна, а indirectToken → tokenOut — нет из-за низкой ликвидности.
1. Задача с одним переходом. Начал с простейшего случая: маршрутизация внутри одной пары (например, USDT–WBNB). Научился точно распределять суммы по идентичным парам. (решено)
2. Задача с двумя переходами. Расширена до маршрутов с одним промежуточным токеном, например, USDT → WETH → WBNB. Разбита на две подзадачи: USDT–WETH и WETH–WBNB (с использованием шага 1). (решено)
3. Агрегация нескольких маршрутов и сравнение пар. После решения шага 2 я перешёл к объединению нескольких маршрутов. Столкнулся с проблемами при сравнении доходности пар. Во всех случаях сравнения/сортировки высоколиквидные пары, такие как USDT–WBNB, всегда занимают первое место, даже если они не оптимальны для других маршрутов. (не решено)
Текущая задача: поиск метода сравнения пар с разными токенами и введение приоритета для прямых пар (когда это целесообразно).
Вопросы:
- Как сравнить доходность пар, где один токен одинаков, например, USDT–WETH и USDT–WBTC?
- Как сравнить доходность пар, где оба токена различны, например, CAKE–WETH и USDT–WBTC?
- Какой алгоритм лучше всего подходит для построения графа? (Сейчас я рассматриваю алгоритм Levit.)
- Какой вес следует использовать для узлов/рёбер графа?
- Как сравнить пулы Uniswap v2 и v3 и выбрать лучший пул для включения в маршрут?