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.
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 →
Resumen de instrucciones
| Nombre del discriminador | Quién firma | Qué hace |
|---|
Initialize | creador del pool | Crea un nuevo pool CPMM a partir de dos «mints» y un AmmConfig. Sin permisos; cualquiera puede llamarlo. Codifica enable_creator_fee = false en el nuevo pool. La cuenta pool_state puede ser la PDA canónica o un «keypair» aleatorio recién creado (ver cuentas de Initialize). |
InitializeWithPermission | pagador + titular de una PDA Permission | Variante con permisos de Initialize. El llamador (payer) debe poseer una PDA Permission derivada de su propia clave pública. Se utiliza por plataformas que necesitan creación de pools controlada (p. ej., graduaciones de LaunchLab). Permite al llamador fijar creator_fee_on (BothToken / OnlyToken0 / OnlyToken1) y fuerza enable_creator_fee = true en el nuevo pool. El campo creator en pool_state se establece en una cuenta creator pasada por separado, no en el pagador. Misma flexibilidad PDA-canónica-o-«keypair»-aleatorio para pool_state que en Initialize. |
Deposit | LP | Añade liquidez en ambos tokens; recibe tokens LP. |
Withdraw | LP | Quema tokens LP; recibe ambos tokens subyacentes en proporción. |
SwapBaseInput | intercambiador | Intercambio de entrada exacta (amount_in adentro, ≥ minimum_amount_out afuera). |
SwapBaseOutput | intercambiador | Intercambio de salida exacta (≤ maximum_amount_in adentro, amount_out afuera). |
CollectProtocolFee | protocol_owner (de AmmConfig) | Recauda las comisiones de protocolo acumuladas de los almacenes. |
CollectFundFee | fund_owner (de AmmConfig) | Recauda las comisiones de fondo acumuladas de los almacenes. |
CollectCreatorFee | pool_creator | Recauda las comisiones del creador acumuladas (si se habilitó). |
UpdatePoolStatus | admin | Pausa/reanuda operaciones específicas en un pool mediante una máscara de bits. |
UpdateAmmConfig | admin | Cambia las tasas de comisión o el propietario de protocolo/fondo en un AmmConfig. |
CreateAmmConfig | admin | Crea un nuevo nivel de tarifa (nueva cuenta AmmConfig). |
CreatePermissionPda | admin | Emite una PDA Permission que permite a una autoridad específica llamar a InitializeWithPermission. |
ClosePermissionPda | admin | Revoca una PDA Permission previamente emitida. |
Máscara de estado: el status de cada pool es un u8 donde el bit 0 = depósito deshabilitado, bit 1 = retiro deshabilitado, bit 2 = intercambio deshabilitado (PoolStatusBitIndex { Deposit, Withdraw, Swap } en el programa). Un bit claro significa que la operación está permitida; un bit establecido significa que está pausada. UpdatePoolStatus toma un u8 sin procesar y sobrescribe el valor existente.
Las siguientes secciones detallen cada una. El orden de cuentas sigue el IDL de CPMM; el SDK y el cliente de Rust en raydium-cp-swap/programs/cp-swap/src/instructions coinciden con este orden.
Initialize
Crea un nuevo pool CPMM.
Argumentos
init_amount_0: u64
init_amount_1: u64
open_time: u64 // Unix timestamp; swaps rejected before this
Cuentas (W = escribible, S = firmante)
| # | Nombre | W | S | Notas |
|---|
| 1 | creator | W | S | Paga renta; se registra como pool_state.pool_creator. |
| 2 | amm_config | | | El nivel de tarifa elegido. |
| 3 | authority | | | PDA de autoridad global de CPMM. |
| 4 | pool_state | W | S* | Se inicializa aquí. O la PDA canónica ["pool", amm_config, token_0_mint, token_1_mint] o un «keypair» aleatorio recién creado — cuando no es la PDA canónica, el programa requiere que pool_state firme (require_eq!(pool_account_info.is_signer, true)). La ruta de «keypair» aleatorio permite que un creador evite intentos de adelantarse en la PDA canónica. Las PDA posteriores (lp_mint, vaults, observation_state) se derivan de pool_state.key() de cualquier forma. |
| 5 | token_0_mint | | | Ordenado: token_0_mint < token_1_mint. |
| 6 | token_1_mint | | | |
| 7 | lp_mint | W | | Se inicializa aquí. Autoridad establecida en authority. |
| 8 | creator_token_0 | W | | ATA de origen para init_amount_0. |
| 9 | creator_token_1 | W | | ATA de origen para init_amount_1. |
| 10 | creator_lp_token | W | | Destino para LP (se crea si falta). |
| 11 | token_0_vault | W | | Se inicializa aquí. Propiedad de authority. |
| 12 | token_1_vault | W | | |
| 13 | create_pool_fee | W | | ATA de destino para el create_pool_fee pagado por el creador. |
| 14 | observation_state | W | | Se inicializa aquí. |
| 15 | token_program | | | Token SPL (para LP mint). |
| 16 | token_0_program | | | Token SPL o Token-2022. |
| 17 | token_1_program | | | Token SPL o Token-2022. |
| 18 | associated_token_program | | | |
| 19 | system_program | | | |
| 20 | rent | | | |
* pool_state firma solo en la ruta de «keypair» aleatorio; la ruta de PDA canónica se ejecuta sin que pool_state firme.
Precondiciones
- Los «mints» están ordenados (
token_0_mint < token_1_mint por orden de bytes).
- Ningún «mint» utiliza una extensión fuera de la lista de permitidos de CPMM (
TransferFeeConfig, MetadataPointer, TokenMetadata, InterestBearingConfig, ScaledUiAmount) — ver products/cpmm/accounts. Una pequeña lista de permitidos por «mint» dentro del programa omite la verificación para incorporación caso a caso.
creator tiene al menos init_amount_0 e init_amount_1 en los respectivos ATA.
amm_config.disable_create_pool == false.
Postcondiciones
pool_state existe con lp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP.
- El iniciador LP de
LOCKED_LP (100 lámparas de token LP) se bloquea permanentemente en el pool — pool_state.lp_supply registra liquidity − 100 mientras que 100 unidades LP permanecen fuera de circulación, evitando que el pool se drene completamente y se divida por cero.
observation_state se inicializa; observation_index = 0 y pool_id = pool_state.key().
- Las lámparas de
create_pool_fee se transfieren del creador al receptor y se sincronizan como SOL nativo (es un ATA wSOL).
- La máscara de estado del pool es
0 (depósito / retiro / intercambio todos habilitados).
enable_creator_fee = false y creator_fee_on = BothToken. Initialize no admite habilitar la comisión del creador — esa ruta es InitializeWithPermission.
open_time se incrementa a block_timestamp + 1 si el llamador pasó un valor <= block_timestamp. Los intercambios se rechazan antes de open_time; depósitos y retiros funcionan inmediatamente.
Errores comunes (lista completa en reference/error-codes)
InvalidInput — «mints» sin ordenar o idénticos.
NotSupportMint — extensión de Token-2022 bloqueada.
ExceededSlippage — raramente; si init_amount_0/1 resultan en cero LP debido a la falta de coincidencia de decimales.
Deposit
Añade liquidez en ambos tokens proporcional al pool.
Argumentos
lp_token_amount: u64 // how many LP tokens to mint to the LP
maximum_token_0: u64
maximum_token_1: u64
Cuentas
| # | Nombre | W | S |
|---|
| 1 | owner | | S |
| 2 | authority | | |
| 3 | pool_state | W | |
| 4 | owner_lp_token | W | |
| 5 | token_0_account | W | |
| 6 | token_1_account | W | |
| 7 | token_0_vault | W | |
| 8 | token_1_vault | W | |
| 9 | token_program | | |
| 10 | token_program_2022 | | |
| 11 | vault_0_mint | | |
| 12 | vault_1_mint | | |
| 13 | lp_mint | W | |
Matemática
needed_token_0 = ceil(lp_token_amount * vault_0 / lp_supply)
needed_token_1 = ceil(lp_token_amount * vault_1 / lp_supply)
require(needed_token_0 <= maximum_token_0, "ExceededSlippage")
require(needed_token_1 <= maximum_token_1, "ExceededSlippage")
Sin cambio en la proporcionalidad de k — ambos almacenes y lp_supply se escalan por el mismo factor.
Postcondiciones
lp_supply += lp_token_amount.
vault_0 += needed_token_0 (neto de cualquier comisión de transferencia de Token-2022 en entrada).
vault_1 += needed_token_1 (neto de cualquier comisión de transferencia de Token-2022 en entrada).
Errores comunes — ExceededSlippage, ZeroTradingTokens, InvalidStatus si el depósito está pausado.
Withdraw
Quema tokens LP y recibe ambos tokens subyacentes en proporción.
Argumentos
lp_token_amount: u64
minimum_token_0: u64
minimum_token_1: u64
Cuentas
| # | Nombre | W | S |
|---|
| 1 | owner | | S |
| 2 | authority | | |
| 3 | pool_state | W | |
| 4 | owner_lp_token | W | |
| 5 | token_0_account | W | |
| 6 | token_1_account | W | |
| 7 | token_0_vault | W | |
| 8 | token_1_vault | W | |
| 9 | token_program | | |
| 10 | token_program_2022 | | |
| 11 | vault_0_mint | | |
| 12 | vault_1_mint | | |
| 13 | lp_mint | W | |
(Idéntico a Deposit; lp_mint es escribible porque los tokens LP se queman.)
Matemática
out_token_0 = floor(lp_token_amount * vault_0 / lp_supply)
out_token_1 = floor(lp_token_amount * vault_1 / lp_supply)
require(out_token_0 >= minimum_token_0, "ExceededSlippage")
require(out_token_1 >= minimum_token_1, "ExceededSlippage")
Postcondiciones
lp_supply -= lp_token_amount.
- Los almacenes envían
out_token_0 / out_token_1 (bruto; el usuario recibe neto de cualquier comisión de transferencia de Token-2022).
Intercambio de entrada exacta.
Argumentos
amount_in: u64
minimum_amount_out: u64
Cuentas
| # | Nombre | W | S |
|---|
| 1 | payer | | S |
| 2 | authority | | |
| 3 | amm_config | | |
| 4 | pool_state | W | |
| 5 | input_token_account | W | |
| 6 | output_token_account | W | |
| 7 | input_vault | W | |
| 8 | output_vault | W | |
| 9 | input_token_program | | |
| 10 | output_token_program | | |
| 11 | input_token_mint | | |
| 12 | output_token_mint | | |
| 13 | observation_state | W | |
El orden entrada → salida es por la dirección del usuario, no por el token_0 / token_1 canónico del pool. El programa determina qué almacén es cuál haciendo coincidir los «mints».
Matemática — ver products/cpmm/math.
Precondiciones
open_time <= now.
pool_status permite intercambio.
- Ningún «mint» pausado o congelado para esta autoridad.
amount_in > 0.
Errores comunes
ExceededSlippage — amount_out < minimum_amount_out.
ZeroTradingTokens — el comercio se redondea a cero.
NotApproved — el pool está pausado para intercambios mediante UpdatePoolStatus.
InvalidInput — los «mints» no coinciden con ninguno de los «mints» de almacén del pool.
SwapBaseOutput
Intercambio de salida exacta.
Argumentos
max_amount_in: u64
amount_out: u64
Cuentas — igual que SwapBaseInput.
Matemática — curva inversa con límite máximo, ver products/cpmm/math.
Errores comunes — ExceededSlippage (gross_in > max_amount_in), ZeroTradingTokens, InvalidInput, NotApproved.
CollectProtocolFee
Recauda las comisiones de protocolo acumuladas de los almacenes al destino del protocolo.
Argumentos — ninguno.
Cuentas
| # | Nombre | W | S | |
|---|
| 1 | owner | | S | Debe coincidir con amm_config.protocol_owner. |
| 2 | authority | | | |
| 3 | pool_state | W | | |
| 4 | amm_config | | | |
| 5 | token_0_vault | W | | |
| 6 | token_1_vault | W | | |
| 7 | vault_0_mint | | | |
| 8 | vault_1_mint | | | |
| 9 | recipient_token_0_account | W | | |
| 10 | recipient_token_1_account | W | | |
| 11 | token_program | | | |
| 12 | token_program_2022 | | | |
Efecto
transfer pool_state.protocol_fees_token0 from vault_0 to recipient_0
transfer pool_state.protocol_fees_token1 from vault_1 to recipient_1
pool_state.protocol_fees_token0 = 0
pool_state.protocol_fees_token1 = 0
Sin cambio en los saldos efectivos de la curva (las comisiones acumuladas ya estaban excluidas).
Error común — NotApproved si el firmante no es protocol_owner.
CollectFundFee
Misma forma que CollectProtocolFee pero firmada por fund_owner e igualando los contadores fund_fees_* a cero.
CollectCreatorFee
De nuevo misma forma, firmada por pool_state.pool_creator. Solo emite transferencias si el pool se inicializó con una tasa de comisión del creador distinta de cero.
UpdatePoolStatus
Pausa o reanuda operaciones individuales en un pool. El campo status es una máscara de bits:
| Bit | Bandera | Efecto cuando está establecida |
|---|
| 0 | DEPOSIT_DISABLED | Deposit rechaza con NotApproved. |
| 1 | WITHDRAW_DISABLED | Withdraw rechaza. |
| 2 | SWAP_DISABLED | SwapBaseInput / SwapBaseOutput rechazan. |
Argumentos
status: u8 // new bitmask
Cuentas
| # | Nombre | W | S | |
|---|
| 1 | authority | | S | Debe coincidir con la clave de administrador en el programa CPMM. |
| 2 | pool_state | W | | |
La clave de administrador es la autoridad de actualización del programa CPMM — en la práctica, el multisig de Raydium. Ver security/admin-and-multisig.
CreateAmmConfig
Crea un nuevo nivel de tarifa.
Argumentos
index: u16
trade_fee_rate: u64
protocol_fee_rate: u64
fund_fee_rate: u64
create_pool_fee: u64
Cuentas
| # | Nombre | W | S | |
|---|
| 1 | owner | W | S | Administrador. |
| 2 | amm_config | W | | Se inicializa aquí. |
| 3 | system_program | | | |
Precondiciones
- No existe
AmmConfig con el mismo index.
protocol_fee_rate + fund_fee_rate <= FEE_RATE_DENOMINATOR_VALUE.
UpdateAmmConfig
Cambia tasas de comisión u propiedad en un AmmConfig existente. Toma un param: u8 (discriminador para qué campo actualizar) y un value: u64. La semántica de valor por parámetro está en el código fuente; comúnmente:
param = 0 → trade_fee_rate
param = 1 → protocol_fee_rate
param = 2 → fund_fee_rate
param = 3 → new_protocol_owner (pasa bytes de Pubkey como reinterpretación)
param = 4 → new_fund_owner
param = 5 → create_pool_fee
param = 6 → disable_create_pool
Los cambios se firman por el administrador y afectan a cada pool vinculado a este AmmConfig en el siguiente intercambio. Sin migración; los pools simplemente leen los nuevos valores.
Matriz de cambio de estado
| Instrucción | lp_supply | Saldos de almacén | Campos de comisión acumulada | observation |
|---|
Initialize | + LP inicial | + init_amount_{0,1} | 0 | init |
InitializeWithPermission | + LP inicial | + init_amount_{0,1} | 0 | init |
Deposit | + | + ambos | — | — |
Withdraw | − | − ambos | — | — |
SwapBaseInput | — | + entrada, − salida | + trade_fee dividido en protocolo/fondo; + creator_fee si está habilitado | + (si transcurrió intervalo) |
SwapBaseOutput | — | + entrada, − salida | + trade_fee dividido en protocolo/fondo; + creator_fee si está habilitado | + (si transcurrió intervalo) |
CollectProtocolFee | — | − (por depósitos de protocolo) | protocol_* → 0 | — |
CollectFundFee | — | − (por depósitos de fondo) | fund_* → 0 | — |
CollectCreatorFee | — | − (por depósitos del creador) | creator_* → 0 | — |
UpdatePoolStatus | — | — | — | — |
A dónde ir a continuación
Fuentes: