Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Was dies bewirkt. Erstellt einen neuen CLMM-Pool in der Gebührenklasse Ihrer Wahl und öffnet dann eine initiale konzentrierte Position. Zwei Transaktionen über vier Dateien —
config.ts, createPool.ts, createPosition.ts und utils.ts — werden mit npx tsx ausgeführt. Der Code stammt aus den offiziellen Demos in raydium-sdk-V2-demo/src/clmm und wurde für die eigenständige Ausführung angepasst.Einrichtung
Stellen Sie sicher, dass Sie die Quick-Start-Voraussetzungen gelesen haben undRPC_URL, KEYPAIR sowie die Abhängigkeiten installiert sind.
Zusätzlich zu den Abhängigkeiten aus dem Quick Start benötigen Sie:
decimal.js— Preis- und Tick-Mathematik increatePool.tsundcreatePosition.ts.bs58— dekodiert einen base58-kodierten Keypair inconfig.ts, wenn SieKEYPAIR_BS58statt einer JSON-Schlüsseldatei verwenden.tsx— führt die.ts-Dateien unten direkt übernpx tsxaus; anders als die Swap- und CPMM-Skripte ist dies keine einfache.mjs-Datei, die mitnodeausgeführt wird.
cluster zu "devnet" in config.ts reicht allein nicht aus. createPool.ts übergibt eine explizite programId: CLMM_PROGRAM_ID, eine feste Mainnet-Konstante, die nicht cluster folgt — ersetzen Sie sie durch die auskommentierte DEVNET_PROGRAM_ID.CLMM_PROGRAM_ID-Zeile direkt darüber. createPosition.ts hardcodiert auch eine Mainnet-poolId (den RAY-USDC-Pool); ersetzen Sie sie durch die ID des Devnet-Pools, den Sie in Schritt 2 erstellt haben.
Schritt 1 — config.ts
Speichern Sie als config.ts. Dies hat die gleiche Form wie die src/config.ts.template des Demo-Repos — disableFeatureCheck ist auf true gesetzt (empfohlen für jede nicht-triviale Integration, damit das SDK nicht beim Startup-Feature-Detect blockiert):
config.ts
Schritt 2 — createPool.ts
Speichern Sie neben config.ts. Quelle: src/clmm/createPool.ts.
createPool.ts
Schritt 3 — createPosition.ts
Quelle: src/clmm/createPosition.ts.
createPosition.ts
Schritt 4 — utils.ts
Quelle: src/clmm/utils.ts.
utils.ts
Ausführung
Was ist gerade passiert
Transaktion 1 —raydium.clmm.createPool initialisierte:
- den Pool-Status bei der kanonischen PDA für
(mint1, mint2, ammConfig), token_0_vaultundtoken_1_vault(sortiert nach Mint-Byte-Reihenfolge),- den
observation-Ringpuffer, - die Inline-Tick-Array-Bitmap,
sqrt_price_x64 aus Ihrer initialPrice.
Transaktion 2 — raydium.clmm.openPositionFromBase öffnete eine konzentrierte Position:
- prägte ein Positions-NFT in Ihre Wallet (das NFT ist die Position; das Übertragen überträgt die Position),
- ordnete Tick-Arrays an den unteren und oberen Grenzen zu (einmalige Miete, wenn erste Position in diesen Bereichen; Tick-Arrays werden vom Programm nie geschlossen, daher zahlen nachfolgende Positionen in denselben Arrays keine zusätzliche Miete),
- hinterlegte
inputAmountvonmint1und den entsprechenden Paarungsbetrag vonmint2(berechnet durchPoolUtils.getLiquidityAmountOutFromAmountIn), - gutschrieb der Position Liquidität proportional zur Bereichsbreite.
[0.000001, 100000]) ist praktisch vollständig; verengen Sie ihn, um Gebühren in der Nähe des aktuellen Spot zu konzentrieren.
Auswahl einer Gebührenklasse
clmmConfigs[0] ist die niedrigste Gebührenklasse. Der vollständige Satz wird unter GET https://api-v3.raydium.io/main/clmm-config veröffentlicht:
Siehe
user-flows/choosing-a-pool-type für eine vollständige Entscheidungsmatrix.
Häufige Fehler
Pool already exists for this config— Ein CLMM-Pool existiert bereits für dieses(mint1, mint2, ammConfig)-Tripel. Schlagen Sie die vorhandene Pool-ID nach und überspringen Sie Schritt 2.Insufficient funds for amount B— Ihre Wallet hat den angeforderten Betrag vonmintA, aber nicht den entsprechendenmintB. Das Öffnen einer Position, wenn der Preis innerhalb des Bereichs liegt, erfordert Liquidität auf beiden Seiten.Tick out of range— IhrlowerPriceoderupperPriceliegt außerhalb des darstellbaren Preisbereichs. Verwenden Sie einen vernünftigeren Bereich relativ zum aktuellen Preis.- Veralteter Preis — Ein Angebot aus der API kann 5–60 Sekunden alt sein. Wenn
executePositionbei Slippage fehlschlägt, kommentieren Sie dengetRpcClmmPoolInfo-Block increatePosition.tsaus, um den Live-Preis direkt vor dem Signieren erneut abzurufen.
Vorbehalte
- Positions-NFT ist Ihr einziger Zugriff. Verlieren Sie das NFT oder übertragen Sie es, verlieren Sie den Zugriff auf die Position. Behandeln Sie es wie einen Schlüssel.
- Out-of-Range-Positionen verdienen keine Gebühren. Wenn der Preis außerhalb von
[lowerPrice, upperPrice]driftet, ist Ihre Position vollständig in einem Asset geparkt und verdient nichts, bis Sie neu ausgleichen. - Tick-Array-Miete ist einseitig. Die erste Position, die ein nie initialisiertes Tick-Array berührt, zahlt seine Miete; das Programm stellt keinen Pfad zum Schließen von Tick-Arrays bereit, daher ist diese Miete dauerhaft. Nachfolgende Positionen im selben Array sind kostenlos.
Nächste Schritte
products/clmm/overview— vollständige CLMM-Mechanik.products/clmm/ticks-and-positions— die Mathematik hinter Ticks.algorithms/impermanent-loss— Quantifizierung der CLMM-IL-Verstärkung.user-flows/create-clmm-pool— derselbe Ablauf über die Raydium-UI.

