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
* 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_mintpor orden de bytes). - Ningún «mint» utiliza una extensión fuera de la lista de permitidos de CPMM (
TransferFeeConfig,MetadataPointer,TokenMetadata,InterestBearingConfig,ScaledUiAmount) — verproducts/cpmm/accounts. Una pequeña lista de permitidos por «mint» dentro del programa omite la verificación para incorporación caso a caso. creatortiene al menosinit_amount_0einit_amount_1en los respectivos ATA.amm_config.disable_create_pool == false.
pool_stateexiste conlp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP.- El iniciador LP de
LOCKED_LP(100lámparas de token LP) se bloquea permanentemente en el pool —pool_state.lp_supplyregistraliquidity − 100mientras que100unidades LP permanecen fuera de circulación, evitando que el pool se drene completamente y se divida por cero. observation_statese inicializa;observation_index = 0ypool_id = pool_state.key().- Las lámparas de
create_pool_feese 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 = falseycreator_fee_on = BothToken.Initializeno admite habilitar la comisión del creador — esa ruta esInitializeWithPermission.open_timese incrementa ablock_timestamp + 1si el llamador pasó un valor<= block_timestamp. Los intercambios se rechazan antes deopen_time; depósitos y retiros funcionan inmediatamente.
reference/error-codes)
InvalidInput— «mints» sin ordenar o idénticos.NotSupportMint— extensión de Token-2022 bloqueada.ExceededSlippage— raramente; siinit_amount_0/1resultan en cero LP debido a la falta de coincidencia de decimales.
Deposit
Añade liquidez en ambos tokens proporcional al pool.
Argumentos
Matemática
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).
ExceededSlippage, ZeroTradingTokens, InvalidStatus si el depósito está pausado.
Withdraw
Quema tokens LP y recibe ambos tokens subyacentes en proporción.
Argumentos
(Idéntico a
Deposit; lp_mint es escribible porque los tokens LP se queman.)
Matemática
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
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_statuspermite intercambio.- Ningún «mint» pausado o congelado para esta autoridad.
amount_in > 0.
ExceededSlippage—amount_out < minimum_amount_out.ZeroTradingTokens— el comercio se redondea a cero.NotApproved— el pool está pausado para intercambios medianteUpdatePoolStatus.InvalidInput— los «mints» no coinciden con ninguno de los «mints» de almacén del pool.
SwapBaseOutput
Intercambio de salida exacta.
Argumentos
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
Efecto
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:
Argumentos
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
Precondiciones
- No existe
AmmConfigcon el mismoindex. 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_rateparam = 1→protocol_fee_rateparam = 2→fund_fee_rateparam = 3→new_protocol_owner(pasa bytes dePubkeycomo reinterpretación)param = 4→new_fund_ownerparam = 5→create_pool_feeparam = 6→disable_create_pool
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
products/cpmm/code-demos— ejemplos de TypeScript ejecutables para lo anterior.reference/error-codes— la tabla completa de errores de Anchor.products/cpmm/fees— el modelo de acumulación de comisiones queCollectProtocolFee/CollectFundFee/CollectCreatorFeevacían.

