Концентрированная ликвидность с кредитным плечом

5/10

Атис Элстс (Vertolabs), Крешимир Клас (Kuna Labs) · 19 сентября 2024

Оригинал: Elsts, A., Klas, K. «Concentrated Liquidity with Leverage», 2024 — arxiv.org/abs/2409.12803 (PDF).

Рисунки воспроизведены из оригинальной публикации. Оригинал распространяется по стандартной лицензии arXiv (non-exclusive distribution), которая производных произведений не разрешает: все права на оригинальный текст принадлежат авторам, перевод выполнен для личного ознакомления с указанием источника.

Аннотация

Предоставление концентрированной ликвидности — способ повысить капиталоэффективность автоматических маркетмейкеров. Разрешение поставщикам ликвидности использовать кредитное плечо — шаг к ещё большей эффективности. Ряд протоколов децентрализованных финансов реализует эту технику в связке с избыточно обеспеченным кредитованием. Однако свойства позиций концентрированной ликвидности с плечом не формализованы и плохо понимаются на практике. В статье описываются принципы протокола предоставления такой ликвидности, формально моделируются понятия уровня маржи, активов и долга, и доказывается, что в рамках этой модели позиции с плечом обладают рядом свойств, делающих их безопасными в использовании.

1. Введение

Концентрированная ликвидность впервые реализована в Uniswap v3 и с тех пор принята рядом других протоколов AMM. Помимо капиталоэффективности, обеспечиваемой концентрацией ликвидности, стратегические поставщики могут стремиться взять долг, чтобы создавать позиции на заёмные средства. Предоставление ликвидности с плечом не только увеличивает доход от комиссий, но и может защитить поставщика от изменений цены — особенно при одностороннем плече. Например, поставщик может занять актив, который считает менее надёжным, и тем самым застраховаться от неблагоприятного движения цены.

Кроме того, сочетание концентрированной ликвидности и плеча позволяет разделить пассивных кредиторов, вносящих односторонние активы ради доходности, и активных поставщиков ликвидности, которые создают позиции с плечом, управляют ими, собирают комиссии за обмен и оплачивают стоимость заимствования.

Сейчас концентрированную ликвидность с плечом предлагают несколько протоколов DeFi, включая Panoptic, Revert Lend, YLDR и другие. В частности, Kuna Labs разрабатывает решение на блокчейне Sui под названием Kai Leverage.

Тем не менее свойства и риски такой конструкции слабо формализованы. Настоящая статья стремится восполнить этот пробел и ответить на практические вопросы:

2. Понятия и определения

Таблица 1. Используемые обозначения.
СимволОписание
$X$, $Y$базовый токен и котируемый токен
$x$, $y$количества базового и котируемого токенов
$P$цена
$p_a$, $p_b$нижняя и верхняя границы ценового диапазона
$S$корень из цены
$V$стоимость
$L$ликвидность
$DL$дивергентные (непостоянные) потери
$M$уровень маржи
$\beta$бонус ликвидатора

Пулы и позиции. AMM с концентрированной ликвидностью содержит пулы ликвидности и позиции. Активный пул содержит одну или несколько позиций. Позиция полностью определяется тройкой $(L, p_a, p_b)$. Позиция вида $(L, 0, \infty)$ называется полнодиапазонной и определяется одной лишь ликвидностью $L$.

AMM с постоянным произведением следует инварианту обмена $x_{\text{virtual}}\cdot y_{\text{virtual}} = L^2$. Виртуальные количества активов переводятся в реальные количества в позиции через границы диапазона и текущую цену $P$. Если $P \le p_a$, позиция содержит только $Y$; если $P \ge p_b$ — только $X$. Такая позиция называется вне диапазона. Позиция находится в диапазоне, если $p_a < P < p_b$.

Стоимость позиции. Стоимость позиции $(L, p_a, p_b)$ при цене $P$:

$$V_{\text{pos}}(P) = \begin{cases} L\cdot\dfrac{\sqrt{p_b} - \sqrt{p_a}}{\sqrt{p_a}\sqrt{p_b}}\cdot P, & \text{если } P \le p_a \\[8pt] L\left(2\sqrt{P} - \sqrt{p_a} - P/\sqrt{p_b}\right), & \text{если } p_a < P < p_b \\[8pt] L\left(\sqrt{p_b} - \sqrt{p_a}\right), & \text{если } P \ge p_b \end{cases} \tag{1}$$

Это выражение не включает накопленные комиссии.

Начальная стоимость активов и долга. Начальные активы поставщика состоят из двух компонент: собственного капитала $(x_{\text{user}}, y_{\text{user}})$ стоимостью $V_{\text{user}}$ и заёмного капитала $(x_D, y_D)$ стоимостью $V_D$. Отсюда начальная стоимость активов:

$$A(P_0) = (x_{\text{user}} + x_D)P_0 + y_{\text{user}} + y_D \tag{2}$$

Возможно, что в позицию помещены не все активы, и часть $X$ или $Y$ остаётся дополнительным обеспечением $(x_C, y_C)$ стоимостью $V_C$:

$$x_C = x_D + x_{\text{user}} - x_{\text{pos}}(P_0), \qquad y_C = y_D + y_{\text{user}} - y_{\text{pos}}(P_0) \tag{3–4}$$

Следовательно, начальную стоимость активов можно переписать как $A(P_0) = V_{\text{pos}}(P_0) + V_C(P_0)$ (5), а начальную стоимость долга — как

$$D(P_0) = x_D P_0 + y_D = \max\left(x_{\text{pos}}(P_0) - x_{\text{user}},\ 0\right)P_0 + \max\left(y_{\text{pos}}(P_0) - y_{\text{user}},\ 0\right) \tag{6–7}$$

Для позиции, где заимствованы оба актива, начальная стоимость долга равна $D(P_0) = V_{\text{pos}}(P_0) - V_{\text{user}}(P_0)$ (8).

Эволюция активов и долга. Стоимость долга эволюционирует как линейная функция цены, подобно портфелю держателя криптовалюты:

$$D(P) = x_D P + y_D \tag{9}$$

В частном случае, когда заимствован только $Y$, долг есть постоянная функция, не зависящая от цены: $D_{y\text{ only}}(P) = D(P_0)$ (10). В другом частном случае, когда заимствованы оба актива:

$$D_{\text{both}}(P) = V_{\text{hold}}(P) - V_{\text{user}}(P) \tag{11}$$

где $V_{\text{hold}}(P)$ — стоимость портфеля «купи и держи» при цене $P$, состав которого совпадает с составом позиции при $P_0$.

Стоимость активов эволюционирует нелинейно и равна сумме стоимости позиции и дополнительного обеспечения: $A(P) = V_{\text{pos}}(P) + V_C(P)$ (12).

Уровень маржи и плечо. Определим уровень маржи $M$ как отношение активов к долгу:

$$M(P) = \frac{A(P)}{D(P)} = \frac{V_{\text{pos}}(P) + V_C(P)}{V_D(P)} = \frac{V_{\text{pos}}(P) + x_C P + y_C}{x_D P + y_D} \tag{13–15}$$

Уровень маржи связан с коэффициентом плеча формулой

$$\operatorname{leverage}(P) = 1 + \frac{1}{M(P) - 1} \tag{16}$$

Например, уровню маржи 1,5 соответствует плечо 3×.

Рисунок 1
Рисунок 1. Примеры функций уровня маржи для стабильной и волатильной пары: (a) стабильная пара, сильно концентрированная позиция; (b) волатильная пара, менее концентрированная позиция. На верхних панелях — активы, долг и собственный капитал; на нижних — уровень маржи и уровень ликвидации.

Ликвидации. Чтобы кредитный протокол оставался платёжеспособным, стоимость активов должна всегда превышать стоимость долга. На практике протоколы не допускают падения уровня маржи ниже заданных безопасных параметров и инициируют ликвидации.

Здоровой считается позиция с $M > M_L$, где $M_L$ — порог ликвидации. Механизм ликвидации пытается погасить часть или весь долг позиции, чтобы поднять её уровень маржи до другого уровня $M_T > M_L$, одновременно выплачивая бонус ликвидатору пропорционально погашенной стоимости. Если это невозможно, механизм гасит столько долга, сколько может, всё же выплачивая бонус в первую очередь. На практике $M_L$, $M_T$ и доля бонуса — параметры протокола, различающиеся для разных пар активов; но все пороги обязаны быть строго выше 1,0, поскольку уровень маржи 1,0 отвечает бесконечному плечу.

Прочие операции. Прежде чем позицию можно ликвидировать, её нужно вывести из пула. Возможно, что вывод активов и погашение уже поднимут уровень маржи выше $M_L$, тем самым избежав ликвидации. Эта операция называется снижением плеча (деливеридж). Формально она уменьшает стоимость и активов, и долга на одну и ту же величину $V_{\text{repaid}}$, повышая уровень маржи:

$$M'(P) = \frac{A(P) - V_{\text{repaid}}}{D(P) - V_{\text{repaid}}} \tag{17}$$

Ликвидировать можно только полностью деливериджированные позиции.

Пользователь также может захотеть сократить позицию, то есть уменьшить экспозицию или вывести часть активов, сохранив уровень маржи. Механизм сокращения уменьшает и активы, и долг в $k$ раз:

$$M'(P) = \frac{(1-k)A(P)}{(1-k)D(P)} \tag{18}$$

Поставщики ликвидности зарабатывают комиссии с трейдеров и платят проценты кредиторам, но мы полагаем эти комиссии малыми и пренебрегаем ими в краткосрочных расчётах платёжеспособности.

3. Анализ

3.1. Свойства системы

В статье демонстрируются следующие свойства протокола:

  1. Безопасность внутри интервала: если функция $M(P)$ не ниже порога $M_L$ на обоих концах ценового интервала $[P_L, P_H]$, она не ниже порога и в каждой точке внутри интервала.
  2. Вычислимость ценовых границ: при заданных пороге $M_L$ и ликвидности $L$ существуют функции, определяющие цены $P_L$ и $P_H$, где достигается порог.
  3. Вычислимость максимальной безопасной ликвидности: безопасный уровень ликвидности для интервала и порога вычисляется численно двоичным поиском.
  4. Безопасность сокращений: сокращение здоровой позиции не меняет её уровня маржи.
  5. Безопасность деливериджа: снижение плеча позиции с положительной маржой ($M > 1{,}0$) повышает её уровень маржи.
  6. Безопасность ликвидаций: ликвидация позиции выше критического уровня $M_C$ и делает остаток здоровым, и выплачивает бонус в полном объёме.
  7. Защищённость от манипулирования ценой: манипуляция спот-ценой в пуле не может уменьшить стоимость позиции.
  8. Связь с дивергентными потерями: по мере роста плеча форма функции уровня маржи приближается к форме функции дивергентных потерь.

3.2. Безопасность внутри интервала

Удобно опираться на то, что если уровень маржи безопасен на обоих концах интервала, он гарантированно остаётся безопасным всюду внутри. Пока цена остаётся в этом интервале, позиция не может быть ликвидирована. Формально, если $M(P_L) \ge M_L$ и $M(P_H) \ge M_L$, то

$$\forall P:\ P_L < P < P_H \implies M(P) \ge M_L \tag{19}$$

Это свойство позволяет протоколу и пользователю проверять уровни маржи только на концах интервала. Свойство верно, если функция маржи не имеет локальных минимумов, — что как раз и выполняется для AMM в стиле Uniswap v3, где стоимость позиции задаётся формулой (1).

Рисунок 2
Рисунок 2. Пример безопасности внутри интервала: весь диапазон между двумя ценами, такими как $P_0$ и $P_H$, гарантированно защищён от ликвидации, поскольку безопасны обе эти точки. Безопасные уровни маржи показаны зелёным фоном, прочие — красным.

3.3. Вычислимость ценовых границ

Помимо вычисления уровня маржи при заданной цене, можно решать обратную задачу: находить целевые цены $P_L$ и $P_H$, где достигается заданный уровень $M_L$. Типичная функция маржи имеет форму перевёрнутой параболы в своей области определения, однако существуют частные случаи монотонного возрастания или убывания. В общем случае применим следующий алгоритм:

  1. Проверить $M(P_0)$. Если ниже порога — завершить досрочно: позицию нельзя безопасно открыть.
  2. Проверить $M(p_a)$: если выше порога, то $P_L \le p_a$ по свойству безопасности внутри интервала, и $P_L$ либо равна нулю, либо находится решением простого линейного уравнения. Иначе $p_a < P_L \le P$, и $P_L$ находится по выражению из приложения.
  3. Проверить $M(p_b)$ симметричным образом.

Выражения для $P_L$ и $P_H$ внутри диапазона получены с помощью пакета sympy для Python.

3.4. Вычислимость максимальной безопасной ликвидности

Задача — вычислить максимально допустимый уровень ликвидности $L_{\max}$, при котором $M(P) > M_L$ для всех цен интервала. По свойству безопасности внутри интервала $L_{\max} = \min\left(L_{\max}(P_L),\ L_{\max}(P_H)\right)$, где $L_{\max}(P)$ — значение $L$, при котором $M(P) = M_L$.

Уровни $P_L$ и $P_H$ могут быть параметрами пользователя или протокола, выраженными через начальную цену с помощью коэффициента диапазона $r$: $P_L = P_0/r$, $P_H = P_0 r$ (20–21).

Точные решения существуют и найдены, но имеют сложный характер с разбором случаев в зависимости от того, лежат ли $P_L$ и $P_H$ в диапазоне и заимствованы ли оба актива или один. На практике удобнее вычислять решения численно двоичным поиском; его сходимость гарантирована отсутствием локальных минимумов функции маржи.

3.5. Безопасность сокращений

Протокол позволяет сокращать здоровые позиции. Уровень маржи позиции, сокращённой в $k$ раз, не меняется при $0 < k < 1$:

$$M'(P) = \frac{(1-k)A(P)}{(1-k)D(P)} = M(P) \tag{22}$$

Определим $V_{\text{removed}} = kA(P)$, $V_{\text{repaid}} = kD(P)$ и $V_{\text{freed}} = V_{\text{removed}} - V_{\text{repaid}}$ (23–25). По предположению $M(P) > M_L > 1{,}0$, откуда $kA(P) > kD(P)$. Следовательно, $V_{\text{freed}}$ строго положительна: пользователь гарантированно получает некоторое количество свободных активов после сокращения здоровой позиции.

3.6. Безопасность снижения плеча

Деливеридж изымает часть активов позиции и направляет их на погашение долга, где $0 < V_{\text{repaid}} \le D(P)$. Отличие деливериджа от ликвидации в том, что он гасит только те активы, что уже находятся в позиции, то есть без их обмена, и потому не подвержен ценовым рискам в той же мере.

Пусть $M(P) > 1{,}0$, тогда $A(P) > D(P)$. Введём $\varepsilon = A(P) - D(P)$:

$$M(P) = \frac{A(P)}{D(P)} = 1 + \frac{\varepsilon}{D(P)}, \qquad M'(P) = \frac{A(P) - V_{\text{repaid}}}{D(P) - V_{\text{repaid}}} = 1 + \frac{\varepsilon}{D(P) - V_{\text{repaid}}} \tag{27–28}$$

Поскольку $D(P) > D(P) - V_{\text{repaid}}$, следует $M'(P) > M(P)$: снижение плеча может только повысить уровень маржи, если выполнено допущение $M(P) > 1{,}0$. Отметим, что для позиций с уровнем маржи не выше 1,0 это свойство неверно.

3.7. Безопасность ликвидаций

Ликвидация конвертирует часть активов пользователя для полного или частичного погашения долга. Уровень маржи после ликвидации меняется схожим с деливериджем образом, но с дополнительным членом — бонусом ликвидатора:

$$M'(P) = \frac{A(P) - V_{\text{repaid}} - V_{\text{bonus}}}{D(P) - V_{\text{repaid}}}, \qquad V_{\text{bonus}} = \beta V_{\text{repaid}} \tag{29–30}$$

Существует критический порог $M_C$, ниже которого долг не может быть погашен полностью. На этом пороге погашаемая стоимость равна стоимости долга и потребляет все активы:

$$A(P) = V_{\text{repaid}} + \beta V_{\text{repaid}}, \quad D(P) = V_{\text{repaid}} \implies M_C = 1 + \beta \tag{31–32}$$

Для безопасной работы протокола значения $M_L$ и $M_T$ следует задавать так, чтобы $M_C < M_L < M_T$. Если определить $V_{\text{repaid}}(P)$ через активы как $kA(P)$, то коэффициент $k$ вычисляется как

$$k = \begin{cases} 0, & \text{если } M \ge M_L \\[4pt] \dfrac{M_T - M}{\left(M_T - (1+\beta)\right)M}, & \text{если } M_L > M > M_C \\[8pt] \dfrac{1}{1+\beta}, & \text{если } M \le M_C \end{cases} \tag{33}$$

Разбор случаев:

  1. Если $M \ge M_L$, ликвидация не происходит.
  2. Если $M_L > M > M_C$, долг ликвидируется полностью, и новый уровень маржи равен $$M' = \frac{A(P) - kA(P) - k\beta A(P)}{D(P) - kA(P)} = \frac{1 - (1+\beta)k}{\frac{1}{M} - k} \tag{34}$$
  3. Если $M = M_C$, долг ликвидируется полностью, но вместе с ним и активы.
  4. Если $M < M_C$, активы ликвидируются полностью, но часть долга остаётся. Мы полагаем приоритетом выплату бонуса ликвидатору в полном объёме.

Только второй случай требует анализа, чтобы показать, что $M'$ больше $M$: алгебраически можно показать, что $M'$ равен $M_T$, который по предположению больше $M$.

Дополнительно: значение $k$ задаёт нижнюю границу требуемого для безопасной работы. Протоколы могут выбрать более агрессивные ликвидации — например, Kai Leverage полностью ликвидирует позицию, если её уровень маржи падает ниже $(M_L + M_C)/2$. Если уровень ниже $M_C$, долг не может быть погашен полностью с одновременной выплатой бонуса; протокол может отдать приоритет ликвидаторам, зафиксировав бонус равным $\beta D(P)$. Таких ситуаций следует избегать, поскольку они создают протоколу безнадёжный долг.

3.8. Защищённость от манипулирования ценой

Считается, что спот-цену AMM легко манипулировать на коротких промежутках. Если бы это позволяло опустить уровень маржи ниже $M_L$, здоровые позиции стали бы пригодны для ликвидации; а если ниже $1+\beta$, протокол мог бы понести безнадёжный долг. Поэтому критически важно показать устойчивость протокола к манипуляции спот-ценой при наличии точной цены от оракула.

Прежде всего, манипуляция не может изменить стоимость позиции вне диапазона, поскольку не меняет её состав. Без потери общности можно считать, что позиция в диапазоне и пул имеет ненулевую ликвидность. Манипуляцию в пулах концентрированной ликвидности можно моделировать как серию манипуляций в пулах вида $xy = k$, поэтому достаточно доказать свойство для них. Наличие любых комиссий делает атаку дороже, поэтому рассмотрим случай без комиссий.

Рассмотрим обмен, меняющий баланс пула на $\Delta x$ и $\Delta y$. Стоимость позиции после обмена, вычисленная по истинной (оракульной) цене $P$:

$$V'_{\text{pos}} = V_{\text{pos}} + \Delta V = V_{\text{pos}} + \Delta x \cdot P + \Delta y \tag{35}$$

Приращения вычисляются через ликвидность $L$, текущую цену $P$ и цену после обмена $P'$:

$$\Delta x = \frac{L}{\sqrt{P'}} - \frac{L}{\sqrt{P}}, \qquad \Delta y = L\sqrt{P'} - L\sqrt{P} \tag{36–37}$$

Изменение стоимости позиции:

$$\Delta V = \Delta x\cdot P + \Delta y = \left(\frac{L}{\sqrt{P'}} - \frac{L}{\sqrt{P}}\right)P + L\sqrt{P'} - L\sqrt{P} = L\frac{P - 2\sqrt{P'}\sqrt{P} + P'}{\sqrt{P'}} = L\frac{\left(\sqrt{P} - \sqrt{P'}\right)^2}{\sqrt{P'}} \tag{38–41}$$

Квадрат в числителе гарантирует, что $\Delta V$ положительно, поскольку $L$, $P$, $P'$ положительны. Тем самым доказано, что любой манипулирующий ценой обмен при указанных допущениях всегда увеличивает стоимость активов в позиции. Принудить к ликвидации здоровые позиции таким способом невозможно.

3.9. Связь с дивергентными потерями

Относительные дивергентные потери позиции (также называемые «непостоянными потерями» или «потерями от ребалансировки») определяются как

$$DL_{\text{relative}}(P) = \frac{V_{\text{pos}}(P) - V_{\text{hold}}(P)}{V_{\text{hold}}(P)} = \frac{V_{\text{pos}}(P)}{V_{\text{hold}}(P)} - 1 \tag{42–43}$$

Функция уровня маржи при заимствовании обоих активов ($x_C = y_C = 0$) сводится к

$$M(P) = \frac{V_{\text{pos}}(P)}{V_{\text{hold}}(P) - V_{\text{user}}(P)} \tag{44}$$

Сходство формул (43) и (44) показывает, что при $V_{\text{user}} \to 0$ уровень маржи $M(P) \to DL(P) + 1$. Отсюда следует, что потери поставщика концентрированной ликвидности с плечом, занимающего оба актива, совпадают с дивергентными потерями полной позиции (при бенчмарке «купи и держи» в начальных пропорциях токенов). Относительно стартового капитала поставщика эти потери равны дивергентным потерям, умноженным на начальный коэффициент плеча.

4. Практические аспекты

Этот раздел относится к реализации в протоколе Kai Leverage, хотя многие аспекты общие с другими реализациями.

4.1. Пулы предложения

Пулы предложения — односторонние пулы ликвидности, служащие источником средств для позиций с плечом. Внесённая в них ликвидность зарабатывает проценты по мере заимствования активов. Модель процента основана на кусочной кривой, повышающей ставку с ростом утилизации пула.

Стоит отметить, что каждый пул предложения имеет отдельную модель процента для каждого пула биржи, над которым создаются позиции с плечом. Это означает, что поставщики ликвидности могут зарабатывать более высокие ставки, когда их активы используются в позициях с более высоким риском — скажем, больше в пуле SUI/USDC, чем в USDC/USDT.

4.2. Создание позиции

При создании позиции проверяются следующие утверждения:

  1. Текущая цена пула находится в диапазоне позиции: $p_a \le P_0 \le p_b$.
  2. Уровни маржи позиции при ценах, отстоящих от текущей на $\Delta P$ в обе стороны, выше $M_L$: $\min\left(M((1-\Delta P)P_0),\ M((1+\Delta P)P_0)\right) > M_L$.
  3. Начальная маржа позиции выше минимальной: $M(P_0) > M_0$.

Третье утверждение строго говоря не необходимо, поскольку первые два уже подразумевают максимальное плечо, но на практике полезно иметь такую проверку для ограничения риска.

Есть и два других ограничения, не входящих в модель плеча, но полезных для ограничения риска ликвидаций и риска экосистемы: максимум ликвидности в одной позиции и максимум суммарной ликвидности по всем позициям одного пула.

4.3. Снижение плеча

Механизм деливериджа введён потому, что ликвидации требуют вывода всей позиции из пула. Поскольку выведенные активы часто можно направить на погашение части долга, уровень маржи может подняться достаточно, чтобы избежать неминуемой ликвидации. Деливеридж запускается, когда уровень маржи опускается ниже соответствующего параметра, который задан выше порога ликвидации и служит буфером безопасности.

Деливеридж — действие с ограниченными правами: третьи стороны не могут его запустить, им управляет административная система. Ни штрафа, ни вознаграждения, ни комиссии за деливеридж не взимается, поскольку фактической ликвидации не происходит: активы просто выводятся из пула и используются для погашения долга. Если административная система откажет, позиция будет ликвидирована стандартным (открытым для всех) механизмом при падении маржи ниже порога ликвидации.

4.4. Ликвидация

Ликвидация — действие, доступное любому. Обычно, если система деливериджа работает корректно, позиция будет полностью деливериджирована прежде, чем достигнет уровня ликвидации. Если нет, деливеридж выполняется ликвидаторами после падения позиции ниже порога.

Важно отметить, что после полного деливериджа всё обеспечение окажется целиком в одном из двух активов пула, а долг — в другом. Так происходит потому, что все выведенные из позиции активы и всё дополнительное обеспечение направляются на погашение максимально возможной части долга. На этом этапе ликвидация сводится к продаже оставшегося обеспечения для погашения долга.

Бонус ликвидатора, определяемый как процент от погашаемого долга, изымается из ликвидируемой позиции и передаётся ликвидатору как стимул. Ликвидаторы всегда гарантированно получают этот бонус, даже если позиция ниже критического уровня маржи.

Литература

Оригинал статьи: Elsts, A., Klas, K., «Concentrated Liquidity with Leverage», arXiv:2409.12803