Содержание:
Введение
Инвариант с постоянной суммой
Инвариант с постоянным произведением
Инвариант StableSwap
Заключение
1. Введение
Curve Finance — это децентрализованная биржа (DEX), построенная на блокчейне Ethereum (и впоследствии на других EVM сетях). Она использует модель автоматического маркетмейкера (AMM), концепции, которая также используется другими известными DEX, такими как Uniswap.
Первая версия Curve (ранее известная как StableSwap) была предложена Михаилом Егоровым в ноябре 2019 года. С момента своего запуска в январе 2020 года Curve быстро выросла и стала одним из самых влиятельных протоколов в сфере DeFi. Изначальная идея Curve заключалась в создании биржи с низким проскальзыванием и низкими комиссиями для торговли между привязанными активами, такими как стейблкоины. Новая модель AMM, разработанная Curve, оказалась значительно более эффективной для торговли стейблкоинами по сравнению с конкурентами.
Что отличает Curve от других децентрализованных бирж (DEX) и делает этот протокол таким эффективным? Ключ к пониманию инновации Curve заключается в инварианте StableSwap — концепции, объединяющей элементы двух других инвариантов: инварианта с постоянной суммой и инварианта с постоянным произведением.
(Примечание: Инвариант — это величина в формуле, которая остаётся неизменной.)
В этой статье я подробно объясню особенности каждого из этих инвариантов и раскрою принципы работы модели автоматизированного маркетмейкера (AMM) StableSwap. Эта статья не предназначена для изучения работы с Curve; для этого вы можете обратиться к официальному сайту Curve.
Давайте разбираться!
Небольшое отступление: в своём Telegram-канале я делюсь ещё большим количеством полезного контента о децентрализованных финансах и деривативах: t.me/kirrya_achieves
2. Инвариант с постоянной суммой:
Прежде чем перейти к инварианту StableSwap, рассмотрим инвариант с постоянной суммой, который выражается следующим образом:
Переменные X и Y обозначают количество токенов в пуле, а C — сам инвариант. В модели с постоянной суммой обменный курс токенов остаётся неизменным, независимо от их количества в пуле.
(Примечание: обменный курс — это наклон графика в определённой точке кривой.)
Например, предположим, что 1 токен X можно обменять на 5 токенов Y. Обменный курс вычисляется как наклон кривой, таким образом, 1X = 5Y. Этот курс обмена между двумя токенами останется постоянным после каждой транзакции.
Однако инварианты с постоянной суммой не предполагают проскальзывания, то есть цена остаётся неизменной до и после сделки. В результате, по мере того как из пула выводятся токены, баланс нарушается, и в конечном итоге пул полностью истощается.
3. Инвариант с постоянным произведением
Инвариант с постоянным произведением решает проблему истощения пула токенов, вводя механизм проскальзывания в систему. Этот подход был впервые популяризирован в ранней версии AMM Uniswap в 2019 году.
Формула инварианта с постоянным произведением выглядит следующим образом:
Здесь X и Y обозначают количество токенов в пуле, а K — сам инвариант. В данной модели обменный курс токенов изменяется в зависимости от их количества в пуле.
Согласно приведённой выше кривой, предположим, что в пуле изначально находится 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:
Инвариант D представляет общее количество токенов в пуле при равных ценах, а n — количество токенов. Теперь наш новый инвариант выглядит следующим образом:
И график нового инварианта:
Использование ‘χ’:
Как показано на графике выше, наш новый инвариант всё ещё сильно похож на инвариант с постоянным произведением (AMM Uniswap). Чтобы наш новый инвариант имел меньшее проскальзывание, мы усиливаем инвариант с постоянной суммой с помощью коэффициента рычага χ (хи):
Новый инвариант изменяется в зависимости от χ (хи):
Значение χ (хи) определяет «плоскость» кривой вокруг центра, что, в свою очередь, влияет на проскальзывание. Наш новый инвариант (зелёная линия) располагается между инвариантами с постоянным произведением (синяя линия) и постоянной суммой (красная линия), что делает его более эффективным, чем инвариант Uniswap, при этом обеспечивая баланс пула.
Безразмерный рычаг χ:
Чтобы сделать коэффициент рычага χ безразмерным, то есть чтобы χ не зависел от общего числа токенов D, мы умножаем инвариант с постоянной суммой на
(Примечание: мы умножаем на , а не просто на D, чтобы упростить уравнение).
Коэффициент усиления A:
Теперь нам нужно убедиться, что наш новый инвариант поддерживает ликвидность на всех ценах, а не только вокруг идеальной цены 1. Для этого мы делаем коэффициент рычага χ динамическим:
Коэффициент усиления A является постоянным. Когда пул сбалансирован, коэффициент рычага χ = A (так как X * Y = n), кривая «выравнивается» вокруг центра и ведёт себя как инвариант с постоянной суммой. Когда пул выходит из баланса, χ падает до 0 (χ → 0), и кривая переходит в инвариант с постоянной суммой.
Подставим новый χ в наш новый инвариант:
Решив и упростив уравнение, мы получаем наш окончательный инвариант StableSwap:
5. Заключение
Первая версия Curve использует инвариант StableSwap, чтобы эффективно уменьшить проскальзывание, при этом поддерживая баланс пула.
Инвариант StableSwap объединяет инварианты с постоянной суммой и постоянным произведением.
-
Когда пул Curve сбалансирован, AMM StableSwap ведёт себя как инвариант с постоянной суммой, но при выходе пула из баланса переходит в инвариант с постоянным произведением.
На этом всё по Curve V1!