Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.Ver versão em inglês →
O que isto faz
Cria um novo pool CLMM no nível de taxa de sua escolha e abre uma posição concentrada inicial. Duas transações em quatro arquivos —config.ts, createPool.ts, createPosition.ts e utils.ts — executadas com npx tsx. O código é extraído dos demos oficiais em raydium-sdk-V2-demo/src/clmm e adaptado para funcionar de forma independente.
Configuração
Certifique-se de ter lido os pré-requisitos do Quick start e de terRPC_URL, KEYPAIR e as dependências instaladas.
Além das dependências no quickstart, você precisa:
decimal.js— matemática de preço e tick emcreatePool.tsecreatePosition.ts.bs58— decodifica uma chave privada codificada em base58 emconfig.tsse você usarKEYPAIR_BS58em vez de um arquivo de chave JSON.tsx— executa os arquivos.tsabaixo diretamente vianpx tsx; diferentemente dos scripts de swap e CPMM, este não é um arquivo.mjssimples executado comnode.
cluster para "devnet" em config.ts não é suficiente por si só. createPool.ts passa um programId: CLMM_PROGRAM_ID explícito, uma constante mainnet fixa que não segue cluster — troque-o pela linha DEVNET_PROGRAM_ID.CLMM_PROGRAM_ID comentada logo acima. createPosition.ts também codifica um poolId mainnet (o pool RAY-USDC); substitua-o pelo ID do pool devnet que você criou na Etapa 2.
Etapa 1 — config.ts
Salve como config.ts. Esta é a mesma forma que o src/config.ts.template do repositório de demo — disableFeatureCheck é forçado para true (recomendado para qualquer integração não trivial para que o SDK não bloqueie sua chamada de detecção de recursos na inicialização):
config.ts
Etapa 2 — createPool.ts
Salve ao lado de config.ts. Fonte: src/clmm/createPool.ts.
createPool.ts
Etapa 3 — createPosition.ts
Fonte: src/clmm/createPosition.ts.
createPosition.ts
Etapa 4 — utils.ts
Fonte: src/clmm/utils.ts.
utils.ts
Execute
O que acabou de acontecer
Transação 1 —raydium.clmm.createPool inicializou:
- o estado do pool no PDA canônico para
(mint1, mint2, ammConfig), token_0_vaultetoken_1_vault(ordenados por ordem de byte do mint),- o buffer de anel
observation, - o bitmap de array de tick inline,
sqrt_price_x64 inicial a partir de seu initialPrice.
Transação 2 — raydium.clmm.openPositionFromBase abriu uma posição concentrada:
- cunhou um NFT de posição para sua carteira (o NFT é a posição; transferi-lo transfere a posição),
- alocou arrays de tick nos limites inferior e superior (aluguel único se primeira posição nesses intervalos; arrays de tick nunca são fechados pelo programa, então posições subsequentes nos mesmos arrays não pagam aluguel extra),
- depositou
inputAmountdemint1e o valor de par correspondente demint2(calculado porPoolUtils.getLiquidityAmountOutFromAmountIn), - creditou a posição com liquidez proporcional à largura do intervalo.
[0.000001, 100000]) é efetivamente full-range; aperte-o para concentrar taxas perto do spot atual.
Escolhendo um nível de taxa
clmmConfigs[0] é o nível de taxa mais baixo. O conjunto completo é publicado em GET https://api-v3.raydium.io/main/clmm-config:
Veja
user-flows/choosing-a-pool-type para uma matriz de decisão completa.
Erros comuns
Pool already exists for this config— Um pool CLMM já existe para este triplo(mint1, mint2, ammConfig). Procure o ID do pool existente e pule a Etapa 2.Insufficient funds for amount B— Sua carteira tem o valor solicitado demintAmas não omintBcorrespondente. Abrir uma posição quando o preço está dentro do intervalo requer liquidez em ambos os lados.Tick out of range— SeulowerPriceouupperPricefica fora do intervalo de preço representável. Use um intervalo mais razoável em relação ao preço atual.- Preço obsoleto — Uma cotação da API pode estar 5–60 segundos desatualizada. Se
executePositionfalhar no slippage, descomente o blocogetRpcClmmPoolInfoemcreatePosition.tspara buscar novamente o preço ao vivo logo antes de assinar.
Ressalvas
- NFT de posição é seu único identificador. Perca o NFT ou transfira-o, perca acesso à posição. Trate-o como uma chave.
- Posições fora do intervalo não ganham taxas. Se o preço se mover para fora de
[lowerPrice, upperPrice], sua posição fica estacionada inteiramente em um ativo e não ganha nada até você rebalancear. - Aluguel de array de tick é unidirecional. A primeira posição a tocar um array de tick nunca inicializado paga seu aluguel; o programa não expõe um caminho para fechar arrays de tick, então esse aluguel é permanente. Posições subsequentes no mesmo array são gratuitas.
Próximos passos
products/clmm/overview— mecânica completa do CLMM.products/clmm/ticks-and-positions— a matemática por trás dos ticks.algorithms/impermanent-loss— quantificando amplificação de IL do CLMM.user-flows/create-clmm-pool— o mesmo fluxo via UI do Raydium.

