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 réparties sur quatre fichiers —
config.ts, createPool.ts, createPosition.ts et utils.ts — à exécuter avec npx tsx. Le code provient des démos officielles dans raydium-sdk-V2-demo/src/clmm et a été adapté pour fonctionner de manière autonome.Configuration
Assurez-vous d’avoir lu les prérequis du démarrage rapide et que vous disposez deRPC_URL, KEYPAIR et des dépendances installées.
En plus des dépendances du démarrage rapide, vous avez besoin de :
decimal.js— calculs de prix et de tick danscreatePool.tsetcreatePosition.ts.bs58— décode une clé secrète encodée en base58 dansconfig.tssi vous utilisezKEYPAIR_BS58au lieu d’un fichier JSON.tsx— exécute directement les fichiers.tsci-dessous vianpx tsx; contrairement aux scripts de swap et CPMM, celui-ci n’est pas un fichier.mjsordinaire exécuté avecnode.
cluster en "devnet" dans config.ts ne suffit pas à lui seul. createPool.ts passe un programId: CLMM_PROGRAM_ID explicite, une constante mainnet fixe qui ne suit pas cluster — remplacez-le par la ligne DEVNET_PROGRAM_ID.CLMM_PROGRAM_ID commentée juste au-dessus. createPosition.ts code également en dur un poolId mainnet (le pool RAY-USDC) ; remplacez-le par l’ID du pool devnet que vous avez créé à l’étape 2.
Étape 1 — config.ts
Enregistrez sous config.ts. Cela a la même structure que le src/config.ts.template du dépôt de démo — disableFeatureCheck est forcé à true (recommandé pour toute intégration non triviale afin que le SDK ne soit pas bloqué par son appel de détection de fonctionnalités au démarrage) :
config.ts
Étape 2 — createPool.ts
Enregistrez aux côtés de config.ts. Source : src/clmm/createPool.ts.
createPool.ts
Étape 3 — createPosition.ts
Source : src/clmm/createPosition.ts.
createPosition.ts
Étape 4 — utils.ts
Source : src/clmm/utils.ts.
utils.ts
Exécution
Ce qui vient de se passer
Transaction 1 —raydium.clmm.createPool a initialisé :
- l’état du pool au PDA canonique pour
(mint1, mint2, ammConfig), token_0_vaultettoken_1_vault(triés par ordre d’octets du mint),- la mémoire tampon de l’anneau
observation, - la bitmap du tableau de ticks en ligne,
sqrt_price_x64 initial à partir de votre initialPrice.
Transaction 2 — raydium.clmm.openPositionFromBase a ouvert une position concentrée :
- a frappé un NFT de position dans votre portefeuille (le NFT est la position ; le transférer transfère la position),
- a alloué des tableaux de ticks aux limites inférieure et supérieure (loyer unique si première position dans ces plages ; les tableaux de ticks ne sont jamais fermés par le programme, donc les positions ultérieures dans les mêmes tableaux ne paient pas de loyer supplémentaire),
- a déposé
inputAmountdemint1et le montant de la paire correspondante demint2(calculé parPoolUtils.getLiquidityAmountOutFromAmountIn), - a crédité la position avec une liquidité proportionnelle à la largeur de la plage.
[0.000001, 100000]) est effectivement pleine plage ; resserrez-la pour concentrer les frais près du spot actuel.
Choix d’un niveau de frais
clmmConfigs[0] est le niveau de frais le plus bas. L’ensemble complet est publié à 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 du pool existant et ignorez l’étape 2.Insufficient funds for amount B— Votre portefeuille a le montant demandé demintAmais pas lemintBcorrespondant. 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— VotrelowerPriceouupperPricesort de la plage de prix représentable. Utilisez une plage plus raisonnable par rapport au prix actuel.- Prix obsolète — Un devis de l’API peut être obsolète de 5 à 60 secondes. Si
executePositionéchoue sur le slippage, décommentez le blocgetRpcClmmPoolInfodanscreatePosition.tspour récupérer le prix en direct juste avant la signature.
Mises en garde
- Le NFT de position est votre seul accès. Perdez le NFT ou transférez-le, perdez l’accès à la position. Traitez-le comme une clé.
- Les positions hors plage ne gagnent pas de frais. Si le prix sort de
[lowerPrice, upperPrice], votre position est entièrement garée dans un actif et ne gagne rien jusqu’à ce que vous la rééquilibriez. - Le loyer du tableau de ticks est unidirectionnel. La première position à toucher un tableau de ticks jamais initialisé paie son loyer ; le programme n’expose pas de chemin pour fermer les tableaux de ticks, donc ce loyer est permanent. Les positions ultérieures dans le même tableau sont gratuites.
Suivant
products/clmm/overview— mécanique complète du CLMM.products/clmm/ticks-and-positions— les mathématiques derrière les ticks.algorithms/impermanent-loss— quantifier l’amplification de la perte impermanente du CLMM.user-flows/create-clmm-pool— le même flux via l’interface utilisateur de Raydium.

