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 →
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 — fica no cofre e aumenta
k. Reivindicada implicitamente ao queimar tokens 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 — fica no cofre e aumenta
- Taxa do criador (opcional, por pool) — cobrada em
AmmConfig.creator_fee_rateindependentemente da taxa de negociação, acumulada emPoolState.creator_fees_token*, coletada porpool_state.pool_creatorviaCollectCreatorFee. Ativa apenas quando o pool foi criado comenable_creator_fee = true.
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 do criador na entrada, dos quais o criador mantém os 0,10% e o balde da taxa de negociação recebe os 0,25%.
As taxas de negociação (trade_fee_rate, protocol_fee_rate, fund_fee_rate) e a creator_fee_rate vivem todas em AmmConfig. O sinalizador enable_creator_fee por pool e o modo creator_fee_on (qual lado da negociação a taxa do criador é cobrada) vivem em PoolState. 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.
AmmConfig[index=0] (o pool “padrão” de 0,25%) na mainnet, para referência:
| Campo | Valor | Percentual efetivo |
|---|---|---|
trade_fee_rate | 2500 | 0,25% do volume (balde de taxa de negociação) |
protocol_fee_rate | 120000 | 12% da taxa de negociação ≈ 0,030% do volume |
fund_fee_rate | 40000 | 4% da taxa de negociação ≈ 0,010% do volume |
creator_fee_rate | 0 (padrão) | 0% (balde separado) |
| → Parcela de LP efetiva | 0,210% do volume |
AmmConfig[0] com enable_creator_fee = false: $2,50 de taxa total de negociação, dos quais $2,10 ficam com LPs, $0,30 vão para o protocolo, $0,10 para o fundo. O balde 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 pagaria um adicional de $1,00 para o balde do criador — cobrado no mesmo lado da negociação configurado por creator_fee_on — para um total de $3,50 em taxas. O balde 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 administrador e devem ser lidas novas em vez de hardcoded.
A divisão, em código
- A taxa total na entrada arredonda para cima para que o pool nunca subcodifique.
- As subdivisões de
trade_fee(protocolo, fundo) arredondam para baixo para que sua soma nunca excedatrade_fee; o resto é a parcela de LP. lp_share = trade_fee − protocol_fee − fund_fee(creator_fee não é subtraído aqui porque é seu próprio balde).- A taxa do criador é cobrada da entrada ou saída dependendo de
PoolState.creator_fee_on(veja próxima seção). A taxa permanece a mesma 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:
creator_fee_on | Swap 0 → 1 | Swap 1 → 0 |
|---|---|---|
BothToken (0) | lado da entrada | lado da entrada |
OnlyToken0 (1) | lado da entrada | lado da saída |
OnlyToken1 (2) | lado da saída | lado da entrada |
amount_in antes da curva ser executada. Matemática de citação: retire o trade_rate + creator_rate combinado 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 citação: retire trade_rate da entrada; retire 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 desembarcar na saída.
Como as taxas “acumuladas” interagem com a curva
Uma sutileza importante: as taxas de protocolo, fundo e criador permanecem fisicamente no cofre até que sua respectiva instruçãoCollect* seja chamada. Mas são excluídas da visão da curva do saldo do cofre.
Um cenário concreto após um swap:
curve_x (e o curve_y análogo) ao aplicar k' ≥ k. É assim que as taxas que não são de LP chegam aos seus destinos sem inflar a parcela de LP do pool.
Consequências que você deve projetar:
- Cotar com saldos brutos está errado. Se você construir um quoter em
getTokenAccountBalance, você irá superestimar consistentemente 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 cofre e zera os contadoresprotocol_fees_token*, portantocurve_xecurve_ypermanecem inalterados.- As taxas de LP não se acumulam em um contador. Elas são implícitas no saldo do cofre. O direito de LP às taxas de LP acumuladas é exercido ao queimar tokens 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 varreduras deCollect*. A matemática da taxa de negociação do CPMM é calculada em relação ao valor que realmente desembarcou no cofre, 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 com 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 resto (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ê está escrevendo seu próprio quoter, espelhe esse comportamento, ou seus verificadores de slippage serão sistematicamente muito generosos.
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; o sinalizador de ativação e o lado (creator_fee_on) vivem em PoolState:
- Ativada na criação do pool.
Initializedefineenable_creator_fee = falsepor padrão; pools criados viaInitializeWithPermission(usado por graduações de LaunchLab e outros caminhos monitorados) podem passarenable_creator_fee = truee escolhercreator_fee_on. - A taxa é compartilhada com a camada de taxa. A taxa em si é
AmmConfig.creator_fee_rate, o mesmo valor em cada pool vinculado a essa config. Cada pool então decide se cobrar (enable_creator_fee) e qual lado da troca cobrar (creator_fee_on). Quandoenable_creator_fee = false, a taxa efetiva do criador do pool é zero, independentemente do valor da config (vejaPoolState::adjust_creator_fee_ratena fonte). - Independente da taxa de negociação. A taxa do criador nunca reduz as parcelas LP / protocolo / fundo — é sua própria taxa, aplicada separadamente, acumulada em seus próprios contadores.
- Varrida via
CollectCreatorFee, assinada porPoolState.pool_creator. - Não pode ser reativada ou redirecionada após criação. Um pool inicializado com
enable_creator_fee = falsenunca cobará uma taxa de criador; um inicializado com um particularcreator_fee_onnão pode mudar de lado.
CollectCreatorFee indefinidamente.
Fluxo operacional de coleta
| Signatário | Instrução | Contadores de origem zerados | Cadência típica |
|---|---|---|---|
amm_config.protocol_owner | CollectProtocolFee | protocol_fees_token{0,1} | Semanal ou programático |
amm_config.fund_owner | CollectFundFee | fund_fees_token{0,1} | Semanal ou programático |
pool_state.pool_creator | CollectCreatorFee | creator_fees_token{0,1} | A qualquer momento |
security/admin-and-multisig. O signatário do criador é a conta que executou Initialize.
Alterando uma camada 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 config em cada swap.
O que o admin não pode fazer:
- Mover um pool de um
AmmConfigpara outro. - Precificar retroativamente as taxas já acumuladas.
- Coletar taxas sem o signatário
protocol_owner/fund_owner.
Lendo taxas de um pool em execução
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 sem taxa de fundo.
- CLMM as taxas são por camada de espaçamento de tick, acumuladas por posição (não por pool), e reivindicadas via
DecreaseLiquidityouCollectFees.
Para onde ir em seguida
products/cpmm/math— onde a dedução da taxa de negociação se conecta à curva.products/cpmm/instructions— as listas de contas da instruçãoCollect*.algorithms/token-2022-transfer-fees— como combinar corretamente uma taxa de negociação de pool com uma taxa de transferência de mint.


