Saltar para o conteúdo principal
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 na camada de taxa de sua escolha e depois abre uma posição concentrada inicial. Duas transações, um script. O código foi retirado dos demos oficiais em raydium-sdk-V2-demo/src/clmm e adaptado para um único arquivo executável no Node.

Configuração

Certifique-se de ter lido os pré-requisitos do Quick start e ter RPC_URL, KEYPAIR e as dependências instaladas. A criação de um pool CLMM tem uma taxa única além do aluguel por array de tick para a posição inicial. Você também precisará de ambas as mints de seed em sua carteira — abrir uma posição quando o preço está dentro do intervalo escolhido requer liquidez dos dois lados.

Passo 1 — config.ts

Salve como config.ts. Este é o mesmo formato do src/config.ts.template do repositório de demo — disableFeatureCheck é forçado a true (recomendado para qualquer integração não trivial para que o SDK não bloqueie na chamada de feature-detect na inicialização):

Passo 2 — createPool.ts

Salve ao lado de config.ts. Fonte: src/clmm/createPool.ts.

Passo 3 — createPosition.ts

Fonte: src/clmm/createPosition.ts.

Passo 4 — utils.ts

Fonte: src/clmm/utils.ts.

Execute

O que aconteceu

Transação 1 — raydium.clmm.createPool inicializou:
  • o estado do pool no PDA canônico para (mint1, mint2, ammConfig),
  • token_0_vault e token_1_vault (ordenados pela ordem de bytes da mint),
  • o buffer do ring de observação,
  • o bitmap inline de tick-array,
e definiu o sqrt_price_x64 inicial a partir do 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 única vez se primeira posição nessas faixas; arrays de tick nunca são fechados pelo programa, então posições subsequentes nos mesmos arrays não pagam aluguel extra),
  • depositou inputAmount de mint1 e o valor par correspondente de mint2 (computado por PoolUtils.getLiquidityAmountOutFromAmountIn),
  • creditou a posição com liquidez proporcional à largura do intervalo.
Quanto mais estreito o intervalo, maior a eficiência de capital por dólar de TVL — e maior a dor da perda impermanente quando o preço sai do intervalo. O intervalo usado acima ([0.000001, 100000]) é efetivamente full-range; aperte-o para concentrar taxas perto do spot atual.

Escolhendo uma camada de taxa

clmmConfigs[0] é a camada com taxa mais baixa. 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 esta tríade (mint1, mint2, ammConfig). Procure o ID do pool existente e pule o Passo 2.
  • Insufficient funds for amount B — Sua carteira tem a quantia solicitada de mintA mas não a mintB correspondente. Abrir uma posição quando o preço está dentro do intervalo requer liquidez dos dois lados.
  • Tick out of range — Seu lowerPrice ou upperPrice cai fora da faixa de preço representável. Use um intervalo mais razoável relativo ao preço atual.
  • Preço desatualizado — Uma cotação da API pode estar 5–60 segundos desatualizada. Se executePosition falhar em slippage, descomente o bloco getRpcClmmPoolInfo em createPosition.ts para recuperar o preço ao vivo logo antes de assinar.

Ressalvas

  • O NFT de posição é sua única alça. 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 é estacionada inteiramente em um ativo e não ganha nada até você rebalancear.
  • O aluguel de tick array é 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óximo

Fontes: