本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
兩項獨立費用,四個目的地
CPMM 對每筆交易收取兩項獨立費率的費用:- 交易費 — 按
AmmConfig.trade_fee_rate收取,分配給三個目的地:- LP 份額 — 保留在金庫中並增加
k。通過燒毀 LP 代幣隱式領取。 - 協議份額 — 累積到
PoolState.protocol_fees_token*;由protocol_owner通過CollectProtocolFee掃除。 - 基金份額 — 累積到
PoolState.fund_fees_token*;由fund_owner通過CollectFundFee掃除。
- LP 份額 — 保留在金庫中並增加
- 創作者費(可選,按池) — 按
AmmConfig.creator_fee_rate收取,獨立於交易費,累積到PoolState.creator_fees_token*。創作者可以通過CollectCreatorFee掃除它,或任何支付者可以觸發目的地受限的CollectCreatorFeePermissionless路徑。僅在使用enable_creator_fee = true創建池時有效。自 2026-09-19 升級以來,累積的創作者費在收集時再次分割:可配置的份額被移入池的協議桶,只有剩餘部分到達創作者 — 見創作者費的協議份額。
trade_fee,永遠不來自 creator_fee。具有 creator_fee_rate = 1000(0.10%)和 trade_fee_rate = 2500(0.25%)的池在創作者費按輸入計算的交易中收取輸入的 0.35%,其中創作者桶獲得 0.10%,交易費桶獲得 0.25%。
創作者費的協議份額方向相反,容易與上述混淆:它是從創作者桶中切割出來的,不是從交易費中,也不是在交易時 — 它在 CollectCreatorFee 或 CollectCreatorFeePermissionless 結算累積餘額時應用。交易數學不受其影響。
交易費費率(trade_fee_rate、protocol_fee_rate、fund_fee_rate)、creator_fee_rate 和默認 creator_fee_share_rate 都位於 AmmConfig 上。按池的 enable_creator_fee 標誌和 creator_fee_on 模式(從交易的哪一側收取創作者費)位於 PoolState 上。按創作者的份額費率覆蓋位於其自己的 CreatorFeeShare PDA 上。見products/cpmm/accounts。
費率和單位
所有費率都是u64,以 1 / FEE_RATE_DENOMINATOR 的單位計,其中 FEE_RATE_DENOMINATOR = 1_000_000。
trade_fee_rate是交易量的一部分。2500⇒ 相關側(輸入或輸出,取決於creator_fee_on— 見下面的「從交易的哪一側收取費用」)的 0.25%。creator_fee_rate是交易量的一部分,獨立於交易費收取。1000⇒ 相關側的 0.10%。protocol_fee_rate和fund_fee_rate是交易費的一部分,不是交易量。120_000⇒ 交易費的 12%。creator_fee_share_rate是累積創作者費的一部分,不是交易量,也不是交易費。200_000⇒ 收集時creator_fees_token*中任何內容的 20%。0(默認值)將整個創作者費留給創作者。
AmmConfig[index=0](「標準」0.25% 池)的默認參數,供參考:
因此,在針對
AmmConfig[0] 的 $1,000 交易中,enable_creator_fee = false:$2.50 總交易費,其中 $2.10 留給 LP,$0.30 給協議,$0.10 給基金。創作者桶為 0,因為創作者費被禁用。
如果同一池具有 enable_creator_fee = true 和 creator_fee_rate = 1000(0.10%),用戶向創作者桶支付額外的 $1.00 — 從由 creator_fee_on 配置的交易同一側收取 — 總費用為 $3.50。交易費桶及其協議/基金分割保持不變。
根據 GET https://api-v3.raydium.io/main/cpmm-config 確認當前主網值 — 費率是管理員可變的,應該新鮮讀取而不是硬編碼。
代碼中的分割
- 輸入上的總費用向上舍入,因此池永遠不會少收費用。
trade_fee的子分割(協議、基金)向下舍入,因此它們的總和永遠不超過trade_fee;剩餘部分是 LP 份額。lp_share = trade_fee − protocol_fee − fund_fee(creator_fee 不在此處減去,因為它是自己的桶)。- 創作者費從輸入或輸出側收取,取決於
PoolState.creator_fee_on(見下一部分)。費率無論哪種方式都不變。
從交易的哪一側收取費用
CPMM 有一個按池的creator_fee_on 設置(BothToken / OnlyToken0 / OnlyToken1),決定創作者費是從給定交易的輸入側還是輸出側收取。運行時幫助程序 is_creator_fee_on_input(direction) 將其按交易折疊為布爾值:
當創作者費在輸入側時,交易費和創作者費都在曲線運行前從
amount_in 中扣除。報價數學:從輸入中取出組合的 trade_rate + creator_rate。
當創作者費在輸出側時,只有交易費從 amount_in 中扣除;曲線產生無費用的輸出,然後創作者費從該輸出中扣除。報價數學:從輸入中取出 trade_rate;從輸出中取出 creator_rate。
交易費本身始終從輸入側收取(標準 Uniswap-V2 模式)。只有創作者費可以在輸出上。
「累積」費用如何與曲線交互
一個重要的微妙之處:協議、基金和創作者費在物理上保留在金庫中,直到調用各自的Collect* 指令。但它們被排除在曲線對金庫餘額的視圖之外。
一筆交易後的具體情況:
k' ≥ k 時使用 curve_x(和類似的 curve_y)。這是非 LP 費用到達其目的地而不膨脹 LP 池份額的方式。
你應該圍繞設計的後果:
- 從原始餘額報價是錯誤的。 如果你從
getTokenAccountBalance構建報價器,你將始終高估池將接受的價格。始終減去累積費用,或通過SwapBaseInput/ API 模擬。 CollectProtocolFee不移動價格。 它將代幣移出金庫並將protocol_fees_token*計數器歸零,因此curve_x和curve_y保持不變。- LP 費用不累積到計數器。 它們隱含在金庫餘額中。LP 對累積 LP 費用的權利通過燒毀 LP 代幣(即通過
Withdraw)行使 — 沒有CollectLpFee。
與 Token-2022 轉移費的交互
Token-2022 轉移費由鑄幣廠應用,不是由 CPMM。它們作用於每筆代幣轉移 — 交易、存款、提款和Collect* 掃除。CPMM 的交易費數學是根據實際進入金庫的金額計算的,即淨輸入鑄幣廠的轉移費(如果有的話)。
因此,在最壞的情況下,用戶在輸入精確交易上支付三項不同的稅:
- 輸入鑄幣廠在
amount_in上的轉移費(給鑄幣廠的費用權限)。 - 池的
trade_fee在剩餘部分上(按上述分割)。 - 輸出鑄幣廠在
amount_out上的轉移費(給鑄幣廠的費用權限)。
minimum_amount_out 以用戶實際收到的計價。如果你正在編寫自己的報價器,鏡像該行為,否則你的滑點檢查將系統性地過於寬鬆。
見algorithms/token-2022-transfer-fees以獲得詳細推導。
創作者費
創作者費是可選的且按池。費率位於AmmConfig.creator_fee_rate;啟用標誌和側面(creator_fee_on)位於 PoolState:
- 在池創建時啟用。
Initialize默認設置enable_creator_fee = false;通過InitializeWithPermission創建的池(由 LaunchLab 畢業和其他受限路徑使用)可以傳遞enable_creator_fee = true並選擇creator_fee_on。 - 費率與費用層共享。 費率本身是
AmmConfig.creator_fee_rate,綁定到該配置的每個池的相同值。然後每個池決定是否收取它(enable_creator_fee)以及從交易的哪一側收取它(creator_fee_on)。當enable_creator_fee = false時,池的有效創作者費率為零,無論配置值如何(見源中的PoolState::adjust_creator_fee_rate)。 - 獨立於交易費。 創作者費永遠不會減少 LP / 協議 / 基金份額 — 它是自己的費率,單獨應用,在自己的計數器中累積。
- 通過
CollectCreatorFee或CollectCreatorFeePermissionless掃除。 原始路徑需要PoolState.pool_creator簽名。無許可路徑讓任何支付者觸發收集,但將兩個目的地固定為創作者的規範 ATA。兩條路徑都先結算協議的份額 — 見下一部分。 - 創建後無法重新啟用或重新路由。 使用
enable_creator_fee = false初始化的池將永遠不會收取創作者費;使用特定creator_fee_on初始化的池無法切換側面。
創作者費的協議份額
自 2026-09-19 升級以來,協議可以保留創作者費的可配置份額。交易沒有任何變化:創作者費仍按creator_fee_rate 收取,仍完全累積到 creator_fees_token{0,1}。分割發生一次,在收集時,在 CollectCreatorFee 和 CollectCreatorFeePermissionless 內部。
費率來自何處
兩個來源,按優先順序:CreatorFeeSharePDA — 種子["creator_fee_share", creator, amm_config]。當此帳戶存在且由 CPMM 擁有時,其share_rate獲勝。它讓協議在給定費用層上協商按創作者費率,而無需觸及層本身。AmmConfig.creator_fee_share_rate— 該費用層上每個創作者的默認值。在 PDA 不存在時使用。
FEE_RATE_DENOMINATOR = 1_000_000 上的 u64,並且都被限制在分母。收集指令始終採用 creator_fee_share 帳戶,即使它從未被創建 — 程序檢查它是否為空並回退到配置。傳遞錯誤的地址會失敗 PDA 約束,而不是回退。
分割做什麼
creator_fees_token_0 和 creator_fees_token_1,然後:
creator_amount_{0,1}從金庫轉移到創作者的代幣帳戶。shared_amount_{0,1}被添加到protocol_fees_token_{0,1}並保留在金庫中,直到協議所有者用CollectProtocolFee掃除它。沒有單獨的指令,也沒有單獨的計數器。creator_fees_token_{0,1}被歸零,與之前完全相同。
- 舍入有利於創作者。 協議份額向下舍入,因此塵埃留給創作者 — 與
protocol_fee和fund_fee相同方向,它們也從已累積的費用中切割份額。 - 價值被保守。
creator_amount + shared_amount == creator_fee對於每個費率和每個費用,包括u64::MAX。 share_rate = 0是無操作。 默認配置值和CreatorFeeSharePDA 的缺失都將整個創作者費留給創作者,這是升級前的行為。
對集成商的含義
- LP 和報價不受影響。 共享金額在兩個計數器之間移動,這兩個計數器都已經被排除在曲線對金庫的視圖之外(
vault_amount_without_fee),因此curve_x和curve_y在收集時不移動。k保持不變。 - 讀取
creator_fees_token*的創作者費估計器現在高估了支付。 使用實際適用於該(creator, amm_config)對的費率乘以(1 − share_rate / 1_000_000),而不是配置默認值。 protocol_fees_token*在交易外增長。 監視協議累積與交易量的監視器將在每次創作者費收集時看到跳躍。協議累積不再僅是trade_fee × protocol_fee_rate。- 費率可以在累積和收集之間改變。 它在收集時讀取,因此在某人調用
Collect*時,在一個費率下累積的費用以任何有效的費率結算。
CreatorFeeShare 帳戶由管理員或專用創作者費份額權限通過 CreateCreatorFeeShare / CloseCreatorFeeShare 創建和關閉;關閉它將對返回到 AmmConfig.creator_fee_share_rate。帳戶佈局在 products/cpmm/accounts,地址在 reference/program-addresses。
收集操作流程
協議和基金所有者是主網上的 Raydium 多簽;見
security/admin-and-multisig。在原始創作者專用路徑上,創作者簽名者是記錄在 PoolState 中的帳戶。在無許可路徑上,調用者支付創建任何缺失的創作者 ATA。程序將 creator 限制為 pool_state.pool_creator 並從該創作者加上相應的金庫鑄幣廠和代幣程序派生每個目的地,因此調用者無法重定向資金。
更改費用層
費率可以由管理員通過UpdateAmmConfig 更改(見 products/cpmm/instructions)。更改在下一筆交易對綁定到該 AmmConfig 的每個池生效 — 沒有遷移,因為池在每筆交易時加載配置。
管理員不能做的:
- 將池從一個
AmmConfig移動到另一個。 - 追溯重新定價已累積的費用。
- 在沒有
protocol_owner/fund_owner簽名者的情況下收集費用。
從運行中的池讀取費用
在鏈上解決份額費率,而不是從緩存配置。
creator_fee_share_rate 是新添加的 AmmConfig 欄位,因此從帳戶讀取它,而不是假設 REST 配置有效負載攜帶它,並在 ["creator_fee_share", creator, ammConfig] 檢查 CreatorFeeShare PDA 是否存在,然後向創作者報價支付。缺失的 PDA 是常見情況,意味著配置默認值適用。與 CLMM 和 AMM v4 的比較
見reference/fee-comparison 以獲得並排矩陣。摘要:
- AMM v4 使用固定的 0.25% 交易費,具有不同的 LP/協議分割,沒有基金費。
- CLMM 費用按刻度間距層,按位置累積(不是按池),並通過
DecreaseLiquidity或CollectFees領取。
下一步去哪裡
products/cpmm/math— 交易費扣除插入曲線的位置。products/cpmm/instructions—Collect*指令帳戶列表,包括兩個創作者路徑現在需要的creator_fee_share帳戶。algorithms/token-2022-transfer-fees— 如何正確組合池交易費和鑄幣廠轉移費。

