Saltar para o conteúdo principal

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 foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.Ver versão em inglês →

Resumo de instruções

Nome do discriminadorQuem assinaO que faz
Initializecriador do poolCriar um novo pool CPMM a partir de dois mints e uma AmmConfig. Sem permissão; qualquer um pode chamar. Define enable_creator_fee = false no novo pool. A conta pool_state pode ser o PDA canônico ou uma keypair aleatória recém-criada (veja contas de Initialize).
InitializeWithPermissionpagador + detentor de um PDA PermissionVariante com permissão de Initialize. O chamador (payer) deve possuir um PDA Permission derivado de sua própria chave pública. Usado por plataformas que precisam de criação de pool controlada (ex: graduações LaunchLab). Permite que o chamador fixe creator_fee_on (BothToken / OnlyToken0 / OnlyToken1) e força enable_creator_fee = true no novo pool. O campo creator em pool_state é definido como uma conta creator passada separadamente, não como o pagador. Mesma flexibilidade de PDA canônico ou keypair aleatório para pool_state como em Initialize.
DepositLPAdicionar liquidez em ambos os tokens; receber tokens LP.
WithdrawLPQueimar tokens LP; receber ambos os tokens subjacentes proporcionalmente.
SwapBaseInputswapperSwap de entrada exata (amount_in entra, ≥ minimum_amount_out sai).
SwapBaseOutputswapperSwap de saída exata (≤ maximum_amount_in entra, amount_out sai).
CollectProtocolFeeprotocol_owner (de AmmConfig)Coletar taxas de protocolo acumuladas dos vaults.
CollectFundFeefund_owner (de AmmConfig)Coletar taxas de fundo acumuladas dos vaults.
CollectCreatorFeepool_creatorColetar taxas de criador acumuladas (se a taxa de criador foi habilitada).
UpdatePoolStatusadminPausar / retomar operações específicas em um pool via máscara de bits.
UpdateAmmConfigadminAlterar taxas ou proprietário de protocolo/fundo em uma AmmConfig.
CreateAmmConfigadminCriar um novo nível de taxa (nova conta AmmConfig).
CreatePermissionPdaadminGerar um PDA Permission que permite a uma autoridade específica chamar InitializeWithPermission.
ClosePermissionPdaadminRevogar um PDA Permission emitido anteriormente.
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
init_amount_0: u64
init_amount_1: u64
open_time:     u64   // timestamp Unix; swaps rejeitados antes disso
Contas (W = editável, S = assinante)
#NomeWSNotas
1creatorWSPaga aluguel; registrado como pool_state.pool_creator.
2amm_configO nível de taxa escolhido.
3authorityPDA de autoridade global CPMM.
4pool_stateWS*Inicializado aqui. Ou o PDA canônico ["pool", amm_config, token_0_mint, token_1_mint] ou uma keypair aleatória recém-criada — quando não é o PDA canônico, o programa exige que pool_state assine (require_eq!(pool_account_info.is_signer, true)). O caminho da keypair aleatória permite que um criador evite tentativas de front-running no PDA canônico. Os PDAs subsequentes (lp_mint, vaults, observation_state) são derivados de pool_state.key() de qualquer forma.
5token_0_mintOrdenado: token_0_mint < token_1_mint.
6token_1_mint
7lp_mintWInicializado aqui. Autoridade definida como authority.
8creator_token_0WATA de origem para init_amount_0.
9creator_token_1WATA de origem para init_amount_1.
10creator_lp_tokenWDestino para LP (criado se ausente).
11token_0_vaultWInicializado aqui. Propriedade de authority.
12token_1_vaultW
13create_pool_feeWATA de destino para o create_pool_fee pago pelo criador.
14observation_stateWInicializado aqui.
15token_programSPL Token (para LP mint).
16token_0_programSPL Token ou Token-2022.
17token_1_programSPL Token ou Token-2022.
18associated_token_program
19system_program
20rent
* 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
lp_token_amount:   u64   // quantos tokens LP cunhar para o LP
maximum_token_0:   u64
maximum_token_1:   u64
Contas
#NomeWS
1ownerS
2authority
3pool_stateW
4owner_lp_tokenW
5token_0_accountW
6token_1_accountW
7token_0_vaultW
8token_1_vaultW
9token_program
10token_program_2022
11vault_0_mint
12vault_1_mint
13lp_mintW
Matemática
needed_token_0 = ceil(lp_token_amount * vault_0 / lp_supply)
needed_token_1 = ceil(lp_token_amount * vault_1 / lp_supply)
require(needed_token_0 <= maximum_token_0, "ExceededSlippage")
require(needed_token_1 <= maximum_token_1, "ExceededSlippage")
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
lp_token_amount:   u64
minimum_token_0:   u64
minimum_token_1:   u64
Contas
#NomeWS
1ownerS
2authority
3pool_stateW
4owner_lp_tokenW
5token_0_accountW
6token_1_accountW
7token_0_vaultW
8token_1_vaultW
9token_program
10token_program_2022
11vault_0_mint
12vault_1_mint
13lp_mintW
(Idêntico a Deposit; lp_mint é editável porque os tokens LP são queimados.) Matemática
out_token_0 = floor(lp_token_amount * vault_0 / lp_supply)
out_token_1 = floor(lp_token_amount * vault_1 / lp_supply)
require(out_token_0 >= minimum_token_0, "ExceededSlippage")
require(out_token_1 >= minimum_token_1, "ExceededSlippage")
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
amount_in:            u64
minimum_amount_out:   u64
Contas
#NomeWS
1payerS
2authority
3amm_config
4pool_stateW
5input_token_accountW
6output_token_accountW
7input_vaultW
8output_vaultW
9input_token_program
10output_token_program
11input_token_mint
12output_token_mint
13observation_stateW
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
max_amount_in:  u64
amount_out:     u64
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
#NomeWS
1ownerSDeve corresponder a amm_config.protocol_owner.
2authority
3pool_stateW
4amm_config
5token_0_vaultW
6token_1_vaultW
7vault_0_mint
8vault_1_mint
9recipient_token_0_accountW
10recipient_token_1_accountW
11token_program
12token_program_2022
Efeito
transfer pool_state.protocol_fees_token0 from vault_0 to recipient_0
transfer pool_state.protocol_fees_token1 from vault_1 to recipient_1
pool_state.protocol_fees_token0 = 0
pool_state.protocol_fees_token1 = 0
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:
BitFlagEfeito quando definido
0DEPOSIT_DISABLEDDeposit rejeita com NotApproved.
1WITHDRAW_DISABLEDWithdraw rejeita.
2SWAP_DISABLEDSwapBaseInput / SwapBaseOutput rejeitam.
Argumentos
status: u8      // nova máscara de bits
Contas
#NomeWS
1authoritySDeve corresponder à chave admin no programa CPMM.
2pool_stateW
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
index:             u16
trade_fee_rate:    u64
protocol_fee_rate: u64
fund_fee_rate:     u64
create_pool_fee:   u64
Contas
#NomeWS
1ownerWSAdmin.
2amm_configWInicializado aqui.
3system_program
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

Instruçãolp_supplySaldos de vaultCampos de taxa acumuladaobservation
Initialize+ LP init+ init_amount_{0,1}0init
InitializeWithPermission+ LP init+ init_amount_{0,1}0init
Deposit++ ambos
Withdraw− ambos
SwapBaseInput+ entrada, − saída+ trade_fee dividido em protocolo/fundo; + creator_fee se habilitado+ (se intervalo decorrido)
SwapBaseOutput+ entrada, − saída+ trade_fee dividido em protocolo/fundo; + creator_fee se habilitado+ (se intervalo decorrido)
CollectProtocolFee− (por buckets de protocolo)protocol_* → 0
CollectFundFee− (por buckets de fundo)fund_* → 0
CollectCreatorFee− (por buckets de criador)creator_* → 0
UpdatePoolStatus

Próximas etapas

Fontes: