Skip to main content
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 CPI em Rust visa raydium-cp-swap no branch chore/upgrade-anchor, Anchor 1.0.2 — master ainda fixa 0.32.1. Os IDs de programa são extraídos via constantes de reference/program-addresses.

Pré-requisitos

Cada demo nesta página espelha um arquivo em raydium-sdk-V2-demo/src/cpmm; o link do GitHub fica ao lado de cada seção. O bootstrap segue o config.ts.template do repositório de demos (fonte):
A instância Raydium é a fachada do SDK — cada demo abaixo a utiliza. Raydium.load é assíncrono porque carrega a lista de tokens por padrão; passe disableLoadToken: true para pular essa busca. A verificação de disponibilidade de recursos já é ignorada, a menos que você passe disableFeatureCheck: false. As configurações de taxa são buscadas preguiçosamente no primeiro uso via raydium.api.getCpmmConfigs().

Criar um pool CPMM

Fonte: src/cpmm/createCpmmPool.ts
Algumas coisas que o SDK cuida silenciosamente:
  • Ordenar os mints na ordem token0/token1 antes de derivar o PDA.
  • Pagar a create_pool_fee única para poolFeeAccount.
  • Criar as contas de token associadas do chamador se estiverem faltando.
  • Escolher o programa de token correto (SPL Token vs Token-2022) por lado.
Após a confirmação, você pode buscar o estado do pool ao vivo com:

Swap (entrada base)

Fonte: src/cpmm/swap.ts
Nota: o SDK sempre busca novamente o estado do pool de um RPC dentro de getPoolInfoFromRpc. Não cotize fora de api-v3.raydium.io para uma transação que você está prestes a assinar — uma cotação que está um bloco desatualizada pode escorregar para ExceededSlippage no momento do desembarque.

Swap (saída base)

Fonte: src/cpmm/swapBaseOut.ts

Depositar liquidez

Fonte: src/cpmm/deposit.ts
O SDK deriva o valor pareado das reservas atuais do pool, infla cada lado pelo slippage para os argumentos maximum_* da instrução e constrói as criações de ATA se necessário. raydium.cpmm.computePairAmount({ ... }) retorna os mesmos números se você quiser para uma visualização de UI.

Sacar liquidez

Fonte: src/cpmm/withdraw.ts

Coletar taxas de protocolo/fundo/criador

Fonte: src/cpmm/collectCreatorFee.ts, src/cpmm/collectAllCreatorFee.ts A coleta de protocolo e fundo permanece com portão de autoridade. As taxas do criador têm dois caminhos: o CollectCreatorFee assinado pelo criador e o aditivo CollectCreatorFeePermissionless, que qualquer pagador pode invocar, mas que pode transferir apenas para as ATAs canônicas do criador. 0.2.64-alpha envia construtores em nível de módulo para ambos os caminhos do criador:
Ambas as instruções do criador mudaram suas listas de contas na atualização do programa de 2026-09-19. Cada uma agora recebe um PDA creator_fee_share em ["creator_fee_share", creator, ammConfig], e a sem permissão também recebe amm_config — ambas anexadas após system_program em vez de inseridas, então as contas que já estavam lá mantêm suas posições. Um construtor fixado a uma versão do SDK que antecede a atualização emite a lista mais curta e a transação é rejeitada por contas faltando. Verifique se a versão que você instala carrega as novas contas antes de usar esses auxiliares contra o programa atualizado e atualize o IDL se você gerar clientes a partir dele.Passar o PDA é obrigatório mesmo quando nunca foi criado — derive-o e passe-o; o programa volta para AmmConfig.creator_fee_share_rate quando a conta está vazia.
As duas instruções do criador têm discriminadores e layouts de conta diferentes — a sem permissão substitui o assinante do criador por um payer separado e um creator não assinante. Use o construtor correspondente em vez de trocar manualmente contas no outro.Não há construtor de taxa de protocolo ou fundo no SDK (makeCollectProtocolFeeInstruction e makeCollectFundFeeInstruction não existem sob nenhum nome) — esses são caminhos de administrador, assim como CreateCreatorFeeShare / CloseCreatorFeeShare, que também não têm construtor. Os construtores de instrução de baixo nível que existem são collectCpFeeInstruction, makeCollectCreatorFeeInstruction e collectCreatorFeePermissionlessInInstruction.
Off-chain você pode ler as taxas acumuladas diretamente de PoolState:

Esqueleto CPI em Rust

Se você quiser invocar CPMM a partir do seu próprio programa Anchor — por exemplo, um vault que faz swap em nome de seus depositantes — o contexto CPI fica assim. A ordenação de contas segue products/cpmm/instructions.
Se seu CPI assina como um PDA (por exemplo, você gerencia um vault em nome dos depositantes), troque CpiContext::new por CpiContext::new_with_signer e passe suas sementes.

Armadilhas comuns

Uma lista de verificação rápida antes de abrir um ticket de suporte:
  • Mints ordenados. Se seu PDA poolState derivado não corresponder ao pool on-chain, você provavelmente esqueceu de ordenar os mints.
  • Cotação de API desatualizada. Nunca passe um valor de reserva de api-v3.raydium.io para CurveCalculator.swap. Busque de um RPC.
  • Programa de token errado. O vault de um mint Token-2022 é de propriedade do programa Token-2022, não do SPL Token. Sempre use os campos token_0_program / token_1_program do pool.
  • Slippage sub-denominado para mints com taxa de transferência. Se qualquer lado do pool for um mint Token-2022 com taxa de transferência, seu minimum_amount_out deve ser denominado no que o usuário realmente recebe, não no que o vault envia.
  • NotApproved em um swap. Verifique PoolState.status — o administrador pode ter pausado swaps nesse pool. Veja products/cpmm/instructions para a máscara de status.

Próximos passos

Fontes: