Saltar al contenido principal
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

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
Cuentas (W = escribible, S = firmante) * 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
Cuentas Matemática
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
Cuentas (Idéntico a Deposit; lp_mint es escribible porque los tokens LP se queman.) Matemática
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
Cuentas 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
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 Efecto
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: Argumentos
Cuentas 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
Cuentas 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

A dónde ir a continuación

Fuentes: