Дерево ликвидности и рынки предсказаний в 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 итераций.