> ## 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.

# Contas de Roteamento

> Como as contas são passadas a cada salto no programa de Roteamento AMM: ATAs do usuário para cada token intermediário, seguido pelo bloco de contas por pool para cada trecho da rota.

<Info>
  **Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.**

  [Ver versão em inglês →](/products/routing/accounts)
</Info>

## 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`](/pt/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`](/pt/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`](/pt/products/clmm/accounts).

### Salto Stable

Semelhante ao AMM v4. Veja [`products/stable/accounts`](/pt/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](https://spl.solana.com/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`](/pt/products/routing/instructions#createsyncnative-tag-5) (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`](/pt/products/routing/instructions#closetokenaccount-tag-6) (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

* [`products/routing/instructions`](/pt/products/routing/instructions) — formas de argumento e ordem da lista de contas por instrução.
* [`products/routing/code-demos`](/pt/products/routing/code-demos) — construindo uma rota em TypeScript.
* [`reference/program-addresses`](/pt/reference/program-addresses) — IDs dos programas filho.
