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 →
Qué hace esto. Crea un nuevo pool CLMM en el nivel de comisión que elijas y luego abre una posición concentrada inicial. Dos transacciones en cuatro archivos —
config.ts, createPool.ts, createPosition.ts y utils.ts — se ejecutan con npx tsx. El código proviene de las demostraciones oficiales en raydium-sdk-V2-demo/src/clmm y se ha adaptado para ejecutarse de forma independiente.Configuración
Asegúrate de haber leído los requisitos previos de inicio rápido y de tenerRPC_URL, KEYPAIR y las dependencias instaladas.
Además de las dependencias del inicio rápido, necesitas:
decimal.js— matemáticas de precio y tick encreatePool.tsycreatePosition.ts.bs58— decodifica un keypair codificado en base58 enconfig.tssi usasKEYPAIR_BS58en lugar de un archivo de clave JSON.tsx— ejecuta los archivos.tsde abajo directamente víanpx tsx; a diferencia de los scripts de swap y CPMM, este no es un archivo.mjssimple ejecutado connode.
cluster a "devnet" en config.ts no es suficiente por sí solo. createPool.ts pasa un programId: CLMM_PROGRAM_ID explícito, una constante mainnet fija que no sigue cluster — cámbialo por la línea DEVNET_PROGRAM_ID.CLMM_PROGRAM_ID comentada justo arriba. createPosition.ts también codifica un poolId mainnet (el pool RAY-USDC); reemplázalo con el ID del pool devnet que creaste en el Paso 2.
Paso 1 — config.ts
Guarda como config.ts. Tiene la misma estructura que el src/config.ts.template del repositorio de demostración — disableFeatureCheck se fuerza a true (recomendado para cualquier integración no trivial para que el SDK no se bloquee en su llamada de detección de características al inicio):
config.ts
Paso 2 — createPool.ts
Guarda junto a config.ts. Fuente: src/clmm/createPool.ts.
createPool.ts
Paso 3 — createPosition.ts
Fuente: src/clmm/createPosition.ts.
createPosition.ts
Paso 4 — utils.ts
Fuente: src/clmm/utils.ts.
utils.ts
Ejecutar
Qué acaba de suceder
Transacción 1 —raydium.clmm.createPool inicializó:
- el estado del pool en el PDA canónico para
(mint1, mint2, ammConfig), token_0_vaultytoken_1_vault(ordenados por orden de bytes de mint),- el búfer de anillo de
observation, - el bitmap de array de tick en línea,
sqrt_price_x64 inicial desde tu initialPrice.
Transacción 2 — raydium.clmm.openPositionFromBase abrió una posición concentrada:
- acuñó un NFT de posición en tu billetera (el NFT es la posición; transferirlo transfiere la posición),
- asignó arrays de tick en los límites inferior y superior (renta única si es la primera posición en esos rangos; los arrays de tick nunca se cierran por el programa, por lo que las posiciones posteriores en los mismos arrays no pagan renta adicional),
- depositó
inputAmountdemint1y la cantidad de par coincidente demint2(calculada porPoolUtils.getLiquidityAmountOutFromAmountIn), - acreditó la posición con liquidez proporcional al ancho del rango.
[0.000001, 100000]) es efectivamente de rango completo; estréchalo para concentrar comisiones cerca del precio spot actual.
Elegir un nivel de comisión
clmmConfigs[0] es el nivel de comisión más bajo. El conjunto completo se publica en GET https://api-v3.raydium.io/main/clmm-config:
Consulta
user-flows/choosing-a-pool-type para una matriz de decisión completa.
Errores comunes
Pool already exists for this config— Ya existe un pool CLMM para este triple(mint1, mint2, ammConfig). Busca el ID del pool existente y salta el Paso 2.Insufficient funds for amount B— Tu billetera tiene la cantidad solicitada demintApero no la cantidad coincidente demintB. Abrir una posición cuando el precio está dentro del rango requiere liquidez en ambos lados.Tick out of range— TulowerPriceoupperPricecae fuera del rango de precio representable. Usa un rango más razonable relativo al precio actual.- Precio obsoleto — Una cotización de la API puede estar 5–60 segundos obsoleta. Si
executePositionfalla en slippage, descomenta el bloquegetRpcClmmPoolInfoencreatePosition.tspara volver a obtener el precio en vivo justo antes de firmar.
Advertencias
- El NFT de posición es tu único identificador. Pierde el NFT o transfierelo, pierdes acceso a la posición. Trátalo como una clave.
- Las posiciones fuera de rango no generan comisiones. Si el precio se mueve fuera de
[lowerPrice, upperPrice], tu posición está estacionada completamente en un activo y no genera nada hasta que reequilibres. - La renta del array de tick es unidireccional. La primera posición que toca un array de tick nunca inicializado paga su renta; el programa no expone una ruta para cerrar arrays de tick, por lo que esa renta es permanente. Las posiciones posteriores en el mismo array son gratuitas.
Siguiente
products/clmm/overview— mecánica completa de CLMM.products/clmm/ticks-and-positions— las matemáticas detrás de los ticks.algorithms/impermanent-loss— cuantificando la amplificación de IL de CLMM.user-flows/create-clmm-pool— el mismo flujo a través de la interfaz de usuario de Raydium.

