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 mit 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 mit 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 CollectCreatorFeePermissionless-Pfad auslösen. Aktiv nur, wenn der Pool mit enable_creator_fee = true erstellt wurde.
Die Creator-Gebühr ist kein Anteil der Handelsgebühr. Die beiden Sätze werden zusammengezählt, wenn die Gebühr auf dem Swap-Input erhoben wird, aber jede bleibt ihr eigener Bucket — die Protokoll- und Fund-Anteile werden immer nur von trade_fee abgeleitet, niemals 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 die 0,10% behält und der Handelsgebühr-Bucket die 0,25% erhält. Die Handelsgebühren-Sätze (trade_fee_rate, protocol_fee_rate, fund_fee_rate) und der creator_fee_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. Siehe products/cpmm/accounts.

Sätze und Einheiten

Alle Sätze sind u64s, angegeben 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.
Standardparameter für AmmConfig[index=0] (der „Standard”-0,25%-Pool) auf Mainnet, zur Referenz: Bei einem $1.000-Swap gegen AmmConfig[0] mit enable_creator_fee = false: $2,50 Gesamthandelsgebühr, von der $2,10 bei 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

Hinweise:
  • Die Gesamtgebühr auf Input rundet auf, damit der Pool nie unterberechnet.
  • Die Unteraufteilungen von trade_fee (Protokoll, Fund) runden ab, damit ihre Summe trade_fee nie übersteigt; 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 vom Input oder Output 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-Helper 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. Wenn die Creator-Gebühr auf der Output-Seite ist, wird nur die Handelsgebühr von amount_in abgezogen; die Kurve erzeugt einen ungebührten Output, dann wird die Creator-Gebühr von diesem Output abgezogen. Quote-Mathematik: Nehmen Sie trade_rate vom Input; nehmen Sie creator_rate vom Output. Die Handelsgebühr selbst wird immer auf 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 Erzwingen 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 rohen 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, sodass curve_x und curve_y unverändert bleiben.
  • 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*-Einzüge. 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, sodass minimum_amount_out in dem angegeben ist, 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:
  • Aktiviert bei Pool-Erstellung. 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 dem Gebühren-Tier geteilt. Der Satz selbst ist AmmConfig.creator_fee_rate, der gleiche Wert über jeden Pool, der an diese Config 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 der effektive Creator-Gebühren-Satz des Pools unabhängig vom Config-Wert null (siehe PoolState::adjust_creator_fee_rate in der Quelle).
  • Unabhängig von der Handelsgebühr. Die Creator-Gebühr reduziert niemals 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 erlaubnislose Pfad lässt jeden Zahler die Einziehung auslösen, aber fixiert beide Ziele auf die kanonischen ATAs des Creators.
  • Kann nach der Erstellung nicht erneut aktiviert oder umgeleitet werden. Ein Pool, der mit enable_creator_fee = false initialisiert wurde, wird niemals 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, sodass der Creator keine Liquidität abheben kann, aber die aufgelaufenen Creator-Gebühren können immer noch unbegrenzt eingezogen werden.

Einzugs-Operationsablauf

Protokoll- und Fund-Owner sind das Raydium-Multisig auf 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 erlaubnislosen Pfad zahlt der Aufrufer, um fehlende Creator-ATAs 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, sodass der Aufrufer Gelder nicht umleiten kann.

Ändern eines Gebühren-Tiers

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 Config 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

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-Tier, aufgelaufen pro-Position (nicht pro-Pool), und beansprucht via DecreaseLiquidity oder CollectFees.

Nächste Schritte

Quellen: