Перейти к основному содержанию
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
LaunchLab поддерживает три форма кривых, выбираемые при Initialize: constant-product (наиболее распространённая, форма с виртуальными резервами классической кривой x · y = k), linear-price и fixed-price. Формула порога градации одинакова для всех трёх. На этой странице подробно разбирается математика constant-product; линейная и фиксированная формы описаны в конце.

Параметры, хранящиеся на LaunchState

Имена полей в структуре Rust совпадают с полями PoolState, описанными в accounts; единицы выше являются концептуальными.

Кривая constant-product с виртуальными резервами (curve_type = 0)

Кривая по умолчанию и наиболее часто используемая. Все pump-style запуски используют эту форму. Кривая предполагает, что с самого начала существует виртуальный резерв котировки V_q и виртуальный базовый резерв V_b (хранятся как virtual_quote и virtual_base на PoolState), поэтому эффективный пул выглядит как CPMM с этими резервами. Покупки следуют математике x · y = k:
решено относительно base_out:
Эффективная цена при продано базовых токенов s:
Один и тот же инвариант x · y = k, который LaunchLab применяет до градации, становится буквально кривой CPMM (или AMM v4) после градации, поэтому переход при градации работает механически безупречно: предельная цена при base_sold = base_supply_graduation равна цене, с которой открывается пул после градации, с (quote_vault, base_vault_remaining) в качестве его резервов.

Кривая с фиксированной ценой (curve_type = 1)

Кривая с плоской ценой. Каждая покупка/продажа происходит по постоянной цене, настраиваемой при Initialize:
Полезна для справедливых запусков, когда команда хочет единую цену для всех участников независимо от времени покупки. Градация запускается при продаже base_supply_graduation (линейная связь стоимости делает вывод quote_reserve_target прямолинейным).

Кривая с линейной ценой (curve_type = 2)

Цена растёт линейно с base_sold:
Интегральная стоимость:
Квадратична по base_sold — ранние покупатели платят близко к нулю, поздние покупатели платят значительно больше, при этом предельная цена всегда растёт с фиксированным наклоном. On-chain реализация находится в curve/linear_price.rs.

Сравнение форм кривых

Порог градации

quote_reserve_target вычисляется при Initialize как котировка, необходимая для доведения base_sold от 0 до base_supply_graduation:
Запуск градирует, как только quote_vault.balance ≥ quote_reserve_target. Поскольку покупки приходят дискретными размерами, фактический баланс при градации может немного превышать целевой — излишек становится дополнительной ликвидностью на стороне котировки в результирующем CPMM пуле.

Практический пример — квадратичный запуск

Параметры:
  • base_supply_max = 1_000_000_000 (1 миллиард базовых токенов, 6 децималей)
  • base_supply_graduation = 800_000_000 (продажа 80% запускает градацию)
  • k = 40 (масштаб цены)
  • Комиссии: 1% на покупку, 1% на продажу, распределение lp:creator:protocol = 60:20:20.
Начальная цена (s = 0): 0 (чистая квадратика начинается с нуля). Цена при 50% продано (s = 500_000_000):
Цена при градации (s = 800_000_000):
Котировка, требуемая для достижения градации (интегральная стоимость):
Итак, ≈ 6.827 единиц котировки в собственной форме (в любом 6-децимальном котировочном мочевом пузыре, например ~6,827 USDC, если котировка — USDC). Комиссия сверху:
Первая покупка на 10 USDC:
  • Виртуальное состояние: s = 0, quote_vault = 0.
  • Вычесть комиссию: quote_after_fee = 10 × 0.99 = 9.9.
  • Решить (40 / (3e18)) × s³ = 9.9s ≈ 6.22e6 базовых токенов куплено.
  • Комиссия 1% (0.1 USDC) распределена: lp 0.06, creator 0.02, protocol 0.02. Доля lp остаётся в quote_vault; остальные две направляются в их соответствующие счётчики.
Покупка при 75% продано (приближение к градации): Те же 10 USDC теперь покупают гораздо меньше базовых токенов, потому что кривая крутая. Newton-решение при s₀ = 750e6 с quote_in_after_fee = 9.9 даёт примерно ∆s ≈ 0.4e6 — ~15-кратное уменьшение базовых токенов на USDC по сравнению с первой покупкой.

Механика комиссий во время фазы кривой

На каждый Buy:
  • lp_share остаётся в quote_vault. Это то, что делает эффективную кривую более напряжённой (больше резерва котировки против того же предложения базовых токенов).
  • protocol_share увеличивает LaunchState.state_data.protocol_fees_quote.
  • creator_share увеличивает LaunchState.state_data.creator_fees_quote.
На Sell применяется то же распределение, но комиссия вычитается из исходящего quote_out. Оба счётчика очищаются через CollectFees (администратор или создатель, каждый на свой счётчик).

Точность

  • Суммы на стороне базовых токенов: u64.
  • Суммы на стороне котировки: u64.
  • Промежуточные кубы / произведения: u128.
  • Newton-решения для «покупить точное количество котировки» и «продать точное количество котировки» итерируют в u128 с фиксированной точкой с настраиваемым максимальным количеством итераций (по умолчанию 10). Режим отказа — NotConverged — редок вне граничных случаев близ градации.

Переход к CPMM

Когда срабатывает Graduate:
Для квадратичной кривой cpmm_initial_price механически есть price(base_sold) (это предельная цена кривой в момент перехода). Пул CPMM открывается ровно с этой ценой, поэтому наблюдатель, переходящий от UI кривой к UI CPMM, не видит скачков.

Куда дальше

Источники: