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

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

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

Что нового

Последний релиз CLMM добавляет три функции поверх ядра в стиле Uniswap v3. Они опциональны при создании пула и обратно совместимы с существующими пулами и позициями:
  • Лимитные ордера. LP теперь могут разместить ордер на одном тике по определённой цене, и путь свопа заполнит его FIFO, когда своп пересечёт этот тик. Ордера исполняются на ATA владельца по лимитной цене; off-chain keeper (limit_order_admin) может собрать исполненные ордера без участия владельца. См. Instructions → OpenLimitOrder / SettleLimitOrder и Math → Limit-order matching during swap.
  • Односторонняя комиссия (CollectFeeOn). Пулы можно настроить на взятие комиссии свопа с входной стороны (legacy поведение, режим 0), или всегда с token_0 (1), или всегда с token_1 (2). Полезно, когда одна сторона пары — канонический учётный токен (например, USDC). См. Fees → Single-sided fee.
  • Динамическая комиссия. Пулы могут включить надбавку к комиссии, отслеживающую волатильность, которая растёт при быстром движении тика и затухает со временем. Калибруется per-tier DynamicFeeConfig и per-pool DynamicFeeInfo. См. Fees → Dynamic fee и Math → Dynamic fee derivation.
Новая инструкция CreateCustomizablePool предоставляет все три параметра при создании пула. Классическая CreatePool продолжает работать для пулов с дефолтной комиссией без лимитных ордеров и динамической комиссии. Более поздний релиз добавляет permissioned multi-pools: CreatePermissionedPool позволяет whitelisted оператору (держателю Permission PDA) создавать более одного пула для одной пары и fee tier, складывая seed_index в адрес пула, и усиливает OpenLimitOrder для отклонения ордеров, чьи входные или выходные токен-аккаунты заморожены. См. запись changelog от 2026-07-30. Релиз от 2026-10-22 открывает создание multi-pool для всех: CreatePermissionedPool переименовывается в CreateCustomizablePoolV2, gate Permission PDA удаляется, и любой payer может создавать дополнительные пулы для пары и fee tier по адресу, производному от seed_index. Пара может иметь много CLMM пулов на fee tier, поэтому выбирайте пулы по ликвидности, а не по адресу. См. Instructions → CreateCustomizablePoolV2 и запись changelog от 2026-10-22. Релиз от 2026-08 добавляет условный путь замораживания позиции для избранных пулов эмитентов с KYC-ограничениями. Каждый новый NFT mint позиции использует пул как freeze authority, но токен-аккаунт NFT остаётся разморожен и передаваем по умолчанию. CLMM замораживает его только когда позиция открывается через OpenPositionV2 или OpenPositionWithToken22Nft и freeze authority одного из mint пула совпадает со списком restricted-issuer программы. Владелец может по-прежнему управлять ликвидностью и закрывать соответствующую позицию, но не может передавать её NFT или менять владельца токен-аккаунта. Существующие позиции не замораживаются ретроактивно. См. Ticks and positions → Restricted-issuer positions и запись changelog от 2026-08-17.

Что даёт CLMM

  • Эффективность капитала. LP стейблкоин-стейблкоина, сконцентрировавший ликвидность в полосе ±0.1% вокруг паритета, может зарабатывать в 100× раз больше комиссий на доллар TVL по сравнению с пулом CPMM той же пары.
  • Учёт комиссий на уровне позиции. Комиссии начисляются per-position, а не per-LP-mint. Две позиции в одном пуле зарабатывают разные суммы комиссий в зависимости от их диапазонов и пути, который прошла цена.
  • Несколько fee tier на пару. Пара может иметь несколько CLMM пулов, каждый привязан к другому AmmConfig со своей торговой комиссией и tick-spacing. Веб-интерфейс и роутеры показывают тот tier, который имеет наибольшую ликвидность по текущей цене.
  • Incentivizable прямо на пуле. До трёх потоков reward токенов можно прикрепить к пулу; позиции собирают награды pro-rata на основе секунд × in-range-ликвидности, которые они вносят. См. products/clmm/fees.
  • NFT позиции. Каждая позиция — это non-fungible токен. Передача NFT обычно передаёт позицию; кошельки и интерфейсы могут отображать позиции так же, как они отображают collectibles. Только V2 позиция, чей underlying mint совпадает с фильтром restricted-issuer, заморожена и не передаваема.
  • Поддержка Token-2022 с обеих сторон пары, с теми же ограничениями расширений, что и CPMM.

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

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

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

Ментальная модель

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

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

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

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

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

Что дальше

  • Accounts — структуры данных пула, конфигурации, массива тиков и позиции.
  • Ticks and positions — карта тиков, интервал тиков, размер массива тиков, позиции на основе NFT.
  • Math — sqrt_price_x64, пошаговый своп, вывод fee_growth_inside.
  • Instructions — OpenPosition, IncreaseLiquidity, Swap, CollectRewards, семейство лимитных ордеров и CreateCustomizablePool.
  • Fees and rewards — модель комиссий на позицию, односторонние режимы комиссий, динамическая комиссия и три слота вознаграждений.
  • Code demos — пошаговые примеры на TypeScript: открытие позиции, изменение, своп, сбор комиссий, лимитные ордера, кастомизируемые пулы.
Источники: