Блог им. Ilia_Zavialov
Перед тем как вы погрузитесь в изучение статьи, обратите внимание на тот факт что всё упомянутое в ней не является финансовой рекомендацией для принятие более взвешенного решения просьба провести свое собственное исследование.
Основная цель curve.fi — это предоставление возможности обмена стейблкоинов с низким проскальзыванием (далее подробнее разберем, что это такое).
Начнем по порядку разбираться, как устроены АММ алогоритмы.
Uniswap AMMКаждый, кто хоть немного углублялся в defi встречал формулу .
x*y=k
Это упрощенное представление алгоритма, который лежит в основе Uniswap.
Это формула означает, что отношение активов (токенов) в пуле — это неизменное значение.
Пример:
Представим, что у нас есть пул USDT/ETH, и в пуле лежит 40000 USDT (это X) и 10 ETH (это Y), таким образом 40000*10=400’000 (это K).
Теперь к нам пришел условный Вася и хочет обменять свои 4000 USDT на ETH.
Давайте посчитаем как изменится количество токенов в пуле, используя нашу формулу.
После того как Вася внес 4000 USDT, в пуле стало 44000 USDT (там еще Uniswap забирает комиссию 0.3%, но мы опустим это).
Теперь на надо посчитать сколько ETH нужно отдать Васе.
Составим простое уравнение за средней школы:
44000 (наш Х) * y = 400000 (наш К)
Теперь нам надо найти сколько ETH должно быть в пуле, чтобы уравнение сошлось. Разделим обе части на 44000 (то есть X) и получим y=400000/44000. Таким образом y=9.09
Mы получили количество ETH, которое ДОЛЖНО БЫТЬ В ПУЛЕ. Теперь надо разницу отдать Васе. 10ETH — 9.09ETH = 0.91 ETH (куда делось 0.09 ETH???)
Как мы могли заметить, когда Вася внес 4000 USDT, цена автоматически изменилась.
Теперь 1 ETH стоит Y/X, то есть 44000/9.09=4840 USDT.
Давайте рассмотрим, что произойдет, когда Вася захочет еще раз обменять 4000 USDT.
Произведем еще раз все вычисления:
(44000 + 4000) * y = 400000
Y = 8.33
Таким образом в пуле станет 48000 USDT, 8,33 ETH
И 1 ETH будет стоить 5762 USDT
Как мы увидели на двух примерах, при росте спроса на один из активов, цена второго автоматики изменяется. Потому это и называется AMM (автоматический маркет мейкер).
Красный график показывает количество токенов в пуле
Синий график (производная от x*y) показывает цену токенов
Проскальзывание — это величина, которая показывает насколько изменится цена, после того как покупатель, Вася в нашем случае, захочет обменять средства. Если говорить максимально просто, то это то насколько меньше вы получите по факту сделки.
В первом примере мы увидели, что изначально 1 ETH стоил 4000 USDT, но по факту Вася купил по цене 4395 USDT (4000/0.91)
Ответ: от ликвидности (количества токенов в пуле)
Разберемся почему:
Формула для расчета проскальзывания выглядит так:
Чтобы проще понять, как работает эта формула рассмотрим два случая
Предположим у нас есть пул, где:
1'000'000 токенов X
5'000'000 токенов Y
K = 5 * 10^12
Рассмотрим два примера, как менялась цена (изначальная цена была 5 у.е):
Давайте посмотрим, что произойдет, если кто-то захочет полностью забрать один из активов в пуле.
В нашем воображаемом пуле будет
100 ETH
400'000 USDT
В нашем случае Вася будет покупать по 100 ETH на централизованной бирже и продавать в нашем пуле
Купив 100 ETH за 400000 USDT, он пришел в наш пул и продал 100 ETH
Теперь в пуле
200 ETH
200'000 USDT
Вася потратил 4000$
Если сделать так очень много раз и построить график, то получится вот такая зависимость.
По графику видно, что чем больше денег мы тратим, тем меньше цена ETH, но в какой-то момент она начинает незначительно меняться в сравнении с потраченной суммой.
Таким образом можно заметить, что выкупить всю ликвидность из пула почти невозможно.
Чем плох Uniswap AMM?
Представим ситуацию, что у нас в пуле лежит не ETH/USDT, а пара стейблкоинов USDT/USDC
Опять рассмотрим пример, где Вася на одну и ту же сумму покупает один из активов.
У нас есть пул:
100'000 USDT
100'000 USDC
Из таблиц видно, что при маленьких суммах разница не очень большая, но когда Вася начинает менять по 10000 USDT, то на 3 сделке он теряет 500$ из-за проскальзывания, хотя меняет доллар на доллар.
Пул без проскальзывания (такое бывает ???)
Давайте представим пул, в котором цена активов будет постоянной, то есть я в любой момент смогу обменять 1000 USDT на 1000 USDC 1:1, звучит как решение для нашей проблемы с обменом стейблкоинов.
Но не так все просто и вот почему...
Если описывать такой пул, то это будет пул с линейной зависимостью (как на алгебре в 9 классе y=kx+b).
Например у нас есть пул, и в нем:
1000 USDC
1000 USDT
Выражение описывающее пул будет следующим:
X + Y = C
X — количество токена #1
Y — количество токена #2
C — сумма токенов
в нашем примере мы получим X + Y = 2000.
Вот как это будет выглядеть, если мы построим график зависимости количества токенов в пуле.