Принцип Работы Динамических AMM Bancor V2

Bancor RU
Банкор (Русский)
7 min readJul 20, 2020

--

В этой статье мы рассмотрим динамические функции и особенности стейкинга в пуле ликвидности нового типа Bancor v2, который называется Динамический Автоматизированный Маркет Мейкер (англ. — Dynamic Automated Market Maker), DAMM.

Процесс, описанный ниже, позволяет создать автоматизированного маркет-мейкера для любого актива, который поддерживается оракулом для передачи прайс-фида, и предназначен для сохранения вклада поставщиков ликвидности (LP) с использованием динамических параметров в пуле.

Другими словами, все LP в пуле должны иметь возможность вывести ту же сумму, которую они застейкали, плюс часть сборов, которые пул заработал за период стейкинга.

Ключевые особенности пулов V2:

  • Пул Токены с Единым Резервом: Каждый v2 пул привязан к двум пул токенам (один для каждого резерва).
  • Застейканный Баланс и Текущий Баланс: Для каждого резерва застейканный баланс указывает общее количество токенов, внесенных поставщиками ликвидности, а текущий баланс — количество токенов, хранящихся в резерве.
  • Динамические Весы: Пул обновляет резервные веса, чтобы стимулировать участников рынка к выравниванию текущего баланса с застейканным балансом.
  • Ценовой Фид: Ценовые фиды используются для расчета весов, таким образом, чтобы после закрытия арбитража цена пула становилась равной рыночной цене.

Дополнительные сведения см. В разделе «Механизм балансировки» документации Bancor v2, находящейся в процессе разработки, или в самих смарт-контрактах с открытым исходным кодом v2.

Пул токены с одним резервом

В существующих AMM пользователи предоставляют ликвидность пулу в обмен на токены пула. Эти токены пула отслеживают долю поставщика ликвидности в пуле между несколькими резервами.

В Bancor v2 мы внесли ключевое изменение: пул v2 выдает отдельный пул токен для каждого резерва. Это упрощает процесс отслеживания вкладов провайдеров ликвидности: вместо отслеживания одного пул токена между несколькими резервами, каждый пул токен теперь представляет долю в одном резерве.

Обратите внимание, что, хотя в существующих AMM имеется только один пул токен на каждый пул, каждый пул v2 привязан ровно к двум пул токенам (по одному на резерв).

Это создает два типа поставщиков ликвидности для каждого пула:

  1. LP первичного резерва — обеспечивают ликвидность в первичном резерве токена (в дальнейшем именуемом «XYZ») в обмен на пул токены XYZ (ERC20).
  2. LP вторичного резерва— обеспечивают ликвидность во вторичном резерве токена (в дальнейшем именуемом «BNT») в обмен на пул токены BNT (ERC20).

В каждом пуле v2 конвертация генерирует сборы в резерв запрошенного токена. Например, преобразование XYZ в BNT генерирует плату в резерв BNT.

Кроме того, когда поставщики ликвидности добавляют или удаляют ликвидность, вес пула автоматически корректируется для учета изменений в величине резерва — например, увеличение веса резерва при получении ликвидности.

Застейканный Баланс и Текущий Баланс

Существующие пулы ликвидности, в том числе Bancor v1, подвергают поставщиков ликвидности риску снижения, который называется непостоянным убытком: всякий раз, когда относительная внешняя рыночная цена актива отличается от цены, по которой была предоставлена ликвидность, значение, которое поставщик может вывести, меньше, чем значение которое он или она застейкали.

Пулы V2 созданы с целью снижения этого риска, стимулируя участников рынка всегда выравнивать общую сумму резервов («текущий баланс») с суммами, которые застейкали поставщики ликвидности («баланс ставок»).

Когда пользователь стейкает ликвидность в пуле v2, количество внесенных токенов регистрируется пулом. «Застейканный баланс» пула — это запись обязательств пула перед поставщиками ликвидности. Пул всегда стремится иметь достаточное количество токенов, чтобы покрыть это обязательство.

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

Если текущий баланс пула не равен его застейканному балансу, весы пула корректируются для того, чтобы стимулировать арбитражеров возвращать баланс первичного резерва токена обратно к его застейканному балансу. Впоследствии баланс вторичного резерва токена также приближается к застейканному балансу. Хотя арбитражный стимул не приводит к тому, что баланс вторичного резерва токена возвращается к 100%му равновесию, частые арбитражные операции гарантируют, что он всегда остается очень близким (чуть ниже или выше) к застейканному балансу.

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

Следовательно, в существующих пулах ликвидности с волатильными активами поставщик ликвидности в значительной степени гарантированно получит меньше токенов, чем застейкал. Тем не менее, поставщик ликвидности в пуле Bancor v2 в значительной степени гарантированно вернет застейканные им токены при условии, что в редких случаях ему может понадобиться выводить свою долю постепенно.

Динамические Весы

Итак, как же пулы v2 гарантируют, что провайдеры ликвидности могут достаточно часто выводить свой застейканный баланс? Динамические веса играют ключевую роль в создании правильных стимулов для арбитражеров, чтобы непрерывно пополнять резервы.

The arbitrage incentive is always to convert BNTs to XYZs or vice-versa, such that the following conditions are met

Арбитражным стимулом всегда является конвертация BNT в XYZ или наоборот, так чтобы выполнялись следующие условия:

  1. Цена пула BNT/XYZ = Рыночная цена BNT/XYZ
  2. Текущий баланс XYZ = Застейканный баланс XYZ

Чтобы продемонстрировать это, давайте обозначим текущий баланс XYZ как «s», а застейканный баланс XYZ — «t».

Рассмотрим случай “s <t”. Наша цель состоит в том, чтобы установить вес пула таким образом, чтобы арбитражный стимул выравнивания цены пула и эталонной рыночной цены впоследствии увеличивал «s», чтобы стать равным «t». Другими словами, мы хотим, чтобы арбитражер передавал в пул «t — s» XYZ в обмен на BNT.

Это означает, что всякий раз, когда возникает дефицит в XYZ, и пул не может погасить свои обязательства перед поставщиками XYZ, пул создает стимул для рынка немедленно устранить дефицит.

Точно такой же механизм применяется в случае «s> t», который иллюстрирует излишек в XYZ.

Как насчет стороны BNT? В отличие от стороны XYZ, которая гарантированно остается в равновесии (где текущий баланс XYZ = застейканный баланс XYZ), сторона BNT — нет. Тем не менее, он все же подталкивается в правильном направлении всякий раз, когда закрывается арбитраж. Чем чаще закрывается арбитраж, тем ближе остается к равновесию BNT.

В случае, когда участникам рынка требуется дополнительная мотивация для восстановления баланса в пуле, пулы v2 вводят динамическую плату, чтобы подтолкнуть рынок в правильном направлении.

Ценовой Фид

Два типа ценовых фидов обеспечивают постоянные обновления пулов ликвидности v2: внешние и внутренние фиды. Чтобы продемонстрировать функциональность обоих фидов, давайте рассмотрим два примера рыночных сценариев.

Давайте возьмем случай недавно инициализированного пула, в котором два баланса активов равны. Вот снимок нашего образца пула на этом шаге:

1. Цена XYZ значительно увеличивается

В существующих AMM, когда цена одного актива отличается от цены другого актива, LP несут непостоянные убытки, потому что соотношение между этими двумя активами остается фиксированным. Арбитражеры быстро обнаруживают эти дисбалансы и извлекают стоимость из LP, обменивая переоцененный актив на недооцененный.

В случае с Bancor v2 оракулы учитывают эти изменения в цене и соответственно корректируют вес каждого резерва. Когда цена XYZ увеличивается, целевой вес XYZ в пуле XYZ/BNT будет расти, и не будет возможности для арбитража.

Возвращаясь к нашему первоначальному пулу, давайте рассмотрим влияние 10%-го увеличения цены XYZ.

При обновлении внешнего оракула целевой вес XYZ автоматически корректируется до 52% в соответствии с изменениями в стоимости активов в резервах.

2. Цена XYZ увеличивается незначительно

Внешние оракулы фиксируют значительные изменения в ценах на резервные активы и защищают LP от непостоянных потерь. Тем не менее, чтобы наиболее точно оценить резервные активы, пулы v2 также должны учитывать микроперемены настроений на рынке. Каждый пул включает внутренний ценовой фид, полученный из простого скользящего среднего (SMA) за предыдущие десять минут. При каждом обновлении от внешнего оракула внутренний ценовой поток повторно привязывается к внешнему оракулу, и непрерывный расчет SMA перезапускается.

Рассмотрим сценарий ниже. После одной минуты и одной конверсии внутренняя цена подачи и целевые веса резерва немного изменились.

Если, например, в течение следующих трех минут дальнейшие сделки не регистрируются, внутренний ценовой фид будет иметь еще три минуты данных, и эта информация будет отражена в цене пула (шаг D).

Резюме

В то время как работа над основными контрактами V2 завершена, все еще идет дополнительная работа:

  • Смарт контракты Bancor V2 проходят официальную проверку и аудит безопасности со стороны Consensys Due Diligence & 1inch.exchange.
  • Проходит баг баунти, которое стимулирует дополнительное ревью безопастности со стороны сообщества.
  • Интерфейс Bancor.Network обновляется для работы с Bancor V2, включая торговлю, пул стейкинг и аналитику сети.
  • Документация Bancor V2, гайды и примеры, над которыми все еще идёт работа.

В ожидании успешной формальной проверки мы надеемся, что Bancor V2 будет развернут в ближайшие недели. Однако имейте в виду, что это цель, а не заявленная дата выпуска.

Мы с нетерпением ждем вашу обратную связь и участие в фантастическом сообществе Bancor.

Чтобы взаимодействовать и быть в курсе:

--

--