Перейти к основному содержанию

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.

Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →

Краткое резюме

CLMM — Concentrated Liquidity Market Maker — это Uniswap-v3-стиля АММ от Raydium. Вместо того чтобы распределять депозит поставщика ликвидности по всей кривой цены, CLMM позволяет LP вносить средства в определённый диапазон цен. Внутри этого диапазона каждый доллар депозита приносит в несколько раз больше дохода, чем в пуле CPMM; вне диапазона депозит не приносит ничего и остаётся односторонним балансом. Программа отслеживает ликвидность за tick (квантованный ценовой бакет), представляет состояние пула квадратным корнем цены в виде Q64.64 fixed-point числа (sqrt_price_x64) и чеканит NFT для каждой позиции LP вместо fungible LP токена.

Что нового

Последний релиз CLMM включает три дополнения поверх ядра в стиле Uniswap-v3. Они опциональны при создании пула и обратно совместимы с существующими пулами и позициями:
  • Лимит-ордеры. LP могут теперь поставить ордер на одном tick по определённой цене и получить заполнение по FIFO, когда своп пересекает этот tick. Ордеры рассчитываются в ATA владельца по лимитной цене; оффчейн-хранитель (limit_order_admin) может собирать заполненные ордеры без присутствия владельца. См. Instructions → OpenLimitOrder / SettleLimitOrder и Math → Limit-order matching during swap.
  • Односторонний сбор комиссии (CollectFeeOn).** Пулы можно настроить на взимание комиссии за своп со входной стороны (наследованное поведение, режим 0), или всегда из token_0 (1), или всегда из token_1 (2). Полезно, когда одна сторона пары — это канонический токен учёта (например, USDC). См. Fees → Single-sided fee.
  • Динамическая комиссия. Пулы могут включить надбавку за комиссию, отслеживающую волатильность, которая растёт при быстром движении tick и затухает со временем. Калибруется по-за-пулу DynamicFeeConfig и per-pool DynamicFeeInfo. См. Fees → Dynamic fee и Math → Dynamic fee derivation.
Новая инструкция CreateCustomizablePool предоставляет все три опции при создании пула. Классическая CreatePool продолжает работать для пулов с комиссией по умолчанию без лимит-ордеров и динамической комиссии.

Что даёт CLMM

  • Эффективность капитала. LP стабильной пары, сосредоточивший ликвидность в диапазоне ±0,1% около паритета, может заработать в 100 раз и более комиссий на доллар TVL по сравнению с пулом CPMM той же пары.
  • Учёт комиссий на уровне позиции. Комиссии начисляются за позицию, а не за LP-mint. Две позиции в одном пуле получают разные суммы комиссий в зависимости от их диапазонов и пути, по которому двигалась цена.
  • Несколько уровней комиссий за пару. Пара может иметь несколько пулов CLMM, каждый привязан к другому AmmConfig со своей ставкой торговой комиссии и tick-spacing. Веб-интерфейс и маршрутизаторы показывают тот уровень, который имеет наибольшую ликвидность по текущей цене.
  • Стимулы напрямую на пуле. До трёх потоков вознаграждений можно подключить к пулу; позиции собирают награды пропорционально их вкладу (секунды × in-range-liquidity). См. products/clmm/fees.
  • NFT позиции. Каждая позиция — это non-fungible токен с mint равным детерминированной PDA. Передача NFT передаёт позицию; кошельки и интерфейсы могут отображать позиции так же, как они отображают коллекционные предметы.
  • Поддержка Token-2022 с обеих сторон пары с такими же ограничениями расширений как CPMM.

Что CLMM не является

  • Не установи и забудь. Диапазон, установленный когда SOL стоит $160, не будет приносить ничего, если SOL упадёт до $80, если вы не будете активно подстраиваться. CLMM награждает активных LP; пассивные LP должны остаться с CPMM.
  • Не без затрат на открытие. Каждый новый tick-array, который пересекает позиция, должен быть инициализирован, что требует затрат на rent. Широкие диапазоны дешевле; узкие — нет.
  • Не CLOB. В отличие от AMM v4, CLMM не имеет зависимости от OpenBook. Вся ликвидность находится на tick-карте.
  • Не надмножество CPMM. Позиция CLMM, охватывающая [tick_min, tick_max] с максимальным диапазоном, ведёт себя аналогично CPMM, но с другими затратами на газ, другой моделью учёта комиссий и без fungible LP токена. Если вам нужен простой пул с fungible LP, используйте CPMM.

Как CLMM отличается от CPMM и AMM v4

DimensionAMM v4CPMMCLMM
КриваяПостоянное произведениеПостоянное произведениеСосредоточенная (tick-based)
Доля LPFungible LP mintFungible LP mintPer-position NFT
Ликвидность находится…По всем ценамПо всем ценамВ выбранном пользователем диапазоне
Уровни комиссийФиксированные 0.25%Per AmmConfig (напр., 0.25%, 1%)Per AmmConfig × tick-spacing
Активное управлениеНеприменимоНеприменимоТребуется
Учёт комиссийНа уровне пулаНа уровне пулаPer-position
Reward farmsОтдельная программа FarmОтдельная программа FarmВстроенная (до 3 вознаграждений)
Token-2022НетДаДа
On-chain оракулНетobservation ringobservation массив per pool

Концептуальная модель

Думайте о пуле CLMM как о трёх наложенных структурах данных:
  1. Непрерывная кривая в пространстве sqrt_price. Цена пула представлена как sqrt_price_x64, Q64.64 fixed-point. Свопы ходят по этой кривой; внутри границы tick математика стандартна (см. algorithms/clmm-math).
  2. Дискретная tick-карта. Цены квантованы в ticks — целые степени 1.0001. Каждый tick имеет известный sqrt_price. Позиции ссылаются на свои конечные точки как на целые индексы tick. Индексы tick группируются в fixed-size tick arrays для хранения.
  3. Per-position учёт комиссий и вознаграждений. Каждая позиция хранит глобальный fee_growth_inside на момент последнего обновления. Когда LP касается позиции (открытие, закрытие, изменение, сбор), программа вычитает сохранённое значение из текущего глобального, чтобы получить то, что причитается. Это паттерн Uniswap-v3 feeGrowthInside0X128 / feeGrowthInside1X128.
Каждое действие пользователя разлагается на переходы состояния в этих трёх структурах:
  • Открыть позицию: выбрать диапазон tick, внести токены, чеканить NFT, вставить ликвидность в tick-карту в диапазоне, инициализировать любые ранее пустые tick-arrays.
  • Увеличить / уменьшить ликвидность: изменить количество, хранящееся в аккаунте позиции NFT и в tick-карте; собрать накопленные комиссии одновременно.
  • Своп: идти от текущего sqrt_price_x64 в направлении торговли, потребляя активную ликвидность до тех пор, пока вход не исчерпается или не будет достигнут следующий инициализированный tick; пересечь tick и собрать или отпустить ликвидность на новой стороне.
  • Собрать комиссии / награды: вычислить fee_growth_inside_now − fee_growth_inside_last × position_liquidity для каждой стороны и каждого потока вознаграждений; вывести.
Пул иным образом безразличен к тому, какие позиции открыты. Два LP в одном диапазоне видят одинаковый путь growth-fee, масштабированный их индивидуальными суммами liquidity.

Когда выбрать CLMM

Выбирайте CLMM когда:
  • Вы предоставляете ликвидность стабильной или mean-reverting паре (USDC/USDT, jitoSOL/SOL, wBTC/BTC) и хотите сосредоточиться около паритета.
  • Вы маркет-мейкер, готовый отслеживать цену и перебалансировать.
  • Вам специально нужны per-pool эмиссии стимулов без создания отдельного farm.
  • Вам нужен per-position учёт для собственного LP продукта (vault, структурированный продукт и т.д.).
Предпочитайте CPMM когда:
  • Вы запускаете новый токен с неизвестным процессом ценообразования.
  • Вы хотите один fungible LP токен, который можно стейкить, локировать или комбинировать с другим.
  • Вы хотите пассивный LP опыт.
Предпочитайте AMM v4 когда:
  • Вам специально нужна гибридная CLOB глубина, которую AMM v4 размещает на OpenBook.
  • Вы мигрируете существующие AMM v4 интеграции и не открываете новые позиции.

Позиции — это NFT

Позиция CLMM представлена на-цепи двумя аккаунтами:
  • Position NFT mint с supply 1.
  • Personal-position state аккаунт, привязанный к NFT mint, хранящий ticks позиции, ликвидность и последние наблюдаемые значения fee-growth.
Передача NFT передаёт позицию — authority personal-position аккаунта — это владелец NFT. Это тот же паттерн, который пионерски внедрил Uniswap v3, реализованный в модели аккаунтов Solana. Детальное описание в products/clmm/ticks-and-positions.
Более старые релизы CLMM также создавали ProtocolPositionState аккаунт per (pool, tick_lower, tick_upper) для агрегирования ликвидности за этот диапазон. Новые релизы больше его не создают и не используют — поле по-прежнему появляется в списках аккаунтов OpenPosition / IncreaseLiquidity / DecreaseLiquidity как UncheckedAccount для совместимости ABI, но программа не читает и не пишет его. Агрегирование диапазонов находится прямо на конечных точках tick (liquidity_gross, liquidity_net).

Куда дальше

  • Accounts — разметка аккаунтов пула, конфига, tick-array и позиции.
  • Ticks and positions — tick-карта, tick-spacing, размер tick-array, NFT-based позиции.
  • Mathsqrt_price_x64, пошаговый своп, вывод fee_growth_inside.
  • InstructionsOpenPosition, IncreaseLiquidity, Swap, CollectRewards, семейство лимит-ордеров и CreateCustomizablePool.
  • Fees and rewards — per-position модель комиссий, режимы односторонней комиссии, динамическая комиссия и три слота вознаграждений.
  • Code demos — открытие / изменение / своп / сбор / лимит-ордер / customizable-pool пошаговые примеры на TypeScript.
Sources: