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 complementa products/clmm/accounts (descripción de las cuentas) y products/clmm/math (explicación de la matemática). Es la referencia definitiva para argumentos y orden de cuentas; los layouts de bytes provienen del IDL.
Inventario de instrucciones
| Grupo | Instrucción | Notas |
|---|
| Admin | CreateAmmConfig | Define un nuevo nivel de comisión. |
| Admin | UpdateAmmConfig | Modifica las tasas en un nivel existente. |
| Admin | UpdatePoolStatus | Pausa/reanuda las operaciones de un pool. |
| Admin | CreateSupportMintAssociated | Agrega a la lista de permitidos una configuración de extensión de mint Token-2022 para su uso en pools CLMM. |
| Admin | CreateOperationAccount | Inicializa la cuenta de operaciones del programa (operación única). |
| Admin | UpdateOperationAccount | Modifica la lista blanca de la cuenta de operaciones. |
| Admin | CreateDynamicFeeConfig | Crea un conjunto de parámetros de comisión dinámica reutilizable bajo un índice u16. |
| Admin | UpdateDynamicFeeConfig | Modifica un DynamicFeeConfig existente. Los pools que ya tomaron una instantánea de él no se ven afectados. |
| Pool | CreatePool | Inicializa un pool CLMM vinculado a un AmmConfig. Ruta de comisión estándar FromInput. Coexiste con CreateCustomizablePool. |
| Pool | CreateCustomizablePool | Recomendado para nuevos pools. Tiene la misma forma que CreatePool más collect_fee_on y una bandera enable_dynamic_fee opcional. |
| Position | OpenPosition / OpenPositionV2 / OpenPositionWithToken22Nft | Acuña un NFT de posición. OpenPositionV2 reemplaza a V1 (layout de cuentas más nuevo con la ranura de extensión bitmap); OpenPositionWithToken22Nft emite el NFT de posición como Token-2022 en lugar de SPL Token. El código nuevo debería usar V2 o la variante Token-2022. |
| Position | IncreaseLiquidity / IncreaseLiquidityV2 | Agrega liquidez a una posición existente. |
| Position | DecreaseLiquidity / DecreaseLiquidityV2 | Retira liquidez; cobra las comisiones pendientes. |
| Position | ClosePosition | Quema el NFT y cierra el PersonalPositionState. |
| Position | CloseProtocolPosition | Solo para admins: limpieza de PDAs ProtocolPositionState heredadas. El programa actual ya no crea ni lee ProtocolPositionState; esta instrucción existe únicamente para recuperar el alquiler de cuentas creadas por versiones antiguas del programa. |
| Swap | Swap / SwapV2 | Swap de liquidez constante. Ambas variantes aplican comisión dinámica, enrutamiento de comisión unilateral y coincidencia de órdenes límite; la única diferencia es que SwapV2 acepta mints Token-2022 (la variante V1 requiere que ambos vaults sean SPL Token clásico). |
| Swap | SwapRouterBaseIn | Multi-hop, utilizado por el router. |
| Limit order | OpenLimitOrder | Coloca una orden de venta en un tick. Los tokens sin ejecutar quedan en el tick; el motor de coincidencia los llena a medida que el precio lo atraviesa. |
| Limit order | IncreaseLimitOrder | Agrega monto a una orden abierta existente. |
| Limit order | DecreaseLimitOrder | Reduce o cancela una orden abierta; devuelve el remanente sin ejecutar más cualquier output ya liquidado. |
| Limit order | SettleLimitOrder | Envía los tokens de output ejecutados al dueño de la orden. Puede ser llamado por el dueño o por el keeper operacional. |
| Limit order | CloseLimitOrder | Cierra una cuenta de orden completamente consumida. El alquiler siempre regresa al owner de la orden. Puede ser llamado por el dueño o el keeper. |
| Fees | CollectProtocolFee | Barrido de comisiones de protocolo por parte del admin. |
| Fees | CollectFundFee | Barrido de comisiones de fondo por parte del admin. |
| Rewards | InitializeReward | Adjunta un nuevo flujo de recompensas a un pool. |
| Rewards | SetRewardParams | Cambia la tasa de emisión o el final de una recompensa existente. |
| Rewards | UpdateRewardInfos | Liquida el crecimiento de recompensas hasta ahora (llamado por cualquier swap o cambio de posición). |
| Rewards | TransferRewardOwner | Transfiere la autoridad que puede configurar o recargar un flujo de recompensas. |
| Rewards | CollectRemainingRewards | Tras el end_time de un flujo de recompensas, recupera los tokens no asignados para el financiador. |
| Utility | InitTickArray | Inicializa una cuenta de tick array (frecuentemente agrupada con OpenPosition). |
La mayoría de las instrucciones solo para admins (CreateAmmConfig, UpdateAmmConfig, UpdatePoolStatus, CreateSupportMintAssociated, CreateOperationAccount, UpdateOperationAccount, CloseProtocolPosition) están protegidas por la clave pública admin codificada en el programa. Las instrucciones de admin de flujos de recompensas (TransferRewardOwner, CollectRemainingRewards) están protegidas por el financiador de la recompensa, no por el admin del programa.
El sufijo V2 significa “admite Token-2022 en vaults / NFT, requiere la ranura de extensión bitmap”. El SDK usa V2 por defecto para nuevos pools.
CreatePool
Argumentos
sqrt_price_x64: u128 // precio inicial
open_time: u64 // los swaps se rechazan antes de este tiempo
Cuentas (resumen)
| # | Nombre | W | S | Notas |
|---|
| 1 | pool_creator | W | S | |
| 2 | amm_config | | | Nivel de comisión elegido. |
| 3 | pool_state | W | | init aquí. |
| 4 | token_mint_0 | | | Ordenado. |
| 5 | token_mint_1 | | | |
| 6 | token_vault_0 | W | | init aquí, propiedad de la PDA de autoridad del pool. |
| 7 | token_vault_1 | W | | |
| 8 | observation_state | W | | init aquí. |
| 9 | tick_array_bitmap_extension | W | | init aquí (V2). |
| 10 | token_program | | | |
| 11 | token_program_2022 | | | |
| 12 | system_program, rent | | | |
Precondiciones
token_mint_0 < token_mint_1 por orden de bytes.
amm_config.disable_create_pool == false.
- Los mints no están rechazados por la lista de permitidos de extensiones Token-2022.
Postcondiciones
pool_state.sqrt_price_x64 = sqrt_price_x64, tick_current = floor(log_{1.0001}(price)).
pool_state.liquidity = 0 (sin posiciones todavía).
pool_state.fee_on = FromInput (valor predeterminado heredado).
pool_state.dynamic_fee_info se inicializa en cero (comisión dinámica desactivada).
CreateCustomizablePool
Recomendado para nuevos pools. Tiene el mismo efecto que CreatePool más el modo de cobro de comisiones por pool y una activación opcional de comisión dinámica.
Argumentos
pub struct CreateCustomizableParams {
pub sqrt_price_x64: u128,
pub collect_fee_on: CollectFeeOn, // FromInput | Token0Only | Token1Only
pub enable_dynamic_fee: bool,
}
Cuentas (resumen) — iguales a CreatePool más, cuando enable_dynamic_fee = true:
| # | Nombre | W | S | Notas |
|---|
| N | dynamic_fee_config | | | La configuración compartida de la que se toma la instantánea. Debe existir previamente. |
Precondiciones — iguales a CreatePool. Si enable_dynamic_fee = false, dynamic_fee_config se ignora.
Postcondiciones
pool_state.fee_on se establece según la variante CollectFeeOn elegida.
- Si se activó la comisión dinámica:
pool_state.dynamic_fee_info se inicializa desde el DynamicFeeConfig proporcionado (se copian los cinco parámetros de calibración; los campos de estado se ponen a cero).
- De lo contrario:
pool_state.dynamic_fee_info se pone a cero (= comisión dinámica inactiva permanentemente para este pool).
fee_on y el bit de activación de comisión dinámica se establecen únicamente en la creación del pool. No existe una actualización en el lugar: los pools creados con el CreatePool heredado no pueden obtener retroactivamente comisión dinámica ni comisión unilateral. Los nuevos despliegues deben usar esta instrucción por defecto.
OpenPositionV2 / OpenPositionWithToken22Nft
Crea una nueva posición dentro de un pool existente.
Argumentos
tick_lower_index: i32
tick_upper_index: i32
tick_array_lower_start_index: i32
tick_array_upper_start_index: i32
liquidity: u128 // L deseado (o 0 para usar los amounts siguientes)
amount_0_max: u64
amount_1_max: u64
with_metadata: bool // escribir metadatos del NFT (Metaplex)
base_flag: Option<bool> // true = ajustar a amount0; false = ajustar a amount1
Cuentas (resumen)
| # | Nombre | W | S | |
|---|
| 1 | payer | W | S | |
| 2 | position_nft_owner | | | |
| 3 | position_nft_mint | W | S (keypair) | |
| 4 | position_nft_account | W | | ATA del dueño para el NFT. |
| 5 | metadata_account | W | | Metaplex (opcional, si with_metadata). |
| 6 | pool_state | W | | |
| 7 | protocol_position | | | |
| 8 | tick_array_lower | W | | Se crea si no está inicializado. |
| 9 | tick_array_upper | W | | Igual. |
| 10 | personal_position | W | | Se crea aquí. |
| 11 | token_account_0, token_account_1 | W | | ATAs de origen del usuario. |
| 12 | token_vault_0, token_vault_1 | W | | |
| 13 | rent, system_program, token_program | | | |
| 14 | associated_token_program | | | |
| 15 | metadata_program | | | Opcional. |
| 16 | token_program_2022 | | | V2. |
| 17 | vault_0_mint, vault_1_mint | | | V2. |
| 18 | tick_array_bitmap_extension | W | | V2 (si se toca). |
Matemática — ver products/clmm/math. Dado base_flag, el programa resuelve liquidity o (amount_0_max, amount_1_max) para obtener el L real y los amounts de tokens consumidos.
Precondiciones
tick_lower < tick_upper, ambos múltiplos de pool.tick_spacing, dentro de [MIN_TICK, MAX_TICK].
- Los tick arrays requeridos se pasan y están inicializados (o se crean aquí vía CPI
InitTickArray en la transacción).
- El usuario tiene al menos
amount_0_max y amount_1_max en las ATAs de origen.
Postcondiciones
personal_position existe, liquidity establecido, fee_growth_inside_last registrado como instantánea.
- Las entradas del tick array en
tick_lower y tick_upper se actualizan (liquidity_gross += L, liquidity_net ± L, instantáneas de crecimiento de comisiones mantenidas).
pool_state.liquidity += L si la posición está en rango (tick_lower ≤ tick_current < tick_upper).
Errores comunes — InvalidTickIndex, NotApproved, ZeroAmountSpecified, TransactionTooLarge (si hay demasiados tick arrays).
IncreaseLiquidityV2
Agrega liquidez a una posición ya abierta.
Argumentos
liquidity: u128
amount_0_max: u64
amount_1_max: u64
base_flag: Option<bool>
Cuentas — igual que OpenPosition sin el mint del NFT (la posición ya existe; el NFT se pasa como la ATA del dueño que contiene 1 token).
Efecto
- Transfiere
amount_0_actual / amount_1_actual del usuario a los vaults.
- Incrementa
personal_position.liquidity y pool_state.liquidity (si está en rango), así como liquidity_gross / liquidity_net de los ticks extremos.
- Cobra las comisiones y recompensas pendientes desde el último toque y las acredita en
tokens_fees_owed_{0,1} / reward_amount_owed. Estos montos solo se pagan en DecreaseLiquidity o CollectReward, no al incrementar.
DecreaseLiquidityV2
Retira liquidez de una posición.
Argumentos
liquidity: u128
amount_0_min: u64
amount_1_min: u64
Cuentas — misma forma que IncreaseLiquidity.
Efecto
- Calcula
(amount_0, amount_1) para el L retirado dado el sqrt_price_x64 actual.
- Liquida las comisiones y recompensas acumuladas desde el último toque, igual que
IncreaseLiquidity.
- Transfiere
amount_0 + fees_owed_0 y amount_1 + fees_owed_1 de los vaults al usuario.
- Decrementa los contadores de liquidez; si el nuevo
personal_position.liquidity == 0, la posición es elegible para ClosePosition.
Slippage — amount_0_min y amount_1_min son los mínimos que el usuario acepta neto de las comisiones de transferencia Token-2022 en el lado de salida.
ClosePosition
Quema el NFT de posición y cierra PersonalPositionState.
Precondiciones
personal_position.liquidity == 0.
tokens_fees_owed_{0,1} == 0.
- Todos los contadores de recompensas
reward_amount_owed == 0.
(Es decir, primero cobra todo y reduce a cero.)
Efecto
- Quema el NFT.
- Cierra la cuenta del mint del NFT y la cuenta
personal_position, devolviendo el alquiler al payer.
SwapV2
Recorre la curva de liquidez; entrada exacta o salida exacta según is_base_input.
Argumentos
amount: u64 // entrada si is_base_input=true, salida en caso contrario
other_amount_threshold: u64 // mínimo de salida o máximo de entrada
sqrt_price_limit_x64: u128 // límite estricto; 0 ⇒ sin límite
is_base_input: bool
Cuentas (resumen)
| # | Nombre | W | S | Notas |
|---|
| 1 | payer | | S | |
| 2 | amm_config | | | |
| 3 | pool_state | W | | |
| 4 | input_token_account | W | | |
| 5 | output_token_account | W | | |
| 6 | input_vault | W | | |
| 7 | output_vault | W | | |
| 8 | observation_state | W | | |
| 9 | token_program | | | |
| 10 | token_program_2022 | | | V2. |
| 11 | memo_program | | | V2 (requerido para algunas rutas Token-2022). |
| 12 | input_vault_mint, output_vault_mint | | | V2. |
| 13 | tick_array_bitmap_extension (opcional) | W | | Si el swap entra en la extensión. |
| 14+ | tick_array (restantes) | W | | Suficientes arrays para cubrir el rango esperado del recorrido. |
Los callers pasan una lista ordenada de tick arrays que cubren el recorrido esperado del swap; el programa usa los que necesite. El SDK calcula esta lista mediante PoolUtils.computeAmountOutFormat o el endpoint de cotización de la API.
Precondiciones
pool_state.status permite el swap.
now >= open_time.
sqrt_price_limit_x64 está en el lado correcto de sqrt_price_x64 según la dirección.
Errores comunes — ExceededSlippage, SqrtPriceLimitOverflow, TickArrayNotFound, LiquidityInsufficient.
Lo que SwapV2 hace internamente y que los callers deben saber (versión post-2025):
- Recargo por comisión dinámica — si
pool.dynamic_fee_info es distinto de cero, el programa actualiza el acumulador de volatilidad usando la distancia en ticks recorrida desde el último swap (con las reglas de filtrado/decaimiento de products/clmm/fees) y suma un dynamic_fee_component sobre AmmConfig.trade_fee_rate. La comisión total está limitada al 10% (MAX_FEE_RATE_NUMERATOR / 1_000_000).
- Coincidencia de órdenes límite — cuando el recorrido de precio cruza un tick que tiene órdenes límite abiertas, el programa primero completa la liquidez de las órdenes límite disponibles en ese tick (FIFO por
order_phase) y luego continúa por la curva de liquidez LP. Los amounts ejecutados actualizan tick.unfilled_ratio_x64 y tick.part_filled_orders_remaining para liquidación posterior; las órdenes permanecen sin pagar hasta que su dueño llame a SettleLimitOrder.
- Enrutamiento de comisión unilateral — cuando
pool.fee_on = Token0Only o Token1Only, el paso del swap calcula el mismo intercambio entrada-salida; la comisión se enruta luego al lado configurado. En las direcciones donde el lado de comisión configurado es la salida, la comisión se deduce del output del swap (el usuario recibe out − fee); en las direcciones donde es la entrada, el comportamiento coincide con FromInput. Ver is_fee_on_input(zero_for_one) y is_fee_on_token0(zero_for_one) en PoolState.
Swap (V1) implementa la misma comisión dinámica, enrutamiento de comisión unilateral y coincidencia de órdenes límite que SwapV2; la única característica que le falta es el soporte de Token-2022: ambos vaults deben ser SPL Token clásico. Los pools con cualquier mint Token-2022 deben operarse vía SwapV2. El agregador y el SDK ya prefieren V2 para cada tramo CLMM, por lo que los callers no necesitan ramificar según el tipo de mint.
OpenLimitOrder
Coloca una orden de venta en un tick específico. La orden se sitúa en una cola FIFO por tick y se ejecuta a medida que el precio la atraviesa.
Argumentos
nonce_index: u8 // índice de cuenta-nonce elegido por el usuario (0..255 por wallet)
zero_for_one: bool // true: vender token0 por token1; false: vender token1 por token0
tick_index: i32 // debe ser múltiplo de pool.tick_spacing
amount: u64 // cantidad del token de entrada
Cuentas (resumen)
| # | Nombre | W | S | Notas |
|---|
| 1 | payer | W | S | Dueño de la orden; paga el alquiler. |
| 2 | pool_state | W | | |
| 3 | tick_array | W | | El tick array que contiene tick_index. |
| 4 | limit_order_nonce | W | | PDA. init_if_needed — se crea en la primera orden del usuario bajo este nonce_index. |
| 5 | limit_order | W | | PDA. init aquí. |
| 6 | input_token_account | W | | ATA de entrada del usuario. |
| 7 | input_vault | W | | Vault de entrada del pool. |
| 8 | input_vault_mint | | | Manejo de comisiones Token-2022. |
| 9 | input_token_program | | | SPL o Token-2022. |
| 10 | system_program, rent | | | |
Precondiciones
tick_index % pool.tick_spacing == 0 y dentro de [MIN_TICK, MAX_TICK].
tick_index está en el lado correcto de pool.tick_current para la dirección elegida (al vender token0 → el tick debe estar por encima del actual, y viceversa). Vender en un tick ya cruzado se ejecutaría de inmediato y es rechazado.
pool_state.status permite la operación de orden límite (bit 5).
Postcondiciones
limit_order existe, registrando tick.order_phase y tick.unfilled_ratio_x64 al momento de apertura.
tick.orders_amount += amount (en la cohorte actual).
limit_order_nonce.order_nonce += 1.
- Se emite
OpenLimitOrderEvent.
Errores comunes — InvalidLimitOrderAmount (cero o por debajo del mínimo del pool), InvalidTickIndex (fuera de [MIN_TICK, MAX_TICK], o en el lado incorrecto de tick_current para la dirección elegida), TickAndSpacingNotMatch (tick_index % pool.tick_spacing != 0), OrderPhaseSaturated.
IncreaseLimitOrder
Agrega monto a una orden abierta existente. Solo puede ser llamado por el owner de la orden.
Argumentos
amount: u64 // cantidad adicional del token de entrada
Cuentas — igual que OpenLimitOrder sin la cuenta nonce; la PDA limit_order se pasa directamente.
Precondiciones
limit_order.owner == signer.
- La orden sigue en la misma cohorte (
tick.order_phase == limit_order.order_phase). Si la cohorte ya comenzó a ejecutarse, la orden está parcialmente liquidada: el caller debería llamar primero a DecreaseLimitOrder o SettleLimitOrder para avanzar.
Efecto
- Transfiere
amount desde la ATA del dueño al input_vault.
limit_order.total_amount += amount; tick.orders_amount += amount.
DecreaseLimitOrder
Reduce o cancela completamente una orden abierta. Devuelve el remanente sin ejecutar al dueño, más cualquier output ya liquidado por ejecuciones parciales anteriores.
Argumentos
amount: u64 // cantidad del token de entrada a retirar (máx. = remanente sin ejecutar)
amount_min: u64 // piso de slippage en el retiro del lado de entrada
Cuentas — ambos lados de token, entrada y salida:
| # | Nombre | W | S |
|---|
| 1 | owner | | S |
| 2 | pool_state | W | |
| 3 | tick_array | W | |
| 4 | limit_order | W | |
| 5 | input_token_account | W | |
| 6 | output_token_account | W | |
| 7 | input_vault | W | |
| 8 | output_vault | W | |
| 9 | input_vault_mint, output_vault_mint | | |
| 10 | token_program, token_program_2022 | | |
Efecto
- Recalcula el amount ejecutado de la orden a partir del
unfilled_ratio_x64 de la cohorte desde la apertura.
- Envía el output ejecutado a
output_token_account.
- Devuelve
amount de la entrada sin ejecutar a input_token_account.
- Actualiza
limit_order en consecuencia. Si el nuevo remanente sin ejecutar es cero, el programa cierra la cuenta y devuelve el alquiler al owner.
SettleLimitOrder
Envía los tokens de output ejecutados al dueño sin cambiar el remanente sin ejecutar de la orden. Útil cuando los keepers de auto_withdraw quieren pagar de forma gradual ejecuciones parciales prolongadas.
Caller — el owner de la orden o el limit_order_admin del programa (una billetera caliente operacional fuera de la cadena que ejecuta un bucle de keeper automatizado). El keeper no tiene otra autoridad: no puede mover fondos del usuario más allá de enviar el output ejecutado a la ATA del owner de la orden.
Cuentas
| # | Nombre | W | S | |
|---|
| 1 | signer | | S | dueño o limit_order_admin |
| 2 | pool_state | | | |
| 3 | tick_array | | | |
| 4 | limit_order | W | | |
| 5 | output_token_account | W | | ATA de salida del dueño. |
| 6 | output_vault | W | | Vault de salida del pool. |
| 7 | output_vault_mint | | | |
| 8 | output_token_program | | | |
Efecto
- Calcula el output acumulado adeudado usando
(limit_order.unfilled_ratio_x64, tick.unfilled_ratio_x64).
- Transfiere el delta a
output_token_account.
- Actualiza
limit_order.settled_output.
- No cierra la orden; sigue abierta frente a cualquier entrada restante.
CloseLimitOrder
Cierra una cuenta de orden completamente consumida. El alquiler siempre se devuelve a limit_order.owner independientemente de quién firme.
Caller — el owner o el limit_order_admin.
Precondiciones
- La orden tiene remanente sin ejecutar igual a cero (ya sea porque
amount == total_amount fue ejecutado y liquidado, o porque el dueño redujo previamente la orden a cero y olvidó cerrarla).
Efecto
- Cierra
limit_order; el alquiler se envía a limit_order.owner.
CreateDynamicFeeConfig (admin)
Crea un conjunto de parámetros reutilizable bajo un índice u16.
Argumentos
index: u16
filter_period: u16 // segundos; p. ej. 30
decay_period: u16 // segundos; p. ej. 600. Debe ser > filter_period
reduction_factor: u16 // 1..10_000; p. ej. 5_000 = 50% de retención por ventana de decaimiento
dynamic_fee_control: u32 // 1..100_000; ganancia en la curva volatilidad-comisión
max_volatility_accumulator: u32 // techo
Cuentas
| # | Nombre | W | S | Notas |
|---|
| 1 | owner | W | S | Clave pública de admin codificada. |
| 2 | dynamic_fee_config | W | | PDA, init aquí. |
| 3 | system_program | | | |
Errores comunes — InvalidDynamicFeeConfigParams si decay_period <= filter_period o algún campo con valor 0 está fuera de los límites.
UpdateDynamicFeeConfig (admin)
Modifica un DynamicFeeConfig existente. Los pools que ya tomaron una instantánea de la configuración en el momento de su creación no se actualizan retroactivamente; solo los pools recién creados que referencien esta configuración obtendrán los nuevos valores.
Argumentos — los mismos cinco campos de calibración que CreateDynamicFeeConfig (filter_period, decay_period, reduction_factor, dynamic_fee_control, max_volatility_accumulator); el index se fija en la creación y no se vuelve a pasar aquí.
CollectProtocolFee / CollectFundFee
Tienen la misma forma que CollectProtocolFee / CollectFundFee de CPMM. El firmante debe coincidir con AmmConfig.owner / AmmConfig.fund_owner. Barre las comisiones de protocolo/fondo acumuladas de los vaults del pool hacia un destinatario, poniendo a cero los campos PoolState.protocol_fees_* / fund_fees_* correspondientes.
InitializeReward
Adjunta un nuevo flujo de recompensas a un pool. Pueden estar activos hasta 3 flujos simultáneamente.
Argumentos
open_time: u64
end_time: u64
emissions_per_second_x64: u128 // Q64.64
Cuentas
| # | Nombre | W | S | |
|---|
| 1 | reward_funder | W | S | |
| 2 | funder_token_account | W | | |
| 3 | amm_config | | | |
| 4 | pool_state | W | | |
| 5 | operation_state | | | PDA de estado de operaciones CLMM que controla la creación de recompensas. |
| 6 | reward_token_mint | | | |
| 7 | reward_token_vault | W | | init aquí. |
| 8 | reward_token_program | | | |
| 9 | system_program, rent | | | |
Precondiciones
- Menos de 3 flujos activos actualmente en el pool.
- El financiador deposita
total_emission = emissions_per_second × (end_time − open_time) en tokens de recompensa en el vault como parte de esta instrucción.
- Mint de recompensa en la lista blanca según
operation_state.
SetRewardParams
Extiende, recarga o cambia la tasa de emisión de un flujo de recompensas existente. Normalmente es llamado por el creador del pool o el multisig de Raydium. Las restricciones están en cadena: generalmente puedes extender end_time o aumentar las emisiones, pero no reducirlas retroactivamente. Consulta la lista de propietarios de operation_state.
UpdateRewardInfos
Contabilidad pura: liquida reward_growth_global_x64 al tiempo actual multiplicando emissions_per_second × Δt / liquidity. Es llamado internamente por cada instrucción que toca la liquidez. Se expone como instrucción independiente porque actores externos (interfaces, cranks) a veces quieren activarla.
CollectReward
El dueño de la posición reclama los tokens de recompensa adeudados.
Cuentas
| # | Nombre | W | S | |
|---|
| 1 | nft_owner | | S | |
| 2 | nft_account | | | ATA del dueño que contiene el NFT de posición. |
| 3 | personal_position | W | | |
| 4 | pool_state | W | | |
| 5 | protocol_position | | | |
| 6 | reward_token_vault | W | | |
| 7 | recipient_token_account | W | | |
| 8 | token_program | | | |
| 9 | token_program_2022 | | | |
Efecto
- Liquida el crecimiento de recompensas (mismo patrón que las comisiones).
- Transfiere el monto adeudado a la ATA destinataria, poniendo
reward_amount_owed[i] a cero.
Matriz de cambios de estado
| Instrucción | pool.liquidity | pool.fee_growth_global | pool.reward_growth_global | personal_position.liquidity | Tick array |
|---|
CreatePool | 0 | 0 | — | — | — |
OpenPosition | + si en rango | — | — | nuevo | agrega liquidity_gross/net |
IncreaseLiquidity | + si en rango | liquida adeudado | liquida adeudado | + | ajusta |
DecreaseLiquidity | − si en rango | liquida adeudado | liquida adeudado | − | ajusta |
ClosePosition | — | — | — | destruido | — |
SwapV2 | ± en cruces | + | — | — | cruza y voltea outside; coincide cohortes de órdenes límite |
OpenLimitOrder | — | — | — | — | orders_amount += amount en el tick objetivo |
IncreaseLimitOrder | — | — | — | — | orders_amount += amount |
DecreaseLimitOrder | — | — | — | — | orders_amount -=, puede cerrar cohorte |
SettleLimitOrder | — | — | — | — | — (solo lectura en tick) |
CloseLimitOrder | — | — | — | — | — |
CreateCustomizablePool | 0 | 0 | — | — | — |
UpdateRewardInfos | — | — | + | — | — |
CollectReward | — | — | liquida adeudado | — | — |
Siguientes pasos
Fuentes: