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 mit
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 mit
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 zielgebundenenCollectCreatorFeePermissionless-Pfad auslösen. Aktiv nur, wenn der Pool mitenable_creator_fee = trueerstellt wurde.
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 sindu64s, angegeben 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.
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
- Die Gesamtgebühr auf Input rundet auf, damit der Pool nie unterberechnet.
- Die Unteraufteilungen von
trade_fee(Protokoll, Fund) runden ab, damit ihre Summetrade_feenie ü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_onvom 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-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-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 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 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
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, sodasscurve_xundcurve_yunverä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 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*-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:
- 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 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 aufAmmConfig.creator_fee_rate; das Enable-Flag und die Seite (creator_fee_on) befinden sich auf PoolState:
- Aktiviert bei Pool-Erstellung.
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 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). Wennenable_creator_fee = false, ist der effektive Creator-Gebühren-Satz des Pools unabhängig vom Config-Wert null (siehePoolState::adjust_creator_fee_ratein 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
CollectCreatorFeeoderCollectCreatorFeePermissionless. Der ursprüngliche Pfad erfordert, dassPoolState.pool_creatorsigniert. 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 = falseinitialisiert wurde, wird niemals eine Creator-Gebühr erheben; einer, der mit einem bestimmtencreator_fee_oninitialisiert wurde, kann nicht die Seiten wechseln.
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 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 Config 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
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-Tier, aufgelaufen pro-Position (nicht pro-Pool), und beansprucht via
DecreaseLiquidityoderCollectFees.
Nächste Schritte
products/cpmm/math— wo die Handelsgebühren-Abzug in die Kurve passt.products/cpmm/instructions— dieCollect*-Anweisungs-Kontolisten.algorithms/token-2022-transfer-fees— wie man eine Pool-Handelsgebühr mit einer Mint-Transfergebühr korrekt kombiniert.

