Skip to main content
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:
  1. Handelsgebühr — erhoben bei AmmConfig.trade_fee_rate und 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 den protocol_owner via CollectProtocolFee.
    • Fund-Anteil — aufgelaufen zu PoolState.fund_fees_token*; eingezogen durch den fund_owner via CollectFundFee.
  2. Creator-Gebühr (optional, pro Pool) — erhoben bei AmmConfig.creator_fee_rate unabhängig von der Handelsgebühr und aufgelaufen zu PoolState.creator_fees_token*. Der Creator kann sie über CollectCreatorFee einziehen, oder jeder Zahler kann den zielgebundenen Pfad CollectCreatorFeePermissionless auslösen. Aktiv nur, wenn der Pool mit enable_creator_fee = true erstellt 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.
Die Creator-Gebühr ist nicht ein Teil der Handelsgebühr. Die beiden Sätze werden addiert, wenn die Gebühr auf den Swap-Input erhoben wird, aber jede bleibt ihr eigener Bucket — die Protokoll- und Fund-Anteile, die bei einem Swap erhoben werden, stammen immer nur von 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 sind u64s, ausgedrückt in Einheiten von 1 / FEE_RATE_DENOMINATOR, wobei FEE_RATE_DENOMINATOR = 1_000_000.
  • trade_fee_rate ist ein Bruchteil des Swap-Volumens. 2500 ⇒ 0,25% der relevanten Seite (Input oder Output, abhängig von creator_fee_on — siehe „Von welcher Seite des Trades die Gebühren erhoben werden” unten).
  • creator_fee_rate ist ein Bruchteil des Swap-Volumens, erhoben separat von der Handelsgebühr. 1000 ⇒ 0,10% der relevanten Seite.
  • protocol_fee_rate und fund_fee_rate sind Bruchteile der Handelsgebühr, nicht des Volumens. 120_000 ⇒ 12% der Handelsgebühr.
  • creator_fee_share_rate ist ein Bruchteil der aufgelaufenen Creator-Gebühr, nicht des Volumens und nicht der Handelsgebühr. 200_000 ⇒ 20% von dem, was sich in creator_fees_token* zum Zeitpunkt der Einziehung befindet. 0 (Standard) lässt die gesamte Creator-Gebühr beim Creator.
Standard-Parameter für 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

Anmerkungen:
  • Die Gesamtgebühr auf Input rundet auf, damit der Pool nie unterberechnet.
  • Die Unter-Aufteilungen von trade_fee (Protokoll, Fund) runden ab, damit ihre Summe trade_fee nie ü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_on von 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-Einstellung creator_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 jeweilige Collect*-Anweisung aufgerufen wird. Aber sie sind von der Kurvenansicht des Vault-Saldos ausgeschlossen. Ein konkretes Bild nach einem Swap:
Das Programm verwendet 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 getTokenAccountBalance erstellen, werden Sie den Preis, den der Pool ehrt, konsistent überzeichnen. Subtrahieren Sie immer aufgelaufene Gebühren, oder simulieren Sie via SwapBaseInput / die API.
  • CollectProtocolFee bewegt den Preis nicht. Es bewegt Token aus dem Vault und setzt die protocol_fees_token*-Zähler auf Null, also bleiben curve_x und curve_y unverä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 kein CollectLpFee.

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 die Collect*-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:
  1. Die Transfergebühr des Input-Mints auf amount_in (an die Gebührenautorität des Mints).
  2. Die trade_fee des Pools auf den Rest (aufgeteilt wie oben).
  3. Die Transfergebühr des Output-Mints auf amount_out (an die Gebührenautorität des Mints).
Der Quoter des SDK berücksichtigt alle drei, also ist 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 auf AmmConfig.creator_fee_rate; das Enable-Flag und die Seite (creator_fee_on) befinden sich auf PoolState:
  • Bei Pool-Erstellung aktiviert. Initialize setzt enable_creator_fee = false standardmäßig; Pools, die über InitializeWithPermission erstellt werden (verwendet von LaunchLab-Graduierungen und anderen gated Pfaden), können enable_creator_fee = true übergeben und creator_fee_on wä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). Wenn enable_creator_fee = false, ist die effektive Creator-Gebührenrate des Pools unabhängig vom Konfigurationswert Null (siehe PoolState::adjust_creator_fee_rate im 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 CollectCreatorFee oder CollectCreatorFeePermissionless. Der ursprüngliche Pfad erfordert, dass PoolState.pool_creator signiert. 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 = false initialisiert wurde, wird nie eine Creator-Gebühr erheben; einer, der mit einem bestimmten creator_fee_on initialisiert wurde, kann nicht die Seiten wechseln.
Creator-Gebühren sind der Mechanismus hinter Raydiums „Burn & Earn”-Muster: LP-Token werden unter dem LP Lock-Programm gesperrt, damit der Creator keine Liquidität abheben kann, aber die aufgelaufenen Creator-Gebühren können immer noch unbegrenzt eingezogen werden.

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 bei creator_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:
  1. CreatorFeeShare-PDA — Seeds ["creator_fee_share", creator, amm_config]. Wenn dieses Konto existiert und von CPMM besessen wird, gewinnt sein share_rate. Es ermöglicht dem Protokoll, einen Pro-Creator-Satz auf einer bestimmten Gebühren-Stufe auszuhandeln, ohne die Stufe selbst zu berühren.
  2. AmmConfig.creator_fee_share_rate — der Standard für jeden Creator auf dieser Gebühren-Stufe. Verwendet, wenn die PDA nicht existiert.
Beide sind 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

Unabhängig auf 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 zu protocol_fees_token_{0,1} addiert und bleibt im Vault, bis der Protokoll-Owner es mit CollectProtocolFee einzieht. Es gibt keine separate Anweisung und keinen separaten Zähler dafür.
  • creator_fees_token_{0,1} werden auf Null gesetzt, genau wie zuvor.
Drei Eigenschaften, auf die Sie sich verlassen können:
  • Rundung bevorzugt den Creator. Der Protokoll-Anteil rundet ab, also bleibt Staub beim Creator — die gleiche Richtung wie protocol_fee und fund_fee, die auch einen Anteil aus einer bereits aufgelaufenen Gebühr herausschneiden.
  • Wert wird konserviert. creator_amount + shared_amount == creator_fee für jeden Satz und jede Gebühr, einschließlich u64::MAX.
  • share_rate = 0 ist ein No-Op. Sowohl der Standard-Konfigurationswert als auch das Fehlen einer CreatorFeeShare-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 sich curve_x und curve_y nicht über eine Einziehung. k ist 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 nur trade_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.
Das 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 via UpdateAmmConfig 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 AmmConfig zu 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

Siehe reference/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 DecreaseLiquidity oder CollectFees.

Wo es weitergeht

Quellen: