Skip to main content
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 →
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. Las listas de cuentas a continuación usan los nombres de campo del SDK de Raydium; el IDL subyacente a veces usa prefijos serum_*.La actualización del programa 2026-09 añade una instrucción de administrador, WithdrawExcessLamports (etiqueta 18), y elimina la variable del sistema rent de CreateConfigAccount. Todo lo que un operador o LP llama permanece sin cambios. Consulta la entrada del registro de cambios 2026-09-09.

Inventario de instrucciones

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 (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). Una transacción que lleve una de estas etiquetas falla; el programa nunca ejecuta la instrucción. Trata los siete como eliminados en lugar de como rutas de error a manejar.

Initialize2

Arrancar un nuevo pool AMM v4 vinculado a un mercado OpenBook existente. Argumentos
Cuentas (escribible W, firmante S)
Dos diseños aceptados. La lista de 19 cuentas de arriba es la recomendada. Por compatibilidad retroactiva el programa también lee un diseño heredado de 21 cuentas, que inserta un amm_open_orders ignorado en la posición 7 y un market_program ignorado en la posición 16 — esto es lo que sigue emitiendo el constructor de instrucciones initialize2 del repositorio. Cualquier otra longitud se analiza posicionalmente contra el diseño heredado y fallará.
Condiciones posteriores
  • El LP acuñado al creador = sqrt(init_coin_amount × init_pc_amount) − 10^coin_mint.decimals. Los decimales del LP son iguales a coin_mint.decimals, así que la cantidad restada es exactamente un token LP entero; nunca se acuña y queda permanentemente fuera de circulación. Si sqrt(...) está por debajo de eso, la instrucción revierte con InitLpAmountTooLess.
  • AmmInfo.lp_amount almacena el sqrt(...) completo, no la cantidad acuñada — así que lp_mint.supply queda permanentemente un token LP entero por debajo de amm.lp_amount. Toda la matemática prorrateada usa amm.lp_amount.
  • No se publican órdenes de OpenBook (la cuadrícula del libro de órdenes ha sido eliminada). AmmInfo.market registra la cuenta pasada en la posición 15, pero AmmInfo.open_orders y AmmInfo.market_program se escriben ambos como Pubkey::default(), y coin_lot_size / pc_lot_size / min_size se inicializan a 0. En el diseño heredado de 21 cuentas, las cuentas extra amm_open_orders y market_program se leen y se descartan.
Errores comunes — InvalidCoinMint (los mints coin y pc son idénticos), InvalidConfigAccount (PDA amm_config incorrecto), InvalidFee (destino incorrecto de la comisión de creación de pool), InvalidProgramAddress (amm_authority o nonce incorrectos), RepeatCreateAmm (ya existe un pool para este mercado), InitLpAmountTooLess, InvalidSupply (alguna de las cantidades iniciales es 0, o el mint de LP ya tiene suministro), AlreadyInUse.

Deposit

Añadir liquidez. Argumentos
Cuentas (abreviadas)
Los recuentos aceptados son 11, 14 o 15 — nada más. El diseño heredado es de 14 cuentas (o 15 con una cuenta final ignorada): la misma lista con un amm_open_orders ignorado en la posición 4, un market ignorado en la posición 9 y un market_event_queue ignorado añadido al final en la posición 14. Cualquier otro recuento revierte con WrongAccountsNumber.
Matemáticas — prorrateado 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
Cuentas — diseño recomendado de 11 cuentas
Withdraw no es Deposit al revés. Los recuentos aceptados son 11, o de 20 a 23. El diseño heredado de 20 cuentas coloca la cuenta de LP del usuario antes de las dos ATA receptoras e intercala cinco cuentas de mercado ignoradas: token_program, amm(W), amm_authority, amm_open_orders(W), amm_target_orders(W), lp_mint(W), pool_coin_token_account(W), pool_pc_token_account(W), market_program, market(W), market_coin_vault(W), market_pc_vault(W), market_vault_signer, user_lp_token_account(W), user_coin_token_account(W), user_pc_token_account(W), user_owner(S), market_event_queue(W), market_bids(W), market_asks(W). Las formas de 22 y 23 cuentas insertan dos cuentas de relleno ignoradas después de la posición 8. Cualquier otro recuento revierte con WrongAccountsNumber.
Ya no hay ningún paso de liquidación desde OpenBook — la matemática prorrateada usa directamente los saldos de las bóvedas.

SwapBaseIn

Intercambio de entrada exacta. Siempre un intercambio de ruta AMM (no se enruta a través de la coincidencia de OpenBook).
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 son aceptadas posicionalmente e ignoradas — 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, 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.
Argumentos
Cuentas (abreviadas) Matemáticas — consulta products/amm-v4/math. Precondiciones
  • AmmStatus::from_u64(amm.status).swap_permission() es verdadero — es decir, status es 1 (Initialized), 6 (SwapOnly) o 7 (WaitingTrade). status es un valor de enumeración, no una máscara de bits; ver products/amm-v4/accounts.
  • 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.
  • La comisión de swap se queda en las bóvedas, elevando el invariante k. Los contadores need_take_pnl_* no son tocados por los swaps — el PnL del protocolo se recalcula a partir del delta de k en el siguiente Deposit, Withdraw o WithdrawPnl (Processor::calc_take_pnl).
  • 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

SwapBaseInV2 / SwapBaseOutV2

Puntos de entrada de intercambio variantes (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: 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

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.
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 de administrador de tarifas de protocolo acumuladas. Argumentos
  • WithdrawPnl no toma argumentos; lee need_take_pnl_* y mueve esas cantidades exactas.
Cambio de ruptura (solo administrador). 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 de administrador deben actualizarse.
Cuentas (nuevo diseño de 10 cuentas) 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 de administrador, llamados por la multifirma de Raydium. Los argumentos son una etiqueta param: u8 + carga útil.
Cambio de ruptura (solo administrador). 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 de administrador deben actualizarse.

CreateConfigAccount / UpdateConfigAccount

Gestión de administrador del PDA AmmConfig a nivel de programa (semilla ["amm_config_account_seed"]). La cuenta contiene exactamente tres campos significativos — pnl_owner, cancel_owner y create_pool_fee — más dos regiones de relleno reservadas; no hay bandera de creación de pool. UpdateConfigAccount establece pnl_owner con param = 0, cancel_owner con param = 1 y create_pool_fee con param = 2.
Cambiado en 2026-09, y compatible hacia atrás. CreateConfigAccount ya no lee la variable del sistema rent. Su lista de cuentas ahora es 4 cuentas, reducida de 5:El programa lee parámetros de renta de Rent::get() en lugar de deserializar una cuenta de variable del sistema pasada — lo que la actualización de dependencia de Solana 3.0 hizo natural.La cuenta eliminada fue última en la lista, y el manejador lee sus cuentas posicionalmente a través de next_account_info sin verificación de longitud. Una herramienta de administrador existente que aún pase la lista antigua de 5 cuentas por lo tanto sigue funcionando: la cuenta de renta final simplemente nunca se lee. Actualízala cuando sea conveniente, no urgentemente. UpdateConfigAccount no ha cambiado.
Initialize2 mantiene la variable del sistema rent en la posición 3, y aún la usa: el programa dejó de llamar a Rent::from_account_info en ella, pero aún se reenvía a los CPI de spl_token::initialize_account e initialize_mint que crean las bóvedas del pool y el mint de LP. No la elimines de la lista de cuentas.

WithdrawExcessLamports

Barrido de administrador de lamports sentados por encima del mínimo exento de renta en cuentas que el programa controla. Añadido en la actualización 2026-09 para recuperar el exceso de financiamiento que la reducción de renta SIMD-0437 deja en cuentas creadas antes de cada paso. Solo mueve el exceso. Los saldos de tokens, datos de cuenta, propietarios y estado del pool no se tocan, y la instrucción es una no-operación en una cuenta ya en su mínimo — por lo que es seguro dispararla repetidamente y nuevamente después de cada paso de lanzamiento. Argumentos — ninguno. La carga útil es el byte de etiqueta único 18. Cuentas Cómo se maneja cada cuenta de origen El programa se distribuye en el owner de la cuenta de origen: Errores comunes — InvalidSignAccount (firmante incorrecto), InvalidSplTokenProgram (programa incorrecto en la ranura 3), InvalidProgramAddress (amm_authority incorrecto), LamportsCalculateError (código personalizado 60; el viaje de ida y vuelta de wSOL no llegó a cero), e InsufficientFunds de la ruta controlada por el programa cuando una cuenta contiene menos que su propio mínimo de renta. Sin constructor del SDK. @raydium-io/raydium-sdk-v2 no envía un constructor para esta instrucción, ni tampoco el repositorio raydium-sdk-V2-demo — es una ruta de administrador. Codifícala a mano, de la manera que el barrido del lado de la billetera en solana-fundamentals/rent-and-reclaimable-rent lo hace para la instrucción del programa de tokens.

Matriz de cambio de estado

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

Dónde ir a continuación

Fuentes: