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

# Cuentas de enrutamiento

> Cómo se pasan las cuentas por salto en el programa de Enrutamiento AMM: ATAs del usuario para cada token intermedio, seguido del bloque de cuentas por pool para cada tramo de la ruta.

<Info>
  **Esta página fue traducida automáticamente por IA. La versión en inglés es la fuente autorizada.**

  [Ver versión en inglés →](/products/routing/accounts)
</Info>

## Diseño de cuentas: ATAs del usuario en todo el camino

Cada variante de swap habilitada enruta tokens intermedios a través de **ATAs controladas por el usuario**. El usuario es propietario del ATA de entrada, cada ATA intermedio y el ATA de salida final. No hay una cuenta de token intermedio compartida ni propiedad del enrutador en la superficie activa.

Propiedades:

* El usuario es propietario de un ATA por cada token intermedio.
* El usuario proporciona cada ATA en la lista de cuentas.
* Cada ATA intermedio debe existir (inicialízalo con `CreateSyncNative` para wSOL, o a través del programa de Token de Cuenta Asociada del SPL para cualquier otro mint, antes de enrutar).
* El enrutador transfiere desde un ATA al vault del siguiente pool en cada salto.
* Cada ATA intermedio termina cada ruta con el mismo saldo con el que comenzó — la ruta consume lo que produjo el salto anterior.

Ejemplo de flujo para la ruta `USDC → SOL → STEP`:

```
Lista de cuentas:
  [
    USDC_input_ata (usuario, firmante),
    SOL_intermediate_ata (usuario),
    STEP_output_ata (usuario),
    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
```

## Diseño de cuentas por salto

Las cuentas de cada salto se pasan consecutivamente. El enrutador identifica el programa secundario leyendo la primera cuenta en el bloque de cada salto (el ID del programa) y luego distribuye al controlador correcto.

Para cada salto, el enrutador espera cuentas agrupadas como:

```
[
  program_id,         // Identifica cuál programa de pool (AMM v4, CPMM, CLMM, Stable)
  *child_accounts,    // Todas las cuentas requeridas por la instrucción de swap de ese pool
]
```

Las cuentas secundarias varían según el tipo de pool:

### Salto AMM v4

Aproximadamente 18 cuentas: pool, autoridad, vaults, mints, cuentas del mercado OpenBook (mantenidas en la lista de cuentas por compatibilidad hacia atrás aunque la integración de OpenBook de AMM v4 ya no está activa), programas de token. Consulta [`products/amm-v4/accounts`](/es/products/amm-v4/accounts) para la lista completa.

### Salto CPMM

Aproximadamente 11–13 cuentas: estado del pool, autoridad, vaults (2), mints (2), programas de token, programa del sistema, programa de token de cuenta asociada. Consulta [`products/cpmm/accounts`](/es/products/cpmm/accounts).

### Salto CLMM

Aproximadamente 15+ cuentas: pool, arrays de tick, vaults, mints, estado de observación, firmante, programas de token. Consulta [`products/clmm/accounts`](/es/products/clmm/accounts).

### Salto Stable

Similar a AMM v4. Consulta [`products/stable/accounts`](/es/products/stable/accounts).

## Flujo de tokens y propiedad de ATA

* El llamador firma con `user_input_ata`.
* El llamador **debe ser propietario** de todos los ATAs de entrada, intermedios y salida. El enrutador rechazará la transacción si el propietario de cualquier ATA intermedio no es el firmante.
* El saldo de `user_input_ata` del llamador debe ser suficiente para la entrada del primer salto (`amount_in` para etiqueta 0 / 8, o `maximum_amount_in` para etiqueta 1 / 9).
* Cada ATA intermedio debe existir en la cadena. Si no existe, créalo de antemano — típicamente a través del [programa de Token de Cuenta Asociada del SPL](https://spl.solana.com/associated-token-account), o con `CreateSyncNative` (etiqueta 5) para un ATA wSOL.

## La instrucción CreateSyncNative

Si necesitas enrutar a través de SOL envuelto y no quieres crear y sincronizar manualmente un ATA wSOL, usa [`CreateSyncNative`](/es/products/routing/instructions#createsyncnative-tag-5) (etiqueta 5):

```
CreateSyncNative(amount)
```

Esto crea un ATA wSOL bajo la cartera del llamador, transfiere `amount` de SOL a través del Sistema Program y lo sincroniza en una instrucción. Útil para inicializar un ATA wSOL nuevo antes de enrutar.

## La instrucción CloseTokenAccount

Después de que se complete una ruta, es posible que quieras cerrar cualquier ATA intermedio — más comúnmente un ATA wSOL — para recuperar la renta. Usa [`CloseTokenAccount`](/es/products/routing/instructions#closetokenaccount-tag-6) (etiqueta 6):

```
CloseTokenAccount
```

La cuenta de token debe tener un saldo de token cero antes de cerrarse; el enrutador no lo vaciará automáticamente por ti.

## Próximos pasos

* [`products/routing/instructions`](/es/products/routing/instructions) — formas de argumentos y orden de lista de cuentas por instrucción.
* [`products/routing/code-demos`](/es/products/routing/code-demos) — construir una ruta en TypeScript.
* [`reference/program-addresses`](/es/reference/program-addresses) — IDs de programas secundarios.
