> ## 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 del pool y OpenBook que espera, y las condiciones previas/posteriores en 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>
  A partir de la actualización del programa 2026-07, la dependencia de OpenBook / Serum de AMM v4 ha sido **eliminada**. Las instrucciones heredadas v1 `SwapBaseIn` / `SwapBaseOut`, `Deposit` y `Withdraw` **mantienen sus diseños de cuenta antiguos** para compatibilidad hacia atrás: las cuentas de mercado aún se aceptan en sus posiciones antiguas, pero **ya no se validan ni se usan** (no se emite CPI). Las nuevas integraciones deben usar los puntos de entrada de intercambio V2, que omiten completamente las cuentas de mercado. Varias instrucciones han sido eliminadas y ahora revierten — consulta la [entrada del registro de cambios](/es/reference/changelog/2026-07-22-amm-v4-openbook-removal). Las listas de cuentas a continuación utilizan los nombres de campo del SDK de Raydium; el IDL subyacente a veces usa prefijos `serum_*`.
</Info>

## Inventario de instrucciones

| Grupo                  | Instrucción           | etiqueta | Notas                                                                                              |
| ---------------------- | --------------------- | -------- | -------------------------------------------------------------------------------------------------- |
| Ciclo de vida del pool | `Initialize2`         | 1        | Única instrucción de creación de pool (la interfaz predeterminada es CPMM para nuevos pools).      |
| Liquidez               | `Deposit`             | 3        | Agregar liquidez, recibir LP. Diseño sin cambios (cuentas de mercado ignoradas).                   |
| Liquidez               | `Withdraw`            | 4        | Quemar LP, recibir ambos lados prorrateados. Diseño sin cambios (cuentas de mercado ignoradas).    |
| Intercambio            | `SwapBaseIn`          | 9        | Intercambio de entrada exacta. Diseño v1 sin cambios; cuentas de mercado aceptadas pero ignoradas. |
| Intercambio            | `SwapBaseOut`         | 11       | Intercambio de salida exacta. Igual que arriba.                                                    |
| Intercambio            | `SwapBaseInV2`        | 16       | **Recomendado.** Intercambio de entrada exacta sin las cuentas de mercado.                         |
| Intercambio            | `SwapBaseOutV2`       | 17       | **Recomendado.** Intercambio de salida exacta sin las cuentas de mercado.                          |
| Mantenimiento          | `SetParams`           | 6        | Admin: cambiar parámetros del pool. **Diseño + valores de `param` cambiados** (ruptura).           |
| Mantenimiento          | `WithdrawPnl`         | 7        | Barrer PnL de protocolo acumulado. **Diseño de cuenta cambiado** (ruptura).                        |
| Mantenimiento          | `CreateConfigAccount` | 14       | Admin: inicializar el PDA `AmmConfig` a nivel de programa.                                         |
| Mantenimiento          | `UpdateConfigAccount` | 15       | 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 mantenedor de Raydium.

**Eliminadas / ya no invocables** (ahora revierten con `unimplemented!`, y sus constructores de cliente fueron eliminados): `Initialize` (etiqueta 0, usa `Initialize2`), `MonitorStep` (2), `MigrateToOpenBook` (5), `WithdrawSrm` (8), `PreInitialize` (10, usa `Initialize2`), `SimulateInfo` (12), `AdminCancelOrders` (13).

## `Initialize2`

Arrancar un nuevo pool de 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`              |   |   | Token SPL.                                          |
| 2  | `system_program`             |   |   |                                                     |
| 3  | `rent`                       |   |   |                                                     |
| 4  | `amm`                        | W |   | Cuenta `AmmInfo` (clave sembrada).                  |
| 5  | `amm_authority`              |   |   | PDA del programa.                                   |
| 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 temporal.                                    |
| 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 |   |                                                     |

**Condiciones posteriores**

* `lp_supply = sqrt(init_coin_amount × init_pc_amount) − INIT_BURN`, donde `INIT_BURN` ≈ 100 unidades de LP se mantienen fuera de circulación.
* No se publican órdenes de OpenBook (la cuadrícula del libro de órdenes ha sido eliminada). `market_program` / `market` aún se pasan pero solo se almacenan como campos de referencia; `coin_lot_size` / `pc_lot_size` / `min_size` se inicializan a `0`.

**Errores comunes** — `InvalidInput` (decimales no coincidentes, no ordenados), `NotAllowed`.

## `Deposit`

Agregar 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** (abreviadas)

| #  | 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** — prorrateo estándar. Usando las reservas *efectivas* del pool (bóvedas + en libro), el SDK calcula el par coin/pc que produce la cantidad de LP dada y lo verifica contra `max_*`. Revierte con `ExceededSlippage` si alguno de los lados 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, los ATA del usuario son receptores. El diseño de la cuenta no ha cambiado (cuentas de mercado aún pasadas posicionalmente, ignoradas). Ya no hay un paso de liquidación desde OpenBook — las matemáticas prorrateadas usan directamente los saldos de la bóveda.

## `SwapBaseIn`

Intercambio de entrada exacta. Siempre un intercambio de **ruta AMM** (no se enruta a través de la coincidencia de OpenBook).

<Note>
  **Usa las variantes V2 para código nuevo.** Dado que la dependencia de OpenBook de AMM v4 ha sido eliminada, los puntos de entrada V1 (`SwapBaseIn`, `SwapBaseOut`) aún esperan la lista completa de 17 cuentas (o 18 con la cuenta de órdenes objetivo opcional), pero las cuentas de OpenBook/mercado ahora se **aceptan posicionalmente e ignoran** — no se validan y no se emite CPI. Pasar un *número* de cuenta incorrecto aún revierte con `WrongAccountsNumber`, pero el *contenido* de la cuenta de mercado ya no se verifica. Las nuevas integraciones deben usar [`SwapBaseInV2` / `SwapBaseOutV2`](#swapbaseinv2-swapbaseoutv2), que toman una lista de cuentas mucho más pequeña y representan la ruta de ejecución canónica hoy. Las formas V1 se documentan aquí para completitud y para leer transacciones existentes en cadena.
</Note>

**Argumentos**

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

**Cuentas** (abreviadas)

| #  | 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** — consulta [`products/amm-v4/math`](/es/products/amm-v4/math).

**Precondiciones**

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

**Condiciones posteriores**

* El usuario pierde `amount_in` del token de origen, gana `amount_out ≥ minimum_amount_out` del token de destino.
* `need_take_pnl_*` incrementado por la parte de la tarifa del protocolo.
* Nota: los contadores de análisis `state_data.swap_*_in_amount` / `swap_*_out_amount` **ya no se actualizan** — sus valores están congelados. Usa registros de transacciones para análisis de volumen.

**Errores comunes** — `ExceededSlippage`, `InvalidInput`, `InvalidStatus`, `NotAllowed` (mint de coin/pc idéntico).

## `SwapBaseOut`

Salida exacta, inversa de `SwapBaseIn`. Mismas cuentas.

**Argumentos**

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

## `SwapBaseInV2` / `SwapBaseOutV2`

Variantes de puntos de entrada de intercambio (etiquetas **16** / **17**) que **omiten completamente las cuentas de OpenBook**. Las matemáticas son idénticas a la ruta V1, pero la lista de cuentas se reduce a solo el lado AMM y el usuario — **8 cuentas, y `amm_open_orders` no se pasa**:

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

Las reservas del pool ahora son los saldos de la bóveda (menos PnL pendiente), por lo que las matemáticas de cotización son directas e idénticas a la ruta v1. Usa V2 para ahorrar cómputo y evitar pasar las cuentas de mercado (ahora ignoradas). El enrutador de Raydium siempre usa la forma V2 al enrutar a través de AMM v4.

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

## `MonitorStep` y otras instrucciones eliminadas

<Warning>
  **Eliminadas — ya no invocables.** A partir de la actualización 2026-07, `MonitorStep` (etiqueta 2) ha sido eliminada del programa y ahora **revierte** (`unimplemented!`) si se invoca. Su constructor de cliente también fue eliminado. Lo mismo se aplica a `MigrateToOpenBook` (5), `WithdrawSrm` (8), `SimulateInfo` (12), `AdminCancelOrders` (13), y los puntos de entrada heredados de creación de pool `Initialize` (0) / `PreInitialize` (10) — usa `Initialize2` en su lugar.
</Warning>

Históricamente, `MonitorStep` accionaba la interacción de OpenBook del pool: liquidaba órdenes completadas (moviendo ganancias de las bóvedas de mercado a las bóvedas del pool a través de CPI de OpenBook), cancelaba órdenes obsoletas y publicaba nuevas órdenes para cerrar la brecha entre `target_orders` y `amm_open_orders`. Con la dependencia de OpenBook eliminada, no hay nada que accionar y la instrucción se ha ido. Cualquier mantenedor o integración que aún la llame debe eliminar la llamada.

## `WithdrawPnl` / `TakePnl`

Barrido administrativo de tarifas de protocolo acumuladas.

**Argumentos**

* `WithdrawPnl` no toma argumentos; lee `need_take_pnl_*` y mueve esas cantidades exactas.

<Warning>
  **Cambio de ruptura (solo admin).** La lista de cuentas se redujo de 17 (+1 opcional) a **10** — `amm_open_orders` y las seis cuentas de mercado fueron eliminadas — sin **análisis de compatibilidad**. El diseño antiguo se desalinea (el antiguo #5 era `amm_open_orders`, ahora `pool_coin_token_account`) y falla con errores como `InvalidCoinVault`. Las herramientas administrativas deben actualizarse.
</Warning>

**Cuentas** (nuevo diseño de 10 cuentas)

| #  | Nombre                    | W | S |                      |
| -- | ------------------------- | - | - | -------------------- |
| 1  | `token_program`           |   |   |                      |
| 2  | `amm`                     | W |   |                      |
| 3  | `amm_config`              |   |   |                      |
| 4  | `amm_authority`           |   |   |                      |
| 5  | `pool_coin_token_account` | W |   |                      |
| 6  | `pool_pc_token_account`   | W |   |                      |
| 7  | `pnl_coin_token_account`  | W |   | Destinatario.        |
| 8  | `pnl_pc_token_account`    | W |   |                      |
| 9  | `pnl_owner`               |   | S | Multifirma de admin. |
| 10 | `amm_target_orders`       | W |   |                      |

**Efecto**

* Transfiere `need_take_pnl_coin` de `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`.
* **Cambio de lógica**: si el saldo de la bóveda es insuficiente para cubrir el PnL acumulado, la instrucción devuelve `TakePnlError` directamente (ya no manipula el estado del libro de órdenes).

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

## `SetParams`

Cambios de parámetros administrativos, llamados por la multifirma de Raydium. Los argumentos son una etiqueta `param: u8` + carga útil.

<Warning>
  **Cambio de ruptura (solo admin).** La lista de cuentas se redujo a solo `[amm (W), admin (S)]` (la autoridad, órdenes abiertas, órdenes objetivo, bóveda y todas las cuentas de mercado fueron eliminadas). La enumeración `param` fue **renumerada y recortada**: `Status` = 0, `State` = 1, `Fees` = **2** (era 9), `SetOpenTime` = **3** (era 11). Todos los parámetros de cuadrícula del libro de órdenes y `AmmOwner`, `LastOrderDistance`, `UpdateOpenOrder` fueron eliminados, y la estructura `SetParamsInstruction` eliminó `new_pubkey` y `last_order_distance`. Las herramientas administrativas deben actualizarse.
</Warning>

## Matriz de cambio de estado

La columna OpenBook se ha ido — ninguna instrucción toca un libro de órdenes más.

| Instrucción                     | Suministro de `lp_mint`               | Bóvedas                                  | Contadores de PnL |
| ------------------------------- | ------------------------------------- | ---------------------------------------- | ----------------- |
| `Initialize2`                   | suministro inicial acuñado al creador | `+ init_coin_amount`, `+ init_pc_amount` | 0                 |
| `Deposit`                       | +                                     | + ambos                                  | —                 |
| `Withdraw`                      | −                                     | − ambos                                  | —                 |
| `SwapBaseIn` / `SwapBaseInV2`   | —                                     | + entrada, − salida                      | + parte de pnl    |
| `SwapBaseOut` / `SwapBaseOutV2` | —                                     | + entrada, − salida                      | + parte de pnl    |
| `WithdrawPnl`                   | —                                     | − (pnl barrido)                          | 0                 |
| `SetParams`                     | —                                     | —                                        | —                 |

## Dónde ir a continuación

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

Fuentes:

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