Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →

兩項獨立手續費,四個目的地

CPMM 對每筆交易收取兩項獨立費率的手續費
  1. 交易手續費 — 按 AmmConfig.trade_fee_rate 收取,分配給三個目的地:
    • LP 份額 — 保留在金庫中並增加 k。透過銷毀 LP 代幣隱含地領取。
    • 協議份額 — 累積到 PoolState.protocol_fees_token*;由 protocol_owner 透過 CollectProtocolFee 提取。
    • 基金份額 — 累積到 PoolState.fund_fees_token*;由 fund_owner 透過 CollectFundFee 提取。
  2. 創作者手續費(可選,按池) — 按 AmmConfig.creator_fee_rate 收取,獨立於交易手續費,累積到 PoolState.creator_fees_token*。創作者可透過 CollectCreatorFee 提取,或任何支付者可觸發目的地受限的 CollectCreatorFeePermissionless 路徑。僅在池以 enable_creator_fee = true 建立時有效。
創作者手續費不是交易手續費的一部分。兩項費率在交易輸入時一起收取,但各自保持獨立的桶 — 協議和基金份額始終僅來自 trade_fee,永遠不來自 creator_fee。一個 creator_fee_rate = 1000(0.10%)和 trade_fee_rate = 2500(0.25%)的池在創作者手續費按輸入計算的交易中收取輸入的 0.35%,其中創作者保留 0.10%,交易手續費桶獲得 0.25%。 交易手續費費率(trade_fee_rateprotocol_fee_ratefund_fee_rate)和 creator_fee_rate 都位於 AmmConfig 上。按池的 enable_creator_fee 標誌和 creator_fee_on 模式(創作者手續費從交易的哪一側收取)位於 PoolState 上。參見 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_ratefund_fee_rate交易手續費的分數,不是交易量的分數。120_000 ⇒ 交易手續費的 12%。
主網上 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 = truecreator_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_xcurve_y 保持不變。
  • LP 手續費不累積到計數器。 它們隱含在金庫餘額中。LP 對累積 LP 手續費的權利透過銷毀 LP 代幣(即透過 Withdraw)行使 — 沒有 CollectLpFee

與 Token-2022 轉帳手續費的互動

Token-2022 轉帳手續費由鑄幣廠應用,不是由 CPMM 應用。它們作用於每筆代幣轉帳 — 交易、存款、提款和 Collect* 提取。CPMM 的交易手續費數學根據實際進入金庫的金額計算,即淨輸入鑄幣廠的轉帳手續費(如果有的話)。 因此,在最壞的情況下,使用者在輸入精確交易上支付三項不同的稅:
  1. 輸入鑄幣廠在 amount_in 上的轉帳手續費(給鑄幣廠的手續費權限)。
  2. 池在餘額上的 trade_fee(按上述分配)。
  3. 輸出鑄幣廠在 amount_out 上的轉帳手續費(給鑄幣廠的手續費權限)。
SDK 的報價器考慮所有三項,所以 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 / 協議 / 基金份額 — 它是自己的費率,單獨應用,在自己的計數器中累積。
  • 透過 CollectCreatorFeeCollectCreatorFeePermissionless 提取。 原始路徑需要 PoolState.pool_creator 簽署。無許可路徑讓任何支付者觸發收集,但將兩個目的地固定為創作者的規範 ATA。
  • 建立後無法重新啟用或重新路由。enable_creator_fee = false 初始化的池將永遠不會收取創作者手續費;以特定 creator_fee_on 初始化的池無法切換側面。
創作者手續費是 Raydium「燒毀與賺取」模式背後的機制:LP 代幣在 LP Lock 程式下鎖定,所以創作者無法提取流動性,但累積的創作者手續費仍可無限期收集。

收集操作流程

協議和基金所有者是主網上的 Raydium 多簽;參見 security/admin-and-multisig。在原始創作者專用路徑上,創作者簽署者是 PoolState 中記錄的帳戶。在無許可路徑上,呼叫者支付以建立任何遺漏的創作者 ATA。程式將 creator 限制為 pool_state.pool_creator 並從該創作者加上相應的金庫鑄幣廠和代幣程式推導每個目的地,所以呼叫者無法重定向資金。

變更費用層級

費率可由管理員透過 UpdateAmmConfig 變更(見 products/cpmm/instructions)。變更在下一筆交易對綁定到該 AmmConfig 的每個池生效 — 沒有遷移,因為池在每筆交易時載入配置。 管理員無法做的:
  • 將池從一個 AmmConfig 移到另一個。
  • 追溯重新定價已累積的手續費。
  • 在沒有 protocol_owner / fund_owner 簽署者的情況下收集手續費。

從執行中的池讀取手續費

與 CLMM 和 AMM v4 的比較

參見 reference/fee-comparison 以獲得並排矩陣。摘要:
  • AMM v4 使用固定 0.25% 交易手續費,具有不同的 LP/協議分配且沒有基金手續費。
  • CLMM 手續費按 tick 間距層級,按位置累積(不是按池),並透過 DecreaseLiquidityCollectFees 領取。

下一步

來源: