Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
LaunchLab поддерживает три формы кривых, выбираемые при
Initialize: constant-product (наиболее распространённая, форма с виртуальными резервами стандартной кривой x · y = k), linear-price и fixed-price. Формула порога выпуска одинакова для всех трёх. На этой странице подробно разбирается математика constant-product; линейная и фиксированная формы кратко описаны в конце.Параметры, хранящиеся в LaunchState
Названия полей в структуре Rust совпадают с полями
PoolState, описанными в accounts; единицы выше — концептуальные.
Кривая constant-product с виртуальными резервами (curve_type = 0)
Кривая по умолчанию и наиболее используемая. Все запуски в стиле Pump используют эту форму. Кривая предполагает наличие виртуального резерва quote V_q и виртуального резерва base V_b с самого начала (хранятся как virtual_quote и virtual_base в PoolState), поэтому эффективный пул выглядит как CPMM с этими резервами. Покупки следуют математике x · y = k:
base_out:
s:
x · y = k, который LaunchLab применяет до выпуска, затем становится кривой CPMM после выпуска, поэтому переход механически безупречен: предельная цена при base_sold = base_supply_graduation равна цене, по которой открывается пул после выпуска с (quote_vault, base_vault_remaining) в качестве резервов.
Кривая fixed-price (curve_type = 1)
Кривая с плоской ценой. Каждая покупка/продажа происходит по постоянной цене, настраиваемой при Initialize:
base_supply_graduation (линейная зависимость стоимости делает вывод quote_reserve_target простым).
Кривая linear-price (curve_type = 2)
Цена растёт линейно с base_sold:
base_sold — ранние покупатели платят близко к нулю, поздние платят значительно больше, при этом предельная цена всегда растёт с фиксированным наклоном. Реализация на цепи находится в curve/linear_price.rs.
Сравнение форм кривых
Порог выпуска
quote_reserve_target вычисляется при Initialize как количество quote, необходимое для увеличения base_sold с 0 до base_supply_graduation:
quote_vault.balance ≥ quote_reserve_target. Поскольку покупки происходят дискретными размерами, фактический баланс при выпуске может немного превышать целевой — избыток становится дополнительной ликвидностью на стороне quote в результирующем пуле 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):
10 USDC:
- Виртуальное состояние:
s = 0,quote_vault = 0. - Вычесть комиссию:
quote_after_fee = 10 × 0.99 = 9.9. - Решить
(40 / (3e18)) × s³ = 9.9e6— 9.9 USDC в нативных единицах с 6 знаками, в тех же единицах, в которых указано6.827e9выше ⇒s ≈ 9.06e7базовых токенов куплено. - Комиссия 1% (
0.1 USDC) распределена: lp0.06, creator0.02, protocol0.02. Доля lp остаётся вquote_vault; остальные две маршрутизируются в соответствующие счётчики накопления.
s₀ = 750e6 с quote_in_after_fee = 9.9e6 даёт ∆s ≈ 4.4e5 — сокращение base на USDC в ~200× по сравнению с первой покупкой.
Механика комиссий во время фазы кривой
При каждойBuy:
lp_shareостаётся вquote_vault. Это то, что делает эффективную кривую более узкой (больше резерва quote против того же предложения base).protocol_shareувеличиваетLaunchState.state_data.protocol_fees_quote.creator_shareувеличиваетLaunchState.state_data.creator_fees_quote.
Sell то же распределение применяется, но комиссия берётся из исходящего quote_out.
Оба счётчика очищаются через CollectFees (администратор или создатель, каждый на свой счётчик).
Точность
- Количества на стороне base:
u64. - Количества на стороне quote:
u64. - Промежуточные кубы / произведения:
u128. - «Купить точное количество quote» и «продать точное количество quote» обращаются в замкнутой форме — кривая постоянного произведения алгебраически, кривая фиксированной цены делением, кривая линейной цены через квадратный корень. В программе нет решателя Ньютона, нет ограничения на число итераций и нет ошибки
NotConverged.
Передача в CPMM
Когда срабатываетGraduate:
cpmm_initial_price в точности равна price(base_sold), предельной цене кривой в момент передачи, поэтому наблюдатель, переходящий от UI кривой к UI CPMM, не видит скачка. Для кривой с квадратичной ценой это не так: интегрированное среднее лежит выше предельной цены (в примере выше — в 4/3 раза), поэтому скачок при передаче ожидаем.
Что дальше
products/launchlab/accounts— поляLaunchState, хранящие эти параметры.products/launchlab/instructions— списки аккаунтовBuy,Sell,Graduate.algorithms/constant-product— математика CPMM, которую использует пул после выпуска.
- Raydium SDK v2
LaunchLabmodule - Raydium LaunchLab program source

