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 complementa products/clmm/accounts (o que são as contas) e products/clmm/math (como funciona a matemática). É a referência definitiva para argumentos e ordenação de contas; os layouts de bytes específicos vêm do IDL.
Inventário de instruções
| Grupo | Instrução | Observações |
|---|
| Admin | CreateAmmConfig | Define um novo nível de taxa. |
| Admin | UpdateAmmConfig | Altera as taxas de um nível existente. |
| Admin | UpdatePoolStatus | Pausa/retoma operações em um pool. |
| Admin | CreateSupportMintAssociated | Adiciona uma configuração de extensão de mint Token-2022 à lista de permissões para uso em pools CLMM. |
| Admin | CreateOperationAccount | Inicializa a conta de operação em nível de programa (uma única vez). |
| Admin | UpdateOperationAccount | Modifica a whitelist da conta de operação. |
| Admin | CreateDynamicFeeConfig | Cria um conjunto de parâmetros de taxa dinâmica reutilizável sob um índice u16. |
| Admin | UpdateDynamicFeeConfig | Modifica um DynamicFeeConfig existente. Pools que já capturaram o snapshot não são afetados. |
| Pool | CreatePool | Inicializa um pool CLMM vinculado a um AmmConfig. Caminho de taxa padrão FromInput. Coexiste com CreateCustomizablePool. |
| Pool | CreateCustomizablePool | Recomendado para novos pools. Mesmo formato que CreatePool, com collect_fee_on e uma flag opcional enable_dynamic_fee. |
| Posição | OpenPosition / OpenPositionV2 / OpenPositionWithToken22Nft | Cria um NFT de posição. OpenPositionV2 substitui a V1 (layout de conta mais recente com o slot de extensão de bitmap); OpenPositionWithToken22Nft emite o NFT de posição como Token-2022 em vez de SPL Token. Novo código deve usar V2 ou a variante Token-2022. |
| Posição | IncreaseLiquidity / IncreaseLiquidityV2 | Adiciona liquidez a uma posição existente. |
| Posição | DecreaseLiquidity / DecreaseLiquidityV2 | Remove liquidez; coleta as taxas devidas. |
| Posição | ClosePosition | Queima o NFT e fecha o PersonalPositionState. |
| Posição | CloseProtocolPosition | Varredura exclusiva do admin para PDAs legados ProtocolPositionState. O programa atual não cria nem lê ProtocolPositionState — esta instrução existe apenas para recuperar rent em contas criadas por versões mais antigas do programa. |
| Swap | Swap / SwapV2 | Swap com liquidez constante. Ambas as variantes aplicam taxa dinâmica, roteamento de taxa unilateral e correspondência de ordens limitadas; a única diferença é que SwapV2 aceita mints Token-2022 (a variante V1 exige que ambos os vaults sejam SPL Token clássico). |
| Swap | SwapRouterBaseIn | Multi-hop, usado pelo roteador. |
| Ordem limitada | OpenLimitOrder | Coloca uma ordem de venda em um tick. Os tokens não preenchidos ficam no tick; o mecanismo de correspondência os preenche à medida que o preço cruza. |
| Ordem limitada | IncreaseLimitOrder | Aumenta uma ordem aberta existente. |
| Ordem limitada | DecreaseLimitOrder | Reduz ou cancela uma ordem aberta; paga o saldo não preenchido mais qualquer saída já liquidada. |
| Ordem limitada | SettleLimitOrder | Envia tokens de saída preenchidos ao dono da ordem. Pode ser chamado pelo dono ou pelo keeper operacional. |
| Ordem limitada | CloseLimitOrder | Fecha uma conta de ordem totalmente consumida. O rent sempre retorna ao owner da ordem. Pode ser chamado pelo dono ou pelo keeper. |
| Taxas | CollectProtocolFee | Varredura admin das taxas de protocolo. |
| Taxas | CollectFundFee | Varredura admin das taxas de fundo. |
| Recompensas | InitializeReward | Anexa um novo fluxo de recompensa a um pool. |
| Recompensas | SetRewardParams | Altera a taxa de emissão/término de uma recompensa existente. |
| Recompensas | UpdateRewardInfos | Liquida o crescimento de recompensas até o momento atual (chamado por qualquer swap/alteração de posição). |
| Recompensas | TransferRewardOwner | Transfere a autoridade que pode configurar ou recarregar um fluxo de recompensa. |
| Recompensas | CollectRemainingRewards | Após o end_time de um fluxo de recompensa, envia de volta ao financiador quaisquer tokens não alocados. |
| Utilitário | InitTickArray | Inicializa uma conta de tick-array (frequentemente agrupada com OpenPosition). |
A maioria das instruções exclusivas de admin (CreateAmmConfig, UpdateAmmConfig, UpdatePoolStatus, CreateSupportMintAssociated, CreateOperationAccount, UpdateOperationAccount, CloseProtocolPosition) é controlada pela chave pública admin embutida no programa. As instruções de admin de fluxo de recompensa (TransferRewardOwner, CollectRemainingRewards) são controladas pelo financiador da recompensa, não pelo admin do programa.
O sufixo V2 significa “suporta Token-2022 em vaults/NFT e exige o slot de extensão de bitmap”. O SDK usa V2 por padrão para novos pools.
CreatePool
Argumentos
sqrt_price_x64: u128 // preço inicial
open_time: u64 // swaps rejeitados antes deste horário
Contas (resumido)
| # | Nome | W | S | Observações |
|---|
| 1 | pool_creator | W | S | |
| 2 | amm_config | | | Nível de taxa escolhido. |
| 3 | pool_state | W | | init aqui. |
| 4 | token_mint_0 | | | Ordenado. |
| 5 | token_mint_1 | | | |
| 6 | token_vault_0 | W | | init aqui, pertencente ao PDA de autoridade do pool. |
| 7 | token_vault_1 | W | | |
| 8 | observation_state | W | | init aqui. |
| 9 | tick_array_bitmap_extension | W | | init aqui (V2). |
| 10 | token_program | | | |
| 11 | token_program_2022 | | | |
| 12 | system_program, rent | | | |
Pré-condições
token_mint_0 < token_mint_1 por ordem de bytes.
amm_config.disable_create_pool == false.
- Os mints não são rejeitados pela lista de permissões de extensão Token-2022.
Pós-condições
pool_state.sqrt_price_x64 = sqrt_price_x64, tick_current = floor(log_{1.0001}(price)).
pool_state.liquidity = 0 (nenhuma posição ainda).
pool_state.fee_on = FromInput (padrão legado).
pool_state.dynamic_fee_info é zerado (taxa dinâmica desativada).
CreateCustomizablePool
Recomendado para novos pools. Tem o mesmo efeito que CreatePool, com adição do modo de coleta de taxa por pool e uma opção de taxa dinâmica.
Argumentos
pub struct CreateCustomizableParams {
pub sqrt_price_x64: u128,
pub collect_fee_on: CollectFeeOn, // FromInput | Token0Only | Token1Only
pub enable_dynamic_fee: bool,
}
Contas (resumido) — mesmas que CreatePool, acrescidas de, quando enable_dynamic_fee = true:
| # | Nome | W | S | Observações |
|---|
| N | dynamic_fee_config | | | A configuração compartilhada da qual fazer snapshot. Deve já existir. |
Pré-condições — mesmas que CreatePool. Se enable_dynamic_fee = false, dynamic_fee_config é ignorado.
Pós-condições
pool_state.fee_on definido para a variante CollectFeeOn escolhida.
- Se a taxa dinâmica foi habilitada:
pool_state.dynamic_fee_info é inicializado a partir do DynamicFeeConfig fornecido (cinco parâmetros de calibração copiados; campos de estado zerados).
- Caso contrário:
pool_state.dynamic_fee_info é zerado (= taxa dinâmica inativa permanentemente para este pool).
fee_on e o bit de habilitação de taxa dinâmica são definidos apenas na criação do pool. Não há atualização in-place — pools criados via CreatePool legado não podem adquirir taxa dinâmica ou taxa unilateral retroativamente. Novas implantações devem usar esta instrução por padrão.
OpenPositionV2 / OpenPositionWithToken22Nft
Cria uma nova posição dentro de um 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 desejado (ou 0 para usar os valores abaixo)
amount_0_max: u64
amount_1_max: u64
with_metadata: bool // gravar metadados do NFT (Metaplex)
base_flag: Option<bool> // true = ajustar ao amount0; false = ajustar ao amount1
Contas (resumido)
| # | Nome | W | S | |
|---|
| 1 | payer | W | S | |
| 2 | position_nft_owner | | | |
| 3 | position_nft_mint | W | S (keypair) | |
| 4 | position_nft_account | W | | ATA do dono para o NFT. |
| 5 | metadata_account | W | | Metaplex (opcional, se with_metadata). |
| 6 | pool_state | W | | |
| 7 | protocol_position | | | |
| 8 | tick_array_lower | W | | Criado se não inicializado. |
| 9 | tick_array_upper | W | | Idem. |
| 10 | personal_position | W | | Criado aqui. |
| 11 | token_account_0, token_account_1 | W | | ATAs de origem do usuário. |
| 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 (se acionado). |
Matemática — consulte products/clmm/math. A partir de base_flag, o programa resolve liquidity ou (amount_0_max, amount_1_max) no L real e nos valores reais de tokens consumidos.
Pré-condições
tick_lower < tick_upper, ambos múltiplos de pool.tick_spacing, dentro de [MIN_TICK, MAX_TICK].
- Tick arrays necessários passados e inicializados (ou criados aqui via CPI
InitTickArray na transação).
- O usuário tem pelo menos
amount_0_max e amount_1_max nas ATAs de origem.
Pós-condições
personal_position existe, liquidity definido, fee_growth_inside_last com snapshot capturado.
- Entradas de tick-array em
tick_lower e tick_upper atualizadas (liquidity_gross += L, liquidity_net ± L, snapshots de crescimento de taxa mantidos).
pool_state.liquidity += L se a posição estiver no intervalo (tick_lower ≤ tick_current < tick_upper).
Erros comuns — InvalidTickIndex, NotApproved, ZeroAmountSpecified, TransactionTooLarge (se houver tick arrays demais).
IncreaseLiquidityV2
Adiciona liquidez a uma posição já aberta.
Argumentos
liquidity: u128
amount_0_max: u64
amount_1_max: u64
base_flag: Option<bool>
Contas — semelhante a OpenPosition, sem o mint do NFT (a posição já existe; o NFT é passado como a ATA do dono que contém 1 token).
Efeito
- Transfere
amount_0_actual / amount_1_actual do usuário para os vaults.
- Incrementa
personal_position.liquidity e pool_state.liquidity (se estiver no intervalo), além dos valores liquidity_gross / liquidity_net dos ticks extremos.
- Coleta taxas e recompensas devidas desde o último toque e as credita em
tokens_fees_owed_{0,1} / reward_amount_owed. Esses valores são pagos apenas em DecreaseLiquidity ou CollectReward, não no aumento.
DecreaseLiquidityV2
Remove liquidez de uma posição.
Argumentos
liquidity: u128
amount_0_min: u64
amount_1_min: u64
Contas — mesmo formato que IncreaseLiquidity.
Efeito
- Calcula
(amount_0, amount_1) para o L removido com base no sqrt_price_x64 atual.
- Liquida as taxas/recompensas acumuladas desde o último toque, da mesma forma que
IncreaseLiquidity.
- Transfere
amount_0 + fees_owed_0 e amount_1 + fees_owed_1 dos vaults para o usuário.
- Decrementa os contadores de liquidez; se o novo
personal_position.liquidity == 0, a posição é elegível para ClosePosition.
Slippage — amount_0_min e amount_1_min são os mínimos aceitos pelo usuário, líquidos das taxas de transferência Token-2022 no lado de saída.
ClosePosition
Queima o NFT de posição e fecha o PersonalPositionState.
Pré-condições
personal_position.liquidity == 0.
tokens_fees_owed_{0,1} == 0.
- Todos os contadores de recompensa
reward_amount_owed == 0.
(Ou seja, colete tudo e reduza para zero primeiro.)
Efeito
- Queima o NFT.
- Fecha a conta do mint do NFT e a conta
personal_position, devolvendo o rent ao payer.
SwapV2
Percorre a curva de liquidez; entrada exata ou saída exata, dependendo de is_base_input.
Argumentos
amount: u64 // entrada se is_base_input=true, saída caso contrário
other_amount_threshold: u64 // mínimo de saída ou máximo de entrada
sqrt_price_limit_x64: u128 // limite rígido; 0 ⇒ sem limite
is_base_input: bool
Contas (resumido)
| # | Nome | W | S | Observações |
|---|
| 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 (obrigatório para alguns caminhos Token-2022). |
| 12 | input_vault_mint, output_vault_mint | | | V2. |
| 13 | tick_array_bitmap_extension (opcional) | W | | Se o swap avançar para a extensão. |
| 14+ | tick_array (restantes) | W | | Arrays suficientes para cobrir o intervalo esperado do percurso. |
Os chamadores passam uma lista ordenada de tick arrays cobrindo o percurso esperado do swap; o programa usa quantos forem necessários. O SDK calcula essa lista via PoolUtils.computeAmountOutFormat ou o endpoint de cotação da API.
Pré-condições
pool_state.status permite swap.
now >= open_time.
sqrt_price_limit_x64 está no lado correto de sqrt_price_x64 para a direção escolhida.
Erros comuns — ExceededSlippage, SqrtPriceLimitOverflow, TickArrayNotFound, LiquidityInsufficient.
O que SwapV2 faz internamente e que os chamadores devem saber (versão pós-2025):
- Sobretaxa dinâmica — se
pool.dynamic_fee_info for diferente de zero, o programa atualiza o acumulador de volatilidade usando a distância de tick percorrida desde o último swap (com as regras de filtro/decaimento de products/clmm/fees) e adiciona um dynamic_fee_component sobre AmmConfig.trade_fee_rate. A taxa total é limitada a 10% (MAX_FEE_RATE_NUMERATOR / 1_000_000).
- Correspondência de ordens limitadas — quando o percurso de preço cruza um tick que contém ordens limitadas abertas, o programa preenche primeiro a liquidez disponível de ordens limitadas naquele tick (FIFO por
order_phase), e depois continua ao longo da curva de liquidez do LP. Os valores preenchidos atualizam tick.unfilled_ratio_x64 e tick.part_filled_orders_remaining para liquidação posterior; as próprias ordens permanecem pendentes até que o dono chame SettleLimitOrder.
- Roteamento de taxa unilateral — quando
pool.fee_on = Token0Only ou Token1Only, o passo de swap ainda calcula a mesma negociação entrada-saída; a taxa é então roteada para o lado configurado. Para direções em que o lado de taxa configurado é a saída, a taxa é deduzida da saída do swap (o usuário recebe out − fee); para direções em que é a entrada, o comportamento é igual ao FromInput. Veja is_fee_on_input(zero_for_one) e is_fee_on_token0(zero_for_one) em PoolState.
Swap (V1) implementa a mesma taxa dinâmica, roteamento de taxa unilateral e correspondência de ordens limitadas que SwapV2; a única funcionalidade ausente é o suporte a Token-2022 — ambos os vaults precisam ser SPL Token clássico. Pools com qualquer mint Token-2022 devem ser negociados via SwapV2. O agregador e o SDK já preferem V2 para cada etapa CLMM, de modo que os chamadores não precisam verificar o tipo de mint.
OpenLimitOrder
Coloca uma ordem de venda em um tick específico. A ordem fica em uma fila FIFO por tick e é preenchida à medida que o preço passa.
Argumentos
nonce_index: u8 // índice de conta nonce escolhido pelo usuário (0..255 por carteira)
zero_for_one: bool // true: vende token0 por token1; false: vende token1 por token0
tick_index: i32 // deve ser múltiplo de pool.tick_spacing
amount: u64 // quantidade do token de entrada
Contas (resumido)
| # | Nome | W | S | Observações |
|---|
| 1 | payer | W | S | Dono da ordem; paga o rent. |
| 2 | pool_state | W | | |
| 3 | tick_array | W | | O tick array que contém tick_index. |
| 4 | limit_order_nonce | W | | PDA. init_if_needed — criado na primeira ordem do usuário sob este nonce_index. |
| 5 | limit_order | W | | PDA. init aqui. |
| 6 | input_token_account | W | | ATA de entrada do usuário. |
| 7 | input_vault | W | | Vault de entrada do pool. |
| 8 | input_vault_mint | | | Tratamento de taxa Token-2022. |
| 9 | input_token_program | | | SPL ou Token-2022. |
| 10 | system_program, rent | | | |
Pré-condições
tick_index % pool.tick_spacing == 0 e dentro de [MIN_TICK, MAX_TICK].
tick_index está no lado correto de pool.tick_current para a direção escolhida (vender token0 → tick deve estar acima do atual, e vice-versa). Vender em um tick já cruzado seria correspondido imediatamente e é rejeitado.
pool_state.status permite a operação de ordem limitada (bit 5).
Pós-condições
limit_order existe, com snapshot de tick.order_phase e tick.unfilled_ratio_x64 no momento da abertura.
tick.orders_amount += amount (no coorte atual).
limit_order_nonce.order_nonce += 1.
- Evento
OpenLimitOrderEvent emitido.
Erros comuns — InvalidLimitOrderAmount (zero ou abaixo do mínimo do pool), InvalidTickIndex (fora de [MIN_TICK, MAX_TICK] ou no lado errado de tick_current para a direção escolhida), TickAndSpacingNotMatch (tick_index % pool.tick_spacing != 0), OrderPhaseSaturated.
IncreaseLimitOrder
Aumenta uma ordem aberta existente. Só pode ser chamado pelo owner da ordem.
Argumentos
amount: u64 // quantidade adicional do token de entrada
Contas — semelhante a OpenLimitOrder, sem a conta nonce; o PDA limit_order é passado diretamente.
Pré-condições
limit_order.owner == signer.
- A ordem ainda está no mesmo coorte (
tick.order_phase == limit_order.order_phase). Se o coorte já começou a ser preenchido, a ordem está parcialmente liquidada — o chamador deve chamar DecreaseLimitOrder ou SettleLimitOrder primeiro para avançar.
Efeito
- Transfere
amount da ATA do dono para input_vault.
limit_order.total_amount += amount; tick.orders_amount += amount.
DecreaseLimitOrder
Reduz ou cancela completamente uma ordem aberta. Devolve o saldo não preenchido ao dono, mais qualquer saída já liquidada por preenchimentos parciais anteriores.
Argumentos
amount: u64 // quantidade do token de entrada a retirar (máx = saldo não preenchido)
amount_min: u64 // piso de slippage na retirada do lado de entrada
Contas — ambos os lados de token de entrada e saída:
| # | Nome | 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 | | |
Efeito
- Recalcula o valor preenchido da ordem a partir do
unfilled_ratio_x64 do coorte desde a abertura.
- Envia a saída preenchida para
output_token_account.
- Envia
amount da entrada não preenchida de volta para input_token_account.
- Atualiza
limit_order conforme necessário. Se o novo saldo não preenchido for zero, o programa fecha a conta e devolve o rent ao owner.
SettleLimitOrder
Envia tokens de saída preenchidos ao dono sem alterar o saldo não preenchido da ordem. Útil quando keepers auto_withdraw querem pagar preenchimentos parciais de longa duração em parcelas.
Chamador — o owner da ordem ou o limit_order_admin do programa (uma carteira operacional off-chain que executa um loop de keeper automatizado). O keeper não tem outra autoridade — não pode movimentar fundos de usuários além de enviar a saída preenchida para a ATA de owner da ordem.
Contas
| # | Nome | W | S | |
|---|
| 1 | signer | | S | owner ou limit_order_admin |
| 2 | pool_state | | | |
| 3 | tick_array | | | |
| 4 | limit_order | W | | |
| 5 | output_token_account | W | | ATA de saída do dono. |
| 6 | output_vault | W | | Vault de saída do pool. |
| 7 | output_vault_mint | | | |
| 8 | output_token_program | | | |
Efeito
- Calcula a saída acumulada devida usando
(limit_order.unfilled_ratio_x64, tick.unfilled_ratio_x64).
- Transfere o delta para
output_token_account.
- Atualiza
limit_order.settled_output.
- Não fecha a ordem; ela continua aberta para qualquer entrada restante.
CloseLimitOrder
Fecha uma conta de ordem totalmente consumida. O rent é sempre devolvido ao limit_order.owner, independentemente de quem assina.
Chamador — o owner ou o limit_order_admin.
Pré-condições
- A ordem tem saldo não preenchido zero (seja porque
amount == total_amount foi preenchido e liquidado, seja porque o dono reduziu anteriormente a ordem para zero e não a fechou).
Efeito
- Fecha
limit_order; o rent é enviado para limit_order.owner.
CreateDynamicFeeConfig (admin)
Cria um conjunto de parâmetros reutilizável sob um índice u16.
Argumentos
index: u16
filter_period: u16 // segundos; ex: 30
decay_period: u16 // segundos; ex: 600. Deve ser > filter_period
reduction_factor: u16 // 1..10_000; ex: 5_000 = 50% de retenção por janela de decaimento
dynamic_fee_control: u32 // 1..100_000; ganho na curva de volatilidade para taxa
max_volatility_accumulator: u32 // limite máximo
Contas
| # | Nome | W | S | Observações |
|---|
| 1 | owner | W | S | Chave pública admin embutida. |
| 2 | dynamic_fee_config | W | | PDA, init aqui. |
| 3 | system_program | | | |
Erros comuns — InvalidDynamicFeeConfigParams se decay_period <= filter_period ou qualquer campo com valor 0 estiver fora dos limites.
UpdateDynamicFeeConfig (admin)
Modifica um DynamicFeeConfig existente. Pools que já capturaram o snapshot da configuração no momento da criação não são atualizados retroativamente; apenas pools recém-criados que referenciem esta configuração receberão os novos valores.
Argumentos — os mesmos cinco campos de calibração que CreateDynamicFeeConfig (filter_period, decay_period, reduction_factor, dynamic_fee_control, max_volatility_accumulator); o index é fixado na criação e não é repassado aqui.
CollectProtocolFee / CollectFundFee
Formato idêntico ao CollectProtocolFee / CollectFundFee do CPMM. O assinante deve corresponder a AmmConfig.owner / AmmConfig.fund_owner. Varre as taxas de protocolo/fundo acumuladas dos vaults do pool para um destinatário e zera os campos PoolState.protocol_fees_* / fund_fees_* correspondentes.
InitializeReward
Adiciona um novo fluxo de recompensa a um pool. Até 3 fluxos podem estar ativos simultaneamente.
Argumentos
open_time: u64
end_time: u64
emissions_per_second_x64: u128 // Q64.64
Contas
| # | Nome | 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 operação CLMM que controla a criação de recompensas. |
| 6 | reward_token_mint | | | |
| 7 | reward_token_vault | W | | init aqui. |
| 8 | reward_token_program | | | |
| 9 | system_program, rent | | | |
Pré-condições
- Menos de 3 fluxos ativos no pool no momento.
- O financiador deposita
total_emission = emissions_per_second × (end_time − open_time) de token de recompensa no vault como parte desta instrução.
- Mint de recompensa na whitelist conforme
operation_state.
SetRewardParams
Estende, recarrega ou altera a taxa de emissão de um fluxo de recompensa existente. Normalmente chamado pelo criador do pool ou pelo multisig da Raydium. As restrições vivem on-chain: geralmente é possível estender end_time ou aumentar as emissões, mas não reduzi-las retroativamente. Verifique a lista de donos de operation_state.
UpdateRewardInfos
Pura contabilidade — liquida reward_growth_global_x64 até o momento atual multiplicando emissions_per_second × Δt / liquidity. Chamada internamente por todas as instruções que tocam liquidez. Exposta como instrução autônoma porque agentes externos (UIs, cranks) às vezes querem acioná-la diretamente.
CollectReward
O dono da posição reivindica os tokens de recompensa devidos.
Contas
| # | Nome | W | S | |
|---|
| 1 | nft_owner | | S | |
| 2 | nft_account | | | ATA do dono que contém o NFT de posição. |
| 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 | | | |
Efeito
- Liquida o crescimento de recompensas (mesmo padrão das taxas).
- Transfere o valor devido para a ATA destinatária e zera
reward_amount_owed[i].
Matriz de mudanças de estado
| Instrução | pool.liquidity | pool.fee_growth_global | pool.reward_growth_global | personal_position.liquidity | Tick array |
|---|
CreatePool | 0 | 0 | — | — | — |
OpenPosition | + se no intervalo | — | — | novo | adiciona liquidity_gross/net |
IncreaseLiquidity | + se no intervalo | liquida devidos | liquida devidos | + | ajusta |
DecreaseLiquidity | − se no intervalo | liquida devidos | liquida devidos | − | ajusta |
ClosePosition | — | — | — | destruído | — |
SwapV2 | ± nos cruzamentos | + | — | — | cruza e inverte exterior; corresponde coortes de ordem limitada |
OpenLimitOrder | — | — | — | — | orders_amount += amount no tick alvo |
IncreaseLimitOrder | — | — | — | — | orders_amount += amount |
DecreaseLimitOrder | — | — | — | — | orders_amount -=, pode fechar coorte |
SettleLimitOrder | — | — | — | — | — (somente leitura no tick) |
CloseLimitOrder | — | — | — | — | — |
CreateCustomizablePool | 0 | 0 | — | — | — |
UpdateRewardInfos | — | — | + | — | — |
CollectReward | — | — | liquida devidos | — | — |
Próximos passos
Fontes: