Esta página fue traducida automáticamente por IA. La versión en inglés es la fuente autorizada.Ver versión en inglés →
Configuración
raydium-sdk-V2-demo/src/clmm; el enlace de GitHub aparece junto a cada sección. El arranque sigue el config.ts.template del repositorio de demostración (fuente) — disableFeatureCheck: true es la configuración recomendada para cualquier integración no trivial:
Crear un pool CLMM
Fuente:src/clmm/createPool.ts
- Ordena
mint1/mint2por orden de bytes antes de la derivación. - Calcula
sqrt_price_x64 = floor(sqrt(initialPrice × 10^(dB−dA)) × 2^64). - Crea las cuentas
observationytick_array_bitmap_extension. - Paga la comisión de creación del pool definida por
ammConfig.
Abrir una posición en un rango elegido
Fuente:src/clmm/createPosition.ts
InitTickArray si alguno no está inicializado.
Aumentar liquidez en una posición existente
Fuente:src/clmm/increaseLiquidity.ts
Disminuir liquidez (y cobrar comisiones al mismo tiempo)
Fuente:src/clmm/decreaseLiquidity.ts y src/clmm/closePosition.ts
decreaseLiquidity con liquidity = new BN(0). El efecto secundario de la instrucción es liquidar tokens_fees_owed_{0,1} y transferirlos.
Para cerrar completamente la posición después de poner la liquidez y las comisiones en cero, pasa closePosition: true en la última llamada a decreaseLiquidity. El SDK añade ClosePosition y quema el NFT.
Para un cliente Anchor directo, mantén las cuentas declaradas sin cambios y añade el pool:
poolId en cada cierre. CLMM lo lee solo cuando positionNftAccount está congelada, lo que mantiene una ruta de cliente compatible con posiciones antiguas y nuevas.
Cobrar recompensa(s)
Fuente:src/clmm/harvestAllRewards.ts
harvestAllRewards recorre cada posición en cada pool pasado, agrupa instrucciones CollectReward (y cualquier UpdateRewardInfos), y las divide entre transacciones si es necesario.
Swap
Fuente:src/clmm/swap.ts
computeAmountOutFormat recorre el mapa de ticks fuera de la cadena usando la misma lógica que el programa en cadena y devuelve:
- la cantidad esperada,
- la cantidad mínima después del slippage,
- la lista de cuentas de array de ticks que el swap real tocará (
remainingAccounts).
remainingAccounts devuelto por la simulación: si pasas muy pocos, el swap se revierte a mitad del recorrido con TickArrayNotFound; si pasas unos obsoletos, se desperdicia cómputo.
Crear un pool CLMM personalizable
createCustomizablePool es el nuevo punto de entrada que expone los toggles de comisión dinámica y comisión unilateral en el momento de la creación del pool. Tiene la misma forma que createPool más tres adiciones:
createPool continúa funcionando para la ruta de comisión predeterminada, sin órdenes limitadas y sin comisión dinámica. Usa createCustomizablePool siempre que necesites cualquiera de los tres nuevos controles. Ver products/clmm/instructions para la lista de cuentas en cadena.
Órdenes limitadas
Una orden limitada estaciona la entrada del usuario en un único tick y se completa FIFO cuando un swap cruza ese tick. Los resultados se envían al ATA del propietario en el momento de la liquidación; el propietario no necesita estar en línea para ser completado.Abrir una orden limitada
LimitOrderState de (pool, owner, tick, nonce), incrementa el LimitOrderNonce por-(pool, owner), e inserta la orden en la cohorte FIFO en ese tick.
Aumentar / disminuir una orden abierta
decreaseLimitOrder solo puede eliminar de la porción no completada de la orden; la porción completada está bloqueada hasta la liquidación. Ambas instrucciones se revierten con InvalidOrderPhase si la orden ya ha sido completada totalmente.
Liquidar una orden completada
settleLimitOrder lee el unfilled_ratio_x64 de la orden contra el rastreador de cohorte, calcula la salida completada y la transfiere al ATA del propietario. El propietario puede llamar a esto él mismo; limit_order_admin (un guardián operacional fuera de la cadena) también puede llamarlo en nombre del propietario — la salida aún va al propietario.
Para cerrar órdenes completadas totalmente y recuperar alquiler, usa closeLimitOrder (individual) o closeAllLimitOrder (lote). Para liquidar muchas a la vez, settleAllLimitOrder empaqueta tantas llamadas SettleLimitOrder como quepan en una tx v0.
Listar órdenes estacionadas de una billetera (fuera de la cadena)
totalAmount / filledAmount / pendingSettle distinguen las fases). Para el historial de órdenes cerradas usa /limit-order/history/order/list-by-user?wallet=… (por billetera, paginado por nextPageId); para el registro de eventos completo de una orden específica usa /limit-order/history/event/list-by-pda?pda=….
Esqueleto de Rust CPI
SwapV2:
Errores comunes
- Endpoints de tick fuera de espaciado →
InvalidTickIndex. Siempre ajusta medianteTickUtils.getPriceAndTick. - No hay suficientes arrays de ticks suministrados en
SwapV2→TickArrayNotFound. UsacomputeAmountOutFormatpara obtener la lista completa. - Posición de rango completo sin la extensión de bitmap → el PDA de extensión debe ser escribible; el SDK lo maneja automáticamente.
- Confundir
sqrt_price_x64conprice→ una confusión de factor-2 aquí es particularmente dolorosa. Cuando tengas dudas, deja que el SDK lo calcule a partir de un precio legible por humanos. - Cobrar recompensas demasiado ávidamente → cada cobro cuesta una transacción. Agrupa mediante
harvestAllRewardsen muchas posiciones. - Cerrar cuentas NFT tú mismo →
ClosePositionquema el NFT y cierra su ATA. También cierra un mint NFT de Token-2022; un mint SPL Token clásico permanece en suministro cero porque ese programa no puede cerrar mints. No cierres cuentas soportadas por separado o la instrucción se revertirá. - Abrir una orden limitada en un tick no espaciado →
InvalidTickIndex. Siempre cuantiza medianteTickUtils.getPriceAndTick. - Llamar a
decreaseLimitOrderen una orden completada totalmente →InvalidOrderPhase. UsasettleLimitOrderluegocloseLimitOrderen su lugar. - Olvidar
dynamicFeeConfigIdmientras pasasenableDynamicFee: true→ la reversión deCreateCustomizablePoolesInvalidDynamicFeeConfigParams. O desactiva la comisión dinámica, o elige una configuración de/main/clmm-dynamic-config.
Dónde ir a continuación
sdk-api/typescript-sdk— superficie completa del SDK.sdk-api/rest-api— endpoints de cotización y metadatos de pool.user-flows/create-clmm-pool— recorrido sin código.integration-guides/aggregator— enrutamiento de CLMM como parte de una ruta.

