Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
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.9⇒s ≈ 6.22e6базовых токенов куплено. - Комиссия 1% (
0.1 USDC) распределена: lp0.06, creator0.02, protocol0.02. Доля lp остаётся вquote_vault; остальные две маршрутизируются в соответствующие счётчики накопления.
s₀ = 750e6 с quote_in_after_fee = 9.9 даёт примерно ∆s ≈ 0.4e6 — сокращение в ~15 раз в base на USDC по сравнению с первой покупкой.
Механика комиссий во время фазы кривой
При каждой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” итерируют в
u128с фиксированной точкой с настраиваемым максимальным количеством итераций (по умолчанию 10). Режим отказа —NotConverged— редко встречается вне граничных случаев близко к выпуску.
Передача в CPMM
Когда срабатываетGraduate:
cpmm_initial_price механически равна price(base_sold) (это предельная цена кривой в момент передачи). Пул CPMM открывается ровно по этой цене, поэтому наблюдатель, переходящий от UI кривой к UI CPMM, не видит скачка.
Что дальше
products/launchlab/accounts— поляLaunchState, хранящие эти параметры.products/launchlab/instructions— списки аккаунтовBuy,Sell,Graduate.algorithms/constant-product— математика CPMM, которую использует пул после выпуска.
- Raydium SDK v2
LaunchLabmodule - Raydium LaunchLab program source

