Saltar para o conteúdo principal

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.Ver versão em inglês →

Layout de contas: ATAs do usuário em todo o caminho

Toda variante de swap habilitada roteia tokens intermediários através de ATAs controladas pelo usuário. O usuário é proprietário da ATA de entrada, de todas as ATAs intermediárias e da ATA de saída final. Não há nenhuma conta de token intermediário compartilhada ou de propriedade do roteador na superfície ativa. Propriedades:
  • O usuário é proprietário de uma ATA por token intermediário.
  • O usuário fornece todas as ATAs na lista de contas.
  • Cada ATA intermediária deve já existir (inicialize-a com CreateSyncNative para wSOL ou por meio do programa SPL Associated Token Account para qualquer outro mint antes do roteamento).
  • O roteador transfere de uma ATA e para o vault do próximo pool a cada salto.
  • Cada ATA intermediária termina cada rota com o mesmo saldo com o qual começou — a rota consome o que o salto anterior produziu.
Exemplo de fluxo para a rota USDC → SOL → STEP:
Lista de contas:
  [
    USDC_input_ata (usuário, assinador),
    SOL_intermediate_ata (usuário),
    STEP_output_ata (usuário),
    token_program,

    amm_program_1, *amm1_accounts,    // salto 1: USDC → SOL
    amm_program_2, *amm2_accounts,    // salto 2: SOL → STEP
  ]

Salto 1: USDC_input_ata → AMM1 → SOL_intermediate_ata
Salto 2: SOL_intermediate_ata → AMM2 → STEP_output_ata

Layout de contas por salto

As contas de cada salto são passadas consecutivamente. O roteador identifica o programa filho lendo a primeira conta no bloco de cada salto (o ID do programa) e depois despacha para o manipulador correto. Para cada salto, o roteador espera contas agrupadas como:
[
  program_id,         // Identifica qual programa de pool (AMM v4, CPMM, CLMM, Stable)
  *child_accounts,    // Todas as contas exigidas pela instrução de swap daquele pool
]
As contas filho variam de acordo com o tipo de pool:

Salto AMM v4

Aproximadamente 18 contas: pool, autoridade, vaults, mints, contas do mercado OpenBook (mantidas na lista de contas para compatibilidade retroativa, embora a integração OpenBook do AMM v4 não esteja mais ativa), programas de token. Veja products/amm-v4/accounts para a lista completa.

Salto CPMM

Aproximadamente 11–13 contas: estado do pool, autoridade, vaults (2), mints (2), programas de token, programa de sistema, programa de token associado. Veja products/cpmm/accounts.

Salto CLMM

Aproximadamente 15+ contas: pool, arrays de tick, vaults, mints, estado de observação, assinador, programas de token. Veja products/clmm/accounts.

Salto Stable

Semelhante ao AMM v4. Veja products/stable/accounts.

Fluxo de token e propriedade de ATA

  • O chamador assina com user_input_ata.
  • O chamador deve ser proprietário de todas as ATAs de entrada, intermediárias e de saída. O roteador rejeitará a transação se o proprietário de qualquer ATA intermediária não for o assinador.
  • O saldo de user_input_ata do chamador deve ser suficiente para a entrada do primeiro salto (amount_in para tag 0 / 8, ou maximum_amount_in para tag 1 / 9).
  • Cada ATA intermediária deve já existir na cadeia. Se não existir, crie-a antecipadamente — tipicamente por meio do programa SPL Associated Token Account ou com CreateSyncNative (tag 5) para uma ATA wSOL.

A instrução CreateSyncNative

Se você precisa rotear através de SOL encapsulado e não deseja criar e sincronizar manualmente uma ATA wSOL, use CreateSyncNative (tag 5):
CreateSyncNative(amount)
Isso cria uma ATA wSOL sob a carteira do chamador, transfere amount de SOL para ela por meio do programa de Sistema e a sincroniza em uma instrução. Útil para inicializar uma ATA wSOL nova antes do roteamento.

A instrução CloseTokenAccount

Depois que uma rota é concluída, você pode querer fechar qualquer ATA intermediária — mais comumente uma ATA wSOL — para recuperar o rent. Use CloseTokenAccount (tag 6):
CloseTokenAccount
A conta de token deve ter saldo zero de token antes de fechar; o roteador não vai esvaziá-la automaticamente para você.

Próximos passos