Skip to main content
Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.Ver versão em inglês →

Resumo de instruções

Máscara de status: o status de cada pool é um u8 onde bit 0 = depósito desabilitado, bit 1 = saque desabilitado, bit 2 = swap desabilitado (PoolStatusBitIndex { Deposit, Withdraw, Swap } no programa). Um bit limpo significa que a operação é permitida; um bit definido significa que está pausada. UpdatePoolStatus recebe um u8 bruto e sobrescreve o valor existente. As próximas seções detalham cada uma. A ordem das contas segue o IDL do CPMM; o SDK e o cliente Rust em raydium-cp-swap/programs/cp-swap/src/instructions correspondem a esta ordem.

Initialize

Cria um novo pool CPMM. Argumentos
Contas (W = gravável, S = assinante) * pool_state assina apenas no caminho de chave aleatória; o caminho PDA canônico executa sem pool_state assinando. Pré-condições
  • Mints são ordenados (token_0_mint < token_1_mint por ordem de bytes).
  • Nenhum mint usa uma extensão fora da lista de permissões do CPMM (TransferFeeConfig, MetadataPointer, TokenMetadata, InterestBearingConfig, ScaledUiAmount) — veja products/cpmm/accounts. Uma pequena lista de permissões por mint dentro do programa contorna a verificação para integração caso a caso.
  • creator tem pelo menos init_amount_0 e init_amount_1 nos respectivos ATAs.
  • amm_config.disable_create_pool == false.
Pós-condições
  • pool_state existe com lp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP.
  • O iniciador de LP de LOCKED_LP (100 lamports de token LP) é permanentemente bloqueado no pool — pool_state.lp_supply registra liquidity − 100 enquanto 100 unidades de LP permanecem fora de circulação, impedindo que o pool seja completamente drenado e evitando divisão por zero.
  • observation_state é inicializado; observation_index = 0 e pool_id = pool_state.key().
  • create_pool_fee lamports são transferidos do criador para o receptor e sincronizados como SOL nativo (é um ATA wSOL).
  • A máscara de status do pool é 0 (depósito / saque / swap todos habilitados).
  • enable_creator_fee = false e creator_fee_on = BothToken. Initialize não suporta habilitar a taxa de criador — esse caminho é InitializeWithPermission.
  • open_time é aumentado para block_timestamp + 1 se o chamador passou um valor <= block_timestamp. Swaps são rejeitados antes de open_time; depósitos e saques funcionam imediatamente.
Erros comuns (lista completa em reference/error-codes)
  • InvalidInput — mints desordenados ou mints idênticos.
  • NotSupportMint — extensão Token-2022 bloqueada.
  • ExceededSlippage — raramente; se init_amount_0/1 resultarem em zero LP devido a incompatibilidade de decimais.

Deposit

Adiciona liquidez em ambos os tokens proporcionalmente ao pool. Argumentos
Contas Matemática
Sem mudança na proporcionalidade de k — ambos os vaults e lp_supply escalam pelo mesmo fator. Pós-condições
  • lp_supply += lp_token_amount.
  • vault_0 += needed_token_0 (líquido de qualquer taxa de transferência Token-2022 na entrada).
  • vault_1 += needed_token_1 (líquido de qualquer taxa de transferência Token-2022 na entrada).
Erros comunsExceededSlippage, ZeroTradingTokens, InvalidStatus se depósito está pausado.

Withdraw

Queima tokens LP e recebe ambos os tokens subjacentes pro-rata. Argumentos
Contas (Idêntico a Deposit; lp_mint é gravável porque os tokens LP são queimados.) Matemática
Pós-condições
  • lp_supply -= lp_token_amount.
  • Os vaults enviam out_token_0 / out_token_1 (bruto; o usuário recebe líquido de qualquer taxa de transferência Token-2022).

SwapBaseInput

Swap de entrada exata. Argumentos
Contas A ordem entrada → saída é pela direção do usuário, não pelo token_0 / token_1 canônico do pool. O programa descobre qual vault é qual combinando mints. Matemática — veja products/cpmm/math. Pré-condições
  • open_time <= now.
  • pool_status permite swap.
  • Nenhum mint pausado ou congelado para esta autoridade.
  • amount_in > 0.
Erros comuns
  • ExceededSlippageamount_out < minimum_amount_out.
  • ZeroTradingTokens — a negociação arredonda para zero.
  • NotApproved — pool está pausado para swaps via UpdatePoolStatus.
  • InvalidInput — mints não correspondem a nenhum dos mints do vault do pool.

SwapBaseOutput

Swap de saída exata. Argumentos
Contas — mesmas que SwapBaseInput. Matemática — curva inversa com teto, veja products/cpmm/math. Erros comunsExceededSlippage (gross_in > max_amount_in), ZeroTradingTokens, InvalidInput, NotApproved.

CollectProtocolFee

Coleta taxas de protocolo acumuladas dos vaults para o destino do protocolo. Argumentos — nenhum. Contas Efeito
Sem mudança nos saldos efetivos da curva (taxas acumuladas já foram excluídas). Erro comumNotApproved se o assinante não for protocol_owner.

CollectFundFee

Mesma forma que CollectProtocolFee mas assinado por fund_owner e zerando os contadores fund_fees_*.

CollectCreatorFee

Assinado por pool_state.pool_creator. Transfere os saldos completos de creator_fees_token_0 e creator_fees_token_1 para as contas de token do criador, depois zera ambos os contadores. Retorna NoFeeCollect quando ambos os contadores são zero.

CollectCreatorFeePermissionless

Qualquer um pode disparar a coleta de taxa de criador. A instrução sempre envia os saldos acumulados completos para as contas de token associadas canônicas possuídas por pool_state.pool_creator; o chamador não pode escolher outro criador ou destino. Se qualquer ATA estiver ausente, o pagador financia sua criação. O CollectCreatorFee original permanece chamável, então clientes existentes permanecem compatíveis. Argumentos — nenhum. Contas Efeito
  • Transfere todo creator_fees_token_0 e creator_fees_token_1 dos vaults do pool para os ATAs do criador.
  • Zera ambos os contadores de taxa de criador e atualiza pool_state.recent_epoch.
  • Retorna NoFeeCollect quando ambos os contadores são zero.

UpdatePoolStatus

Pausa ou retoma operações individuais em um pool. O campo status é uma máscara de bits: Argumentos
Contas A chave de admin é a autoridade de upgrade no programa CPMM — na prática, o multisig da Raydium. Veja security/admin-and-multisig.

CreateAmmConfig

Cria um novo nível de taxa. Argumentos
Contas Pré-condições
  • Nenhuma AmmConfig existente com o mesmo index.
  • protocol_fee_rate + fund_fee_rate <= FEE_RATE_DENOMINATOR_VALUE.

UpdateAmmConfig

Altera taxas ou propriedade em uma AmmConfig existente. Recebe um param: u8 (discriminador para qual campo atualizar) e um value: u64. A semântica de valor por param está na fonte; comumente:
  • param = 0trade_fee_rate
  • param = 1protocol_fee_rate
  • param = 2fund_fee_rate
  • param = 3new_protocol_owner (passa bytes Pubkey como reinterpretação)
  • param = 4new_fund_owner
  • param = 5create_pool_fee
  • param = 6disable_create_pool
As mudanças são assinadas pelo admin e afetam cada pool vinculado a esta AmmConfig no próximo swap. Sem migração; pools simplesmente leem os novos valores.

Matriz de mudança de estado

Próximos passos

Fontes: