January 19

Дерево ликвидности и рынки предсказаний в DeFi

Про протокол Azuro

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

Azuro — децентрализованный протокол для беттинга (ставок), на котором можно строить букмекерские приложения, беттинг-интерфейсы и т.д.

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

  • данные (о событиях, коэффициенты ставок, результаты);
  • ликвидность, чтобы делать выплаты победителям;
  • работа с пользователями;
  • управление.

Мы разделили эти четыре элемента между разными механизмами, чтобы обеспечить децентрализацию и trustless-подход.

  • Пулы ликвидности, куда любой пользователь может внести средства, обеспечивают выплаты игрокам.
  • Дата-провайдеры, которые при помощи оракулов поставляют данные о коэффициентах, событиях, ставках и т.д.
  • Фронтенд-операторы — любой может создать свое решение поверх протокола.
  • Спорные моменты решаются за счет токенхолдеров.

Все эти четыре элемента системы делят между собой прибыль протокола.

Как устроена монетизация проекта

В беттинге не приняты комиссии на транзакции. Вместо этого, комиссия вшита уже в коэффициенты. Что такое коэффициенты? Например, чистые коэффициенты в игре «Орел и решка» — 2.0 и 2.0. Шанс выпасть у той или иной стороны 50%. Но тут есть некий спред, благодаря которому участники зарабатывают. В таком случае коэффициент будет 1.9 и 1.9. В контексте длинной дистанции протокол будет зарабатывать примерно 5% от оборота.

Наш протокол отличается от большинства, в том числе — от рынков предсказаний, потому что пул не привязан к конкретному событию. В Azuro есть один общий пул ликвидности, в который инвесторы закинули денег. Далее фид-провайдеры через оракулов создают маркеты (conditions в Azuro), на которые можно делать ставки. Их очень много, за счет чего достигается диверсификация провайдеров, что гарантирует доходность. Событий очень много и теория вероятности на стороне пользователей. Конечно, если коэффициент задан правильно.

Устройство дерева ликвидности

Есть conditions — элементарное событие, на которое можно сделать скидку (да/нет или другой простой вариант). Conditions генерят определенную комиссию, все это заливается в пул ликвидности. Прибыль распределяется между провайдерами ликвидности, в соответствии с их долей.

Но эта простая схема неприменима к событиям в реальном мире, которые происходят вне блокчейна. Рандомный пользователь может попытаться обмануть систему: например, кто-то во время матча может увидеть, что команда выигрывает и по ходу дела внести большую ликвидность, и потом вывести почти всю прибыль, которую принесло событие. Таким образом кто-то может украсть ликвидность у других пользователей без риска.

Самое простое «магловское» решение — просто считать, кто и в какой condition положит деньги. Но в этом случае приходится хранить данные про каждого холдера депозита: какую сумму он внес и когда, а потом каким-то образом это все синхронизировать.

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

Мы придумали, соотнести timestamps и conditions при помощи логарифма. Даже при миллиарде депозитов это займет всего около 27 операций.

Есть такая структура данных — дерево отрезков. Она позволяет достаточно быстро выполнять математические операции внутри массива. Операции могут быть разные: найти большее или меньшее значение, их произведения, или, как в нашем случае, найти сумму.

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