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 um. A ordem das contas segue o IDL CPMM; o SDK e o cliente Rust em raydium-cp-swap/programs/cp-swap/src/instructions seguem essa ordem.
Initialize
Criar um novo pool CPMM.
Argumentos
* pool_state assina apenas no caminho da keypair aleatória; o caminho do PDA canônico funciona sem pool_state assinar.
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 CPMM (
TransferFeeConfig,MetadataPointer,TokenMetadata,InterestBearingConfig,ScaledUiAmount) — vejaproducts/cpmm/accounts. Uma pequena lista de permissões por mint dentro do programa ignora a verificação para onboarding caso a caso. creatortem pelo menosinit_amount_0einit_amount_1nas ATAs respectivas.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 travado no pool —pool_state.lp_supplyregistraliquidity − 100enquanto100unidades de LP permanecem fora da circulação, evitando que o pool seja completamente drenado e 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 (é uma 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 taxa de criador — esse caminho éInitializeWithPermission.open_timeé ajustado 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 não ordenados 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
Adicionar 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 estiver pausado.
Withdraw
Queimar tokens LP e receber ambos os tokens subjacentes proporcionalmente.
Argumentos
(Idêntico a
Deposit; lp_mint é editável porque os tokens LP são queimados.)
Matemática
lp_supply -= lp_token_amount.- 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 casando mints.
Matemática — veja products/cpmm/math.
Pré-condições
open_time <= now.pool_statuspermite swap.- Nenhum mint pausado ou congelado para essa autoridade.
amount_in > 0.
ExceededSlippage—amount_out < minimum_amount_out.ZeroTradingTokens— a transação arredonda para zero.NotApproved— pool está pausado para swaps viaUpdatePoolStatus.InvalidInput— mints não correspondem a nenhum dos mints de 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
Coletar taxas de protocolo acumuladas dos vaults para o destino de 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
Mesma forma novamente, assinado por pool_state.pool_creator. Emite transferências apenas se o pool foi inicializado com uma taxa de criador não-zero.
UpdatePoolStatus
Pausar ou retomar operações individuais em um pool. O campo status é uma máscara de bits:
Argumentos
A chave admin é a autoridade de upgrade no programa CPMM — na prática, o multisig da Raydium. Veja
security/admin-and-multisig.
CreateAmmConfig
Criar um novo nível de taxa.
Argumentos
Pré-condições
- Sem
AmmConfigexistente com o mesmoindex. protocol_fee_rate + fund_fee_rate <= FEE_RATE_DENOMINATOR_VALUE.
UpdateAmmConfig
Alterar 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á no código-fonte; comumente:
param = 0→trade_fee_rateparam = 1→protocol_fee_rateparam = 2→fund_fee_rateparam = 3→new_protocol_owner(passe 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ças de estado
Próximas etapas
products/cpmm/code-demos— amostras TypeScript executáveis para o acima.reference/error-codes— a tabela completa de erros do Anchor.products/cpmm/fees— o modelo de acumulação de taxa queCollectProtocolFee/CollectFundFee/CollectCreatorFeedrenam.

