UAMM: автоматический маркетмейкер на основе ценового оракула
Дэниел Дживун Им, Александр Кондратский, Винсент Харви, Сюань-Вэй Фу · UBET Sports · v2, 25 августа 2024 (первая версия — 11 августа 2023)
Оригинал: Im, D. J., Kondratskiy, A., Harvey, V., Fu, H.-W. «UAMM: Price-oracle based Automated Market Maker», 2024 — arxiv.org/abs/2308.06375 (PDF).
Оригинал размещён под CC0 1.0 — передан в общественное достояние, ограничений на использование и переработку нет.
Ключевые слова: автоматический маркетмейкер, децентрализованные биржи, непостоянные потери, ценовой оракул, кривая постоянного произведения.
Аннотация
Автоматические маркетмейкеры (AMM) — механизмы ценообразования, используемые децентрализованными биржами (DEX). Традиционные подходы к AMM ограничены тем, что определяют цену исключительно по собственному пулу ликвидности, без учёта внешних рынков и без управления риском поставщиков ликвидности. В этой работе мы предлагаем новый подход, названный UBET AMM (UAMM), который рассчитывает цены с учётом цен внешнего рынка и непостоянных потерь пула ликвидности. Несмотря на опору на внешние цены, наш метод сохраняет желаемые свойства кривой постоянного произведения при вычислении проскальзывания. Ключевой элемент UAMM — определение подходящей величины проскальзывания исходя из желаемого целевого баланса, что побуждает пул ликвидности минимизировать непостоянные потери. Мы показываем, что наш подход устраняет арбитражные возможности, когда внешние рыночные цены эффективны.
1. Введение
Децентрализованная биржа (DEX) — площадка для торговли цифровыми валютами, работающая в блокчейн-сети децентрализованным образом. Популярность DEX значительно выросла благодаря децентрализованной природе, доступности и возможности предоставления ликвидности. Биржа состоит из пулов средств, которые собираются поставщиками ликвидности (LP) и используются для предоставления ликвидности трейдерам. Ключевой компонент DEX — автоматический маркетмейкер (AMM), алгоритмически определяющий цену цифровых валют без централизованных маркетмейкеров. Пользователи торгуют напрямую против пулов средств по цене, задаваемой AMM, вместо опоры на централизованный стакан заявок. При каждой сделке между парой котируемой и базовой валют балансы пула обновляются: количество котируемой валюты уменьшается, а базовой растёт, что корректирует цену каждой цифровой валюты. LP получают пассивный доход от комиссий, порождаемых этими сделками.
AMM используют детерминированные математические формулы для установления связи между количествами цифровых валют в пулах ликвидности и соответствующими ценами. Два наиболее распространённых типа — маркетмейкеры с постоянной функцией, сохраняющие соотношение между парой валют через постоянную функцию от балансов пула [3, 4]. Самые известные из них — Uniswap [2] и Curve [5]. Их формулировка обеспечивает отражение ценой спроса и предложения на цифровые валюты с пропорциональной подстройкой для сохранения постоянной функции пула по мере участия новых трейдеров.
К сожалению, существующие AMM, определяющие цены по балансам пула ликвидности (включая маркетмейкеров с постоянной функцией), страдают серьёзным недостатком. Прежде всего, такие AMM создают арбитражные возможности для трейдеров, оборачивающиеся значительными потерями для LP. Учитывая природу игры с нулевой суммой, всякий раз, когда кто-то извлекает арбитражную прибыль, кто-то другой неизбежно несёт убыток, — и, к сожалению, обычно это LP, поскольку именно они принимают противоположную сторону сделок.
Две основные причины таких арбитражных возможностей — неверное ценообразование и изменения цен. Во-первых, AMM определяют цены исключительно по внутренней рыночной информации, то есть по балансу пула ликвидности, без учёта внешней информации. Следовательно, цена внешнего рынка может отличаться от внутренней, что подвергает LP риску торговать по цене менее выгодной, чем справедливая рыночная. Во-вторых, AMM демонстрируют более медленную и запаздывающую адаптацию к изменениям цен: чтобы AMM скорректировал цены, требуется, чтобы кто-то воспользовался арбитражной возможностью, возникшей из-за изменения цены. Это становится особенно проблематичным, когда рынок не возвращается к устойчивой цене или характеризуется высокой волатильностью.
В этой работе мы предлагаем новый алгоритм UBET AMM (UAMM), который решает названные проблемы, устраняя арбитражные возможности. UAMM рассчитывает цены с учётом как внешних, так и внутренних рыночных цен. Несмотря на опору на внешние цены, метод сохраняет желаемые свойства кривой постоянного произведения при вычислении проскальзывания. Ключевой элемент UAMM — определение подходящей величины проскальзывания исходя из желаемого целевого баланса, что побуждает пул минимизировать непостоянные потери. Поэтому мы раскладываем цену на оценку справедливой цены и проскальзывание, оценивая каждую компоненту отдельно.
Итого, UAMM эффективно управляет рисками LP, позволяя им получать пассивную доходность. В отличие от Uniswap V3 [1], поставщикам ликвидности в UAMM не нужно заботиться об управлении своими непостоянными потерями. Мы определяем три транзакции — add, remove и swap — и подробно обсуждаем свойства этих транзакций, порождающие желаемое поведение AMM. Более того, некоторые свойства позволяют UAMM устранить арбитражные возможности при допущении, что рыночная цена совпадает со справедливой.
2. Предварительные сведения
Перечислим обозначения и имена переменных, следуя общим обозначениям из [4].
Обозначения токенов
- Пусть $T$ — множество взаимозаменяемых атомарных токенов, состоящее из нативных или прикладных токенов вроде ERC20. Взаимозаменяемость атомарного токена означает, что токены торгуемы и делимы на меньшие единицы.
- Пусть $\tau_0 \in T$ — базовая валюта.
- Пусть $\tau_1, \tau_2, \ldots, \tau_K \in T$ — токены, представляющие интерес для приложения. Мы группируем их в неупорядоченный кортеж из $K$ различных атомарных токенов $(\tau_1, \tau_2, \ldots, \tau_K)$, где различность означает $\tau_i \neq \tau_j$ при $i \neq j$. Для краткости называем их $K$ эмитированными токенами.
- Пусть $d\tau_i$ — количество токена типа $\tau_i$. Например, если базовая валюта $\tau_0 = \text{USDC}$, то $d\tau_0$ — единицы USDC.
2.1. Состояния
Состояния UAMM меняются во времени через взаимодействие с транзакциями пользователей. Состояние состоит из балансов пула ликвидности, справедливых и спонтанных цен токенов, полной стоимости и предложения пула, а также полученного обеспечения.
- $R\tau_1, R\tau_2, \ldots, R\tau_K$ — балансы пула ликвидности.
- $f\tau_1, f\tau_2, \ldots, f\tau_K$ — справедливые цены $K$ эмитированных токенов относительно базовой валюты $\tau_0$, задаваемые оракулом.
- $p\tau_1, p\tau_2, \ldots, p\tau_K$ — спонтанные цены токенов относительно $\tau_0$, задаваемые UAMM.
- $TS$ — полное предложение долевых токенов пула ликвидности $s_{lp}$.
- $TB$ — полный инвестиционный баланс в единицах базовой валюты $\tau_0$ (определение 1).
- $TV$ — полная стоимость пула ликвидности (определение 2).
Состояние UAMM обозначаем $\Gamma$. Обычно мы опускаем индекс $t$, поскольку зависимость от времени не требуется. Однако иногда мы явно добавляем индекс: например, $TB_t$ и $f\tau_{1,t}$ означают полный инвестиционный баланс и цену токена $\tau_1$ в момент $t$.
2.2. Транзакции
Транзакция UAMM переводит одно состояние в другое через действие пользователя $A$: $\Gamma \xrightarrow{A} \Gamma'$. Список транзакций:
- Add$(d\tau_1, d\tau_2, \ldots, d\tau_K) \to s_{lp}$: возвращает доли $s_{lp}$ за эмитированные единицы токенов и добавляет $d\tau_1, \ldots, d\tau_K$ в пул $R\tau_1, \ldots, R\tau_K$.
- Remove$(s_{lp}) \to (d\tau_1, d\tau_2, \ldots, d\tau_K)$: возвращает эмитированные токены и сжигает доли $s_{lp}$.
- Swap$(d\tau_i, \tau_j) \to d\tau_j$: возвращает $d\tau_j$ за $d\tau_i$.
LP могут добавлять и изымать токены через Add и Remove (раздел 3). Трейдеры обменивают токены через Swap (раздел 4). Определим метрики, отслеживающие состояния LP и пулов.
Определение 1 (полный инвестиционный баланс, он же целевой баланс). Пусть $A_1, A_2, \ldots, A_T$ — последовательность действий. Полный инвестиционный баланс в момент $T$:
$$TB_T := \sum_{t=1}^{T} \left[ \left( \mathbb{I}[A_t = \text{Add}] - \mathbb{I}[A_t = \text{Remove}] \right) \sum_{i=1}^{K} d\tau_{i,t} \cdot f\tau_{i,t} \right]$$
где $f\tau_{i,t}$ — справедливая цена, а $R\tau_{i,t}$ — баланс пула $\tau_i$ в момент $t$.
Полный инвестиционный баланс измеряет объём стоимости, добавленной в UAMM, в единицах базовой валюты. Поскольку LP могут предоставлять ликвидность в $K$ эмитированных токенах, каждый из них пересчитывается в базовую валюту, а затем агрегируется чистая сумма. Полная инвестиционная сумма LP не зависит от транзакций Swap.
В то время как инвестиционная сумма LP не меняется, пока средства не добавляются и не изымаются, полная стоимость пула может колебаться из-за изменения справедливой цены или балансов пула.
Определение 2 (стоимость пула ликвидности). Полная стоимость пула ликвидности:
$$TV := \sum_{i=1}^{K} f\tau_i \cdot R\tau_i$$
где $f\tau_i$ — справедливая цена, а $R_i$ — баланс пула $\tau_i$. Если справедливые цены суть вероятности (то есть в сумме дают 1 и каждая лежит в $[0,1]$), то полная стоимость есть математическое ожидание стоимости пула.
Эти определения позволяют говорить о непостоянной прибыли и потерях поставщика ликвидности. Непостоянные прибыль и потери отражают относительную доходность активов внутри пула по сравнению с их раздельным удержанием за тот же период.
Определение 3 (непостоянные прибыль и потери). В момент $T$ непостоянные прибыль и потери:
$$\operatorname{IGnL}_T(LP) := TV_T(LP) - TB_T(LP)$$
где $TV_T(LP)$ и $TB_T(LP)$ — стоимость пула и полный инвестиционный баланс отдельного поставщика ликвидности. Мы говорим о прибыли при $\operatorname{IGnL}_T(LP) > 0$ и о потере при $\operatorname{IGnL}_T(LP) < 0$.
Непостоянные прибыль и потери относятся к ситуации, когда вы вносите активы в пул и получаете прибыль или убыток при их изъятии позднее по сравнению с раздельным удержанием этих активов в течение того же периода. Эти прибыли и убытки становятся постоянными только когда вы погашаете свои LP-доли.
Перечислим общие свойства AMM, не зависящие от устройства UAMM.
Свойство 1 (базовые свойства AMM). Для состояния $\Gamma$ и транзакции $A$:
- Начальное условие: в момент 0 имеем $R\tau_{i,0} = 0$ для всех $\tau_i$ и $A_0 = \text{Add}$.
- Неисчерпаемость: при $t > 0$ имеем $R\tau_{i,t} > 0$ для $\tau_i \in T$ и $TV_t > 0$.
- Детерминированность: если $\Gamma \to \Gamma'$ и $\Gamma \to \Gamma''$, то $\Gamma' = \Gamma''$.
- Сохранение предложения токенов: если $\Gamma \to \Gamma'$, то полное предложение токенов в $\Gamma$ и $\Gamma'$ остаётся одинаковым для всех $\tau_i$.
Условие неисчерпаемости заставляет AMM никогда не оставаться без ликвидности, а его стоимость — быть положительной. Начальное условие существует ради неисчерпаемости: кто-то должен внести начальные средства. Детерминированность транзакций желательна и для пользователей, и для блокчейнов: она гарантирует, что пользователи не полагаются на случай, а узлы могут реконструировать сеть и проверить корректность транзакции по их последовательности. Вместе это задаёт каркас для AMM как желаемой динамической системы и позволяет проводить базовые проверки на вменяемость.
Напомним, что балансы пула ликвидности сохранять не обязательно. Ослабление этого свойства делает UAMM превосходящим другие AMM в части снижения непостоянных потерь. Мы утверждаем, что это прямое следствие нашего механизма ценообразования и что в определённом смысле оно справедливее по отношению к LP (детали в разделе 4).
3. Добавление и изъятие токенов
Прежде чем перейти к добавлению и изъятию средств, установим связь между $(d\tau_1, d\tau_2, \ldots, d\tau_K)$ и $d\tau_0$. Полная стоимость $K$ эмитированных токенов есть $d\tau_0$ — взвешенная справедливыми ценами сумма:
$$d\tau_0 = \sum_{i=1}^{K} d\tau_i f\tau_i \tag{1}$$
Обратно, $d\tau_0$ можно преобразовать в $(d\tau_1, \ldots, d\tau_K)$. Есть два способа.
1. Простой метод — поровну разделить $d\tau_0$ между атомарными токенами $\tau_i$ на основе агрегированной единицы справедливых цен:
$$d\tau_i = \frac{d\tau_0}{\sum_{k}^{K} f\tau_k} \tag{2}$$
Теперь $(d\tau_1, \ldots, d\tau_K)$ и $d\tau_0$ обратимы: $\sum_{i=1}^{K} d\tau_i f\tau_i = \sum_{i=1}^{K} \left(\frac{d\tau}{\sum_{k=1}^{K} f\tau_k}\right) f\tau_i = d\tau \frac{\sum_{i=1}^{K} f\tau_i}{\sum_{k=1}^{K} f\tau_k} = d\tau_0$.
2. Другой способ — распределить пропорционально отношению балансов пула к полной стоимости ликвидности:
$$d\tau_i = d\tau_0 \frac{R\tau_i}{TV} \tag{3}$$
И снова проверяем обратимость: $\sum_{i=1}^{K} d\tau_i f\tau_i = \sum_{i=1}^{K} d\tau_0 \frac{R\tau_i}{TV} f\tau_i = \frac{d\tau_0}{TV}\sum_{i=1}^{K} R\tau_i f\tau_i = d\tau_0$.
Функции Add и Remove
Участвовать в программе предоставления ликвидности и получать доходность может любой. Когда пользователь добавляет ликвидность в пул, он получает LP-токены, представляющие его долю владения. Пусть $s_{lp}$ — число LP-токенов, получаемых при внесении средств либо в базовой валюте $\tau_0$, либо в $K$ эмитированных токенах. Транзакция $\text{Add}(d\tau_1, \ldots, d\tau_K) \to s_{lp}$ возвращает вновь эмитированное количество долей:
$$s_{lp} = \frac{d\tau_0 \cdot TS}{TV}$$
Мы обновляем баланс пула $R\tau_i = R\tau_i + d\tau_i$ для всех $\tau_i$, а также $TV$ и $TB$.
LP могут вывести своё финансирование из пула в любой момент. Мы вычисляем, сколько $K$ эмитированных токенов изъять и пересчитать обратно в базовую валюту, исходя из числа долей $s_{lp}$. Транзакция $\text{Remove}(s_{lp}) \to (d\tau_1, \ldots, d\tau_K)$ принимает $s_{lp}$ и возвращает эмитированные токены:
$$d\tau_i = \frac{R\tau_i \cdot s_{lp}}{TS}$$
для всех $\tau_i$. После выполнения Add или Remove состояния UAMM обновляются автоматически. Состояние $\Gamma$ состоит из переменных раздела 2.1.
Свойство 2 (аддитивность). Транзакции Add и Remove аддитивны, пока справедливые цены не меняются. То есть результат $A$ и состояния одинаковы, выполнит ли пользователь две одинаковые последовательные транзакции $A_0$ и $A_1$ или одну транзакцию $A_2$:
- $\text{Add}(d\tau_1, \ldots, d\tau_K) + \text{Add}(d\tau_1', \ldots, d\tau_K') \iff \text{Add}(d\tau_1 + d\tau_1', \ldots, d\tau_K + d\tau_K')$
- $\text{Remove}(s_{lp}) + \text{Remove}(s_{lp}') \iff \text{Remove}(s_{lp} + s_{lp}')$
- $\Gamma \xrightarrow{A_0} \Gamma_0 \xrightarrow{A_1} \Gamma_1 \iff \Gamma \xrightarrow{A_2} \Gamma_1$, где $A_0 = A_1 = A_2 \in \{\text{Add}, \text{Remove}\}$
Свойство 3 (обратимость). Транзакции Add и Remove обратимы, пока справедливые цены не меняются. Состояние, полученное операцией Add, обратимо через Remove, и наоборот:
- $\text{Add}(\text{Remove}(s_{lp})) \to s_{lp}$
- $\text{Remove}(\text{Add}(d\tau_1, \ldots, d\tau_K)) \to (d\tau_1, \ldots, d\tau_K)$
- Если $\Gamma \xrightarrow{A} \Gamma'$, то существует $A^{-1}$ такое, что $\Gamma' \xrightarrow{A^{-1}} \Gamma$, где $A, A^{-1} \in \{\text{Add}, \text{Remove}\}$.
Выводы аддитивности и обратимости приведены в приложении A.1. Балансы пула аддитивны и обратимы независимо от справедливых цен. Однако стоимость ликвидности ($TV$) и полный инвестированный баланс ($TB$) различаются при изменении справедливых цен. И аддитивность, и обратимость гарантируют, что LP не могут извлечь преимущество или понести ущерб от операций добавления и изъятия при неизменных справедливых ценах.
4. Транзакция обмена
Ключевая идея UAMM фундаментально отличается от прочих AMM. Такие AMM, как Uniswap, вычисляют цену $\tau_i$ за $\tau_j$ по балансам пула. Поскольку учитываются только внутренние рыночные данные, цена Uniswap может быть далека от цен на других биржах. Особенно неэффективен внутренний рынок, когда его объём относительно мал по сравнению с внешним. Это создаёт арбитражные возможности для трейдеров и потенциальные потери для LP. Напротив, мы уважаем теорию эффективного рынка и оцениваем справедливые цены по внешним и внутренним рыночным данным. Алгоритм UAMM вычисляет проскальзывание, опираясь на справедливую цену как на спонтанную. В этом разделе мы описываем, когда и как добавлять проскальзывание, чтобы предотвратить непостоянные потери LP.
Обозначения
Пользователь может обменять $d\tau_i$ токенов на некоторое количество единиц $\tau_j$ через UAMM. Поскольку обмен между $\tau_i$ и $\tau_j$ применим для любых $0 \le i, j \le K$, без потери общности обозначим $\tau_{In}$ и $\tau_{Out}$ — индексы входного и выходного токенов.
- $R\tau_{In}$ и $R\tau_{Out}$ — балансы пула входного и выходного токенов.
- $f\tau_{In}$ и $f\tau_{Out}$ — вероятности входного и выходного события.
- $d\tau_{In}$ — количество входного токена до добавления проскальзывания.
- $\Delta\tau_{Out}$ — количество выходного токена до добавления проскальзывания.
- $d\tau_{Out} = g(\Delta\tau_{Out})$ — количество выходного токена с проскальзыванием.
Обмен входного токена на выходной
При справедливых ценах $f\tau_{In}$ и $f\tau_{Out}$ справедливый обмен без проскальзывания был бы
$$d\tau_{Out} = \rho \cdot d\tau_{In} \tag{4}$$
где $\rho = \frac{f\tau_{In}}{f\tau_{Out}}$ — справедливый курс обмена. К сожалению, существует опасность истощения балансов пула, если спрос на $\tau_{Out}$ сильно превышает спрос на $\tau_{In}$. По этой причине мы добавляем к курсу проскальзывание так, чтобы оно учитывало баланс пула и размер сделки пользователя.
Опишем интуицию за выводом функции обмена UAMM. Количество выходного токена $d\tau_{Out}$ зависит от входного $d\tau_{In}$, ситуации в пуле $R\tau_{In}$ и $R\tau_{Out}$, а также целевого баланса $TB$ — желаемого баланса для всех пулов ликвидности. Расчёт цены имеет вид
$$d\tau_{Out} = \underbrace{\text{Swap}\Big( \underbrace{\rho \cdot d\tau_{In}}_{\Delta\tau_{Out}};\ \Gamma \Big)}_{\text{проскальзывание на выходе}}$$
где $\Gamma$ — параметры состояния, а $\rho$ — ценовое отношение. Интуитивно мы хотим добавлять проскальзывание в выходной пул $R\tau_{Out}$, если находимся ниже желаемого целевого баланса $TB$. Это означает, что мы вычисляем проскальзывание для каждого пула, начиная с входного $R\tau_{In}$, а затем выходного $R\tau_{Out}$. Шаги вычисления $d\tau_{Out}$:
- вычислить сумму обмена по ценовому отношению: $\Delta\tau_{Out} = \rho \cdot d\tau_{In}$;
- вычислить проскальзывание на выходном пуле: $d\tau_{Out} = \operatorname{swap}(\Delta\tau_{Out}; \Gamma)$.
Наш пул в хорошем состоянии, когда его баланс выше целевого, и проскальзывание применяется только когда баланс $R\tau_i$ ниже целевого $TB$. Таким образом, функция проскальзывания кусочная:
$$\operatorname{swap}(\Delta\tau_{Out}; \Gamma) = \begin{cases} \alpha \cdot \Delta\tau_{Out} + (\rho - \alpha)(R\tau_{Out} - TB) & \text{если } R\tau_{Out} - \Delta\tau_{Out} \le TB \le R\tau_{Out} \\ \Delta\tau_{Out} & \text{иначе если } TB \le R\tau_{Out} \\ R\tau_{Out} - \dfrac{TB^2}{X\tau_{Out} + \Delta\tau_{Out}} & \text{в остальных случаях} \end{cases}$$
где $\alpha = \frac{R\tau_{Out}}{X\tau_{Out} + \Delta\tau_{Out}}$, а $TB^2 = X\tau_{Out} \cdot R\tau_{Out}$ — целевой баланс пула. Первые условия в swap обеспечивают непрерывность функций по $d\tau_{In}$ и $\Delta\tau_{Out}$ соответственно.
Приведённая функция проскальзывания выведена из кривой постоянного произведения с константой $TB^2$, когда выходной пул $R\tau_{Out}$ ниже целевого баланса. Если $TB > R\tau_{Out}$, наша кривая постоянного произведения для функции выходного проскальзывания $g(\Delta_{Out}; \Gamma)$ есть
$$TB^2 = \left( R\tau_{Out} - \frac{R\tau_{Out}}{X\tau_{Out} + \rho\, d\tau_{In}} \right)\left( X\tau_{Out} + \rho\, d\tau_{In} \right)$$
Технически можно аналогичным образом добавить проскальзывание и к входной функции, когда входной пул $R\tau_{In} > TB$. Расчёт в том, что это отвадит пользователей от исполнения сделки и подтянет $R\tau_{In}$ к $TB$. Вывод функции входного проскальзывания приведён в приложении A.2.
Формально ставка проскальзывания, включённая в функцию обмена, выражается так:
$$d\tau_{Out} = \rho \cdot \operatorname{USX}(d\tau_{In}, \Gamma) \cdot d\tau_{In} \tag{5}$$
Единственное отличие справедливой функции обмена (4) от функции обмена UBET (5) — ставка проскальзывания UBET. $\operatorname{USX}$ определяется ниже.
Определение 4 (ставка проскальзывания UBET). Функция ставки автоматического маркетмейкера UBET:
$$\operatorname{USX}(d\tau_{In}, \Gamma) = \begin{cases} 1 & \text{если } TB < R\tau_{Out} \\ \xi & \text{если } R\tau_{Out} < TB \le R\tau_{Out} + d\tau_{In} \\ \dfrac{R\tau_{Out}}{X\tau_{Out} + \rho\, d\tau_{In}} & \text{если } TB \ge R\tau_{Out} \end{cases}$$
Используя ставку проскальзывания UBET, мы можем гарантировать следующие свойства транзакции обмена. Выход функции обмена $d\tau_{Out}$ ограничен сверху величиной $R\tau_{Out}$, и это обеспечивает свойство неисчерпаемости AMM.
Свойство 4 (ограниченность выхода). В UAMM всегда достаточно выходных токенов $R\tau_{Out}$, чтобы пользователь выполнил обмен $\tau_{In}$ на $\tau_{Out}$:
$$0 \le d\tau_{Out} = \rho \cdot \operatorname{USX}(d\tau_{In}, \Gamma) \cdot d\tau_{In} < R\tau_{Out}$$
для всех $d\tau_{In} \ge 0$ и $R\tau_{In}, R\tau_{Out} > 0$.
Монотонность функции обмена обеспечивает монотонность прибыли или убытка пользователя после обмена.
Свойство 5 (монотонность). Ставка проскальзывания UAMM монотонна:
- $\operatorname{USX}(d\tau_{In}, \Gamma) \le \operatorname{USX}(d\tau_{In}', \Gamma)$, если $d\tau_{In} \le d\tau_{In}'$ и $\Gamma$ фиксировано;
- $\operatorname{USX}(d\tau_{In}, \Gamma) \le \operatorname{USX}(d\tau_{In}', \Gamma')$, если $d\tau_{In} \le d\tau_{In}'$, $R\tau_{In} \le R\tau_{In}'$, $R\tau_{Out} \le R\tau_{Out}'$, а остальное фиксировано.
Функция обмена UAMM добавляет проскальзывание не по входу, а только по выходному пулу. Это и позволяет иметь монотонную ставку. Включить функцию входного проскальзывания возможно (приложение A.2.1), однако после её добавления монотонность по росту входного пула $R\tau_{In} < R\tau_{In}'$ теряется. Причина в том, что функция входного проскальзывания оттягивает балансы пула назад, чтобы они не удалялись слишком далеко от целевого $TB$. Мы советуем, что входное проскальзывание $\Delta\tau_{In}$ не является необходимым и может быть просто убрано (то есть $\Delta\tau_{In} = d\tau_{In}$), поскольку оно бывает чрезмерно строгим: взимает слишком большое проскальзывание и не даёт возникнуть непостоянной прибыли.
Свойство 6 (однородность). Ставка проскальзывания UAMM однородна: для $a > 0$
$$\operatorname{USX}(a \cdot d\tau_{In}, \Gamma') = \operatorname{USX}(d\tau_{In}, \Gamma)$$
где $\Gamma = (R\tau_1, \ldots, R\tau_K, TB)$ и $\Gamma' = (a R\tau_1, \ldots, a R\tau_K, a\, TB)$.
Обычно свойство однородности ведёт к равной спонтанной цене для $\Gamma$ и $\Gamma'$ у таких AMM, как Uniswap [2], который сохраняет отношение балансов пула при добавлении или изъятии эмитированных токенов, — поскольку их спонтанная цена напрямую зависит от отношения пулов. Однако наша спонтанная цена определяется справедливой ценой, а не балансами пула, и от балансов зависит только ставка проскальзывания. Поэтому однородность $\operatorname{USX}$ не имеет отношения к однородности спонтанной цены после операций добавления или изъятия, если только суммы вкладов и изъятий не сохраняют пропорции пула.
Свойство 7 (аддитивность). Транзакция Swap аддитивна, пока справедливые цены не меняются:
- функция обмена UAMM аддитивна: $\operatorname{swap}(d\tau_{In}; \Gamma) + \operatorname{swap}(d\tau_{In}; \Gamma') = \operatorname{swap}(d\tau_{In} + d\tau_{In}'; \Gamma)$, где $\Gamma \xrightarrow{\operatorname{swap}(d\tau_{In})} \Gamma' \xrightarrow{\operatorname{swap}(d\tau_{In}')} \Gamma''$ — две функции выходного проскальзывания;
- пусть $\alpha = \operatorname{USX}(d\tau_{In}, \tau_{Out}; \Gamma)$ и $\beta = \operatorname{USX}(d\tau_{In}', \tau_{Out}; \Gamma')$. Тогда $$\operatorname{USX}(d\tau_{In} + d\tau_{In}', \tau_{Out}) = \frac{\alpha \cdot d\tau_{In} + \beta \cdot d\tau_{In}'}{d\tau_{In} + d\tau_{In}'}$$
- состояния одинаковы, выполнит ли пользователь две одинаковые последовательные транзакции обмена или одну: $\Gamma \xrightarrow{\operatorname{swap}(d\tau_{In} + d\tau_{In}')} \Gamma_1$.
Доказательство приведено в приложении. Это свойство применимо к последовательностям из нескольких обменов: величина проскальзывания и прибыль или убыток пользователя будут одинаковы, совершит ли он одну или несколько последовательных транзакций.
Заметим попутно, что наличие функции входного проскальзывания (приложение A.2.1) аддитивности не гарантирует: одна транзакция обмена с $d\tau_{In} + d\tau_{In}'$ приводит к разнице $d\tau_{In} \cdot d\tau_{In}'$ по сравнению с двумя последовательными.
В общем случае транзакция обмена UAMM необратима. Однако мы всё же гарантируем, что композиция $\operatorname{swap} \circ \operatorname{swap}$ даст меньшую сумму, чем изначально вложенная.
Свойство 8 (слабая обратимость). $\operatorname{swap} \circ \operatorname{swap}(d\tau_{In}; \Gamma) \le d\tau_{In}$
Это желаемое свойство, иначе пользователь мог бы извлечь арбитраж из средств пула: пользователь не должен получать обратными транзакциями больше исходной суммы. Более того, UAMM обратим, когда балансы пула в хорошей ситуации, где $R\tau_{Out} - \Delta\tau_{Out} > TB$ и $R\tau_{In} > TB$. Такая ситуация означает, что LP уже получили хорошую прибыль от предыдущих транзакций.
5. Спонтанная цена
Спонтанная цена — это наша рыночная цена без проскальзывания. Её можно рассматривать как справедливую цену с применённым спредом. Поскольку цена зависит от того, находятся ли $R\tau_{In}$ и $R\tau_{Out}$ ниже целевой или нет, спонтанная цена тоже кусочная:
$$\frac{p\tau_{In}}{p\tau_{Out}} = \left( \left. \frac{d\, d\tau_{In}}{d\, d\tau_{Out}} \right|_{d\tau_{Out}=0} \right)^{-1} \tag{7}$$
где
$$\left. \frac{d\, d\tau_{In}}{d\, d\tau_{Out}} \right|_{d\tau_{Out}=0} = \begin{cases} \dfrac{1}{\rho} & \text{если } TB \le R\tau_{In} \text{ и } TB \le R\tau_{Out} \\[6pt] \dfrac{X\tau_{Out}}{\rho \cdot R\tau_{Out}} & \text{если } TB > R\tau_{Out} \text{ и } TB \le R\tau_{In} \end{cases}$$
Индекс $|_{d\tau_{Out}=0}$ показывает, что происходит с ценой бесконечно малой сделки. Вывод приведён в приложении. Легко видеть также, что ставка проскальзывания UAMM вместе с $\rho$ сходится к спонтанной цене.
Свойство 9 (сходимость). $\dfrac{p\tau_{In}}{p\tau_{Out}} = \lim\limits_{d\tau_{In} \to 0} \rho \cdot \operatorname{USX}(d\tau_{In}, \Gamma)$
Свойство 10. Курс обмена UAMM всегда меньше либо равен курсу спонтанной цены, а курс спонтанной цены меньше либо равен справедливому курсу обмена:
$$\rho \cdot \operatorname{USX}(d\tau_{In}, \Gamma) \le \frac{p\tau_{In}}{p\tau_{Out}} \le \frac{f\tau_{In}}{f\tau_{Out}} = \rho$$
для всех $d\tau_{In} > 0$.
6. Заключение
Существующие AMM, используемые в DEX, страдают значительным недостатком — арбитражными возможностями. Это происходит из-за опоры AMM на внутреннюю рыночную информацию при игнорировании внешних цен, что ведёт к потенциальным потерям для LP. Кроме того, AMM медленнее адаптируются к изменениям цен, полагаясь на трейдеров, эксплуатирующих арбитраж ради корректировки цен.
Для решения этих проблем предложен алгоритм UAMM. Он рассчитывает цены с учётом как внешних, так и внутренних рыночных цен, эффективно устраняя арбитражные возможности. Минимизируя непостоянные потери и сохраняя желаемые свойства кривой постоянного произведения, UAMM даёт поставщикам ликвидности улучшенное управление риском и генерацию пассивной доходности.
С UAMM поставщики ликвидности могут торговать с большей защищённостью и стабильностью, поскольку им больше не нужно заботиться об управлении непостоянными потерями. Алгоритм определяет три транзакции — add, remove, swap, — и их свойства порождают желаемое поведение AMM. Более того, UAMM демонстрирует нулевые арбитражные возможности, когда рыночная цена согласуется с предположением о справедливой цене, что дополнительно повышает уверенность и прибыльность LP.
Алгоритм UAMM представляет перспективное решение ограничений существующих AMM в децентрализованных биржах. Учитывая внешние рыночные цены и внедряя меры по минимизации непостоянных потерь, UAMM повышает эффективность и надёжность DEX, обеспечивая LP более защищённый и прибыльный торговый опыт.
Приложение A.1. Добавление и изъятие средств
Доказательство свойства 2 (аддитивность).
1. Пусть $s_{lp} \leftarrow \text{Add}(d\tau_1, \ldots, d\tau_K)$, $s_{lp}' \leftarrow \text{Add}(d\tau_1', \ldots, d\tau_K')$ и $s_{lp}'' \leftarrow \text{Add}(d\tau_1 + d\tau_1', \ldots, d\tau_K + d\tau_K')$. Для двух одинаковых последовательных транзакций:
$$\begin{aligned} s_{lp} + s_{lp}' &= d\tau_0 \frac{TS}{TV} + d\tau_0' \frac{TS + s_{lp}}{TV + d\tau_0} \\ &= \frac{d\tau_0 \cdot TS(TV + d\tau_0) + d\tau_0' \cdot TV(TS + s_{lp})}{TV(TV + d\tau_0)} \\ &= \frac{d\tau_0 \cdot TS(TV + d\tau_0) + d\tau_0' \cdot TV\left(TS + d\tau_0 \frac{TS}{TV}\right)}{TV(TV + d\tau_0)} \\ &= \frac{TS}{TV} \cdot \frac{d\tau_0(TV + d\tau_0) + d\tau_0'(TV + d\tau_0)}{TV + d\tau_0} = \frac{TS}{TV}(d\tau_0 + d\tau_0') = s_{lp}'' \end{aligned}$$
В первом равенстве использованы определение функции Add и факт $d\tau_0 = \sum_{k=1}^{K} d\tau_k f\tau_k$.
2. Пусть $(d\tau_1, \ldots, d\tau_K) = \text{Remove}(s_{lp})$, $(d\tau_1', \ldots) = \text{Remove}(s_{lp}')$ и $(d\tau_1'', \ldots) = \text{Remove}(s_{lp}'')$. Тогда
$$\begin{aligned} d\tau_i + d\tau_i' &= R\tau_i \frac{s_{lp}}{TS} + (R\tau_i - d\tau_i)\frac{s_{lp}'}{TS - s_{lp}} \\ &= \frac{R\tau_i s_{lp}(TS - s_{lp}) + (R\tau_i - d\tau_i)s_{lp}' TS}{TS(TS - s_{lp})} \\ &= \frac{R\tau_i}{TS} \cdot \frac{s_{lp}(TS - s_{lp}) + s_{lp}'(TS - s_{lp})}{TS - s_{lp}} = \frac{R\tau_i}{TS}\left(s_{lp} + s_{lp}'\right) = d\tau_i'' \end{aligned}$$
3. Балансы пула аддитивны и обратимы независимо от справедливых цен (тривиально). Проверим, что полный инвестиционный баланс и стоимость пула в момент $T$ остаются теми же. Пусть $A_0$, $A_1$ и $A_2$ — функции добавления, причём $A_0$ и $A_1$ произошли в моменты $T-2$ и $T-1$. Тогда
$$\begin{aligned} TB_{T-2} \xrightarrow{A_0, A_1} TB' &= TB_{T-2} + \left[\mathbb{I}[A_{T-2} = A_0]\sum_{i=1}^{K} d\tau_{i,T-2} f\tau_{i,T-2}\right] + \left[\mathbb{I}[A_{T-1} = A_1]\sum_{i=1}^{K} d\tau_{i,T-1}' f\tau_{i,T-1}\right] \\ &= TB_{T-2} + \sum_{i=1}^{K} \left( d\tau_i f\tau_{i,T-2} + d\tau_i' f\tau_{i,T-1} \right) \\ &= TB_{T-2} + \sum_{i=1}^{K} (d\tau_i + d\tau_i') f\tau_{i,T-2} = TB_{T-2} \xrightarrow{A_2} TB' \end{aligned}$$
Предпоследнее равенство следует из того, что справедливые цены не менялись: $f\tau_{i,T-2} = f\tau_{i,T-1}$. Последнее показывает эквивалентность одной транзакции $A_2$ в момент $T-2$.
Доказательство свойства 3 (обратимость). Пусть $(d\tau_1, \ldots, d\tau_K) = \text{Remove}(s_{lp})$. Применим $\text{Add}$:
$$\text{Add}(d\tau_1, \ldots, d\tau_K) = \frac{TS}{TV}\sum_{i=1}^{K} d\tau_i f\tau_i = \frac{TS}{TV}\sum_{i=1}^{K} \frac{s_{lp}}{TS} R\tau_i f\tau_i = s_{lp}\frac{TS}{TV}\frac{1}{TS}\sum_{i=1}^{K} R\tau_i f\tau_i = s_{lp}$$
Последнее равенство использует $TV = \sum_{i=1}^{K} R\tau_i f\tau_i$. Отсюда тривиально следует существование обратной функции, всегда возвращающей исходное состояние для $TB$ и $TV$.
Приложение A.2. Обмен входного токена на выходной
Доказательство свойства 4 (ограниченность выхода). Легко видеть, что $d\tau_{Out}$ меньше $R\tau_{Out}$, когда размер сделки $\rho\, d\tau_{In} < R\tau_{Out}$. Рассмотрим случай $\rho\, d\tau_{In} > R\tau_{Out}$. Аргумент в том, что даже если справедливый курс с входным проскальзыванием превышает ликвидность выходного пула, выходное проскальзывание обеспечивает $d\tau_{Out} < R\tau_{Out}$. Если $TB \ge R\tau_{Out}$, то
$$d\tau_{Out} = \rho \cdot \operatorname{USX}(d\tau_{In}, \Gamma) d\tau_{In} = \rho \frac{R\tau_{Out}}{X\tau_{Out} + \rho\, d\tau_{In}} d\tau_{In} = R\tau_{Out}\frac{1}{1 + \frac{X\tau_{Out}}{\rho\, d\tau_{In}}} < R\tau_{Out}$$
Можно поступить лучше, отдав $\frac{1}{\rho}(R\tau_{Out} - TB)$ по справедливому курсу, а остаток торговать с выходным проскальзыванием:
$$d\tau_{Out} = (R\tau_{Out} - TB) + \rho \frac{R\tau_{Out}}{X\tau_{Out} + \rho\, TB} TB = (R\tau_{Out} - TB) + TB \underbrace{\frac{1}{1 + \frac{X\tau_{Out}}{\rho\, TB}}}_{<1} < R\tau_{Out}$$
Предпоследнее равенство следует из того, что в выходном пуле остаётся $TB$ после отдачи $\frac{1}{\rho}(R\tau_{Out} - TB)$ по справедливому курсу.
Доказательство свойства однородности. Вывод сводится к подстановке скаляра в $\operatorname{USX}(a \cdot d\tau_{In}, \Gamma')$. Покажем на случае (*): $TB > R\tau_{Out}$ и $TB < R\tau_{In}$. Сначала запишем $a \cdot \Delta\tau_{In} = f(a \cdot d\tau_{In}, \Gamma)$, поскольку
$$f(a \cdot d\tau_{In}; \Gamma) = \begin{cases} a \cdot d\tau_{In} & \text{если } TB \ge R\tau_{In} \\ a \cdot d\tau_{In}\dfrac{a(R_{In} + d\tau_{In})}{a \cdot X\tau_{In}} & \text{иначе} \end{cases}$$
Тогда для случая (*):
$$\operatorname{USX}(a \cdot d\tau_{In}, \Gamma) = \frac{a \Delta\tau_{In}}{a\, d\tau_{In}}\left(\frac{a R\tau_{Out}}{a X\tau_{Out} + \rho a \Delta\tau_{In}}\right) = \frac{\Delta\tau_{In}}{d\tau_{In}}\left(\frac{R\tau_{Out}}{X\tau_{Out} + \rho \Delta\tau_{In}}\right) = \operatorname{USX}(d\tau_{In}, \Gamma)$$
Остальные случаи $\operatorname{USX}$ разбираются аналогично.
Доказательство свойства аддитивности обмена. Имеем две последовательные транзакции выходного проскальзывания $\Gamma \xrightarrow{g(\Delta\tau_{Out}, \Gamma)} \Gamma' \xrightarrow{g(\Delta\tau_{Out}', \Gamma')} \Gamma''$.
Первая транзакция:
$$g(\Delta\tau_{Out}; \Gamma) = \frac{R\tau_{Out}}{X\tau_{Out} + \Delta\tau_{Out}}\Delta\tau_{Out} = \underbrace{\frac{R\tau_{Out}^2}{TB^2 + \Delta\tau_{Out} R\tau_{Out}}}_{\alpha}\Delta\tau_{Out} = R\tau_{Out} - \frac{R\tau_{Out} T^2}{T^2 + R\tau_{Out}\Delta\tau_{Out}}$$
Вторая транзакция, следующая за первой:
$$g(\Delta\tau_{Out}'; \Gamma') = \frac{R\tau_{Out}T^2}{T^2 + R\tau_{Out}\Delta\tau_{Out}} - \frac{TB^2(R\tau_{Out} - \alpha \Delta\tau_{Out})}{TB^2 + (R\tau_{Out}' - \alpha \Delta\tau_{Out})\Delta\tau_{Out}'}$$
Единая транзакция:
$$g(\Delta\tau_{Out} + \Delta\tau_{Out}'; \Gamma) = R\tau_{Out} - \frac{R\tau_{Out}T^2}{T^2 + R\tau_{Out}(\Delta\tau_{Out} + \Delta\tau_{Out}')}$$
Сравнивая, получаем
$$\begin{aligned} &g(\Delta\tau_{Out}; \Gamma) + g(\Delta\tau_{Out}'; \Gamma') - g(\Delta\tau_{Out} + \Delta\tau_{Out}'; \Gamma) \\ &= \frac{1}{Z}\left( R\tau_{Out}^2 \Delta\tau_{Out} - \frac{TB^2 R\tau_{Out}^2 \Delta\tau_{Out}}{TB^2 + R\tau_{Out}\Delta\tau_{Out}} + \frac{R\tau_{Out}^3 \Delta\tau_{Out}^2}{TB^2 + \Delta\tau_{Out}R\tau_{Out}} \right) = 0 \end{aligned}$$
где $Z = \left(TB^2 + R\tau_{Out}(R\tau_{Out}' - \alpha \Delta\tau_{Out})\right)\left(TB^2 + R\tau_{Out}(\Delta\tau_{Out} + \Delta\tau_{Out}')\right)$.
Доказательство свойства псевдообратимости. Пусть $\tau_{Out} = \rho \cdot \operatorname{USX}(d\tau_{In}; \Gamma) \cdot d\tau_{In}$.
Случай 1: когда $TB < R\tau_{Out}$ и $TB < R\tau_{In} - d\tau_{Out}$, то $\operatorname{USX}$ обратима:
$$d\tau_{In}' = \frac{1}{\rho \cdot \operatorname{USX}(d\tau_{Out}; \Gamma)} d\tau_{Out} = \frac{1}{\rho}\underbrace{(\rho \cdot d\tau_{In})}_{d\tau_{Out}} = d\tau_{In}$$
Случай 3: когда $TB > R\tau_{Out}$ и $TB > R\tau_{In} + d\tau_{In}$:
$$d\tau_{In}' = \frac{1}{\rho}\underbrace{\left(\frac{R\tau_{In} + d\tau_{In}}{X\tau_{In} + \rho \alpha d\tau_{In}}\right)}_{<1}\left(\rho \underbrace{\frac{R\tau_{Out}}{X\tau_{Out} + \rho\, d\tau_{In}}}_{<1} d\tau_{In}\right) < d\tau_{In}$$
Случаи 4 и 5 (когда $R\tau_{Out} > TB > R\tau_{Out} - d\tau_{Out}$ при $TB > R\tau_{In} + d\tau_{In}$ и при $R\tau_{In} + d\tau_{In} > TB$) разбираются так же.
A.2.1. Транзакция обмена UAMM с функцией входного проскальзывания
Приведём полные версии функций входного и выходного проскальзывания, непрерывные по входам $d\tau_{In}$ и $\Delta\tau_{Out}$:
$$d\tau_{Out} = \underbrace{g\Big( \underbrace{\rho\, \underbrace{f(d\tau_{In}; \Gamma)}_{\text{входное проскальзывание } \Delta\tau_{In}}}_{\Delta\tau_{Out} = \rho \Delta\tau_{In}};\ \Gamma \Big)}_{\text{выходное проскальзывание } d\tau_{Out}}$$
Шаги вычисления $d\tau_{Out}$: (1) вычислить проскальзывание на входном пуле $\Delta\tau_{In} = f(d\tau_{In}; \Gamma)$; (2) вычислить сумму обмена по ценовому отношению $\Delta\tau_{Out} = \rho \cdot \Delta\tau_{In}$; (3) вычислить проскальзывание на выходном пуле $d\tau_{Out} = g(\Delta\tau_{Out}; \Gamma)$. При этом
$$f(d\tau_{In}; \Gamma) = \begin{cases} (\delta - 1)(TB - R\tau_{In}) + d\tau_{In} & \text{если } R\tau_{In} \le TB < R\tau_{In} + d\tau_{In} \\ d\tau_{In} & \text{если } TB \ge R\tau_{In} \\ d\tau_{In} \cdot \delta & \text{иначе} \end{cases}$$
где $\delta = \frac{R_{In} + d\tau_{In}}{X\tau_{In}}$. Функция выходного проскальзывания $g(\Delta\tau_{In}; \Gamma)$ уже определена в основном тексте. Первые условия в $f$ обеспечивают непрерывность функций по $d\tau_{In}$ и $\Delta\tau_{Out}$ соответственно.
Исходя из целевого баланса $TB$ и текущего пула $R\tau_{In}$, определим кривую постоянного произведения $TB^2 = R\tau_{In} X\tau_{In}$. Тогда $X\tau_{In}$ становится виртуальным пулом, которым мы подталкиваем баланс $R\tau_{In}$ к целевому. Например, добавление $d\tau_{In}$ в $R\tau_{In}$ уменьшило бы виртуальный баланс $X\tau_{In}$, чтобы удовлетворить кривой постоянного произведения:
$$TB^2 = (R\tau_{In} + d\tau_{In})(X\tau_{In} - \operatorname{CP}(d\tau_{In}))$$
Перегруппировав, получаем
$$\operatorname{CP}(d\tau_{In}) = X\tau_{In} - \frac{TB^2}{R\tau_{In} + d\tau_{In}} = d\tau_{In}\frac{X\tau_{In}}{R\tau_{In} + d\tau_{In}} = d\tau_{In} \underbrace{\frac{TB}{R\tau_{In}}}_{\ge 1} \underbrace{\frac{TB}{R\tau_{In} + d\tau_{In}}}_{\ge 1}$$
Это соответствует обмену $d\tau_{In}$ на $\operatorname{CP}(d\tau_{In})$. Последнее равенство показывает, что $\operatorname{CP}(d\tau_{In}) \ge d\tau_{In}$. Входное проскальзывание определяется как относительная разница между входным количеством $d\tau_{In}$ и обменянным $\operatorname{CP}(d\tau_{In})$, и окончательно функция входного проскальзывания принимает вид
$$\Delta_{In} = f(d\tau_{In}; \theta) = d\tau_{In} \underbrace{\frac{d\tau_{In}}{\operatorname{CP}(d\tau_{In})}}_{0 < \text{проскальзывание} \le 1} = d\tau_{In}\frac{R\tau_{In} + d\tau_{In}}{X\tau_{In}}$$
Определение 5 (ставка проскальзывания UBET с учётом входного проскальзывания).
$$\operatorname{USX}(d\tau_{In}, \Gamma) = \begin{cases} \eta & \text{если } TB \le R\tau_{Out} - \Delta\tau_{Out} \text{ и } R\tau_{In} < TB < R\tau_{In} + d\tau_{In} \\ \eta \cdot \xi(\eta) & \text{если } R\tau_{Out} - \Delta\tau_{Out} < TB < R\tau_{Out} \text{ и } R\tau_{In} < TB < R\tau_{In} + d\tau_{In} \\ \xi(\Delta\tau_{Out}) & \text{если } R\tau_{Out} - \Delta\tau_{Out} < TB < R\tau_{Out} \text{ и } TB \le R\tau_{In} \\ 1 & \text{если } TB \le R\tau_{Out} - \Delta\tau_{Out} \text{ и } TB \ge R\tau_{In} \\ \dfrac{\Delta\tau_{In}}{d\tau_{In}} & \text{если } TB \le R\tau_{Out} - \Delta\tau_{Out} \text{ и } TB < R\tau_{In} \\ \alpha & \text{если } TB > R\tau_{Out} \text{ и } TB \ge R\tau_{In} \\ \dfrac{\Delta\tau_{In}}{d\tau_{In}} \cdot \alpha & \text{иначе} \end{cases} \tag{8}$$
где
$$\alpha = \frac{R\tau_{Out}}{X\tau_{Out} + \Delta\tau_{Out}}, \quad \delta = \frac{R_{In} + d\tau_{In}}{X\tau_{In}}, \quad \eta = (\delta - 1)(TB - R\tau_{In}) + d\tau_{In}$$
$$\xi(x) = (R\tau_{Out} - TB)\rho + \left(x - (R\tau_{Out} - TB)\right)\frac{R\tau_{Out}}{X\tau_{Out} + \rho x}$$
Случаи $R\tau_{Out} - \Delta\tau_{Out} < TB$ обеспечивают добавление выходного проскальзывания, если сумма обмена (с входным проскальзыванием или без) не превышает объём выходного пула, $\Delta\tau_{Out} \ge R\tau_{Out}$.
Такое проскальзывание UAMM удовлетворяет ограниченности и однородности, но не удовлетворяет монотонности и аддитивности. Однако это не означает, что UAMM с входным проскальзыванием некорректен — он просто порождает другие свойства. Например, он будет побуждать LP иметь нулевые непостоянные потери и прибыль, тогда как вариант без входного проскальзывания щедрее и допускает непостоянную прибыль.
A.3. Вывод спонтанной цены
Спонтанная цена — наша рыночная цена без проскальзывания; её можно рассматривать как справедливую цену с применённым спредом. Поскольку цена зависит от того, ниже ли целевой находятся $R\tau_{In}$ и $R\tau_{Out}$, спонтанная цена кусочная:
$$\rho = \frac{p\tau_{In}}{p\tau_{Out}} = \left( \left. \frac{d\, d\tau_{In}}{d\, d\tau_{Out}} \right|_{d\tau_{Out}=0} \right)^{-1} \tag{9}$$
где
$$\left. \frac{d\, d\tau_{In}}{d\, d\tau_{Out}} \right|_{d\tau_{Out}=0} = \begin{cases} \dfrac{1}{\rho} & \text{если } TB \le R\tau_{In} \text{ и } TB \le R\tau_{Out} \\[6pt] \dfrac{X\tau_{In}}{\rho R\tau_{In}} & \text{если } TB \le R\tau_{Out} \text{ и } TB < R\tau_{In} \\[6pt] \dfrac{X\tau_{Out}}{\rho R\tau_{Out}} & \text{если } TB > R\tau_{Out} \text{ и } TB \le R\tau_{In} \\[6pt] \dfrac{X\tau_{Out} X\tau_{In}}{\rho R\tau_{Out} R\tau_{In}} & \text{иначе} \end{cases}$$
Предельная цена выходного токена на кривой постоянного произведения определяется как цена бесконечно малой сделки. Дифференцируя кривую постоянного произведения по количеству выходного токена $d_{Out}$:
$$0 = \left. \frac{d}{d\, d_{Out}}\left[ (R_{Out} - d_{Out})(X_{Out} + \rho \Delta_{In}) \right] \right|_{d_{Out}=0} \implies \left. \frac{d\Delta_{In}}{d\, d_{Out}} \right|_{d_{Out}=0} = \left. \frac{X_{Out} + \rho \Delta_{In}}{\rho(R_{Out} - d_{Out})} \right|_{d_{Out}=0} \tag{10}$$
Рассмотрим случай $T - R_{In} > 0$ (иначе тривиально):
$$\left. \frac{d\Delta_{In}}{d\, d_{Out}} \right|_{d_{Out}=0} = \left. \frac{d}{d\, d_{Out}}\left[ d_{In}\frac{R_{In} + d_{In}}{X_{In}} \right] \right|_{d_{Out}=0} = \left. \frac{d\, d_{In}}{d\, d_{Out}} \cdot \frac{R_{In} + 2 d_{In}}{X_{In}} \right|_{d_{Out}=0} \tag{11}$$
Подставляя (11) в (10), получаем
$$\frac{d\, d_{In}}{d\, d_{Out}} = \frac{X_{Out} X_{In}}{R_{Out} R_{In} \rho}$$
Литература
- [1] H. Adams, Uniswap v3 core, 2021. ↑
- [2] H. Adams, N. Zinsmeister, D. Robinson, Uniswap v2 core, 2020. ↑
- [3] G. Angeris, H.-T. Kao, R. Chiang, C. Noyes, T. Chitra, An analysis of Uniswap markets, Cryptoeconomic Systems 0(1), 2021. ↑
- [4] M. Bartoletti, J. H. Chiang, A. Lluch-Lafuente, A theory of automated market makers in DeFi, в сб.: Coordination Models and Languages, Springer, 2021, с. 168–187. ↑
- [5] M. Egorov, Curve Finance (Swiss Stake GmbH), Automatic market-making with dynamic peg, 2021. ↑
Оригинал статьи: Im, D. J., Kondratskiy, A., Harvey, V., Fu, H.-W., «UAMM: Price-oracle based Automated Market Maker», arXiv:2308.06375 · лицензия CC0 1.0