Saltar para o conteúdo principal
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
Contas (W = editável, S = assinante) * 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_mint por ordem de bytes).
  • Nenhum mint usa uma extensão fora da lista de permissões CPMM (TransferFeeConfig, MetadataPointer, TokenMetadata, InterestBearingConfig, ScaledUiAmount) — veja products/cpmm/accounts. Uma pequena lista de permissões por mint dentro do programa ignora a verificação para onboarding caso a caso.
  • creator tem pelo menos init_amount_0 e init_amount_1 nas ATAs respectivas.
  • 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 travado no pool — pool_state.lp_supply registra liquidity − 100 enquanto 100 unidades de LP permanecem fora da circulação, evitando que o pool seja completamente drenado e 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 (é uma 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 taxa de criador — esse caminho é InitializeWithPermission.
  • open_time é ajustado 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 não ordenados 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

Adicionar 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 estiver pausado.

Withdraw

Queimar tokens LP e receber ambos os tokens subjacentes proporcionalmente. Argumentos
Contas (Idêntico a Deposit; lp_mint é editável porque os tokens LP são queimados.) Matemática
Pós-condições
  • 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
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 casando mints. Matemática — veja products/cpmm/math. Pré-condições
  • open_time <= now.
  • pool_status permite swap.
  • Nenhum mint pausado ou congelado para essa autoridade.
  • amount_in > 0.
Erros comuns
  • ExceededSlippageamount_out < minimum_amount_out.
  • ZeroTradingTokens — a transação arredonda para zero.
  • NotApproved — pool está pausado para swaps via UpdatePoolStatus.
  • InvalidInput — mints não correspondem a nenhum dos mints de 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

Coletar taxas de protocolo acumuladas dos vaults para o destino de protocolo. Argumentos — nenhum. Contas Efeito
Sem mudança nos saldos efetivos da curva (as 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

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
Contas 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
Contas Pré-condições
  • Sem AmmConfig existente com o mesmo index.
  • 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 = 0trade_fee_rate
  • param = 1protocol_fee_rate
  • param = 2fund_fee_rate
  • param = 3new_protocol_owner (passe 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 essa AmmConfig no próximo swap. Sem migração; pools simplesmente leem os novos valores.

Matriz de mudanças de estado

Próximas etapas

Fontes: