Passer au contenu principal

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.

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, 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 bien 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 demeure sous forme de solde unilatéral. Le programme suit la liquidité par tick (un bucket de prix discrétisé), évalue l’état du pool en fonction de 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 jeton LP fongible.

Quoi de neuf

La dernière version de CLMM apporte trois additions au-dessus du cœur de style Uniswap v3. Elles sont optionnelles au moment de la création du pool et rétro-compatibles avec les pools et positions existants :
  • Limit orders. Les LP peuvent désormais placer une commande à un tick unique à un prix spécifique et faire remplir le chemin de swap FIFO lorsque le swap franchit ce tick. Les commandes se règlent dans l’ATA du propriétaire au prix limite ; un gardien hors chaîne (limit_order_admin) peut collecter les commandes remplies sans que le propriétaire soit en ligne. Voir Instructions → OpenLimitOrder / SettleLimitOrder et Math → Limit-order matching during swap.
  • Single-sided fee (CollectFeeOn). Les pools peuvent être configurés pour prélever les frais de swap du côté d’entrée (comportement legacy, mode 0), ou toujours depuis token_0 (1), ou toujours depuis token_1 (2). Utile quand l’un des côtés de la paire est le jeton comptable canonique (par exemple, USDC). Voir Fees → Single-sided fee.
  • Dynamic fee. Les pools peuvent activer un surcoût de frais de suivi de la volatilité qui augmente avec les mouvements de tick rapides et décroît au fil du temps. Calibré par un DynamicFeeConfig par tier et un DynamicFeeInfo par pool. Voir Fees → Dynamic fee et Math → Dynamic fee derivation.
Une nouvelle instruction, CreateCustomizablePool, expose tous les trois paramètres au moment de la création du pool. L’instruction classique CreatePool continue à fonctionner pour les pools avec frais par défaut, sans limit orders ni frais dynamiques.

Ce que CLMM vous apporte

  • Efficacité du capital. Un LP stablecoin-stablecoin concentrant la liquidité dans une bande ±0,1 % autour de la parité peut gagner 100× ou plus de 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, non par LP-mint. Deux positions sur le même pool gagnent des montants de frais différents selon leurs plages et le chemin qu’a pris le prix.
  • Plusieurs tiers de frais par paire. Une paire peut avoir plusieurs pools CLMM, chacun lié à un AmmConfig différent avec son propre taux de frais de trading et son espacement de tick. L’interface web et les routers affichent le tier ayant le plus de liquidité au prix actuel.
  • Incitations directes sur le pool. Jusqu’à trois flux de jetons de récompense peuvent être attachés à un pool ; les positions collectent les récompenses au prorata en fonction des secondes × liquidité in-range qu’elles apportent. Voir products/clmm/fees.
  • Positions en NFT. Chaque position est un jeton non-fongible avec un mint égal à un PDA déterministe. Transférer le NFT transfère la position ; les portefeuilles et UI peuvent afficher les positions de la même manière qu’ils affichent les objets de collection.
  • Support de Token-2022 des deux côtés de la paire, avec les mêmes restrictions d’extension que CPMM.

Ce que CLMM n’est pas

  • Pas du type « définir et oublier ». Une plage définie quand SOL est à 160 $ ne générera aucun revenu si SOL baisse à 80 $, à moins que vous ne la réajustiez activement. CLMM récompense les LP actifs ; les LP passifs devraient rester sur CPMM.
  • Pas sans frais d’ouverture. Chaque nouvelle tick-array que franchit la position doit être initialisée, ce qui coûte du rent. Les plages larges sont moins chères ; les étroites ne le sont pas.
  • Pas un CLOB. Contrairement à AMM v4, CLMM n’a aucune dépendance OpenBook. Toute la liquidité est sur la carte de ticks.
  • Pas un sur-ensemble de CPMM. Une position CLMM couvrant [tick_min, tick_max] à plage maximale se comporte de façon similaire à CPMM, mais avec des coûts de gas différents, un modèle de comptabilité des frais différent, et aucun jeton LP fongible. Si vous voulez un pool LP fongible simple, utilisez CPMM.

Comment CLMM diffère de CPMM et AMM v4

DimensionAMM v4CPMMCLMM
CourbeProduit constantProduit constantConcentré (basé sur les ticks)
Part LPMint LP fongibleMint LP fongibleNFT par position
La liquidité se trouve…Sur tous les prixSur tous les prixDans une plage choisie par l’utilisateur
Tiers de fraisFixe 0,25 %Par AmmConfig (p. ex. 0,25 %, 1 %)Par AmmConfig × espacement de tick
Gestion activeNon applicableNon applicableObligatoire
Comptabilité des fraisAu niveau du poolAu niveau du poolPar position
Farms de récompensesProgramme Farm séparéProgramme Farm séparéIntégré (jusqu’à 3 récompenses)
Token-2022NonOuiOui
Oracle on-chainNonRing observationTableau observation par pool

Modèle mental

Pensez à un pool CLMM comme à trois structures de données superposées :
  1. Une courbe continue dans l’espace sqrt_price. Le prix du pool est représenté par sqrt_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 celles d’un AMM à liquidité concentrée standard (voir algorithms/clmm-math).
  2. Une carte de tick discrète. Les prix sont quantifiés en ticks — puissances entières de 1.0001. Chaque tick a un sqrt_price connu. Les positions font référence à leurs points d’extrémité comme des indices de tick entiers. Les indices de tick sont regroupés en tick arrays de taille fixe pour le stockage.
  3. Comptabilité des frais et récompenses par position. Chaque position stocke le global fee_growth_inside au moment de sa dernière mise à jour. Quand le LP touche la position (ouverture, fermeture, ajustement, collecte), le programme soustrait la valeur stockée du global actuel pour calculer ce qui est dû. C’est le motif Uniswap v3 feeGrowthInside0X128 / feeGrowthInside1X128.
Chaque action de l’utilisateur se décompose en transitions d’état sur ces trois structures :
  • Ouvrir une position : choisir une plage de ticks, déposer des jetons, émettre un NFT, insérer la liquidité dans la carte de ticks au sein de la plage, initialiser 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 ticks ; collecter les frais accumulés en même temps.
  • Swap : parcourir depuis le sqrt_price_x64 actuel dans la direction du trade, en consommant la liquidité active jusqu’à ce que l’entrée soit épuisée ou que le prochain tick initialisé soit atteint ; franchir le tick et prendre ou laisser tomber la liquidité du nouveau côté.
  • Collecter les frais / récompenses : calculer fee_growth_inside_now − fee_growth_inside_last × position_liquidity pour chaque côté et chaque flux de récompense ; transférer.
Le pool est sinon indifférent aux positions qui sont ouvertes. Deux LP dans la même plage voient le même chemin de croissance des frais, mis à l’échelle par leurs montants liquidity individuels.

Quand choisir CLMM

Choisissez 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 farm séparée.
  • Vous avez besoin d’une comptabilité par position pour votre propre produit LP (vault, produit structuré, etc.).
Préférez CPMM quand :
  • Vous lancez un nouveau jeton avec une découverte de prix inconnue.
  • Vous voulez un seul jeton LP fongible que vous pouvez staker, locker ou composer avec.
  • Vous voulez une expérience LP passive.
Préférez AMM v4 quand :
  • Vous avez spécifiquement besoin de la profondeur hybrid-CLOB qu’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 NFT de position avec fourniture 1.
  • Un compte d’état de position personnelle keyed au mint NFT, tenant les ticks de la position, la liquidité, et les dernières valeurs de croissance des frais observées.
Transférer le NFT transfère la position — l’autorité du compte de position personnelle est le propriétaire du NFT. C’est le même motif que Uniswap v3 a pionné, implémenté dans le modèle de compte de Solana. Un traitement détaillé se trouve dans products/clmm/ticks-and-positions.
Les versions plus anciennes de 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 l’utilisent plus — le champ apparaît toujours sur les listes de comptes OpenPosition / IncreaseLiquidity / DecreaseLiquidity comme UncheckedAccount pour la compatibilité ABI, mais le programme ne le lit ni ne l’écrit. La comptabilité de plage agrégée réside sur les endpoints de tick (liquidity_gross, liquidity_net) directement.

Où aller ensuite

  • Accounts — les layouts des comptes pool, config, tick-array et position.
  • Ticks and positions — la carte de ticks, l’espacement de ticks, le dimensionnement des tick-arrays, les positions basées sur NFT.
  • Mathsqrt_price_x64, walk-through de swap, dérivation de fee_growth_inside.
  • InstructionsOpenPosition, IncreaseLiquidity, Swap, CollectRewards, la famille des limit-orders, et CreateCustomizablePool.
  • Fees and rewards — le modèle de frais par position, les modes de frais unilatéraux, les frais dynamiques, et les trois slots de récompense.
  • Code demos — walkthroughs ouverture / ajustement / swap / collecte / limit-order / customizable-pool en TypeScript.
Sources :