17 ноября 2021

Почему на DEX скачет обменный курс: объясняем за 5 минут

При обмене на QuipuSwap, Uniswap, Pancake Swap и других биржах есть закономерность: чем больше сумма сделки, тем хуже обменный курс. Почему так происходит и могут ли разработчики это исправить? Давайте разбираться.

Рассказываем об устройстве DEX, принципе работы автоматического маркет-мейкера (АММ) и популярных формулах расчета курса в пуле ликвидности.

Отличия децентрализованных бирж от централизованных

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

Централизованные биржи используют для этого книгу ордеров. В ней хранятся активные лимитные заявки вроде «Продам 10 tez по $7» и «Куплю 50 tez по $6». 

Торговля с книгой ордеров выглядит так:

  1. Алиса покупает 100 tez при рыночной цене $7.
  2. Биржа выполняет сделку за счет самой выгодной заявки — продажи 10 tez по $7.
  3. Ликвидности заявки не хватает для закрытия сделки.
  4. Биржа берет следующую заявку — например, продажу 200 tez по $7,10.
  5. Алиса получает 100 tez по средней цене $7,09.
  6. Рыночная цена поднимается до $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 не изменяется. 

Торговля с АММ работает так:

  1. В пуле есть 100 tez (X) и 700 kUSD (Y). Константа K составляет 70 000, а обменный курс — 1:7.
  2. Боб покупает 10 tez за kUSD.
  3. АММ рассчитывает, сколько kUSD нужно взять у Боба, чтобы сохранить значение K:


    (100 − 10) × (700 + А) = 70 000
    63 000 + 90А = 70 000
    90А = 7000
    А = 77,7
  4. Боб отдает 77,7 kUSD и получает 10 tez. 
  5. Курс пары поднимается до $7,77. 

Чем больше токенов в пуле ликвидности, тем меньше изменяется курс при обмене. Но все таки он изменяется. 

Можно ли сделать АММ эффективнее?

Можно, но только для специфических задач. Например, для обмена стейблкоинов формула X + Y = K работает лучше X × Y = K:

  1. В пуле есть 100 uUSD и 700 kUSD, K составляет 800.
  2. Боб покупает 10 uUSD за kUSD.
  3. АММ рассчитывает стоимость сделки при сохранении K:


    (100 − 10) + (700 + А) = 800
    790 + A = 800
    A = 10
  4. Боб отдает 10 kUSD и получает 10 uUSD.
  5. Обменный курс остается равным 1:1.

Разработчики и математики изобрели десятки формул для АММ. Так выглядит динамический поиск взвешенной цены со встроенным оракулом:

При этом сложные формулы решают одни проблемы и усугубляют другие. Например, АММ для небольших сделок будет невыгодным для крупных операций. Алгоритм для концентрации ликвидности возле текущей цены «свяжет» ее динамику, принесет прибыль трейдерам и убытки провайдерам ликвидности. Поэтому большинство разработчиков DEX продолжают использовать универсальную X × Y = K.

Подписывайтесь на социальные сети Tezos Ukraine, чтобы ничего не пропустить:

  1. Telegram-канал
  2. Facebook.
  3. Twitter на русском и украинском языках
  4. Twitter на английском языке
  5. YouTube-канал
  6. Instagram
  7. LinkedIn
  8. hub на ForkLog

Изначально мы опубликовали этот материал в блоге Tezos Ukraine.