При обмене на QuipuSwap, Uniswap, Pancake Swap и других биржах есть закономерность: чем больше сумма сделки, тем хуже обменный курс. Почему так происходит и могут ли разработчики это исправить? Давайте разбираться.
Рассказываем об устройстве DEX, принципе работы автоматического маркет-мейкера (АММ) и популярных формулах расчета курса в пуле ликвидности.
Отличия децентрализованных бирж от централизованных
Задача бирж — собирать ликвидность в одном месте, автоматически сводить встречные заявки пользователей и рассчитывать рыночную цену торговой пары.
Централизованные биржи используют для этого книгу ордеров. В ней хранятся активные лимитные заявки вроде «Продам 10 tez по $7» и «Куплю 50 tez по $6».
Торговля с книгой ордеров выглядит так:
- Алиса покупает 100 tez при рыночной цене $7.
- Биржа выполняет сделку за счет самой выгодной заявки — продажи 10 tez по $7.
- Ликвидности заявки не хватает для закрытия сделки.
- Биржа берет следующую заявку — например, продажу 200 tez по $7,10.
- Алиса получает 100 tez по средней цене $7,09.
- Рыночная цена поднимается до $7,10.
Логика работы книги ордеров встроена в торговое ядро биржи (exchange core). Кроме сортировки заявок, оно проверяет балансы трейдеров, хранит историю сделок и передает данные в торговый интерфейс.
Торговые ядра работают эффективно, но у них есть недостаток — относительно большой объем. Open source-реализация торгового ядра весит 330 КБ, коммерческие варианты вроде LSEG Millenium Exchange — от 2 МБ. Но максимальный объем смарт-контракта на Tezos составляет 32 КБ, а на Ethereum — 24 КБ. Ядро просто не поместится в контракт. Поэтому DEX используют другой способ хранения ликвидности и сведения заявок — автоматизированный маркет-мейкер или АММ.
Как работает АММ на децентрализованных биржах
Как и централизованные биржи, DEX должны хранить ликвидность, сводить заявки и рассчитывать обменный курс.
Хранение каждого байта в блокчейне стоит денег. Например, в Tezos за хранение одного КБ нужно заплатить 0,25 tez. Поэтому DEX не записывают отдельные заявки в книгу, а собирают их в общий пул ликвидности. По сути, это две большие заявки на покупку и продажу. Соответственно, DEX исполняет ордеры пользователей за счет пула.
Так как книги ордеров нет, децентрализованные биржи рассчитывают цену по математическим формулам. Самая популярная — X × Y = K, также известная как Constant Product Market Maker. В ней X и Y обозначают количество токенов в пуле, а K — константу. Значение K изменяется только когда пользователи вносят или забирают ликвидность из пула. При обмене токенов K не изменяется.
Торговля с АММ работает так:
- В пуле есть 100 tez (X) и 700 kUSD (Y). Константа K составляет 70 000, а обменный курс — 1:7.
- Боб покупает 10 tez за kUSD.
- АММ рассчитывает, сколько kUSD нужно взять у Боба, чтобы сохранить значение K:
(100 − 10) × (700 + А) = 70 000
63 000 + 90А = 70 000
90А = 7000
А = 77,7 - Боб отдает 77,7 kUSD и получает 10 tez.
- Курс пары поднимается до $7,77.
Чем больше токенов в пуле ликвидности, тем меньше изменяется курс при обмене. Но все таки он изменяется.
Можно ли сделать АММ эффективнее?
Можно, но только для специфических задач. Например, для обмена стейблкоинов формула X + Y = K работает лучше X × Y = K:
- В пуле есть 100 uUSD и 700 kUSD, K составляет 800.
- Боб покупает 10 uUSD за kUSD.
- АММ рассчитывает стоимость сделки при сохранении K:
(100 − 10) + (700 + А) = 800
790 + A = 800
A = 10 - Боб отдает 10 kUSD и получает 10 uUSD.
- Обменный курс остается равным 1:1.
Разработчики и математики изобрели десятки формул для АММ. Так выглядит динамический поиск взвешенной цены со встроенным оракулом:
При этом сложные формулы решают одни проблемы и усугубляют другие. Например, АММ для небольших сделок будет невыгодным для крупных операций. Алгоритм для концентрации ликвидности возле текущей цены «свяжет» ее динамику, принесет прибыль трейдерам и убытки провайдерам ликвидности. Поэтому большинство разработчиков DEX продолжают использовать универсальную X × Y = K.
Подписывайтесь на социальные сети Tezos Ukraine, чтобы ничего не пропустить:
- Telegram-канал
- Facebook.
- Twitter на русском и украинском языках
- Twitter на английском языке
- YouTube-канал
- hub на ForkLog
Изначально мы опубликовали этот материал в блоге Tezos Ukraine.