Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Инвариант
Маркет-мейкер с постоянным произведением (CPMM) держит два резерваx и y и обеспечивает:
k — произведение резервов до сделки. Для рынка без комиссий x · y = k точно. С комиссиями k строго растёт (доля LP от комиссии остаётся в резервах).
Инвариант специально сделан геометрическим: он гарантирует, что независимо от того, насколько малым становится один резерв, другой растёт неограниченно, чтобы уравновесить его — то есть пул никогда не может быть полностью истощен с какой-либо стороны.
Ценообразование
Спот-цена
Маржинальная ценаy в терминах x в любой момент — это касательная к кривой:
x · y = k даёт dy/dx = −y/x; игнорируя знак, |dy/dx| = y/x).
Это цена, которую пул предлагает для бесконечно малой сделки. Для любой конечной сделки реализованная цена хуже из-за проскальзывания вдоль кривой.
Своп с точным входом (даёте Δx, получаете Δy)
С комиссиями, пусть f — ставка комиссии (например, f = 0.0025 для 25 bps). Применяем комиссию к входу, затем используем инвариант для решения выхода:
Δx входит в резервы. Доля LP от комиссии остаётся в x'; доля протокола исключается из кривой через отдельный учёт (см. Варианты учёта комиссий ниже).
Своп с точным выходом (получаете Δy, платите минимальный Δx)
Δx округляется в большую сторону, чтобы пул не недозарядил.
Проскальзывание и ценовое воздействие
Ценовое воздействие измеряет, насколько спот-цена пула изменяется в результате сделки:Δx / x разложение в ряд первого порядка даёт:
p_before и effective — это проскальзывание. Проскальзывание в UI обычно выражается как (effective − p_before) / p_before; computeAmountOut SDK возвращает оба значения amountOut и priceImpact по этой причине.
Проверка инварианта в коде
После своп протоколы перепроверяют:Варианты учёта комиссий
Проверка инварианта предполагает, что комиссия LP остаётся в резервах. Разные продукты Raydium по-разному обрабатывают компоненты протокола, фонда и автора:Соглашение CPMM
Комиссии — этоu64 значения, похожие на базисные пункты, с делителем 1_000_000. Торговая комиссия делится на trade_fee_rate (всего) и затем подразделяется через protocol_fee_rate, fund_fee_rate, creator_fee_rate. На каждом своп:
protocol_fees_*, fund_fees_*, creator_fees_*), которые исключены из резервов, используемых в инварианте. Вот как комиссии можно снять без перемещения кривой. См. products/cpmm/fees.
Соглашение AMM v4
Комиссии — это соотношенияnumerator / denominator с делителем 10_000. Разделение фиксировано при создании пула и сохраняется в AmmInfo.fees:
pnl_share накапливается в state_data.need_take_pnl_* и исключается из резервов; lp_share остаётся в хранилище. См. products/amm-v4/fees.
Оба соглашения сохраняют инвариант одинаково — различие чисто косметическое (делитель + количество подкатегорий).
Правила округления
- Расчёт комиссии округляется в большую сторону. Гарантирует, что пул никогда не заряжает комиссию меньше.
- Выходное количество округляется в меньшую сторону. Гарантирует, что инвариант строго выполняется (
k' > kдаже до добавления комиссии). - Входное количество для точного выхода округляется в большую сторону. Гарантирует, что пользователь не недоплачивает.
u128 для промежуточных произведений x · Δx, чтобы избежать переполнения при больших резервах. Конечные результаты приводятся обратно к u64 с проверкой насыщения.
Граничные случаи
Пустой пул
До первогоDeposit, x = y = 0. Инструкции своп отклоняют попытки до депозита.
Нулевой выход
ЕслиΔx настолько мало, что округленный вниз Δy равен 0, инструкция прерывается с ZeroTradingTokens. Это предотвращает извлечение стоимости без платежа; также означает, что пыльные свопы на сильно несбалансированных пулах не удаются.
Пыльные LP
ПервыйDeposit имеет специальную обработку: он вычисляет начальное предложение LP как sqrt(x · y) и сжигает небольшое количество (обычно 100 LP-единиц), чтобы предотвратить «атаку инфляции первого депозитора» (когда злоумышленник делает пожертвование в хранилище и завышает стоимость LP-токена). Последующие депозиты используют математику пропорционального распределения.
Связь с арбитражем
Цена CPMM пула изменяется только через:- Сделки через сам пул (пользователи идут по кривой).
- Пожертвования (отправка токенов в хранилище без своп).
Практические примеры
Пример 1 — маленькая сделка, пренебрежимое проскальзывание
Пул:x = 1_000_000, y = 2_000_000, k = 2·10^12. Комиссия f = 0.0025.
Сделка Δx = 1_000:
1000 / 1993.01 ≈ 0.5018. Спот до: 0.5. Воздействие: ~0.36%.
Пример 2 — средняя сделка, заметное проскальзывание
Тот же пул,Δx = 100_000 (10% от x):
100_000 / 181_405 ≈ 0.5513. Воздействие: ~10.3% — примерно половина от правила 2 · 10% = 20% (это правило является верхним пределом для пула с постоянным произведением без комиссий; торговая комиссия плюс инверсия в формуле снижают её).
Ссылки
products/cpmm/math— конкретные выборы округления и делителя комиссии CPMM.products/amm-v4/math— как резервы AMM v4, интегрированные с OpenBook, расширяют эту модель.algorithms/slippage-and-price-impact— отдельная страница про масштабирование допуска проскальзывания для UI.
- Uniswap v2 whitepaper — каноническое описание
x · y = k. - Исходный код программы Raydium CPMM.
- Исходный код программы Raydium AMM v4.


