Что такое непостоянная потеря в LP пулах
В этой статье вы узнаете о том, что такое непостоянные потери и откуда они берутся, а также подробно разберётесь в механике работы простейшего децентрализованного обменника.
Оглавление:
- Что такое пул ликвидности?
- Ценообразование на DEX.
- Непостоянная потеря.
3.1 Откуда она берётся.
3.2 Расчёт непостоянной потери. - Вывод.
Что такое пул ликвидности?
Думаю, многие из вас, кто хоть раз имел дело с пулами ликвидности на децентрализованных обменниках (PancakeSwap, Sushiswap, Uniswap, 1inch и других), слышал о пресловутых непостоянных потерях. Прежде чем мы перейдём к ним, нужно детально разобраться с тем, что же из себя представляет пул ликвидности.
По своей природе он является смарт-контрактом, куда одни люди
(LP — liquidity providers или поставщики ликвидности) отправляют свои монеты, чтобы другие смогли произвести обмен своих токенов.
Например, на Uniswap есть пара DAI (стейблкоин) — ETH. Поставщики ликвидности отправляют в смарт-контракт этой пары свои DAI и ETH в равном долларовом эквиваленте, взамен получая LP-токены — расписку о том, что они владеют частью пула.
Мы же с вами теперь можем поменять свои DAI на эфир или наоборот, заплатив при этом 0.3% с суммы обмена тем, кто предоставил ликвидность.
Ценообразование на DEX.
Важно отметить, что цена на DEX не берётся с Binance или другой биржи — она равна отношению количества токенов в пуле ликвидности конкретной пары.
Например, в данный момент в пуле DAI - ETH на Uniswap 75 481 745 DAI и 29 687 ETH. Обменять 1 ETH можно на ~2542.6 DAI (75 481 745 / 29 687), а 1 DAI на ~ 0.0004 ETH (29 687 / 75 481 745 или 1 / 2542.6):
Зайдя на Uniswap, можно обнаружить, что цены там всегда очень близки к биржевым. Как же так получается?
Давайте представим, что на Binance спрос на эфир вырос, и его цена увеличилась с 2542.6$ до 2700$.
На Uniswap же в это время, отношение количества ETH к DAI до сих пор 1 к ~2542.6.
Этой ситуацией воспользуются предприимчивые трейдеры, которые начнут скупать "дешёвый" эфир на Uniswap, меняя его за свои DAI, тем самым уменьшая количество эфира в смарт-контракте и выравнивая его соотношение к DAI до 1 к 2700.
Затем этот эфир они продадут на бирже дороже.
Такую арбитражную ситуацию также заметят и торговые роботы, которые не дремлют и реагируют моментально.
Для расчёта цены децентрализованные обменники используют следующую формулу:
где x,y — количество каждой из монет в паре, а k — постоянная (на самом деле, после каждого обмена она увеличивается на 0.3% от суммы последнего за счёт комиссий на обмене, но для простоты мы в дальнейшем это учитывать не будем )
Как ни странно, из этой формулы следует то, что на чем большую сумму мы производим обмен, тем больше переплачиваем. Это можно сравнить с тем, как если бы мы решили купить какой-нибудь непопулярной монетки на несколько десятков миллионов долларов одним рыночным ордером. Понятное дело, что наша заявка начнёт исполняться о другие заявки с гораздо меньшими объёмами по всё большей цене. Таким образом, средняя цена закупки будет гораздо выше рыночной цены на токен до нашего прихода:
То, что я описал, называется trading slippage или проскальзывание.
Давайте всё рассмотрим на примере: есть пара DAI — ETH. Допустим, в пуле ликвидности находится 1 000 DAI и 10 ETH. Получается, что цена одного эфира — 100$.
Кто-то хочет купить эфира на 100 DAI и рассчитывает получить 1 ETH обратно. Но это достаточно большая заявка — целых 5% (100$ / 2000$ = 0.05) от размера всего пула. В реальности же во многих пулах ликвидности монет на сотни миллионов долларов:
Давайте посчитаем, какое в данном случае будет проскальзывание.
Воспользовавшись формулой, приведённой выше (x * y = k), рассчитаем коэффициент k:
1 000 (DAI) * 10 (ETH) = 10 000
Человек отправляет 100 DAI. Теперь в пуле будет (1000 + 100) = 1 100 DAI, а значит, эфира должно быть k / x, то есть (10 000 / 1 100) ≈ 9,091 монет, а сейчас там 10 ETH.
Значит, человеку обратно отправится (10 - 9,091) = 0,909 ETH, что меньше того, на что он изначально рассчитывал. Цена закупки выйдет (100 / 0,909) ≈ 110$, то есть проскальзывание будет равно 10%:
В реальности бы он ещё заплатил и 0.3% от суммы обмена поставщикам ликвидности.
Но, как я уже говорил, популярные пулы ликвидности намного больше и проскальзывание там почти незаметно.
Итак, мы уже много знаем о механике пулов ликвидности и ценообразовании на DEX'ах. Перейдём непосредственно к главной теме этой статьи — непостоянной потере.
Непостоянная потеря.
Impermanent loss или непостоянная потеря — это уменьшение стоимости активов, находящихся в пуле ликвидности относительно того, если бы они просто хранились на кошельке.
Звучит немного запутанно, но я обещаю, что сейчас мы во всём разберёмся!
Оказывается, непостоянная потеря возникает только тогда, когда одна монета в пуле, изменяется в цене относительно другой.
Предлагаю рассмотреть всё на конкретном примере.
Откуда берётся непостоянная потеря.
Допустим, появляется новая пара на каком-то децентрализованном обменнике. Пусть, это будут уже привычные нам DAI и ETH. Представим, что цена за один эфир на бирже 100$. Мы отправили в пул ликвидности 1 000 DAI и 10 ETH:
Через какое-то небольшое время цена на биржах стала 110$ за один эфир. У нас же по прежнему соотношение монет 1 к 100. Этим и воспользуются другие трейдеры и торговые роботы, которые захотят заработать:
Конечно, выкупить весь "дешёвый" эфир по 100$ за штуку не выйдет. Цена будет постепенно увеличиваться. О причинах этого я говорил в первом пункте статьи.
Я рассчитал сумму сделки, которая "выровняет" соотношение DAI и ETH до 1 к 110. Вышло, что необходимо отправить ~48.8088 DAI. Взамен же получим ~0,465374 ETH.
На скриншоте я округлил суммы до сотых (в том числе и стоимость монет в пуле ликвидности по окончании обмена — будет по ~ 1048.8088$ в ETH и DAI):
Средняя цена закупки трейдерами нашего эфира вышла ~104.881$ за 1 ETH (~48.8088$/~0,465374 ETH).
Продав свои ~0,465374 ETH по 110$ на бирже, они получат ~51.1911$, потратив
~48.8088$. Трейдеры заработают ~2.3823$ или ~4,9% от начальных вложений (я не учитываю комиссии сети эфира. Естественно, в реальности при такой маленькой сумме она будет больше прибыли, полученной на разнице курсов).
— За чей же счёт банкет?
Догадались?) Конечно же, за наш. Мы дали возможность купить у нас эфир дешевле и продать его дороже на бирже. Если мы сейчас достанем из пула наши монеты, то в целом они будут стоить 1048.8088$*2 = 2097.6176$.
Если бы мы просто хранили 10 ETH и 1 000 DAI на кошельке, то у нас бы сейчас было (10 * 110$) + (1 000 * 1$) =2100$
Таким образом, мы "потеряли" 2.3833$ относительно того, сколько бы монеты стоили, если они бы просто хранились у нас на кошельке, а не обеспечивали ликвидность на децентрализованном обменнике.
Непостоянная потеря составила ~ 0,1135%:
Непостоянной она называется потому, что соотношение цен активов постоянно меняется. Если эфир снова будет стоить 100$, то тогда для трейдеров станет выгодным купить эфир на бирже, а потом поменять в нашем пуле ликвидности (так как у нас до сих пор отношение количества ETH и DAI 1 к 110) на стейблкоин. При таком исходе у нас снова будет 1000 DAI и 10 ETH. Стоимость всех монет будет 2000$ (1000*1$ + 10*100$), как и в самом начале.
Стоит отметить, что это непостоянная потеря, возникает при любом изменении соотношения цен активов. Важно лишь его абсолютное значение. Я имею в виду то, что если бы в нашем примере эфир упал в цене, а не вырос, то мы бы, вдобавок к убыткам из-за падения его стоимости, получили бы ещё и дополнительныенепостоянные потери.
Для случая, когда в цене меняется лишь один актив (как у нас в примере с ETH и DAI) я построил график:
В общем же случае, может поменяться цена нескольких монет в пуле (например, в паре ETH - BNB).
Как же тогда посчитать размер impermanent loss?
Расчёт непостоянной потери.
Нужно выполнить следующие действия:
- Посчитать, во сколько раз изменилась цена каждого из активов. Пусть, для первого актива это будет x1, а для второго — x2.
- В нашем примере x1 означает изменение цены эфира, а x2 — DAI:
x1 = 110$ / 100$ = 1.1, x2 = 1$ / 1$ = 1.
цена DAI не изменилась (это стейблкоин).
- Вычислить, во сколько раз изменилась стоимость наших активов в пуле. Обозначим это значение, как P. (Pool)
- Это произведение x1 и x2, возведённых в степень "веса" соответствующих им монет. Вес — первоначальная доля монеты в пуле.
В нашем примере мы отправляли в пул ликвидности ETH и DAI в равном соотношении в долларовом эквиваленте. Вес ETH = вес DAI = 1/2 или 0.5: - P = 1.1^(1/2) * 1 ^(1/2) ≈ 1,0488088.
(^ — знак возведения в степень)
- Посчитать, во сколько раз изменилась бы стоимость активов, если бы мы холдили монеты на кошельке.
Обозначим это значение, как H. (Hold) - Это сумма x1 и x2, умноженных на вес соответствующих им монет:
- H = 1.1 * (1/2) + 1 * (1/2) = 0.55 + 0.5 = 1.05.
Удобнее всё это считать на калькуляторах, разработанных специально для подобных расчётов. Их существует огромное множество, вот один из них.
Он отображает все расчёты, правда округляет результат до сотых.
На нём можно рассчитать непостоянную потерю и для пулов ликвидности, в которых больше двух монет (дополнительные монеты добавляются кнопкой "Add Asset" внизу).
Вывод.
В общем и целом, можно сказать так: при изменении цен монет мы получаем чуть больше обесценившейся монеты и чуть меньше подорожавшей.
В реальности же многие пулы ликвидности приносят хороший доход за счёт торговых комиссий и майнинга ликвидности (особенно пулы токенов "свежих" проектов, где процентные ставки могут достигать сотен и тысяч процентов годовых).
К тому же, если ваши монеты не сильно изменяются в цене (либо же "двигаются" синхронно друг с другом, и относительного изменения цен нет), то вы почти не заметите непостоянную потерю.
При хранении активов в кошельке так же есть риск потери средств, но он сводится лишь к возможному уменьшению цены монеты (в пределах этой статьи я не рассматриваю вариант взлома биржи и кошелька, уязвимостей смарт-контрактов и так далее)
Тем не менее, есть возможность заранее рассчитать размер непостоянной потери при различных ситуациях на рынке, используя калькуляторы.