Формула , используемая Uniswap, стала прорывом для DeFi. Однако это не единственная формула, применяемая в автоматизированных маркет-мейкерах (AMM). Разные типы пулов предоставляют уникальные преимущества, такие как снижение уровня проскальзывания или более эффективная торговля для обменников, а некоторые даже помогают поставщикам ликвидности (LP), использующим LP-токены для балансировки портфеля.
Небольшое отступление: в своём Telegram-канале я делюсь ещё большим количеством полезного контента о децентрализованных финансах и деривативах: t.me/kirrya_achieves
Сегодня мы рассмотрим кастомизированные пулы Balancer, которые являются расширением формулыи позволяют создавать пулы с различными составами активов. Наше обсуждение основано на технической документации Balancer, а результаты мы организовали по следующим ключевым темам:
-
Что нового привнес Balancer
-
Определение функции стоимости
-
Примеры кастомизированных пулов
-
Как рассчитать цену в кастомизированном пуле
-
Доказательство постоянного распределения стоимости
-
Как предоставление ликвидности может балансировать портфель
-
Сравнение эффективности и проскальзывания
Формула Balancer позволяет создавать кастомизированные пулы, что недоступно в стандартной модели Uniswap. Например, пул Uniswap ограничен двумя активами с одинаковыми балансами. В отличие от этого, формула Balancer позволяет создавать пулы, включающие три, четыре, пять или больше активов, при этом не требуя равных балансов. Это означает, что веса активов в пуле можно задавать произвольно. Например, можно создать пул с Ethereum (ETH) и DAI, выделив 80% стоимости пула на ETH и 20% на DAI.
В противоположность этому, модель Uniswap работает на основе формулы XY=K, где баланс активов всегда остается равным. Как это работает? Представим пул с токенами A и B, следуя формуле , где
обозначает количество токена A, а
— количество токена B. Мы знаем, что когда Алиса хочет купить количество
токена A за токен B, цена на единицу стремится к
по мере приближения
к нулю. Без проскальзывания цена стабилизируется на уровне
. Таким образом, можно определить теоретическую цену токена A относительно токена B как
. Следовательно, поскольку количество токена A в пуле равно
, его общий баланс относительно токена B равен
. При этом токен B оценивается в 1 относительно самого себя, и его общий баланс в пуле также равен
, что приводит к общей стоимости пула
при измерении относительно токена B. Аналогично, общая стоимость равна
при измерении относительно токена A, что устанавливает равенство весов токенов A и B. Теперь мы рассмотрим, как формула Balancer может изменить это распределение весов.
Функция стоимости Balancer отличается от простоты формулы Uniswap. Она выражается как:

где:
-
варьируется в зависимости от токенов в пуле;
-
t — это баланс (или количество) токенов t в пуле;
-
t — это нормализованный вес токена, при котором сумма всех нормализованных весов равна 1.
Логика сделок проста: формула Uniswap поддерживает на постоянном уровне. Давайте рассмотрим несколько пулов, созданных с помощью функции стоимости:
Два актива с балансом весов 50 на 50:
Предположим, что мы хотим создать пул, состоящий из двух токенов, а именно и
, с одинаковым взвешенным балансом. Тогда наша формула станет

Кажется знакомым, правда? Если мы возведём в квадрат две стороны, то получим

и если мы определим:

у нас будет:

это классическая формула постоянного произведения.
Предположим, что Алиса хочет купить токенов 1 (это
) по формуле

ей нужно токенов 2 (то есть
). Это означает, что

однако, исходя из этого, мы имеем

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

Определяя

мы получаем:

Это очень похоже на нашу классическую формулу. Но если мы изменим веса, наша формула немного изменится.
Два актива с балансом весов 80-20:
Допустим, мы создаём пул с балансом 80–20 между двумя активами, так что баланс составляет 80%, а
— 20%. Тогда наша формула будет выглядеть так:

Аналогично приведенному выше, если мы определим

тогда мы получаем:

Логику довольно легко понять, но давайте рассмотрим ещё один пример.
Три актива с балансом весов 40-40-20:
Как и в приведённых выше примерах, у нас есть три токена: ,
и
, и их баланс составляет 40–40–20 соответственно. Если мы подставим их в формулу, то получим:

ход тот же: мы определяем

В результате

Все указанные выше типы пулов различаются по уровню проскальзывания. Мы рассмотрим все эти аспекты в следующих разделах, однако сначала нужно разобраться, как рассчитывать цену актива в кастомизированном пуле относительно других активов в этом пуле. Цена токенов сильно зависит от объема сделки и ликвидности пула, подробнее об этом см. в разделе, посвященном проскальзыванию.
Теперь предположим, что у нас есть универсальный пул, созданный на основе уравнения функции стоимости. Допустим, Алиса покупает0 единиц токена
в обмен на Aj единиц токена
, тогда цена равна
j
0 .Чтобы сохранить согласованность с обозначениями, используемыми в технической документации, давайте определим:
4o

Мы называем это эффективной ценой. Как мы знаем, она зависит от значений 0,
1, и если эти значения становятся меньше, то коэффициент проскальзывания уменьшается. Теперь давайте вспомним уроки математики и возьмём предел эффективной цены, когда
0,
1 приближаются к 0.

где представляет изменение количества токенов в пуле. Этот предел выражается просто как:

Чтобы справиться с этой производной, давайте выразим j в виде
0. Для этого нам нужно сосредоточиться на функции значения, которая равна:

Следовательно:

Мы можем использовать его для обработки нашей частной производной:

и это равно:

поскольку

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

И вот, это наша формула цены. Выглядит ужасающе, да? Не волнуйтесь, у нас все еще есть несколько приемов, чтобы упростить ее. Давайте умножим и числитель, и знаменатель первого деления на волшебное число:

Тогда у нас есть:

Также, используя определение , мы можем преобразовать первое деление:

Наконец-то мы пришли к красивому выражению. Этот предел определяется как спотовая цена и обозначается как:

Итак, у нас есть:

Это означает, что для относительно небольших сделок с учётом ликвидности пула вы можете рассчитывать на цену в пределах этого значения (без учёта комиссий).
С этого момента мы понимаем, как цена токена в пуле соотносится с ценой других токенов. Давайте сосредоточимся на распределении веса. В начале мы говорили, что формула балансировщика позволяет создавать пулы таким образом, чтобы 80% общей стоимости пула составляли ETH, а 20% — DAI. Фактически Wt, нормализованный вес токена, означает общую стоимость пула. Допустим,

представляет общую стоимость пула в терминах токена, и

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

Давайте начнём с общей стоимости пула в единицах .

Очевидно, что общая стоимость пула в равна сумме общих стоимостей всех токенов в пуле в
Нам нужно сосредоточиться на:

Вспомните , что:

это цена токена по отношению к токену
. Следовательно,

Если мы вычтем t и подcтавим значение:

в указанную выше сумму, мы получим:

t и
t постоянны, поэтому мы можем их исключить. Следовательно,

по определению Wn. Следовательно, общая стоимость пула в терминах равна
t
t. Мы почти закончили. Давайте определим
n как долю токена
в пуле. Чтобы вычислить
n, нам нужно разделить общую стоимость токена
на общую стоимость пула. Это можно сделать следующим образом:

Таким образом, весовые коэффициенты токенов в формуле действительно отражают их доли в пуле.
Давайте сосредоточимся на практических последствиях этого факта. Многие хедж-фонды используют стратегию балансировки в своем портфеле. Когда цена одного актива увеличивается относительно других, они продают его в обмен на более дешевые активы, и наоборот. Эта тактика предотвращает доминирование одного актива над остальными или наоборот. Таким образом, они извлекают выгоду из роста высокоэффективных активов и укрепляют свои позиции в других. Также поддержание диверсифицированного портфеля активов снижает риски, связанные с зависимостью от одного актива. По сути, это эффективная инвестиционная стратегия.
Но как применить эту стратегию к криптовалютным активам? Став поставщиком ликвидности (LP) на Balancer. Как мы показали, кастомизированные пулы Balancer помогают поддерживать соотношение активов в соответствии с их ценами. Например, если вы хотите сбалансировать свои активы ETH, LQTY и LUSD поровну, предоставление ликвидности в пул Balancer с составом 33% LUSD, 33% LQTY и 33% WETH обеспечит равное значение каждого актива в вашем портфеле. Кроме того, вы будете зарабатывать на торговых сборах и, возможно, на бонусах от токенов BAL, поддерживая баланс в своем портфеле.
Что делать, если нет пула, который соответствует вашему портфелю? Не переживайте. С помощью страницы создания пулов Balancer вы можете легко настроить свой собственный пул. Ликвидность может быть низкой на старте. Если кто-то манипулирует вашим пулом и он не сбалансирован, вы можете купить необходимые активы на открытом рынке, чтобы скорректировать его. По сути, вы будете заниматься арбитражем с вашим пулом, извлекая прибыль от корректировок.
Balancer предлагает значительные преимущества для поставщиков ликвидности. Но что насчет трейдеров? Чтобы оценить эффективность свопов с точки зрения проскальзывания, рассмотрим два пула: один следует модели постоянного произведения Uniswap, а другой — кастомизированный пул с двумя активами, веса которых составляют 66,6% и 33,3%, при этом вес токена A составляет 66,6%. У нас есть две формулы:

для постоянного пула продуктов и

для пользовательского пула. Где соответствует количеству токенов A, а
— токенов B. Теперь предположим, что цена токенов A в пересчёте на токены B одинакова в обоих пулах, а общая стоимость пулов одинакова. Используя эти два фрагмента информации, мы можем записать
в виде
. Как мы доказали выше, стоимость первого пула составляет
, а второго —
в терминах токена A. Таким образом,

И аналогично,

Следовательно, наша функция стоимости становится:

Теперь предположим, что Алиса покупает одинаковое количество токена A из обоих пулов. Таким образом, проскальзывание — разница между реальной и теоретической ценой этих сделок — рассчитывается следующим образом:

где:

Соответственно:

где:

Теперь мы докажем, что:

что означает, что пул Balancer, содержащий два взвешенных актива с весами 33,3% и 66,6%, менее эффективен, чем пул Uniswap с точки зрения проскальзывания. На самом деле, это не относится только к весам 33,3%-66,6%. Оптимальный пул — это 50-50. Поскольку другие термины равны, достаточно показать, что:

для того чтобы доказать, что:

Давайте начнем.

исходя прямо из определения.

Поскольку

мы можем сказать, что:

Таким образом, мы имеем:

Тот же аргумент выше подразумевает, что:

означает

Следовательно, мы получаем

что означает:

Таким образом, мы доказали, что покупка токена A из кастомизированного пула неэффективна с точки зрения проскальзывания. Точно так же можно показать, что покупка токена B также неэффективна в плане проскальзывания. Более того, для других кастомизированных пулов с различными весами результат остается неизменным. Формула Uniswap или кастомизированный пул Balancer с равными балансами оказываются более эффективными, чем другие конфигурации. График ниже иллюстрирует процент проскальзывания, возникающий при сделке на сумму $1,000 в пуле с активами на сумму $200,000, состоящими из токенов A и B, при различных весах токена A. Симметрия вокруг 50% отражает постоянный общий вес, при котором сумма весов для A и B всегда равна 100%.

График показывает, что уровень проскальзывания возрастает быстрее, когда вес одного актива приближается к нулю. По этой причине в пулах с двумя активами редко встречается ситуация, когда вес одного актива составляет менее 20%. Следовательно, исходя из предоставленных статистических данных, мы можем утверждать, что максимальная разница в проскальзывании между традиционным пулом Uniswap и пулом Balancer составляет примерно 0,5%. Важно отметить, что этот график предполагает сделку, эквивалентную 1% от одного из активов пула — значительная сумма для среднестатистической ежедневной сделки, учитывая, что большинство пулов оцениваются в миллионы. Если рассматривать меньшую сделку, скажем, 0,1% от одного из активов — что все равно является значительным для многих пулов — проскальзывание в традиционном пуле Uniswap составит около 0,1%, в то время как в Balancer — максимум 0,15%. Таким образом, хотя сделки в пуле с весами 50–50 всегда превосходят сделки в других кастомизированных пулах, разница обычно незначительна.
Мы установили, что классические пулы Uniswap более эффективны, даже если разница для практических целей не велика. Однако Balancer позволяет создавать пулы с более чем двумя активами, что может привести к более эффективной торговле. Например, рассмотрим три токена — токен A, токен B и токен C — каждый с балансом 20,000. Если мы создадим три отдельных пула, используя традиционную формулу, то получим три пула, каждый из которых будет состоять из двух активов по 10,000 каждый. В этом случае, когда Алиса покупает 100 единиц токена A в обмен на токен B (пара не имеет значения, поскольку активы равномерно распределены), она столкнется с проскальзыванием 1,01%. Теперь представьте, что мы создаем один пул, содержащий все три актива с равными весами, где каждый актив составляет 20,000 единиц. Если Боб выполняет такую же сделку, как Алиса, пытаясь купить 100 единиц токена A в обмен на токен B, он столкнется с проскальзыванием всего 0,50% — в два раза меньше, чем у Алисы. Это сокращение связано с увеличением ликвидности; по сути, сделка Боба эквивалентна сделке в классическом пуле, где количество каждого актива составляет 20,000. Давайте подтвердим это утверждение.
Мы хотим показать, что покупка

сумма токена A в обмен на токен B из обоих пулов, первый из которых формулируется как:

и второй, который формулируется как:

где представляют баланс токена A, токена B и токена C соответственно. Предположим, что

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

Следовательно, пулы, содержащие более двух активов с равными балансами, фактически функционируют так же, как классические пулы с соответствующими активами и идентичными уровнями ликвидности. Таким образом, можно сказать, что диверсификация числа активов в пуле при сохранении равных весов не влияет на проскальзывание, однако стоимость создания таких пулов значительно снижается. Это очевидно из того, что общая ликвидность не делится между пулами, содержащими только два актива, как показано в предыдущем сравнении между Алисой и Бобом.
Можно задаться вопросом, почему бы не создать пул с максимально возможным количеством активов, учитывая, что в Balancer V1 поддерживаются до 8 активов, а в V2 — до 16. Такой пул, предположительно, концентрировал бы ликвидность и способствовал бы более эффективным сделкам. Однако недооцененный момент в этом аргументе заключается в том, что поставщики ликвидности не могут вносить ликвидность частично. Это означает, что поставщик ликвидности должен владеть пропорциональной долей каждого типа активов в пуле. Например, если поставщик ликвидности владеет 0,1% LP токенов, он владеет 0,1% каждого из 16 активов в пуле. Следовательно, достижение значительной ликвидности становится сложной задачей с этим подходом, поскольку маловероятно, что поставщики ликвидности смогут скоординировать свои действия. Таким образом, хотя увеличение количества активов в пуле может повысить эффективность за счет привлечения большего объема ликвидности, сложность нахождения поставщиков ликвидности с полным набором токенов увеличивается с ростом числа типов активов.
Из различных конфигураций пулов могут возникать множество интересных результатов. Для тех, кто заинтересован в исследовании разных сценариев, доступен репозиторий на GitHub. Кратко говоря, там запрограммированы четыре функции на JavaScript для моделирования различных сценариев обмена. Эти функции моделируют обмены в классическом пуле Uniswap, кастомизированном пуле Balancer с двумя активами с весами 80–20, пуле Balancer с тремя активами с равными весами и другом пуле с распределением весов 40–40–20. Код можно легко изменить для анализа других сценариев.
В заключение, функция стоимости Balancer позволяет нам настраивать различные типы пулов для удовлетворения разных потребностей трейдеров и поставщиков ликвидности. Этот пост подробно рассмотрел, что предлагает Balancer и как работает его математика, особенно в сравнении с Uniswap. Благодарю вас за время, потраченное на чтение; ваше участие в контенте ценится, и я приглашаю к любым отзывам, которые у вас могут возникнуть.
Автор: kirrya