Saltar al contenido principal

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 →
Esta página es la referencia de instrucciones autorizada. Para código que realmente compone estas instrucciones, consulta products/cpmm/code-demos. Para los significados de códigos de error, consulta reference/error-codes.

Resumen de instrucciones

Nombre del discriminadorQuién firmaQué hace
Initializecreador del poolCrea 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).
InitializeWithPermissionpagador + titular de una PDA PermissionVariante 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.
DepositLPAñade liquidez en ambos tokens; recibe tokens LP.
WithdrawLPQuema tokens LP; recibe ambos tokens subyacentes en proporción.
SwapBaseInputintercambiadorIntercambio de entrada exacta (amount_in adentro, ≥ minimum_amount_out afuera).
SwapBaseOutputintercambiadorIntercambio de salida exacta (≤ maximum_amount_in adentro, amount_out afuera).
CollectProtocolFeeprotocol_owner (de AmmConfig)Recauda las comisiones de protocolo acumuladas de los almacenes.
CollectFundFeefund_owner (de AmmConfig)Recauda las comisiones de fondo acumuladas de los almacenes.
CollectCreatorFeepool_creatorRecauda las comisiones del creador acumuladas (si se habilitó).
UpdatePoolStatusadminPausa/reanuda operaciones específicas en un pool mediante una máscara de bits.
UpdateAmmConfigadminCambia las tasas de comisión o el propietario de protocolo/fondo en un AmmConfig.
CreateAmmConfigadminCrea un nuevo nivel de tarifa (nueva cuenta AmmConfig).
CreatePermissionPdaadminEmite una PDA Permission que permite a una autoridad específica llamar a InitializeWithPermission.
ClosePermissionPdaadminRevoca 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)
#NombreWSNotas
1creatorWSPaga renta; se registra como pool_state.pool_creator.
2amm_configEl nivel de tarifa elegido.
3authorityPDA de autoridad global de CPMM.
4pool_stateWS*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.
5token_0_mintOrdenado: token_0_mint < token_1_mint.
6token_1_mint
7lp_mintWSe inicializa aquí. Autoridad establecida en authority.
8creator_token_0WATA de origen para init_amount_0.
9creator_token_1WATA de origen para init_amount_1.
10creator_lp_tokenWDestino para LP (se crea si falta).
11token_0_vaultWSe inicializa aquí. Propiedad de authority.
12token_1_vaultW
13create_pool_feeWATA de destino para el create_pool_fee pagado por el creador.
14observation_stateWSe inicializa aquí.
15token_programToken SPL (para LP mint).
16token_0_programToken SPL o Token-2022.
17token_1_programToken SPL o Token-2022.
18associated_token_program
19system_program
20rent
* 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
#NombreWS
1ownerS
2authority
3pool_stateW
4owner_lp_tokenW
5token_0_accountW
6token_1_accountW
7token_0_vaultW
8token_1_vaultW
9token_program
10token_program_2022
11vault_0_mint
12vault_1_mint
13lp_mintW
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 comunesExceededSlippage, 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
#NombreWS
1ownerS
2authority
3pool_stateW
4owner_lp_tokenW
5token_0_accountW
6token_1_accountW
7token_0_vaultW
8token_1_vaultW
9token_program
10token_program_2022
11vault_0_mint
12vault_1_mint
13lp_mintW
(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).

SwapBaseInput

Intercambio de entrada exacta. Argumentos
amount_in:            u64
minimum_amount_out:   u64
Cuentas
#NombreWS
1payerS
2authority
3amm_config
4pool_stateW
5input_token_accountW
6output_token_accountW
7input_vaultW
8output_vaultW
9input_token_program
10output_token_program
11input_token_mint
12output_token_mint
13observation_stateW
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
  • ExceededSlippageamount_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 comunesExceededSlippage (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
#NombreWS
1ownerSDebe coincidir con amm_config.protocol_owner.
2authority
3pool_stateW
4amm_config
5token_0_vaultW
6token_1_vaultW
7vault_0_mint
8vault_1_mint
9recipient_token_0_accountW
10recipient_token_1_accountW
11token_program
12token_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únNotApproved 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:
BitBanderaEfecto cuando está establecida
0DEPOSIT_DISABLEDDeposit rechaza con NotApproved.
1WITHDRAW_DISABLEDWithdraw rechaza.
2SWAP_DISABLEDSwapBaseInput / SwapBaseOutput rechazan.
Argumentos
status: u8      // new bitmask
Cuentas
#NombreWS
1authoritySDebe coincidir con la clave de administrador en el programa CPMM.
2pool_stateW
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
#NombreWS
1ownerWSAdministrador.
2amm_configWSe inicializa aquí.
3system_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 = 0trade_fee_rate
  • param = 1protocol_fee_rate
  • param = 2fund_fee_rate
  • param = 3new_protocol_owner (pasa bytes de Pubkey como reinterpretación)
  • param = 4new_fund_owner
  • param = 5create_pool_fee
  • param = 6disable_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ónlp_supplySaldos de almacénCampos de comisión acumuladaobservation
Initialize+ LP inicial+ init_amount_{0,1}0init
InitializeWithPermission+ LP inicial+ init_amount_{0,1}0init
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: