Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
Résumé en un paragraphe
CLMM — Concentrated Liquidity Market Maker — est l’AMM de style Uniswap-v3 de Raydium. Au lieu de répartir le dépôt d’un fournisseur de liquidité sur l’ensemble de la courbe de prix, le CLMM permet aux LP de déposer dans une plage de prix spécifique. À l’intérieur de cette plage, chaque dollar de dépôt est plusieurs fois plus productif qu’il ne le serait dans un pool CPMM ; en dehors de la plage, le dépôt ne génère rien et reste comme un solde unilatéral. Le programme suit la liquidité par tick (un compartiment de prix discrétisé), évalue l’état du pool par la racine carrée du prix encodée en nombre à virgule fixe Q64.64 (sqrt_price_x64), et émet un NFT pour chaque position LP plutôt qu’un token LP fongible.
Quoi de neuf
La dernière version du CLMM apporte trois ajouts au-dessus du cœur de style Uniswap-v3. Ils sont optionnels au moment de la création du pool et rétrocompatibles avec les pools et positions existants :- Ordres limites. Les LP peuvent désormais placer un ordre à un seul tick à un prix spécifique et faire remplir le chemin de swap FIFO lorsque le swap traverse ce tick. Les ordres se règlent dans l’ATA du propriétaire au prix limite ; un gardien hors chaîne (
limit_order_admin) peut récupérer les ordres remplis sans que le propriétaire soit en ligne. Voir Instructions → OpenLimitOrder / SettleLimitOrder et Math → Limit-order matching during swap. - Frais unilatéraux (
CollectFeeOn). Les pools peuvent être configurés pour prélever les frais de swap du côté d’entrée (comportement hérité, mode0), ou toujours detoken_0(1), ou toujours detoken_1(2). Utile quand un côté de la paire est le token comptable canonique (par exemple, USDC). Voir Fees → Single-sided fee. - Frais dynamiques. Les pools peuvent opter pour une surcharge de frais de suivi de volatilité qui augmente avec les mouvements rapides de tick et décroît au fil du temps. Calibré par une
DynamicFeeConfigpar tier et uneDynamicFeeInfopar pool. Voir Fees → Dynamic fee et Math → Dynamic fee derivation.
CreateCustomizablePool, expose les trois paramètres au moment de la création du pool. L’instruction classique CreatePool continue de fonctionner pour les pools à frais par défaut sans ordres limites ni frais dynamiques.
Une version ultérieure ajoute les multi-pools autorisés : CreatePermissionedPool permet à un opérateur autorisé (détenant une PDA Permission) de créer plus d’un pool pour la même paire et le même tier de frais en intégrant un seed_index dans l’adresse du pool, et renforce OpenLimitOrder pour rejeter les ordres dont le compte de token d’entrée ou de sortie est gelé. Voir l’entrée du changelog du 2026-07-30.
La version du 2026-10-22 ouvre la création de multi-pools à tous : CreatePermissionedPool est renommé en CreateCustomizablePoolV2, la porte PDA Permission est supprimée, et n’importe quel payeur peut créer des pools supplémentaires pour une paire et un tier de frais à une adresse dérivée de seed_index. Une paire peut donc avoir de nombreux pools CLMM par tier de frais, alors choisissez les pools par liquidité, pas par adresse. Voir Instructions → CreateCustomizablePoolV2 et l’entrée du changelog du 2026-10-22.
La version d’août 2026 ajoute un chemin de gel de position conditionnel pour les pools d’émetteurs restreints KYC sélectionnés. Chaque nouveau mint de position NFT utilise le pool comme autorité de gel, mais le compte de token NFT reste dégelé et transférable par défaut. Le CLMM le gèle uniquement lorsque la position est ouverte via OpenPositionV2 ou OpenPositionWithToken22Nft et que l’autorité de gel de l’un des mints du pool correspond à la liste des émetteurs restreints du programme. Le propriétaire peut toujours gérer la liquidité et fermer une position correspondante, mais ne peut pas transférer son NFT ni changer le propriétaire du compte de token. Les positions existantes ne sont pas gelées rétroactivement. Voir Ticks and positions → Restricted-issuer positions et l’entrée du changelog du 2026-08-17.
Ce que le CLMM vous apporte
- Efficacité du capital. Un LP stablecoin-stablecoin concentrant la liquidité dans une bande de ±0,1 % autour de la parité peut générer 100×+ les frais par dollar de TVL par rapport à un pool CPMM de la même paire.
- Comptabilité des frais au niveau de la position. Les frais s’accumulent par position, pas par mint LP. Deux positions sur le même pool génèrent des montants de frais différents en fonction de leurs plages et du chemin que le prix a emprunté.
- Plusieurs tiers de frais par paire. Une paire peut avoir plusieurs pools CLMM, chacun lié à une
AmmConfigdifférente avec son propre taux de frais de trading et espacement de tick. L’interface web et les routeurs affichent le tier qui a le plus de liquidité au prix actuel. - Incitativable directement sur le pool. Jusqu’à trois flux de tokens de récompense peuvent être attachés à un pool ; les positions collectent les récompenses au prorata en fonction des secondes × liquidité en plage qu’elles contribuent. Voir
products/clmm/fees. - Positions NFT. Chaque position est un token non fongible. Transférer le NFT transfère normalement la position ; les portefeuilles et les interfaces peuvent afficher les positions de la même manière qu’ils affichent les objets de collection. Seule une position V2 dont le mint sous-jacent correspond au filtre d’émetteur restreint est gelée et non transférable.
- Support Token-2022 des deux côtés de la paire, avec les mêmes restrictions d’extension que le CPMM.
Ce que le CLMM n’est pas
- Pas du type « configurer et oublier ». Une plage définie quand SOL est à $160 ne générera rien si SOL passe à $80, sauf si vous l’ajustez activement. Le CLMM récompense les LP actifs ; les LP passifs devraient rester avec le CPMM.
- Pas gratuit à ouvrir. Chaque nouveau tick-array que la position traverse doit être initialisé, ce qui coûte du loyer. Les plages larges sont moins chères ; les plages étroites ne le sont pas.
- Pas un CLOB. Contrairement à l’AMM v4, le CLMM n’a pas de dépendance OpenBook. Toute la liquidité se trouve sur la carte de tick.
- Pas un sur-ensemble du CPMM. Une position CLMM s’étendant sur
[tick_min, tick_max]à plage maximale se comporte de manière similaire au CPMM, mais avec des coûts de gaz différents, un modèle de comptabilité des frais différent, et pas de token LP fongible. Si vous voulez un pool LP fongible simple, utilisez le CPMM.
Comment le CLMM diffère du CPMM et de l’AMM v4
Modèle mental
Pensez à un pool CLMM comme à trois structures de données superposées :- Une courbe continue dans l’espace
sqrt_price. Le prix du pool est représenté parsqrt_price_x64, un nombre à virgule fixe Q64.64. Les swaps parcourent cette courbe ; à l’intérieur d’une limite de tick, les mathématiques sont des mathématiques AMM de liquidité concentrée standard (voiralgorithms/clmm-math). - Une carte de tick discrète. Les prix sont quantifiés en ticks — puissances entières de
1.0001. Chaque tick a unsqrt_priceconnu. Les positions référencent leurs extrémités comme des indices de tick entiers. Les indices de tick sont regroupés en tick arrays de taille fixe pour le stockage. - Comptabilité des frais et récompenses par position. Chaque position stocke le
fee_growth_insideglobal au moment de sa dernière mise à jour. Quand le LP touche la position (ouvrir, fermer, ajuster, collecter), le programme soustrait la valeur stockée de la valeur globale actuelle pour calculer ce qui est dû. C’est le modèle Uniswap-v3feeGrowthInside0X128 / feeGrowthInside1X128.
- Ouvrir une position : choisir la plage de tick, déposer des tokens, émettre un NFT, insérer la liquidité dans la carte de tick dans la plage, initialiser tous les tick-arrays précédemment vides.
- Augmenter / diminuer la liquidité : ajuster le montant stocké dans le compte de position associé au NFT et dans la carte de tick ; collecter les frais accumulés en même temps.
- Swap : parcourir depuis le
sqrt_price_x64actuel dans la direction du trade, consommant la liquidité active jusqu’à ce que l’entrée soit épuisée ou que le prochain tick initialisé soit atteint ; traverser le tick et récupérer ou déposer la liquidité du nouveau côté. - Collecter les frais / récompenses : calculer
fee_growth_inside_now − fee_growth_inside_last×position_liquiditypour chaque côté et chaque flux de récompense ; transférer.
liquidity.
Quand choisir le CLMM
Choisissez le CLMM quand :- Vous fournissez de la liquidité à une paire stable ou mean-reverting (USDC/USDT, jitoSOL/SOL, wBTC/BTC) et voulez vous concentrer près de la parité.
- Vous êtes un market maker disposé à surveiller le prix et à rééquilibrer.
- Vous avez spécifiquement besoin d’émissions d’incitations par pool sans mettre en place une ferme séparée.
- Vous avez besoin d’une comptabilité par position pour votre propre produit LP (vault, produit structuré, etc.).
- Vous lancez un nouveau token avec une découverte de prix inconnue.
- Vous voulez un seul token LP fongible que vous pouvez staker, verrouiller ou composer avec.
- Vous voulez une expérience LP passive.
- Vous avez spécifiquement besoin de la profondeur hybride-CLOB que l’AMM v4 place sur OpenBook.
- Vous migrez des intégrations AMM v4 existantes et n’ouvrez pas de nouvelles positions.
Les positions sont des NFT
Une position CLMM est représentée on-chain par deux comptes :- Un mint de position NFT avec une offre de 1.
- Un compte d’état de position personnelle lié au mint NFT, contenant les ticks, la liquidité et les dernières valeurs de croissance des frais observées de la position.
products/clmm/ticks-and-positions.
Les versions antérieures du CLMM créaient également un compte
ProtocolPositionState par (pool, tick_lower, tick_upper) pour agréger la liquidité pour cette plage. Les versions plus récentes ne le créent ni ne l’utilisent plus — le champ apparaît toujours sur les listes de comptes OpenPosition / IncreaseLiquidity / DecreaseLiquidity comme un UncheckedAccount pour la compatibilité ABI, mais le programme ne le lit ni ne l’écrit. La comptabilité de plage agrégée se trouve sur les extrémités de tick (liquidity_gross, liquidity_net) directement.Où aller ensuite
- Comptes — les dispositions des comptes pool, config, tick-array et position.
- Ticks et positions — la carte des ticks, l’espacement des ticks, le dimensionnement des tick-arrays, les positions basées sur les NFT.
- Mathématiques —
sqrt_price_x64, déroulement du swap, dérivation defee_growth_inside. - Instructions —
OpenPosition,IncreaseLiquidity,Swap,CollectRewards, la famille des limit-orders, etCreateCustomizablePool. - Frais et récompenses — le modèle de frais par position, les modes de frais unilatéraux, les frais dynamiques, et les trois emplacements de récompenses.
- Démonstrations de code — procédures pas à pas en TypeScript pour ouvrir / ajuster / swapper / collecter / limit-order / customizable-pool.
- Source Raydium CLMM —
raydium-io/raydium-clmm - Livre blanc Uniswap v3 (« Uniswap v3 Core ») pour les mathématiques que CLMM hérite directement
reference/program-addressespour les ID de programme canoniques

