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
* 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_mintpor ordem de bytes). - Nenhum mint usa uma extensão fora da lista de permissões do CPMM (
TransferFeeConfig,MetadataPointer,TokenMetadata,InterestBearingConfig,ScaledUiAmount) — vejaproducts/cpmm/accounts. Uma pequena lista de permissões por mint dentro do programa contorna a verificação para integração caso a caso. creatortem pelo menosinit_amount_0einit_amount_1nos respectivos ATAs.amm_config.disable_create_pool == false.
pool_stateexiste comlp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP.- O iniciador de LP de
LOCKED_LP(100lamports de token LP) é permanentemente bloqueado no pool —pool_state.lp_supplyregistraliquidity − 100enquanto100unidades 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 = 0epool_id = pool_state.key().create_pool_feelamports 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 = falseecreator_fee_on = BothToken.Initializenão suporta habilitar a taxa de criador — esse caminho éInitializeWithPermission.open_timeé aumentado parablock_timestamp + 1se o chamador passou um valor<= block_timestamp. Swaps são rejeitados antes deopen_time; depósitos e saques funcionam imediatamente.
reference/error-codes)
InvalidInput— mints desordenados ou mints idênticos.NotSupportMint— extensão Token-2022 bloqueada.ExceededSlippage— raramente; seinit_amount_0/1resultarem em zero LP devido a incompatibilidade de decimais.
Deposit
Adiciona liquidez em ambos os tokens proporcionalmente ao pool.
Argumentos
Matemática
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).
ExceededSlippage, ZeroTradingTokens, InvalidStatus se depósito está pausado.
Withdraw
Queima tokens LP e recebe ambos os tokens subjacentes pro-rata.
Argumentos
(Idêntico a
Deposit; lp_mint é gravável porque os tokens LP são queimados.)
Matemática
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
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_statuspermite swap.- Nenhum mint pausado ou congelado para esta autoridade.
amount_in > 0.
ExceededSlippage—amount_out < minimum_amount_out.ZeroTradingTokens— a negociação arredonda para zero.NotApproved— pool está pausado para swaps viaUpdatePoolStatus.InvalidInput— mints não correspondem a nenhum dos mints do vault do pool.
SwapBaseOutput
Swap de saída exata.
Argumentos
SwapBaseInput.
Matemática — curva inversa com teto, veja products/cpmm/math.
Erros comuns — ExceededSlippage (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
NotApproved 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_0ecreator_fees_token_1dos vaults do pool para os ATAs do criador. - Zera ambos os contadores de taxa de criador e atualiza
pool_state.recent_epoch. - Retorna
NoFeeCollectquando 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
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
Pré-condições
- Nenhuma
AmmConfigexistente com o mesmoindex. 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 = 0→trade_fee_rateparam = 1→protocol_fee_rateparam = 2→fund_fee_rateparam = 3→new_protocol_owner(passa bytesPubkeycomo reinterpretação)param = 4→new_fund_ownerparam = 5→create_pool_feeparam = 6→disable_create_pool
AmmConfig no próximo swap. Sem migração; pools simplesmente leem os novos valores.
Matriz de mudança de estado
Próximos passos
products/cpmm/code-demos— exemplos TypeScript executáveis para o acima.reference/error-codes— a tabela de erros Anchor completa.products/cpmm/fees— o modelo de acúmulo de taxa que as instruçõesCollect*Feedrenam.

