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 →

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 = swap 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 detallan cada una. El orden de cuentas sigue el IDL de CPMM; el SDK y el cliente Rust en raydium-cp-swap/programs/cp-swap/src/instructions coinciden con este orden.

Initialize

Crear un nuevo pool CPMM. Argumentos
Cuentas (W = escribible, S = firmante) * pool_state firma solo en la ruta de keypair aleatoria; la ruta de PDA canónico 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 evita la verificación para incorporación caso por caso.
  • creator tiene al menos init_amount_0 e init_amount_1 en los ATAs respectivos.
  • amm_config.disable_create_pool == false.
Postcondiciones
  • pool_state existe con lp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP.
  • El iniciador de LP de LOCKED_LP (100 láminas de token LP) está permanentemente bloqueado en el pool — pool_state.lp_supply registra liquidity − 100 mientras que 100 unidades de 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áminas 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 / swap todos habilitados).
  • enable_creator_fee = false y creator_fee_on = BothToken. Initialize no admite habilitar la comisión de creador — esa ruta es InitializeWithPermission.
  • open_time se incrementa a block_timestamp + 1 si el llamador pasó un valor <= block_timestamp. Los swaps se rechazan antes de open_time; los depósitos y retiros funcionan inmediatamente.
Errores comunes (lista completa en reference/error-codes)
  • InvalidInput — mints sin ordenar o mints idénticos.
  • NotSupportMint — extensión de Token-2022 bloqueada.
  • ExceededSlippage — raramente; si init_amount_0/1 resultan en LP cero debido a desajuste de decimales.

Deposit

Añadir liquidez en ambos tokens proporcional al pool. Argumentos
Cuentas Matemáticas
Sin cambios en la proporcionalidad de k — ambos vaults 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 la entrada).
  • vault_1 += needed_token_1 (neto de cualquier comisión de transferencia de Token-2022 en la entrada).
Errores comunesExceededSlippage, ZeroTradingTokens, InvalidStatus si el depósito está pausado.

Withdraw

Quemar tokens LP y recibir ambos tokens subyacentes pro-rata. Argumentos
Cuentas (Idéntico a Deposit; lp_mint es escribible porque los tokens LP se queman.) Matemáticas
Postcondiciones
  • lp_supply -= lp_token_amount.
  • Los vaults envían out_token_0 / out_token_1 (bruto; el usuario recibe neto de cualquier comisión de transferencia de Token-2022).

SwapBaseInput

Swap 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é vault es cuál haciendo coincidir los mints. Matemáticas — ver products/cpmm/math. Precondiciones
  • open_time <= now.
  • pool_status permite swap.
  • Ningún mint pausado o congelado para esta autoridad.
  • amount_in > 0.
Errores comunes
  • ExceededSlippageamount_out < minimum_amount_out.
  • ZeroTradingTokens — la operación se redondea a cero.
  • NotApproved — el pool está pausado para swaps mediante UpdatePoolStatus.
  • InvalidInput — los mints no coinciden con ninguno de los mints del vault del pool.

SwapBaseOutput

Swap de salida exacta. Argumentos
Cuentas — igual que SwapBaseInput. Matemáticas — curva inversa con techo, ver products/cpmm/math. Errores comunesExceededSlippage (gross_in > max_amount_in), ZeroTradingTokens, InvalidInput, NotApproved.

CollectProtocolFee

Recopilar comisiones de protocolo acumuladas de los vaults al destino del protocolo. Argumentos — ninguno. Cuentas Efecto
Sin cambios 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 firmado por fund_owner y poniendo a cero los contadores fund_fees_*.

CollectCreatorFee

Firmado por pool_state.pool_creator. Transfiere los saldos completos de creator_fees_token_0 y creator_fees_token_1 a las cuentas de token del creador, luego pone a cero ambos contadores. Devuelve NoFeeCollect cuando ambos contadores son cero.

CollectCreatorFeePermissionless

Cualquiera puede activar la recopilación de comisiones de creador. La instrucción siempre envía los saldos acumulados completos a las cuentas de token asociadas canónicas propiedad de pool_state.pool_creator; el llamador no puede elegir otro creador o destino. Si falta algún ATA, el pagador financia su creación. El CollectCreatorFee original sigue siendo invocable, por lo que los clientes existentes permanecen compatibles. Argumentos — ninguno. Cuentas Efecto
  • Transfiere todo creator_fees_token_0 y creator_fees_token_1 de los vaults del pool a los ATAs del creador.
  • Pone a cero ambos contadores de comisión de creador y actualiza pool_state.recent_epoch.
  • Devuelve NoFeeCollect cuando ambos contadores son cero.

UpdatePoolStatus

Pausar o reanudar 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 en el programa CPMM — en la práctica, el multisig de Raydium. Ver security/admin-and-multisig.

CreateAmmConfig

Crear un nuevo nivel de comisión. Argumentos
Cuentas Precondiciones
  • No existe AmmConfig con el mismo index.
  • protocol_fee_rate + fund_fee_rate <= FEE_RATE_DENOMINATOR_VALUE.

UpdateAmmConfig

Cambiar tasas de comisión u propiedad en una 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 la fuente; comúnmente:
  • param = 0trade_fee_rate
  • param = 1protocol_fee_rate
  • param = 2fund_fee_rate
  • param = 3new_protocol_owner (pasar bytes 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 esta AmmConfig en el próximo swap. Sin migración; los pools simplemente leen los nuevos valores.

Matriz de cambio de estado

Dónde ir a continuación

Fuentes: