Curve V1: Принцип работы модели StableSwap

в 12:07, , рубрики: amm, curve, dex, stableswap

Содержание:

  1. Введение

  2. Инвариант с постоянной суммой

  3. Инвариант с постоянным произведением

  4. Инвариант StableSwap

  5. Заключение

1. Введение

Curve Finance — это децентрализованная биржа (DEX), построенная на блокчейне Ethereum (и впоследствии на других EVM сетях). Она использует модель автоматического маркетмейкера (AMM), концепции, которая также используется другими известными DEX, такими как Uniswap.

Первая версия Curve (ранее известная как StableSwap) была предложена Михаилом Егоровым в ноябре 2019 года. С момента своего запуска в январе 2020 года Curve быстро выросла и стала одним из самых влиятельных протоколов в сфере DeFi. Изначальная идея Curve заключалась в создании биржи с низким проскальзыванием и низкими комиссиями для торговли между привязанными активами, такими как стейблкоины. Новая модель AMM, разработанная Curve, оказалась значительно более эффективной для торговли стейблкоинами по сравнению с конкурентами.

Curve’s Classic UI (https://classic.curve.fi/)
Curve’s Classic UI (https://classic.curve.fi/)

Что отличает Curve от других децентрализованных бирж (DEX) и делает этот протокол таким эффективным? Ключ к пониманию инновации Curve заключается в инварианте StableSwap — концепции, объединяющей элементы двух других инвариантов: инварианта с постоянной суммой и инварианта с постоянным произведением.
(Примечание: Инвариант — это величина в формуле, которая остаётся неизменной.)

В этой статье я подробно объясню особенности каждого из этих инвариантов и раскрою принципы работы модели автоматизированного маркетмейкера (AMM) StableSwap. Эта статья не предназначена для изучения работы с Curve; для этого вы можете обратиться к официальному сайту Curve.

Давайте разбираться!

Небольшое отступление: в своём Telegram-канале я делюсь ещё большим количеством полезного контента о децентрализованных финансах и деривативах: t.me/kirrya_achieves

2. Инвариант с постоянной суммой:

Прежде чем перейти к инварианту StableSwap, рассмотрим инвариант с постоянной суммой, который выражается следующим образом:

Curve V1: Принцип работы модели StableSwap - 2

Переменные X и Y обозначают количество токенов в пуле, а C — сам инвариант. В модели с постоянной суммой обменный курс токенов остаётся неизменным, независимо от их количества в пуле.
(Примечание: обменный курс — это наклон графика в определённой точке кривой.)

Например, предположим, что 1 токен X можно обменять на 5 токенов Y. Обменный курс вычисляется как наклон кривой, таким образом, 1X = 5Y. Этот курс обмена между двумя токенами останется постоянным после каждой транзакции.

Constant sum invariant graph

Constant sum invariant graph

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

3. Инвариант с постоянным произведением

Инвариант с постоянным произведением решает проблему истощения пула токенов, вводя механизм проскальзывания в систему. Этот подход был впервые популяризирован в ранней версии AMM Uniswap в 2019 году.

Формула инварианта с постоянным произведением выглядит следующим образом:

Curve V1: Принцип работы модели StableSwap - 4

Здесь X и Y обозначают количество токенов в пуле, а K — сам инвариант. В данной модели обменный курс токенов изменяется в зависимости от их количества в пуле.

Constant product invariant graph

Constant product invariant graph

Согласно приведённой выше кривой, предположим, что в пуле изначально находится 50 токенов X и 50 токенов Y. В таком случае инвариант K будет равен 2500 (X * Y = K).

Пользователь хочет купить 10 токенов X в обмен на токены Y, что уменьшит количество токенов X в пуле и увеличит количество токенов Y. Количество токенов Y, которые пользователь должен внести, рассчитывается по следующей формуле (без учёта торговых комиссий):

X * Y = K
(50 - 10) * Y = 2500
Y = 62.5

Amount of Y deposits = Y_after - Y_before  = 62.5 - 50  = 12.5

Пользователю нужно внести 12,5 токенов Y, чтобы обменять их на 10 токенов X, а обменный курс при этом составит 1 X = 1,25 Y. После сделки в пуле останется 40 токенов X и 62,5 токенов Y.

Если пользователь захочет купить ещё 10 токенов X, ему потребуется внести больше токенов Y — уже 20,83 токена Y. Пул автоматически корректирует цену токенов! Это означает, что по мере дисбаланса пула обменный курс увеличивается экспоненциально, делая процесс истощения пула дороже и сложнее.

Когда цена токенов в пуле изменяется из-за проскальзывания, создаётся пространство для арбитража, что стимулирует арбитражёров вмешиваться и восстанавливать баланс пула.

4. Инвариант StableSwap

Curve V1 объединяет инвариант с постоянной суммой и инвариант с постоянным произведением, чтобы найти баланс между низким проскальзыванием и поддержанием баланса пула. Так был создан инвариант StableSwap.

Построение инварианта StableSwap:

Сначала перепишем инварианты с постоянной суммой и постоянным произведением для представления любого общего количества токенов n:

Curve V1: Принцип работы модели StableSwap - 6
Curve V1: Принцип работы модели StableSwap - 7

Инвариант D представляет общее количество токенов в пуле при равных ценах, а n — количество токенов. Теперь наш новый инвариант выглядит следующим образом:

Curve V1: Принцип работы модели StableSwap - 8

И график нового инварианта:

Новый инвариант (зелёная линия) между инвариантом с постоянным произведением (красная линия) и инвариантом с постоянной суммой (синяя линия).

Новый инвариант (зелёная линия) между инвариантом с постоянным произведением (красная линия) и инвариантом с постоянной суммой (синяя линия).

Использование ‘χ’:

Как показано на графике выше, наш новый инвариант всё ещё сильно похож на инвариант с постоянным произведением (AMM Uniswap). Чтобы наш новый инвариант имел меньшее проскальзывание, мы усиливаем инвариант с постоянной суммой с помощью коэффициента рычага χ (хи):

Curve V1: Принцип работы модели StableSwap - 10

Новый инвариант изменяется в зависимости от χ (хи):

New invariant (Green line) ‘flattens’ depending on X (chi)

New invariant (Green line) ‘flattens’ depending on X (chi)

Значение χ (хи) определяет «плоскость» кривой вокруг центра, что, в свою очередь, влияет на проскальзывание. Наш новый инвариант (зелёная линия) располагается между инвариантами с постоянным произведением (синяя линия) и постоянной суммой (красная линия), что делает его более эффективным, чем инвариант Uniswap, при этом обеспечивая баланс пула.

Безразмерный рычаг χ:

Чтобы сделать коэффициент рычага χ безразмерным, то есть чтобы χ не зависел от общего числа токенов D, мы умножаем инвариант с постоянной суммой на D^{(n−1)}

Curve V1: Принцип работы модели StableSwap - 14

(Примечание: мы умножаем на D(n−1), а не просто на D, чтобы упростить уравнение).

Коэффициент усиления A:

Теперь нам нужно убедиться, что наш новый инвариант поддерживает ликвидность на всех ценах, а не только вокруг идеальной цены 1. Для этого мы делаем коэффициент рычага χ динамическим:

Curve V1: Принцип работы модели StableSwap - 17

Коэффициент усиления A является постоянным. Когда пул сбалансирован, коэффициент рычага χ = A (так как X * Y = (D/n)n), кривая «выравнивается» вокруг центра и ведёт себя как инвариант с постоянной суммой. Когда пул выходит из баланса, χ падает до 0 (χ → 0), и кривая переходит в инвариант с постоянной суммой.

Подставим новый χ в наш новый инвариант:

Curve V1: Принцип работы модели StableSwap - 19

Решив и упростив уравнение, мы получаем наш окончательный инвариант StableSwap:

Curve V1: Принцип работы модели StableSwap - 20
StableSwap invariant (Green line) ‘flattens’ depending on A (amplification coefficient)

StableSwap invariant (Green line) ‘flattens’ depending on A (amplification coefficient)

5. Заключение

  • Первая версия Curve использует инвариант StableSwap, чтобы эффективно уменьшить проскальзывание, при этом поддерживая баланс пула.

  • Инвариант StableSwap объединяет инварианты с постоянной суммой и постоянным произведением.

  • Когда пул Curve сбалансирован, AMM StableSwap ведёт себя как инвариант с постоянной суммой, но при выходе пула из баланса переходит в инвариант с постоянным произведением.

    На этом всё по Curve V1!

Мой телеграм-канал:

https://t.me/kirrya_achieves

Автор: kirrya

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js