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

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

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

Что нового

Последний релиз CLMM добавляет три функции поверх ядра в стиле Uniswap v3. Они опциональны при создании пула и обратно совместимы с существующими пулами и позициями:
  • Лимитные ордера. LP теперь могут разместить ордер на одном тике по определённой цене, и путь свопа заполнит его FIFO при пересечении этого тика. Ордера исполняются на 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.
  • Динамическая комиссия. Пулы могут включить надбавку к комиссии, отслеживающую волатильность, которая растёт при быстром движении тика и затухает со временем. Калибруется по DynamicFeeConfig для каждого уровня и DynamicFeeInfo для каждого пула. См. Fees → Dynamic fee и Math → Dynamic fee derivation.
Новая инструкция CreateCustomizablePool предоставляет все три параметра при создании пула. Классическая CreatePool продолжает работать для пулов с комиссией по умолчанию без лимитных ордеров и динамической комиссии. Более поздний релиз добавляет пулы с разрешением для нескольких пулов: CreatePermissionedPool позволяет внесённому в белый список оператору (владельцу PDA Permission) создавать более одного пула для одной и той же пары и уровня комиссии, встраивая seed_index в адрес пула, и усиливает OpenLimitOrder для отклонения ордеров, чьи входные или выходные счета токенов заморожены. См. Instructions → CreatePermissionedPool и запись в журнале изменений от 2026-07-30. Релиз 2026-08 добавляет условный путь замораживания позиций для избранных пулов эмитентов с ограничениями KYC. Каждый новый минт NFT позиции использует пул как орган замораживания, но счёт токена NFT остаётся разморожен и по умолчанию передаваем. CLMM замораживает его только когда позиция открывается через OpenPositionV2 или OpenPositionWithToken22Nft и орган замораживания одного из минтов пула совпадает со списком ограниченных эмитентов программы. Владелец может по-прежнему управлять ликвидностью и закрывать соответствующую позицию, но не может передавать её NFT или менять владельца счёта токена. Существующие позиции не замораживаются ретроактивно. См. Ticks and positions → Restricted-issuer positions и запись в журнале изменений от 2026-08-17.

Что даёт CLMM

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

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

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

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

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

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

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

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

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

Позиция CLMM представлена на цепи двумя счётами:
  • Минт NFT позиции с предложением 1.
  • Счёт состояния личной позиции, привязанный к минту NFT, содержащий тики позиции, ликвидность и последние наблюдаемые значения роста комиссий.
Передача разморозенного NFT позиции передаёт позицию — орган позиции личного счёта — это держатель NFT. V2 позиция остаётся привязана к своему первоначальному владельцу только если один из базовых минтов хранилища совпадает с фильтром ограниченного эмитента и CLMM замораживает счёт токена NFT при создании. Позиция остаётся управляемой и закрываемой через CLMM. Подробное описание находится в products/clmm/ticks-and-positions.
Более старые релизы CLMM также создавали счёт ProtocolPositionState за (pool, tick_lower, tick_upper) для агрегирования ликвидности для этого диапазона. Новые релизы больше его не создают и не используют — поле по-прежнему появляется в списках счётов OpenPosition / IncreaseLiquidity / DecreaseLiquidity как UncheckedAccount для совместимости ABI, но программа его не читает и не пишет. Агрегированный учёт диапазона находится на конечных точках тиков (liquidity_gross, liquidity_net) напрямую.

Куда дальше

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