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

# Instrucciones de AMM v4

> Cada instrucción de AMM v4 con sus argumentos, las cuentas de pool y OpenBook que espera, y las condiciones previas/posteriores a cada una.

<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/amm-v4/instructions)
</Info>

<Info>
  Las instrucciones de AMM v4 esperan uniformemente tanto un **lado del pool** (cuentas del programa AMM v4) como un **lado del mercado** (cuentas de OpenBook para el mercado vinculado). Omitir o desajustar cualquiera de los dos conjuntos revierte la transacción. Las listas de cuentas a continuación usan los nombres de campos del SDK de Raydium por claridad; el IDL subyacente a veces usa prefijos `serum_*`.
</Info>

## Inventario de instrucciones

| Grupo                  | Instrucción           | Notas                                                                                                     |
| ---------------------- | --------------------- | --------------------------------------------------------------------------------------------------------- |
| Ciclo de vida del pool | `Initialize2`         | Instrucción actual de creación de pool (aún funcional; la UI utiliza CPMM por defecto para nuevos pools). |
| Liquidez               | `Deposit`             | Añadir liquidez, recibir LP.                                                                              |
| Liquidez               | `Withdraw`            | Quemar LP, recibir ambos lados de forma prorrateada.                                                      |
| Swap                   | `SwapBaseIn`          | Swap de entrada exacta (ruta completa: bóvedas + OpenBook).                                               |
| Swap                   | `SwapBaseOut`         | Swap de salida exacta (ruta completa).                                                                    |
| Swap                   | `SwapBaseInV2`        | Swap de entrada exacta que omite OpenBook — solo bóvedas, menos cuentas.                                  |
| Swap                   | `SwapBaseOutV2`       | Swap de salida exacta que omite OpenBook.                                                                 |
| Mantenimiento          | `SetParams`           | Admin: cambiar parámetros del pool.                                                                       |
| Mantenimiento          | `WithdrawPnl`         | Transferir PnL de protocolo acumulado a las cuentas del propietario de PnL.                               |
| Mantenimiento          | `CreateConfigAccount` | Admin: inicializar el PDA `AmmConfig` a nivel de programa.                                                |
| Mantenimiento          | `UpdateConfigAccount` | Admin: cambiar parámetros de configuración a nivel de programa.                                           |

El SDK expone constructores solo para las instrucciones orientadas al usuario. Las instrucciones de mantenimiento generalmente son invocadas por el keeper de Raydium.

## `Initialize2`

Arrancar un nuevo pool AMM v4 vinculado a un mercado OpenBook existente.

**Argumentos**

```
nonce:        u8
open_time:    u64
init_pc_amount:   u64
init_coin_amount: u64
```

**Cuentas** (escribible `W`, firmante `S`)

| #  | Nombre                       | W | S | Notas                                               |
| -- | ---------------------------- | - | - | --------------------------------------------------- |
| 1  | `token_program`              |   |   | SPL Token.                                          |
| 2  | `system_program`             |   |   |                                                     |
| 3  | `rent`                       |   |   |                                                     |
| 4  | `amm`                        | W |   | Cuenta `AmmInfo` (clave sembrada).                  |
| 5  | `amm_authority`              |   |   | Program PDA.                                        |
| 6  | `amm_open_orders`            | W |   | OpenBook `OpenOrders` (sembrado).                   |
| 7  | `lp_mint`                    | W |   |                                                     |
| 8  | `coin_mint`                  |   |   |                                                     |
| 9  | `pc_mint`                    |   |   |                                                     |
| 10 | `pool_coin_token_account`    | W |   |                                                     |
| 11 | `pool_pc_token_account`      | W |   |                                                     |
| 12 | `pool_withdraw_queue`        | W |   |                                                     |
| 13 | `pool_target_orders_account` | W |   |                                                     |
| 14 | `pool_lp_token_account`      | W |   | ATA de LP del creador.                              |
| 15 | `pool_temp_lp_token_account` | W |   | Cuenta de scratch.                                  |
| 16 | `market_program`             |   |   | Programa OpenBook.                                  |
| 17 | `market`                     |   |   | Mercado OpenBook.                                   |
| 18 | `user_wallet`                | W | S | Creador. Paga renta y financia el depósito inicial. |
| 19 | `user_token_coin`            | W |   |                                                     |
| 20 | `user_token_pc`              | W |   |                                                     |

**Postcondiciones**

* `lp_supply = sqrt(init_coin_amount × init_pc_amount) − INIT_BURN`, donde `INIT_BURN` ≈ 100 unidades LP se mantienen fuera de circulación.
* Las órdenes de OpenBook aún **no** han sido publicadas; el primer `MonitorStep` publica la cuadrícula inicial.

**Errores comunes** — `InvalidInput` (decimales desajustados, no ordenados), `NotApproved`, lado OpenBook `InvalidMarketState`.

## `Deposit`

Añadir liquidez.

**Argumentos**

```
max_coin_amount: u64
max_pc_amount:   u64
base_side:       u64    // 0 = base en coin, 1 = base en pc
// (algunas variantes del SDK también aceptan other_amount_min)
```

**Cuentas** (resumida)

| #  | Nombre                    | W | S |
| -- | ------------------------- | - | - |
| 1  | `token_program`           |   |   |
| 2  | `amm`                     | W |   |
| 3  | `amm_authority`           |   |   |
| 4  | `amm_open_orders`         |   |   |
| 5  | `amm_target_orders`       | W |   |
| 6  | `lp_mint`                 | W |   |
| 7  | `pool_coin_token_account` | W |   |
| 8  | `pool_pc_token_account`   | W |   |
| 9  | `market`                  |   |   |
| 10 | `user_coin_token_account` | W |   |
| 11 | `user_pc_token_account`   | W |   |
| 12 | `user_lp_token_account`   | W |   |
| 13 | `user_owner`              |   | S |

**Matemáticas** — prorrateadas estándar. Usando las reservas *efectivas* del pool (bóvedas + en libro), el SDK calcula el par coin/pc que genera la cantidad de LP dada y lo verifica contra `max_*`. Revierte con `ExceededSlippage` si cualquier lado excede el límite.

## `Withdraw`

Quemar LP, recibir ambos lados.

**Argumentos**

```
amount: u64    // LP a quemar
```

**Cuentas** — como `Deposit` con la dirección invertida; `lp_mint` es escribible para quemar, las ATAs del usuario son receptoras. Un paso similar a `MonitorStep` de liquidación desde OpenBook ocurre internamente antes de las matemáticas prorrateadas, por lo que el reembolso utiliza reservas frescas.

## `SwapBaseIn`

Swap de entrada exacta. Siempre un swap de **ruta AMM** (no enruta a través del matching de OpenBook).

<Note>
  **Usa las variantes V2 para código nuevo.** Dado que AMM v4 ya no comparte liquidez con OpenBook, los puntos de entrada V1 (`SwapBaseIn`, `SwapBaseOut`) — que aún requieren el conjunto completo de cuentas OpenBook para validación — son funcionalmente redundantes. Las nuevas integraciones deben usar [`SwapBaseInV2` / `SwapBaseOutV2`](#swapbaseinv2-swapbaseoutv2), que tienen una lista de cuentas mucho más pequeña y representan la ruta de ejecución canónica hoy en día. Los formularios V1 se documentan aquí para completitud y para leer transacciones existentes en cadena.
</Note>

**Argumentos**

```
amount_in:            u64
minimum_amount_out:   u64
```

**Cuentas** (resumida)

| #  | Nombre                      | W | S |
| -- | --------------------------- | - | - |
| 1  | `token_program`             |   |   |
| 2  | `amm`                       | W |   |
| 3  | `amm_authority`             |   |   |
| 4  | `amm_open_orders`           | W |   |
| 5  | `amm_target_orders`         | W |   |
| 6  | `pool_coin_token_account`   | W |   |
| 7  | `pool_pc_token_account`     | W |   |
| 8  | `market_program`            |   |   |
| 9  | `market`                    | W |   |
| 10 | `market_bids`               | W |   |
| 11 | `market_asks`               | W |   |
| 12 | `market_event_queue`        | W |   |
| 13 | `market_coin_vault`         | W |   |
| 14 | `market_pc_vault`           | W |   |
| 15 | `market_vault_signer`       |   |   |
| 16 | `user_source_token_account` | W |   |
| 17 | `user_dest_token_account`   | W |   |
| 18 | `user_owner`                |   | S |

**Matemáticas** — ver [`products/amm-v4/math`](/es/products/amm-v4/math).

**Precondiciones**

* `amm.status` permite swap (bit 0 de la máscara de bits de estado no establecida).
* `amm.state_data.pool_open_time <= now`.
* `amount_in > 0`.
* `user_source_token_account` contiene al menos `amount_in`.

**Postcondiciones**

* El usuario pierde `amount_in` del token origen, gana `amount_out ≥ minimum_amount_out` del token destino.
* `state_data.swap_*_in_amount` y `swap_*_out_amount` incrementados (para analítica).
* `need_take_pnl_*` incrementado por la parte de la comisión del protocolo.

**Errores comunes** — `ExceededSlippage`, `InvalidInput`, `InvalidStatus`, `InvalidMarket`.

## `SwapBaseOut`

Salida exacta, inversa de `SwapBaseIn`. Las mismas cuentas.

**Argumentos**

```
max_amount_in: u64
amount_out:    u64
```

## `SwapBaseInV2` / `SwapBaseOutV2`

Variantes de puntos de entrada de swap que **omiten completamente las cuentas de OpenBook**. Las matemáticas son idénticas a la ruta V1, pero la lista de cuentas se reduce solo al lado del AMM:

| # | Nombre                      | W | S |
| - | --------------------------- | - | - |
| 1 | `token_program`             |   |   |
| 2 | `amm`                       | W |   |
| 3 | `amm_authority`             |   |   |
| 4 | `amm_open_orders`           |   |   |
| 5 | `pool_coin_token_account`   | W |   |
| 6 | `pool_pc_token_account`     | W |   |
| 7 | `user_source_token_account` | W |   |
| 8 | `user_dest_token_account`   | W |   |
| 9 | `user_owner`                |   | S |

Las reservas efectivas del pool aún tienen en cuenta los tokens publicados en OpenBook, por lo que las matemáticas de cotización no cambian. Usa V2 para ahorrar en compute y evitar pasar las cuentas de mercado cuando no necesitas un crank de OpenBook en la misma transacción. El router de Raydium siempre utiliza la forma V2 cuando enruta a través de AMM v4.

Los argumentos son los mismos que los formularios V1 (`amount_in / minimum_amount_out` para `SwapBaseInV2`; `max_amount_in / amount_out` para `SwapBaseOutV2`).

## `MonitorStep` (legacy / inerte)

<Note>
  **Ya no está cranked.** AMM v4 ya no comparte liquidez con OpenBook, por lo que `MonitorStep` no tiene nada que hacer — el pool no tiene órdenes publicadas para liquidar, cancelar o reemplazar. La instrucción permanece en el programa en cadena para compatibilidad hacia atrás, pero el keeper de Raydium ya no la llama. Llamarla manualmente es efectivamente una no-op (aparte de actualizar estado puesta a cero) y no debe ser necesaria para los integradores.
</Note>

Originalmente esta instrucción cranked la interacción de OpenBook del pool.

**Argumentos**

```
plan_order_limit:   u16
place_order_limit:  u16
cancel_order_limit: u16
```

**Cuentas** — todo lo anterior para un swap, más cuentas administrativas de OpenBook.

**Efecto original** (ya no relevante en la práctica):

* Liquidar cualquier orden rellenada (sus ganancias se movieron desde `market_coin_vault`/`market_pc_vault` a las bóvedas del pool a través de CPI de OpenBook).
* Cancelar órdenes obsoletas cuyos precios o tamaños ya no coincidían con `target_orders`.
* Publicar nuevas órdenes para cerrar la brecha entre `target_orders` y `amm_open_orders`.

Sin permisos. Cualquier cuenta podía llamarla; históricamente el keeper de Raydium lo hacía rutinariamente.

## `WithdrawPnl` / `TakePnl`

Barrida administrativa de comisiones de protocolo acumuladas.

**Argumentos**

* `WithdrawPnl` no toma argumentos; lee `need_take_pnl_*` y mueve esos montos exactos.

**Cuentas** (resumida)

| #  | Nombre                    | W | S |                                          |
| -- | ------------------------- | - | - | ---------------------------------------- |
| 1  | `token_program`           |   |   |                                          |
| 2  | `amm`                     | W |   |                                          |
| 3  | `amm_authority`           |   |   |                                          |
| 4  | `amm_config`              |   |   |                                          |
| 5  | `amm_open_orders`         | W |   |                                          |
| 6  | `pool_coin_token_account` | W |   |                                          |
| 7  | `pool_pc_token_account`   | W |   |                                          |
| 8  | `pnl_coin_token_account`  | W |   | Destinatario, almacenado en `AmmConfig`. |
| 9  | `pnl_pc_token_account`    | W |   |                                          |
| 10 | `pnl_owner`               |   | S | Multisig administrativo.                 |
| 11 | `market_program`          |   |   |                                          |
| 12 | `market`                  | W |   |                                          |
| 13 | `market_event_queue`      | W |   |                                          |
| 14 | `market_coin_vault`       | W |   |                                          |
| 15 | `market_pc_vault`         | W |   |                                          |
| 16 | `market_vault_signer`     |   |   |                                          |

**Efecto**

* Transfiere `need_take_pnl_coin` desde `pool_coin_token_account` a `pnl_coin_token_account`.
* Lo mismo para pc.
* Pone a cero `need_take_pnl_coin` y `need_take_pnl_pc`.

Sin cambio en las reservas ya que el PnL acumulado ya estaba excluido del invariante.

## `SetParams`

Cambios de parámetros administrativos: máscara de bits de estado, profundidad de cuadrícula de ordenamiento, ondas de cantidad, comisiones (raramente), etc. Llamado por el multisig de Raydium. Los argumentos son una etiqueta `param: u8` + carga útil, análogo a `UpdateAmmConfig` de CPMM.

## Matriz de cambio de estado

| Instrucción   | suministro `lp_mint`                  | Bóvedas                                  | Contadores de PnL | OpenBook                      |
| ------------- | ------------------------------------- | ---------------------------------------- | ----------------- | ----------------------------- |
| `Initialize2` | suministro inicial acuñado al creador | `+ init_coin_amount`, `+ init_pc_amount` | 0                 | OpenOrders creado             |
| `Deposit`     | +                                     | + ambos                                  | —                 | liquidar llenados             |
| `Withdraw`    | −                                     | − ambos                                  | —                 | liquidar llenados             |
| `SwapBaseIn`  | —                                     | + entrada, − salida                      | + parte pnl       | quizás re-publicar cuadrícula |
| `SwapBaseOut` | —                                     | + entrada, − salida                      | + parte pnl       | quizás re-publicar cuadrícula |
| `MonitorStep` | —                                     | liquidar llenados                        | —                 | cancelar / publicar           |
| `WithdrawPnl` | —                                     | − (pnl barrido)                          | 0                 | —                             |
| `SetParams`   | —                                     | —                                        | —                 | —                             |

## Próximos pasos

* [`products/amm-v4/code-demos`](/es/products/amm-v4/code-demos) — Ejemplos de TypeScript para flujos de swap y LP.
* [`products/amm-v4/fees`](/es/products/amm-v4/fees) — Detalles de `WithdrawPnl` y la división de comisiones.
* [`reference/error-codes`](/es/reference/error-codes) — tabla de referencia directa (los errores de AMM v4 se enumeran en esa página).

Fuentes:

* [Programa AMM de Raydium — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* Módulo `Liquidity` del SDK v2 de Raydium
* Programa OpenBook — validaciones de cuentas en el lado del mercado
