> ## 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 Stable AMM

> El conjunto de instrucciones actualmente invocables — Deposit, Withdraw, SwapBaseIn, SwapBaseOut, WithdrawPnl — más las instrucciones eliminadas en la actualización del 2026-06-22.

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

<Info>
  Stable AMM es un **programa independiente** con su propio ID de programa. **No** es un modo del programa AMM v4, ni se negocia «a través» de AMM v4 — se implementa, actualiza e invoca por separado. Solo se parece a AMM v4 en las convenciones de comisiones y disposición de cuentas.
</Info>

<Warning>
  **Actualización del 2026-06-22 — eliminación del código muerto de OpenBook (mercado).** Stable AMM **dejó de publicar órdenes en OpenBook hace mucho tiempo**; la ruta de creación de mercado del libro de órdenes ha estado inactiva durante años. Esta actualización elimina las cuentas y el código relacionados con el mercado restantes — **no** cambia el comportamiento del comercio en vivo.

  Dos consecuencias para los integradores:

  1. **Disposiciones de cuenta más pequeñas.** `SwapBaseIn` / `SwapBaseOut` (**18 → 9**), `Deposit` (**14 → 12**), y `Withdraw` (**21/22 → 12**) eliminan las cuentas muertas de Serum/mercado. Las disposiciones antiguas aún se analizan para compatibilidad hacia atrás. `WithdrawPnl` (**16 → 10**) es un **cambio importante con ruptura total sin ruta de compatibilidad** (solo administrador).
  2. **La mayoría de las instrucciones se eliminan.** Solo `SwapBaseIn`, `SwapBaseOut`, `Deposit`, `Withdraw`, y `WithdrawPnl` permanecen invocables. Todas las demás instrucciones ya no pueden ser llamadas.

  Registro de cambios: [`reference/changelog`](/es/reference/changelog).
</Warning>

## Inventario de instrucciones

### Invocables

| Instrucción   | Categoría | Notas                                                                                                                                          |
| ------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `Deposit`     | Liquidez  | Añadir liquidez, recibir LP. Nueva disposición de 12 cuentas; la disposición antigua de 14 cuentas sigue siendo compatible.                    |
| `Withdraw`    | Liquidez  | Quemar LP, recibir ambos lados. Nueva disposición de 12 cuentas; la disposición antigua de 21/22 cuentas sigue siendo compatible.              |
| `SwapBaseIn`  | Swap      | Swap de entrada exacta. Nueva disposición de 9 cuentas; la disposición antigua de 18 cuentas sigue siendo compatible.                          |
| `SwapBaseOut` | Swap      | Swap de salida exacta. Nueva disposición de 9 cuentas; la disposición antigua de 18 cuentas sigue siendo compatible.                           |
| `WithdrawPnl` | Admin     | Recopilar comisiones de protocolo acumuladas. Nueva disposición de 10 cuentas (**ruptura total — sin compatibilidad de disposición antigua**). |

### Eliminadas (ya no invocables)

Estas fueron eliminadas en la actualización del 2026-06-22 y ya no pueden ser invocadas. Consulta [Instrucciones eliminadas](#instrucciones-eliminadas).

| Instrucción       | Categoría anterior       | Propósito anterior                                 |
| ----------------- | ------------------------ | -------------------------------------------------- |
| `Initialize`      | Ciclo de vida            | Crear un pool.                                     |
| `PreInitialize`   | Ciclo de vida            | Asistente de preasignación heredado.               |
| `InitModelData`   | Configuración del modelo | Crear e inicializar la tabla de búsqueda.          |
| `UpdateModelData` | Configuración del modelo | Rellenar hasta 5 elementos de tabla por llamada.   |
| `MonitorStep`     | Crank                    | Liquidar rellenos de OpenBook, republicar órdenes. |
| `SetParams`       | Admin                    | Cambiar parámetros del pool.                       |
| `WithdrawSrm`     | Heredado                 | Recopilar reembolsos de descuento de comisión SRM. |
| `SimulateInfo`    | Diagnóstico              | Asistente de cotización de solo lectura.           |

## `Deposit`

Añadir liquidez, recibir tokens LP.

**Argumentos**

```
max_coin_amount: u64
max_pc_amount: u64
base_side: u64          // 0 = base en coin, 1 = base en pc
```

**Cuentas** — disposición nueva, 12 cuentas (escribible `W`, firmante `S`)

| #  | Nombre               | W | S | Notas                                  |
| -- | -------------------- | - | - | -------------------------------------- |
| 0  | `token_program`      |   |   | SPL Token.                             |
| 1  | `amm`                | W |   | `AmmInfo` del pool.                    |
| 2  | `amm_authority`      |   |   | PDA de todo el programa.               |
| 3  | `amm_target_orders`  | W |   |                                        |
| 4  | `amm_lp_mint`        | W |   | Mint de LP.                            |
| 5  | `amm_coin_vault`     | W |   | Bóveda de coin del pool.               |
| 6  | `amm_pc_vault`       | W |   | Bóveda de pc del pool.                 |
| 7  | `model_data_account` |   |   | **Tabla de búsqueda de solo lectura.** |
| 8  | `user_source_coin`   | W |   | Entrada de coin del usuario.           |
| 9  | `user_source_pc`     | W |   | Entrada de pc del usuario.             |
| 10 | `user_dest_lp`       | W |   | ATA de LP del usuario.                 |
| 11 | `user_source_owner`  |   | S | Firmante de la transacción.            |

**Compatibilidad**: `amm_open_orders` (antiguo #3) y `serum_market` (antiguo #9) se eliminan. Cuando se pasan **14** cuentas, la instrucción se analiza con la disposición antigua de 14 cuentas; las cuentas de Serum se ignoran.

**Matemáticas** — pro-rata estándar usando la tabla de búsqueda para calcular la proporción. El SDK calcula el par coin/pc para la cantidad de LP deseada y verifica contra los límites máximos.

## `Withdraw`

Quemar LP, recibir ambos lados pro-rata.

**Argumentos**

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

**Cuentas** — disposición nueva, 12 cuentas (escribible `W`, firmante `S`)

| #  | Nombre               | W | S | Notas                                  |
| -- | -------------------- | - | - | -------------------------------------- |
| 0  | `token_program`      |   |   | SPL Token.                             |
| 1  | `amm`                | W |   | `AmmInfo` del pool.                    |
| 2  | `amm_authority`      |   |   | PDA de todo el programa.               |
| 3  | `amm_target_orders`  | W |   |                                        |
| 4  | `amm_lp_mint`        | W |   | Mint de LP.                            |
| 5  | `amm_coin_vault`     | W |   | Bóveda de coin del pool.               |
| 6  | `amm_pc_vault`       | W |   | Bóveda de pc del pool.                 |
| 7  | `model_data_account` |   |   | **Tabla de búsqueda de solo lectura.** |
| 8  | `user_source_lp`     | W |   | Fuente de LP del usuario.              |
| 9  | `user_dest_coin`     | W |   | Salida de coin del usuario.            |
| 10 | `user_dest_pc`       | W |   | Salida de pc del usuario.              |
| 11 | `user_lp_owner`      |   | S | Firmante de la transacción.            |

**Compatibilidad**: nueve cuentas de Serum (`amm_open_orders`, `serum_program`, `serum_market`, `serum_coin_vault`, `serum_pc_vault`, `serum_vault_signer`, `serum_event_q`, `serum_bids`, `serum_asks`) se eliminan. Las disposiciones antiguas de **21** o **22 cuentas** aún se aceptan. Sin embargo, tenga en cuenta que la **lógica de comisión de referencia para la cuenta opcional 22ª `referrer_pc_wallet` ha sido eliminada** — aún puede pasarse pero ya no tiene efecto.

**Precondiciones**

* `user_source_lp` contiene al menos `amount`.

**Postcondiciones**

* Se queman `amount` tokens LP.
* El usuario recibe cantidades de coin y pc según la pro-rata actual, ajustadas por comisiones acumuladas.

## `SwapBaseIn`

Swap de entrada exacta usando la tabla de búsqueda para precios.

**Argumentos**

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

**Cuentas** — disposición nueva, 9 cuentas (escribible `W`, firmante `S`)

| # | Nombre                   | W | S | Notas                                   |
| - | ------------------------ | - | - | --------------------------------------- |
| 0 | `spl_token program`      |   |   | SPL Token.                              |
| 1 | `amm`                    | W |   | `AmmInfo` del pool.                     |
| 2 | `amm_authority`          |   |   | PDA de todo el programa.                |
| 3 | `amm_coin_vault`         | W |   | Bóveda de coin del pool.                |
| 4 | `amm_pc_vault`           | W |   | Bóveda de pc del pool.                  |
| 5 | `model_data_account`     |   |   | **Tabla de búsqueda de solo lectura.**  |
| 6 | `user_source_token`      | W |   | Cuenta de token de entrada del usuario. |
| 7 | `user_destination_token` | W |   | Cuenta de token de salida del usuario.  |
| 8 | `user_source_owner`      |   | S | Usuario (firmante de la transacción).   |

**Compatibilidad**: las nueve cuentas de OpenBook (`amm_open_orders`, `serum_program`, `serum_market`, `serum_bids`, `serum_asks`, `serum_event_queue`, `serum_coin_vault`, `serum_pc_vault`, `serum_vault_signer`) se eliminan. Si el número de cuentas pasadas **no es 9**, la instrucción se analiza con la disposición antigua de **18 cuentas**; las cuentas de Serum aún deben ocupar sus posiciones, pero su contenido ya no se valida ni se utiliza.

**Precondiciones**

* `amm.status` permite swap.
* `user_source_token` contiene ≥ `amount_in`.

**Postcondiciones**

* El usuario pierde `amount_in`, gana `amount_out ≥ minimum_amount_out`.
* Las comisiones del pool incrementan los contadores `need_take_pnl_*`.

**Matemáticas** — Interpolación de tabla de búsqueda como se describe en [`products/stable/math`](/es/products/stable/math).

## `SwapBaseOut`

Swap de salida exacta (inverso de `SwapBaseIn`). Misma disposición de 9 cuentas, dirección matemática diferente.

**Argumentos**

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

## `WithdrawPnl`

Solo administrador. Recopilar comisiones de protocolo acumuladas de `need_take_pnl_*` en cuentas de PnL designadas.

<Warning>
  **Cambio importante con ruptura total — sin ruta de compatibilidad.** Esta instrucción **no** tiene análisis para la disposición antigua. Enviar la disposición antigua falla con errores de validación como `InvalidTokenCoin` debido a desalineación de cuentas (el antiguo #3 era `open_orders`). Las herramientas de administración que llaman a `WithdrawPnl` **deben** actualizarse a la nueva disposición de 10 cuentas.
</Warning>

**Argumentos** — ninguno (impulsado por estado).

**Cuentas** — disposición nueva, 10 cuentas fijas, solo administrador (escribible `W`, firmante `S`)

| # | Nombre              | W | S | Notas                                               |
| - | ------------------- | - | - | --------------------------------------------------- |
| 0 | `spl_token program` |   |   | SPL Token.                                          |
| 1 | `amm`               | W |   | `AmmInfo` del pool.                                 |
| 2 | `amm_authority`     |   |   | PDA de todo el programa.                            |
| 3 | `amm_coin_vault`    | W |   | Bóveda de coin del pool.                            |
| 4 | `amm_pc_vault`      | W |   | Bóveda de pc del pool.                              |
| 5 | `amm_target_orders` | W |   |                                                     |
| 6 | `model_data`        |   |   | Tabla de búsqueda.                                  |
| 7 | `user_coin`         | W |   | Cuenta de coin del administrador (recibe comisión). |
| 8 | `user_pc`           | W |   | Cuenta de pc del administrador (recibe comisión).   |
| 9 | `amm_admin`         |   | S | Administrador del pool (firmante).                  |

**Cambio de lógica**: cuando los fondos disponibles del pool son insuficientes para retirar el PnL acumulado, el pool **ya no** se pone en `CancelAllOrdersState` / `Disabled`; la instrucción devuelve `TakePnlError` directamente. El `referrer_pc_wallet` opcional también ha sido eliminado.

**Precondiciones**

* `amm_admin` debe estar autorizado.

**Postcondiciones**

* `need_take_pnl_coin` y `need_take_pnl_pc` se transfieren a las cuentas del administrador.
* Los contadores se ponen a cero.

## Instrucciones eliminadas

Las siguientes instrucciones fueron eliminadas en la actualización del 2026-06-22 y **ya no pueden ser llamadas**. Se documentan aquí solo para que los integradores las reconozcan en transacciones históricas y SDKs.

* **`Initialize`** — anteriormente inicializaba un nuevo pool de Stable AMM. Eliminada.
* **`PreInitialize`** — asistente de preasignación heredado. Eliminada.
* **`InitModelData`** — anteriormente creaba e inicializaba la tabla de búsqueda `ModelDataInfo`. Eliminada.
* **`UpdateModelData`** — anteriormente rellenaba hasta 5 elementos de tabla de búsqueda por llamada. Eliminada.
* **`MonitorStep`** — el crank de OpenBook que liquidaba rellenos y republicaba la cuadrícula de órdenes. Ya estaba inactivo hace mucho tiempo después de que el pool dejara de publicar en OpenBook; ahora eliminada.
* **`SetParams`** — cambios de parámetros de administrador (estado, comisiones, propietario, clave de datos del modelo, etc.). Eliminada.
* **`WithdrawSrm`** — recopilaba reembolsos de descuento de comisión SRM de pools de la era temprana de Serum. Eliminada.
* **`SimulateInfo`** — asistente de cotización de solo lectura. Eliminada; usa los asistentes de curva estable fuera de cadena del SDK para cotizaciones (consulta [Demostraciones de código](/es/products/stable/code-demos)).

## Próximos pasos

* [Cuentas](/es/products/stable/accounts) — para disposiciones y tamaños de campos de cuenta.
* [Matemáticas](/es/products/stable/math) — para la lógica de interpolación de tabla de búsqueda.
* [Demostraciones de código](/es/products/stable/code-demos) — para ver cómo llamar a estas desde el SDK.

Fuentes:

* `raydium-stable/program/src/instruction.rs` (enum y pack/unpack)
* `raydium-stable/program/src/processor.rs` (lógica de ejecución)
