Esta página foi traduzida automaticamente por IA. A versão em inglês é a fonte oficial.Ver versão em inglês →
Duas taxas independentes, quatro destinos
O CPMM cobra duas taxas com taxas separadas em cada swap:- Taxa de negociação — cobrada em
AmmConfig.trade_fee_ratee dividida entre três destinos:- Parcela de LP — permanece no vault e aumenta
k. Reivindicada implicitamente ao queimar tokens de LP. - Parcela do protocolo — acumulada em
PoolState.protocol_fees_token*; coletada peloprotocol_ownerviaCollectProtocolFee. - Parcela do fundo — acumulada em
PoolState.fund_fees_token*; coletada pelofund_ownerviaCollectFundFee.
- Parcela de LP — permanece no vault e aumenta
- Taxa do criador (opcional, por pool) — cobrada em
AmmConfig.creator_fee_rateindependentemente da taxa de negociação e acumulada emPoolState.creator_fees_token*. O criador pode coletá-la viaCollectCreatorFee, ou qualquer pagador pode ativar o caminho restrito a destinoCollectCreatorFeePermissionless. Ativa apenas quando o pool foi criado comenable_creator_fee = true. Desde a atualização de 2026-09-13, a taxa do criador acumulada é dividida novamente no momento da coleta: uma parcela configurável é movida para o bucket de protocolo do pool e apenas o restante chega ao criador — veja Parcela do protocolo da taxa do criador.
trade_fee apenas, nunca de creator_fee. Um pool com creator_fee_rate = 1000 (0,10%) e trade_fee_rate = 2500 (0,25%) cobra um total de 0,35% da entrada em um swap com taxa de criador na entrada, dos quais o bucket do criador recebe 0,10% e o bucket de taxa de negociação recebe 0,25%.
A parcela do protocolo da taxa do criador funciona de forma oposta e é fácil confundir com o acima: ela é extraída do bucket do criador, não da taxa de negociação, e não no swap — é aplicada quando CollectCreatorFee ou CollectCreatorFeePermissionless liquida o saldo acumulado. A matemática do swap não é alterada por isso.
As taxas de taxa de negociação (trade_fee_rate, protocol_fee_rate, fund_fee_rate), a creator_fee_rate e a creator_fee_share_rate padrão vivem em AmmConfig. A flag enable_creator_fee por pool e o modo creator_fee_on (qual lado da negociação a taxa do criador é cobrada) vivem em PoolState. Uma substituição por criador da taxa de compartilhamento vive em seu próprio PDA CreatorFeeShare. Veja products/cpmm/accounts.
Taxas e unidades
Todas as taxas sãou64s denominadas em unidades de 1 / FEE_RATE_DENOMINATOR onde FEE_RATE_DENOMINATOR = 1_000_000.
trade_fee_rateé uma fração do volume de swap.2500⇒ 0,25% do lado relevante (entrada ou saída, dependendo decreator_fee_on— veja “Qual lado da negociação as taxas são cobradas” abaixo).creator_fee_rateé uma fração do volume de swap, cobrada separadamente da taxa de negociação.1000⇒ 0,10% do lado relevante.protocol_fee_rateefund_fee_ratesão frações da taxa de negociação, não do volume.120_000⇒ 12% da taxa de negociação.creator_fee_share_rateé uma fração da taxa do criador acumulada, não do volume e não da taxa de negociação.200_000⇒ 20% do que estiver emcreator_fees_token*no momento em que é coletado.0(o padrão) deixa toda a taxa do criador com o criador.
AmmConfig[index=0] (o pool “padrão” de 0,25%) na mainnet, para referência:
Então em um swap de $1.000 contra
AmmConfig[0] com enable_creator_fee = false: $2,50 de taxa de negociação total, dos quais $2,10 ficam com LPs, $0,30 vão para o protocolo, $0,10 para o fundo. O bucket do criador é 0 porque a taxa do criador está desabilitada.
Se o mesmo pool tivesse enable_creator_fee = true e creator_fee_rate = 1000 (0,10%), o usuário paga um adicional de $1,00 para o bucket do criador — cobrado no mesmo lado da negociação configurado por creator_fee_on — para um total de $3,50 em taxas. O bucket de taxa de negociação e suas divisões de protocolo/fundo permanecem inalterados.
Confirme os valores atuais da mainnet contra GET https://api-v3.raydium.io/main/cpmm-config — as taxas são mutáveis por admin e devem ser lidas novamente em vez de serem codificadas.
A divisão, em código
- A taxa total na entrada arredonda para cima para que o pool nunca subcobre.
- As subdivisões de
trade_fee(protocolo, fundo) arredondam para baixo para que sua soma nunca excedatrade_fee; o restante é a parcela de LP. lp_share = trade_fee − protocol_fee − fund_fee(creator_fee não é subtraído aqui porque é seu próprio bucket).- A taxa do criador é cobrada da entrada ou saída dependendo de
PoolState.creator_fee_on(veja próxima seção). A taxa permanece inalterada de qualquer forma.
Qual lado da negociação as taxas são cobradas
O CPMM tem uma configuraçãocreator_fee_on por pool (BothToken / OnlyToken0 / OnlyToken1) que determina se a taxa do criador é cobrada do lado de entrada ou saída de um determinado swap. O auxiliar de tempo de execução is_creator_fee_on_input(direction) reduz isso a um booleano por swap:
Quando a taxa do criador está no lado de entrada, tanto a taxa de negociação quanto a taxa do criador são deduzidas de
amount_in antes da curva ser executada. Matemática de cotação: pegue a trade_rate + creator_rate combinada da entrada.
Quando a taxa do criador está no lado de saída, apenas a taxa de negociação é deduzida de amount_in; a curva produz uma saída sem taxa, então a taxa do criador é deduzida dessa saída. Matemática de cotação: pegue trade_rate da entrada; pegue creator_rate da saída.
A taxa de negociação em si é sempre cobrada no lado de entrada (o padrão Uniswap-V2). Apenas a taxa do criador pode pousar na saída.
Como as taxas “acumuladas” interagem com a curva
Uma sutileza importante: as taxas de protocolo, fundo e criador permanecem fisicamente no vault até que sua respectiva instruçãoCollect* seja chamada. Mas elas são excluídas da visão da curva do saldo do vault.
Uma imagem concreta após um swap:
curve_x (e o análogo curve_y) ao impor k' ≥ k. É assim que as taxas não-LP chegam aos seus destinos sem inflar a parcela de LP do pool.
Consequências que você deve projetar em torno:
- Citar fora de saldos brutos está errado. Se você construir um cotador fora de
getTokenAccountBalance, você consistentemente superestimará o preço que o pool honrará. Sempre subtraia taxas acumuladas, ou simule viaSwapBaseInput/ a API. CollectProtocolFeenão move o preço. Ele move tokens para fora do vault e zera os contadoresprotocol_fees_token*, entãocurve_xecurve_ypermanecem inalterados.- As taxas de LP não se acumulam em um contador. Elas são implícitas no saldo do vault. O direito de LP às taxas de LP acumuladas é exercido queimando tokens de LP (ou seja, via
Withdraw) — não háCollectLpFee.
Interação com taxas de transferência Token-2022
As taxas de transferência Token-2022 são aplicadas pela mint, não pelo CPMM. Elas atuam em cada transferência de token — swap, depósito, saque e as varredurasCollect*. A matemática de taxa de negociação do CPMM é computada contra o valor que realmente chegou ao vault, ou seja, líquido da taxa de transferência da mint de entrada (se houver).
Então, no pior caso, um usuário paga três impostos distintos em um swap de entrada exata:
- A taxa de transferência da mint de entrada em
amount_in(para a autoridade de taxa da mint). - A
trade_feedo pool no restante (dividida conforme acima). - A taxa de transferência da mint de saída em
amount_out(para a autoridade de taxa da mint).
minimum_amount_out seja denominado no que o usuário realmente recebe. Se você estiver escrevendo seu próprio cotador, espelhe esse comportamento, ou suas verificações de slippage serão sistematicamente muito generosas.
Veja algorithms/token-2022-transfer-fees para a derivação detalhada.
Taxa do criador
A taxa do criador é opcional e por pool. A taxa vive emAmmConfig.creator_fee_rate; a flag de habilitação e o lado (creator_fee_on) vivem em PoolState:
- Habilitada na criação do pool.
Initializedefineenable_creator_fee = falsepor padrão; pools criados viaInitializeWithPermission(usado por graduações de LaunchLab e outros caminhos fechados) podem passarenable_creator_fee = truee escolhercreator_fee_on. - Taxa é compartilhada com o nível de taxa. A taxa em si é
AmmConfig.creator_fee_rate, o mesmo valor em cada pool vinculado a essa configuração. Cada pool então decide se a cobra (enable_creator_fee) e qual lado do swap a cobra (creator_fee_on). Quandoenable_creator_fee = false, a taxa de criador efetiva do pool é zero independentemente do valor da configuração (vejaPoolState::adjust_creator_fee_ratena fonte). - Independente da taxa de negociação. A taxa do criador nunca reduz as parcelas de LP / protocolo / fundo — é sua própria taxa, aplicada separadamente, acumulada em seus próprios contadores.
- Varrida via
CollectCreatorFeeouCollectCreatorFeePermissionless. O caminho original requer quePoolState.pool_creatorassine. O caminho sem permissão permite que qualquer pagador ative a coleta, mas fixa ambos os destinos aos ATAs canônicos do criador. Ambos os caminhos liquidam a parcela do protocolo primeiro — veja a próxima seção. - Não pode ser reabilitada ou redirecionada após a criação. Um pool inicializado com
enable_creator_fee = falsenunca cobrará uma taxa de criador; um inicializado com umcreator_fee_onparticular não pode mudar de lado.
Parcela do protocolo da taxa do criador
Desde a atualização de 2026-09-13, o protocolo pode reter uma parcela configurável da taxa do criador. Nada sobre o swap muda: a taxa do criador ainda é cobrada emcreator_fee_rate e ainda se acumula integralmente em creator_fees_token{0,1}. A divisão acontece uma vez, no momento da coleta, dentro de CollectCreatorFee e CollectCreatorFeePermissionless.
De onde vem a taxa
Duas fontes, em ordem de prioridade:- PDA
CreatorFeeShare— seeds["creator_fee_share", creator, amm_config]. Quando essa conta existe e é de propriedade do CPMM, suashare_ratevence. Permite que o protocolo negocie uma taxa por criador em um determinado nível de taxa sem tocar no nível em si. AmmConfig.creator_fee_share_rate— o padrão para cada criador nesse nível de taxa. Usado sempre que o PDA não existe.
u64s sobre o mesmo FEE_RATE_DENOMINATOR = 1_000_000, e ambos são limitados ao denominador. As instruções de coleta sempre pegam a conta creator_fee_share, mesmo quando ela nunca foi criada — o programa verifica se está vazia e volta para o padrão. Passar o endereço errado falha na restrição de PDA, não no fallback.
O que a divisão faz
creator_fees_token_0 e creator_fees_token_1, então:
creator_amount_{0,1}é transferido para fora dos vaults para as contas de token do criador.shared_amount_{0,1}é adicionado aprotocol_fees_token_{0,1}e permanece no vault até que o proprietário do protocolo o varra comCollectProtocolFee. Não há instrução separada e nenhum contador separado para isso.creator_fees_token_{0,1}são zerados, exatamente como antes.
- Arredondamento favorece o criador. A parcela do protocolo arredonda para baixo, então poeira fica com o criador — a mesma direção que
protocol_feeefund_fee, que também extraem uma parcela de uma taxa já acumulada. - Valor é conservado.
creator_amount + shared_amount == creator_feepara cada taxa e cada taxa, incluindou64::MAX. share_rate = 0é uma operação nula. Tanto o valor de configuração padrão quanto a ausência de um PDACreatorFeeSharedeixam toda a taxa do criador com o criador, que é o comportamento pré-atualização.
O que significa para integradores
- LPs e cotação não são afetados. O valor compartilhado se move entre dois contadores que ambos já são excluídos da visão da curva do vault (
vault_amount_without_fee), entãocurve_xecurve_ynão se movem em uma coleta.knão é tocado. - Um estimador de taxa do criador que lê
creator_fees_token*agora superestima o pagamento. Multiplique por(1 − share_rate / 1_000_000)usando a taxa que realmente se aplica a esse par(creator, amm_config), não o padrão de configuração. protocol_fees_token*cresce fora de swaps. Um monitor que reconcilia acúmulo de protocolo contra volume de swap verá saltos em cada coleta de taxa do criador. O acúmulo de protocolo não é mais apenastrade_fee × protocol_fee_rate.- A taxa pode mudar entre acúmulo e coleta. É lida no momento da coleta, então taxas que se acumularam sob uma taxa liquidam com qualquer taxa que estiver em vigor quando alguém chamar
Collect*.
CreatorFeeShare é criada e fechada pelo admin ou uma autoridade dedicada de compartilhamento de taxa do criador através de CreateCreatorFeeShare / CloseCreatorFeeShare; fechá-la retorna o par a AmmConfig.creator_fee_share_rate. Layout da conta em products/cpmm/accounts, endereços em reference/program-addresses.
Fluxo operacional de coleta
Os proprietários de protocolo e fundo são o multisig do Raydium na mainnet; veja
security/admin-and-multisig. No caminho original apenas do criador, o signatário do criador é a conta registrada em PoolState. No caminho sem permissão, o chamador paga para criar qualquer ATA do criador ausente. O programa restringe creator a pool_state.pool_creator e deriva cada destino desse criador mais a mint do vault correspondente e o programa de token, então o chamador não pode redirecionar fundos.
Alterando um nível de taxa
As taxas podem ser alteradas pelo admin viaUpdateAmmConfig (veja products/cpmm/instructions). As alterações entram em vigor no próximo swap para cada pool vinculado a esse AmmConfig — não há migração, porque os pools carregam a configuração em cada swap.
O que o admin não pode fazer:
- Mover um pool de um
AmmConfigpara outro. - Reprojetar retroativamente taxas já acumuladas.
- Coletar taxas sem o signatário
protocol_owner/fund_owner.
Lendo taxas de um pool em execução
Resolva a taxa de compartilhamento on-chain, não a partir de uma configuração em cache.
creator_fee_share_rate é um campo AmmConfig recém-adicionado, então leia-o da conta em vez de assumir que a carga útil de configuração REST o carrega, e verifique se um PDA CreatorFeeShare existe em ["creator_fee_share", creator, ammConfig] antes de citar um pagamento do criador. Um PDA ausente é o caso comum e significa que o padrão de configuração se aplica.Comparação com CLMM e AMM v4
Vejareference/fee-comparison para uma matriz lado a lado. Resumo:
- AMM v4 usa uma taxa de negociação fixa de 0,25% com uma divisão LP/protocolo diferente e nenhuma taxa de fundo.
- CLMM as taxas são por nível de espaçamento de tick, acumuladas por posição (não por pool), e reivindicadas via
DecreaseLiquidityouCollectFees.
Para onde ir a seguir
products/cpmm/math— onde a dedução de taxa de negociação se conecta à curva.products/cpmm/instructions— as listas de contas de instruçãoCollect*, incluindo a contacreator_fee_shareque ambos os caminhos do criador agora exigem.algorithms/token-2022-transfer-fees— como combinar corretamente uma taxa de negociação de pool com uma taxa de transferência de mint.

