Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Zwei unabhängige Gebühren, vier Ziele
CPMM erhebt zwei separat bewertete Gebühren auf jeden Swap:- Handelsgebühr — erhoben bei
AmmConfig.trade_fee_rateund aufgeteilt auf drei Ziele:- LP-Anteil — bleibt im Vault und vergrößert
k. Wird implizit durch das Verbrennen von LP-Token beansprucht. - Protokoll-Anteil — aufgelaufen zu
PoolState.protocol_fees_token*; eingezogen durch denprotocol_ownerviaCollectProtocolFee. - Fund-Anteil — aufgelaufen zu
PoolState.fund_fees_token*; eingezogen durch denfund_ownerviaCollectFundFee.
- LP-Anteil — bleibt im Vault und vergrößert
- Creator-Gebühr (optional, pro Pool) — erhoben bei
AmmConfig.creator_fee_rateunabhängig von der Handelsgebühr und aufgelaufen zuPoolState.creator_fees_token*. Der Creator kann sie überCollectCreatorFeeeinziehen, oder jeder Zahler kann den zielgebundenen PfadCollectCreatorFeePermissionlessauslösen. Aktiv nur, wenn der Pool mitenable_creator_fee = trueerstellt wurde. Seit dem Upgrade vom 2026-09-19 wird die aufgelaufene Creator-Gebühr bei der Einziehung erneut aufgeteilt: Ein konfigurierbarer Anteil wird in den Protokoll-Bucket des Pools verschoben und nur der Rest erreicht den Creator — siehe Protokoll-Anteil der Creator-Gebühr.
trade_fee, nie von creator_fee. Ein Pool mit creator_fee_rate = 1000 (0,10%) und trade_fee_rate = 2500 (0,25%) erhebt kombiniert 0,35% des Inputs bei einem Creator-Gebühr-auf-Input-Swap, von dem der Creator-Bucket 0,10% erhält und der Handelsgebühr-Bucket 0,25%.
Der Protokoll-Anteil der Creator-Gebühr funktioniert anders herum und ist leicht mit dem obigen zu verwechseln: Er wird aus dem Creator-Bucket herausgeschnitten, nicht aus der Handelsgebühr und nicht beim Swap — er wird angewendet, wenn CollectCreatorFee oder CollectCreatorFeePermissionless den aufgelaufenen Saldo abrechnet. Die Swap-Mathematik wird dadurch nicht verändert.
Die Handelsgebühren-Sätze (trade_fee_rate, protocol_fee_rate, fund_fee_rate), die creator_fee_rate und der Standard-creator_fee_share_rate befinden sich alle auf AmmConfig. Das Pro-Pool-Flag enable_creator_fee und der creator_fee_on-Modus (von welcher Seite des Trades die Creator-Gebühr erhoben wird) befinden sich auf PoolState. Eine Pro-Creator-Überschreibung des Share-Satzes befindet sich auf ihrer eigenen CreatorFeeShare-PDA. Siehe products/cpmm/accounts.
Sätze und Einheiten
Alle Sätze sindu64s, ausgedrückt in Einheiten von 1 / FEE_RATE_DENOMINATOR, wobei FEE_RATE_DENOMINATOR = 1_000_000.
trade_fee_rateist ein Bruchteil des Swap-Volumens.2500⇒ 0,25% der relevanten Seite (Input oder Output, abhängig voncreator_fee_on— siehe „Von welcher Seite des Trades die Gebühren erhoben werden” unten).creator_fee_rateist ein Bruchteil des Swap-Volumens, erhoben separat von der Handelsgebühr.1000⇒ 0,10% der relevanten Seite.protocol_fee_rateundfund_fee_ratesind Bruchteile der Handelsgebühr, nicht des Volumens.120_000⇒ 12% der Handelsgebühr.creator_fee_share_rateist ein Bruchteil der aufgelaufenen Creator-Gebühr, nicht des Volumens und nicht der Handelsgebühr.200_000⇒ 20% von dem, was sich increator_fees_token*zum Zeitpunkt der Einziehung befindet.0(Standard) lässt die gesamte Creator-Gebühr beim Creator.
AmmConfig[index=0] (der „Standard”-Pool mit 0,25%) im Mainnet, zur Referenz:
Bei einem Swap von $1.000 gegen
AmmConfig[0] mit enable_creator_fee = false: $2,50 Gesamthandelsgebühr, von der $2,10 bei den LPs bleiben, $0,30 zum Protokoll gehen, $0,10 zum Fund. Der Creator-Bucket ist 0, da die Creator-Gebühr deaktiviert ist.
Wenn derselbe Pool enable_creator_fee = true und creator_fee_rate = 1000 (0,10%) hätte, zahlt der Benutzer zusätzlich $1,00 zum Creator-Bucket — erhoben auf der gleichen Seite des Trades, die durch creator_fee_on konfiguriert ist — für insgesamt $3,50 Gebühren. Der Handelsgebühr-Bucket und seine Protokoll-/Fund-Aufteilungen bleiben unverändert.
Bestätigen Sie die aktuellen Mainnet-Werte gegen GET https://api-v3.raydium.io/main/cpmm-config — Sätze sind vom Admin änderbar und sollten frisch gelesen werden, anstatt hartcodiert zu sein.
Die Aufteilung im Code
- Die Gesamtgebühr auf Input rundet auf, damit der Pool nie unterberechnet.
- Die Unter-Aufteilungen von
trade_fee(Protokoll, Fund) runden ab, damit ihre Summetrade_feenie überschreitet; der Rest ist der LP-Anteil. lp_share = trade_fee − protocol_fee − fund_fee(creator_fee wird hier nicht subtrahiert, da es sein eigener Bucket ist).- Die Creator-Gebühr wird je nach
PoolState.creator_fee_onvon der Input- oder Output-Seite erhoben (siehe nächster Abschnitt). Der Satz bleibt in beiden Fällen unverändert.
Von welcher Seite des Trades die Gebühren erhoben werden
CPMM hat eine Pro-Pool-Einstellungcreator_fee_on (BothToken / OnlyToken0 / OnlyToken1), die bestimmt, ob die Creator-Gebühr von der Input-Seite oder der Output-Seite eines bestimmten Swaps erhoben wird. Der Runtime-Helfer is_creator_fee_on_input(direction) reduziert dies pro Swap auf einen booleschen Wert:
Wenn die Creator-Gebühr auf der Input-Seite ist, werden sowohl die Handelsgebühr als auch die Creator-Gebühr von
amount_in abgezogen, bevor die Kurve läuft. Quote-Mathematik: Nehmen Sie den kombinierten trade_rate + creator_rate vom Input ab.
Wenn die Creator-Gebühr auf der Output-Seite ist, wird nur die Handelsgebühr von amount_in abgezogen; die Kurve erzeugt einen gebührenfreien Output, dann wird die Creator-Gebühr von diesem Output abgezogen. Quote-Mathematik: Nehmen Sie trade_rate vom Input ab; nehmen Sie creator_rate vom Output ab.
Die Handelsgebühr selbst wird immer von der Input-Seite erhoben (das Standard-Uniswap-V2-Muster). Nur die Creator-Gebühr kann auf Output landen.
Wie „aufgelaufene” Gebühren mit der Kurve interagieren
Eine wichtige Subtilität: Die Protokoll-, Fund- und Creator-Gebühren bleiben physisch im Vault, bis ihre jeweiligeCollect*-Anweisung aufgerufen wird. Aber sie sind von der Kurvenansicht des Vault-Saldos ausgeschlossen.
Ein konkretes Bild nach einem Swap:
curve_x (und das analoge curve_y) beim Durchsetzen von k' ≥ k. Dies ist, wie die Nicht-LP-Gebühren ihre Ziele erreichen, ohne den LP-Anteil des Pools zu vergrößern.
Konsequenzen, die Sie berücksichtigen sollten:
- Quoting von Raw-Salden ist falsch. Wenn Sie einen Quoter von
getTokenAccountBalanceerstellen, werden Sie den Preis, den der Pool ehrt, konsistent überzeichnen. Subtrahieren Sie immer aufgelaufene Gebühren, oder simulieren Sie viaSwapBaseInput/ die API. CollectProtocolFeebewegt den Preis nicht. Es bewegt Token aus dem Vault und setzt dieprotocol_fees_token*-Zähler auf Null, also bleibencurve_xundcurve_yunverändert.- LP-Gebühren fallen nicht auf einem Zähler an. Sie sind implizit im Vault-Saldo. Die Berechtigung des LP auf aufgelaufene LP-Gebühren wird durch das Verbrennen von LP-Token ausgeübt (d. h. via
Withdraw) — es gibt keinCollectLpFee.
Interaktion mit Token-2022-Transfergebühren
Token-2022-Transfergebühren werden vom Mint angewendet, nicht von CPMM. Sie wirken sich auf jeden Token-Transfer aus — Swap, Einzahlung, Auszahlung und dieCollect*-Sweeps. Die Handelsgebühren-Mathematik von CPMM wird gegen den Betrag berechnet, der tatsächlich im Vault gelandet ist, d. h. netto der Transfergebühr des Input-Mints (falls vorhanden).
Im schlimmsten Fall zahlt ein Benutzer also drei unterschiedliche Steuern auf einen Input-exakten Swap:
- Die Transfergebühr des Input-Mints auf
amount_in(an die Gebührenautorität des Mints). - Die
trade_feedes Pools auf den Rest (aufgeteilt wie oben). - Die Transfergebühr des Output-Mints auf
amount_out(an die Gebührenautorität des Mints).
minimum_amount_out in dem ausgedrückt, was der Benutzer tatsächlich erhält. Wenn Sie Ihren eigenen Quoter schreiben, spiegeln Sie dieses Verhalten wider, oder Ihre Slippage-Checks werden systematisch zu großzügig.
Siehe algorithms/token-2022-transfer-fees für die detaillierte Herleitung.
Creator-Gebühr
Die Creator-Gebühr ist optional und pro Pool. Der Satz befindet sich aufAmmConfig.creator_fee_rate; das Enable-Flag und die Seite (creator_fee_on) befinden sich auf PoolState:
- Bei Pool-Erstellung aktiviert.
Initializesetztenable_creator_fee = falsestandardmäßig; Pools, die überInitializeWithPermissionerstellt werden (verwendet von LaunchLab-Graduierungen und anderen gated Pfaden), könnenenable_creator_fee = trueübergeben undcreator_fee_onwählen. - Satz wird mit der Gebühren-Stufe geteilt. Der Satz selbst ist
AmmConfig.creator_fee_rate, der gleiche Wert über jeden Pool, der an diese Konfiguration gebunden ist. Jeder Pool entscheidet dann, ob er ihn erhebt (enable_creator_fee) und von welcher Seite des Swaps er ihn erhebt (creator_fee_on). Wennenable_creator_fee = false, ist die effektive Creator-Gebührenrate des Pools unabhängig vom Konfigurationswert Null (siehePoolState::adjust_creator_fee_rateim Quellcode). - Unabhängig von der Handelsgebühr. Die Creator-Gebühr reduziert nie die LP-/Protokoll-/Fund-Anteile — sie ist ihr eigener Satz, separat angewendet, in ihren eigenen Zählern aufgelaufen.
- Eingezogen via
CollectCreatorFeeoderCollectCreatorFeePermissionless. Der ursprüngliche Pfad erfordert, dassPoolState.pool_creatorsigniert. Der gebührenfreie Pfad lässt jeden Zahler die Einziehung auslösen, aber fixiert beide Ziele auf die kanonischen ATAs des Creators. Beide Pfade begleichen zuerst den Protokoll-Anteil — siehe den nächsten Abschnitt. - Kann nach der Erstellung nicht erneut aktiviert oder umgeleitet werden. Ein Pool, der mit
enable_creator_fee = falseinitialisiert wurde, wird nie eine Creator-Gebühr erheben; einer, der mit einem bestimmtencreator_fee_oninitialisiert wurde, kann nicht die Seiten wechseln.
Protokoll-Anteil der Creator-Gebühr
Seit dem Upgrade vom 2026-09-19 kann das Protokoll einen konfigurierbaren Anteil der Creator-Gebühr behalten. Nichts am Swap ändert sich: Die Creator-Gebühr wird immer noch beicreator_fee_rate erhoben und läuft vollständig zu creator_fees_token{0,1} auf. Die Aufteilung erfolgt einmal, bei der Einziehung, innerhalb von CollectCreatorFee und CollectCreatorFeePermissionless.
Woher der Satz kommt
Zwei Quellen, in Prioritätsreihenfolge:CreatorFeeShare-PDA — Seeds["creator_fee_share", creator, amm_config]. Wenn dieses Konto existiert und von CPMM besessen wird, gewinnt seinshare_rate. Es ermöglicht dem Protokoll, einen Pro-Creator-Satz auf einer bestimmten Gebühren-Stufe auszuhandeln, ohne die Stufe selbst zu berühren.AmmConfig.creator_fee_share_rate— der Standard für jeden Creator auf dieser Gebühren-Stufe. Verwendet, wenn die PDA nicht existiert.
u64s über den gleichen FEE_RATE_DENOMINATOR = 1_000_000, und beide sind auf den Nenner begrenzt. Die Einziehungsanweisungen nehmen immer das creator_fee_share-Konto, auch wenn es nie erstellt wurde — das Programm prüft, ob es leer ist, und fällt auf den Standard zurück. Die Übergabe der falschen Adresse schlägt die PDA-Einschränkung fehl, nicht den Fallback.
Was die Aufteilung tut
creator_fees_token_0 und creator_fees_token_1 angewendet, dann:
creator_amount_{0,1}wird aus den Vaults zu den Token-Konten des Creators transferiert.shared_amount_{0,1}wird zuprotocol_fees_token_{0,1}addiert und bleibt im Vault, bis der Protokoll-Owner es mitCollectProtocolFeeeinzieht. Es gibt keine separate Anweisung und keinen separaten Zähler dafür.creator_fees_token_{0,1}werden auf Null gesetzt, genau wie zuvor.
- Rundung bevorzugt den Creator. Der Protokoll-Anteil rundet ab, also bleibt Staub beim Creator — die gleiche Richtung wie
protocol_feeundfund_fee, die auch einen Anteil aus einer bereits aufgelaufenen Gebühr herausschneiden. - Wert wird konserviert.
creator_amount + shared_amount == creator_feefür jeden Satz und jede Gebühr, einschließlichu64::MAX. share_rate = 0ist ein No-Op. Sowohl der Standard-Konfigurationswert als auch das Fehlen einerCreatorFeeShare-PDA lassen die gesamte Creator-Gebühr beim Creator, was das Verhalten vor dem Upgrade ist.
Was es für Integratoren bedeutet
- LPs und Quoting sind unbeeinträchtigt. Der gemeinsame Betrag bewegt sich zwischen zwei Zählern, die beide bereits von der Kurvenansicht des Vaults ausgeschlossen sind (
vault_amount_without_fee), also bewegen sichcurve_xundcurve_ynicht über eine Einziehung.kist unverändert. - Ein Creator-Gebühren-Schätzer, der
creator_fees_token*liest, überzeichnet jetzt die Auszahlung. Multiplizieren Sie mit(1 − share_rate / 1_000_000)unter Verwendung des Satzes, der tatsächlich auf dieses(creator, amm_config)-Paar angewendet wird, nicht der Konfiguration-Standard. protocol_fees_token*wächst außerhalb von Swaps. Ein Monitor, der die Protokoll-Abgrenzung gegen das Swap-Volumen abgleicht, wird Sprünge bei jeder Creator-Gebühren-Einziehung sehen. Die Protokoll-Abgrenzung ist nicht mehr nurtrade_fee × protocol_fee_rate.- Der Satz kann sich zwischen Abgrenzung und Einziehung ändern. Er wird bei der Einziehung gelesen, also werden Gebühren, die unter einem Satz aufgelaufen sind, zu dem Satz abgerechnet, der in Kraft ist, wenn jemand
Collect*aufruft.
CreatorFeeShare-Konto wird vom Admin oder einer dedizierten Creator-Fee-Share-Autorität über CreateCreatorFeeShare / CloseCreatorFeeShare erstellt und geschlossen; das Schließen gibt das Paar an AmmConfig.creator_fee_share_rate zurück. Konto-Layout in products/cpmm/accounts, Adressen in reference/program-addresses.
Operativer Ablauf der Einziehung
Protokoll- und Fund-Owner sind das Raydium-Multisig im Mainnet; siehe
security/admin-and-multisig. Auf dem ursprünglichen Creator-only-Pfad ist der Creator-Unterzeichner das Konto, das in PoolState aufgezeichnet ist. Auf dem gebührenfreien Pfad zahlt der Aufrufer, um entweder fehlende Creator-ATA zu erstellen. Das Programm beschränkt creator auf pool_state.pool_creator und leitet jedes Ziel von diesem Creator plus dem entsprechenden Vault-Mint und Token-Programm ab, also kann der Aufrufer Gelder nicht umleiten.
Ändern einer Gebühren-Stufe
Gebührensätze können vom Admin viaUpdateAmmConfig geändert werden (siehe products/cpmm/instructions). Änderungen treten beim nächsten Swap für jeden Pool, der an diese AmmConfig gebunden ist, in Kraft — es gibt keine Migration, da Pools die Konfiguration bei jedem Swap laden.
Was der Admin nicht tun kann:
- Einen Pool von einer
AmmConfigzu einer anderen verschieben. - Bereits aufgelaufene Gebühren rückwirkend neu bewerten.
- Gebühren ohne den
protocol_owner/fund_owner-Unterzeichner einziehen.
Gebühren aus einem laufenden Pool lesen
Lösen Sie den Share-Satz On-Chain auf, nicht aus einer gecachten Konfiguration.
creator_fee_share_rate ist ein neu hinzugefügtes AmmConfig-Feld, also lesen Sie es vom Konto, anstatt anzunehmen, dass die REST-Konfiguration-Payload es trägt, und prüfen Sie, ob eine CreatorFeeShare-PDA bei ["creator_fee_share", creator, ammConfig] existiert, bevor Sie einem Creator ihre Auszahlung anbieten. Eine fehlende PDA ist der häufige Fall und bedeutet, dass der Konfiguration-Standard angewendet wird.Vergleich mit CLMM und AMM v4
Siehereference/fee-comparison für eine Seite-an-Seite-Matrix. Zusammenfassung:
- AMM v4 verwendet eine feste 0,25%-Handelsgebühr mit einer anderen LP-/Protokoll-Aufteilung und keine Fund-Gebühr.
- CLMM-Gebühren sind pro-Tick-Spacing-Stufe, aufgelaufen pro-Position (nicht pro-Pool), und beansprucht via
DecreaseLiquidityoderCollectFees.
Wo es weitergeht
products/cpmm/math— wo die Handelsgebühren-Abzug in die Kurve einfließt.products/cpmm/instructions— dieCollect*-Anweisungs-Kontolisten, einschließlich descreator_fee_share-Kontos, das beide Creator-Pfade jetzt erfordern.algorithms/token-2022-transfer-fees— wie man eine Pool-Handelsgebühr mit einer Mint-Transfergebühr korrekt kombiniert.

