Skip to main content
Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
Ce que cela fait. Crée un nouveau pool CLMM au niveau de frais de votre choix, puis ouvre une position concentrée initiale. Deux transactions, un seul script. Le code provient des démos officielles dans raydium-sdk-V2-demo/src/clmm et a été adapté pour s’exécuter dans un seul fichier Node.

Configuration

Assurez-vous d’avoir lu les prérequis du démarrage rapide et d’avoir RPC_URL, KEYPAIR et les dépendances installées. La création d’un pool CLMM entraîne un frais unique plus un loyer par tick-array pour la position initiale. Vous aurez également besoin des deux mints de semence dans votre portefeuille — ouvrir une position quand le prix se situe dans la plage choisie nécessite de la liquidité des deux côtés.

Étape 1 — config.ts

Enregistrez sous config.ts. Cette structure est la même que celle du modèle src/config.ts.template du dépôt de démo — disableFeatureCheck est forcé à true (recommandé pour tout intégration non triviale afin que le SDK ne se bloque pas sur son appel de détection de fonctionnalités au démarrage) :

Étape 2 — createPool.ts

Enregistrez aux côtés de config.ts. Source : src/clmm/createPool.ts.

Étape 3 — createPosition.ts

Source : src/clmm/createPosition.ts.

Étape 4 — utils.ts

Source : src/clmm/utils.ts.

Exécuter

Ce qui vient de se passer

Transaction 1 — raydium.clmm.createPool a initialisé :
  • l’état du pool à la PDA canonique pour (mint1, mint2, ammConfig),
  • les token_0_vault et token_1_vault (triés par ordre d’octet du mint),
  • le ring buffer observation,
  • la bitmap de tick-array en ligne,
et a défini le sqrt_price_x64 initial à partir de votre initialPrice. Transaction 2 — raydium.clmm.openPositionFromBase a ouvert une position concentrée :
  • créé un NFT de position dans votre portefeuille (le NFT est la position ; le transférer transfère la position),
  • alloué des tick arrays aux limites inférieure et supérieure (loyer unique si première position dans ces plages ; les tick arrays ne sont jamais fermés par le programme, donc les positions suivantes dans les mêmes arrays ne payent pas de loyer supplémentaire),
  • déposé inputAmount de mint1 et le montant de paire correspondant de mint2 (calculé par PoolUtils.getLiquidityAmountOutFromAmountIn),
  • crédité la position avec une liquidité proportionnelle à la largeur de la plage.
Plus la plage est étroite, plus l’efficacité du capital par dollar de TVL est élevée — et plus la perte impermanente est douloureuse quand le prix s’éloigne de la plage. La plage utilisée ci-dessus ([0.000001, 100000]) est effectivement pleine ; resserrez-la pour concentrer les frais près du prix spot actuel.

Choisir un niveau de frais

clmmConfigs[0] est le niveau de frais le plus bas. L’ensemble complet est publié sur GET https://api-v3.raydium.io/main/clmm-config : Consultez user-flows/choosing-a-pool-type pour une matrice de décision complète.

Erreurs courantes

  • Pool already exists for this config — Un pool CLMM existe déjà pour ce triplet (mint1, mint2, ammConfig). Recherchez l’ID de pool existant et ignorez l’étape 2.
  • Insufficient funds for amount B — Votre portefeuille a le montant demandé de mintA mais pas le mintB correspondant. Ouvrir une position quand le prix se situe dans la plage nécessite de la liquidité des deux côtés.
  • Tick out of range — Votre lowerPrice ou upperPrice sort de la plage de prix représentable. Utilisez une plage plus raisonnable par rapport au prix actuel.
  • Prix obsolète — Une cotation de l’API peut être obsolète de 5 à 60 secondes. Si executePosition échoue sur le slippage, décommentez le bloc getRpcClmmPoolInfo dans createPosition.ts pour récupérer le prix actuel juste avant de signer.

Avertissements

  • Le NFT de position est votre seul accès. Perdez le NFT ou transférez-le, vous perdez l’accès à la position. Traitez-le comme une clé.
  • Les positions hors plage ne gagnent pas de frais. Si le prix se déplace en dehors de [lowerPrice, upperPrice], votre position est entièrement parquée dans un actif et ne gagne rien jusqu’à ce que vous rééquilibriez.
  • Le loyer du tick array est unidirectionnel. La première position à toucher un tick array jamais initialisé paie son loyer ; le programme n’expose pas de voie pour fermer les tick arrays, donc ce loyer est permanent. Les positions suivantes dans le même array sont gratuites.

Suivant

Sources :