Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.Ver versão em inglês →
Banner de versão. Todos os demos TypeScript visam
@raydium-io/raydium-sdk-v2@0.2.64-alpha; foram executados pela última vez contra 0.2.42-alpha (2026-04) e suas assinaturas de chamada foram verificadas novamente contra a fonte 0.2.64-alpha em 2026-09-09, contra Solana mainnet-beta. O esqueleto Rust CPI no final visa raydium-clmm no branch chore/upgrade-anchor, Anchor 1.0.2, o mesmo pin da página CPMM, para que os dois possam conviver em um crate. master ainda fixa 0.32.1. Os IDs de programa vêm de reference/program-addresses via o SDK.Configuração
raydium-sdk-V2-demo/src/clmm; o link do GitHub fica ao lado de cada seção. O bootstrap segue o config.ts.template do repositório de demo (fonte) — disableFeatureCheck: true é a configuração recomendada para qualquer integração não trivial:
Criar um pool CLMM
Fonte:src/clmm/createPool.ts
- Ordena
mint1/mint2por ordem de bytes antes da derivação. - Calcula
sqrt_price_x64 = floor(sqrt(initialPrice × 10^(dB−dA)) × 2^64). - Cria as contas
observationetick_array_bitmap_extension. - Paga a taxa de criação do pool definida por
ammConfig.
Abrir uma posição em um intervalo escolhido
Fonte:src/clmm/createPosition.ts
OpenPosition* aloca um array de tick ausente por si só, à custa do pagador.
Aumentar liquidez em uma posição existente
Fonte:src/clmm/increaseLiquidity.ts
Diminuir liquidez (e coletar taxas ao mesmo tempo)
Fonte:src/clmm/decreaseLiquidity.ts e src/clmm/closePosition.ts
decreaseLiquidity com liquidity = new BN(0). O efeito colateral da instrução é liquidar token_fees_owed_{0,1} e reward_amount_owed e transferi-los — esta é a única forma de coletar qualquer um deles.
Para fechar a posição inteiramente após zerar liquidez e taxas, passe ownerInfo: { closePosition: true } na chamada final de decreaseLiquidity. O SDK anexa ClosePosition e queima o NFT.
Para um cliente Anchor direto, mantenha as contas declaradas inalteradas e anexe o pool:
poolId em cada fechamento. CLMM o lê apenas quando positionNftAccount está congelada, o que mantém um caminho de cliente compatível com posições antigas e novas.
Coletar recompensa(s)
Fonte:src/clmm/harvestAllRewards.ts
harvestAllRewards percorre cada posição em cada pool passado, agrupa as chamadas DecreaseLiquidity de liquidez zero que liquidam taxas e recompensas (mais qualquer UpdateRewardInfos), e as divide entre transações se necessário.
Swap
Fonte:src/clmm/swap.ts
amountCalculated) mais a lista exata de contas que o swap tocará (accounts).
Sempre passe o remainingAccounts que a simulação retorna: muito poucos e o swap reverte no meio da caminhada com NotEnoughTickArrayAccount; os obsoletos apenas desperdiçam computação.
PoolUtils.computeAmountOutFormat ainda existe, mas precisa de um ComputeClmmPoolInfo (o
computePoolInfo de getPoolInfoFromRpc, não um objeto de pool de API) mais dois argumentos obrigatórios — tickarrayBitmapExtension e blockTimestamp — e não há
método raydium.clmm.fetchTickArrays (fetchTickArrays é uma função livre; os
helpers de nível de módulo são PoolUtils.fetchMultiplePoolTickArrays e o tickData / tickArrays retornados por
getPoolInfoFromRpc).Criar um pool CLMM personalizável
createCustomizablePool é o ponto de entrada que expõe os toggles de taxa dinâmica e taxa unilateral no momento da criação do pool. Leva a forma de createPool mais duas adições:
createPool continua funcionando para o caminho padrão de taxa, sem taxa dinâmica. Use createCustomizablePool sempre que precisar de qualquer um dos controles. Veja products/clmm/instructions para a lista de contas on-chain.
Ordens limitadas
Uma ordem limitada estaciona entrada do usuário em um único tick e é preenchida FIFO quando um swap cruza esse tick. As saídas são enviadas para o ATA do proprietário no momento da liquidação; o proprietário não precisa estar online para ser preenchido.Abrir uma ordem limitada
LimitOrderState de (owner, nonce PDA, order nonce), incrementa o LimitOrderNonce por carteira, e insere a ordem na coorte FIFO naquele tick.
Aumentar / diminuir uma ordem aberta
decreaseLimitOrder só pode remover da porção não preenchida da ordem; a porção preenchida fica bloqueada até a liquidação. Ambas as instruções revertem com InvalidOrderPhase se a ordem já foi totalmente preenchida.
Liquidar uma ordem preenchida
settleLimitOrder lê o unfilled_ratio_x64 da ordem contra o rastreador de coorte, calcula a saída preenchida e a transfere para o ATA do proprietário. O proprietário pode chamar isso por si mesmo; limit_order_admin (um mantenedor operacional off-chain) também pode chamar em nome do proprietário — a saída ainda vai para o proprietário.
Para fechar ordens totalmente liquidadas para recuperar aluguel, use closeLimitOrder (única) ou closeAllLimitOrder (lote). Para liquidar muitas de uma vez, settleAllLimitOrder empacota quantas chamadas SettleLimitOrder couberem em uma tx v0.
Listar ordens estacionadas de uma carteira (off-chain)
totalAmount / filledAmount / pendingSettle distinguem as fases). Para histórico de ordem fechada use /limit-order/history/order/list-by-user?wallet=… (por carteira, paginado por nextPageId); para o log de eventos completo de uma ordem específica use /limit-order/history/event/list-by-pda?pda=….
Esqueleto Rust CPI
SwapV2:
Armadilhas comuns
- Endpoints de tick fora do espaçamento →
TickAndSpacingNotMatch. Sempre encaixe viaTickUtil.getPriceAndTick(singularTickUtil). - Não há arrays de tick suficientes fornecidos em
SwapV2→NotEnoughTickArrayAccount. Pegue a lista deswapInternal(...).accounts. - Posição de intervalo completo sem a extensão de bitmap → o PDA de extensão deve ser gravável; o SDK lida com isso automaticamente.
- Confundir
sqrt_price_x64comprice→ uma confusão de fator-2 aqui é particularmente dolorosa. Em caso de dúvida, deixe o SDK calculá-lo a partir de um preço legível por humanos. - Coletar recompensas muito cedo → cada coleta é um
DecreaseLiquidityde liquidez zero e custa uma transação. Agrupe viaharvestAllRewardsem muitas posições, e lembre-se que seuexecuteprecisa de{ sequentially: true }. - Fechar contas NFT você mesmo →
ClosePositionqueima o NFT e fecha seu ATA. Também fecha um mint de NFT Token-2022; um mint de Token SPL clássico permanece com suprimento zero porque esse programa não pode fechar mints. Não feche contas suportadas separadamente ou a instrução reverterá. - Abrir uma ordem limitada em um tick não espaçado →
TickAndSpacingNotMatch. Sempre quantize via o helpergetOrderTickexportado. - Chamar
decreaseLimitOrderem uma ordem totalmente preenchida →InvalidOrderPhase. UsesettleLimitOrderdepoiscloseLimitOrder. - Esperando uma flag
enableDynamicFee→ não há nenhuma. OmitirdynamicFeeConfigsimplesmente cria um pool de taxa estática, silenciosamente e sem erro. Se você queria taxas dinâmicas, passe aPublicKeyda conta de configuração, escolhida de/main/clmm-dynamic-config.
Para onde ir a seguir
sdk-api/typescript-sdk— superfície completa do SDK.sdk-api/rest-api— endpoints de cotação e metadados de pool.user-flows/create-clmm-pool— passo a passo sem código.integration-guides/aggregator— roteamento CLMM como parte de um caminho.

