Skip to main content
Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.Xem bản tiếng Anh →

Hai phí độc lập, bốn điểm đến

CPMM tính hai phí có tỷ lệ riêng biệt trên mỗi swap:
  1. Phí giao dịch — được tính theo AmmConfig.trade_fee_rate và chia thành ba điểm đến:
    • Phần LP — nằm trong vault và làm tăng k. Được yêu cầu ngầm bằng cách đốt token LP.
    • Phần giao thức — tích lũy vào PoolState.protocol_fees_token*; được quét bởi protocol_owner thông qua CollectProtocolFee.
    • Phần quỹ — tích lũy vào PoolState.fund_fees_token*; được quét bởi fund_owner thông qua CollectFundFee.
  2. Phí tạo pool (tùy chọn, theo pool) — được tính theo AmmConfig.creator_fee_rate độc lập với phí giao dịch và tích lũy vào PoolState.creator_fees_token*. Người tạo pool có thể quét nó thông qua CollectCreatorFee, hoặc bất kỳ người thanh toán nào có thể kích hoạt đường dẫn CollectCreatorFeePermissionless bị ràng buộc bởi điểm đến. Chỉ hoạt động khi pool được tạo với enable_creator_fee = true. Kể từ bản nâng cấp 2026-09-19, phí tạo pool tích lũy được chia một lần nữa tại thời điểm thu thập: một phần có thể cấu hình được chuyển vào bucket giao thức của pool và chỉ phần còn lại đến người tạo pool — xem Phần giao thức của phí tạo pool.
Phí tạo pool không phải là một phần của phí giao dịch. Hai tỷ lệ được cộng lại khi phí được lấy trên đầu vào swap, nhưng mỗi tỷ lệ vẫn là bucket riêng của nó — các phần giao thức và quỹ được lấy trên swap luôn được lấy từ trade_fee chỉ, không bao giờ từ creator_fee. Một pool với creator_fee_rate = 1000 (0,10%) và trade_fee_rate = 2500 (0,25%) tính phí kết hợp 0,35% của đầu vào trên swap có phí tạo pool trên đầu vào, trong đó bucket tạo pool nhận 0,10% và bucket phí giao dịch nhận 0,25%. Phần giao thức của phí tạo pool hoạt động theo cách khác và dễ bị nhầm lẫn với phần trên: nó được cắt từ bucket tạo pool, không phải từ phí giao dịch, và không phải trên swap — nó được áp dụng khi CollectCreatorFee hoặc CollectCreatorFeePermissionless giải quyết số dư tích lũy. Toán học swap không thay đổi bởi nó. Các tỷ lệ phí giao dịch (trade_fee_rate, protocol_fee_rate, fund_fee_rate), creator_fee_rate và creator_fee_share_rate mặc định đều nằm trên AmmConfig. Cờ enable_creator_fee theo pool và chế độ creator_fee_on (phía nào của giao dịch mà phí tạo pool được lấy từ) nằm trên PoolState. Một ghi đè tỷ lệ chia cho mỗi người tạo pool nằm trên PDA CreatorFeeShare riêng của nó. Xem products/cpmm/accounts.

Tỷ lệ và đơn vị

Tất cả tỷ lệ là u64 được tính bằng đơn vị 1 / FEE_RATE_DENOMINATOR trong đó FEE_RATE_DENOMINATOR = 1_000_000.
  • trade_fee_rate là một phần của khối lượng swap. 2500 ⇒ 0,25% của phía liên quan (đầu vào hoặc đầu ra, tùy thuộc vào creator_fee_on — xem “Phía nào của giao dịch mà phí được lấy từ” bên dưới).
  • creator_fee_rate là một phần của khối lượng swap, được lấy riêng biệt từ phí giao dịch. 1000 ⇒ 0,10% của phía liên quan.
  • protocol_fee_rate và fund_fee_rate là các phần của phí giao dịch, không phải của khối lượng. 120_000 ⇒ 12% của phí giao dịch.
  • creator_fee_share_rate là một phần của phí tạo pool tích lũy, không phải của khối lượng và không phải của phí giao dịch. 200_000 ⇒ 20% của bất kỳ gì nằm trong creator_fees_token* tại thời điểm nó được thu thập. 0 (mặc định) để lại toàn bộ phí tạo pool cho người tạo pool.
Các tham số mặc định cho AmmConfig[index=0] (pool “tiêu chuẩn” 0,25%) trên mainnet, để tham khảo: Vì vậy trên swap $1.000 so với AmmConfig[0] với enable_creator_fee = false: $2,50 tổng phí giao dịch, trong đó $2,10 ở lại với LP, $0,30 đi đến giao thức, $0,10 đến quỹ. Bucket tạo pool là 0 vì phí tạo pool bị vô hiệu hóa. Nếu cùng pool đó có enable_creator_fee = true và creator_fee_rate = 1000 (0,10%), người dùng trả thêm $1,00 cho bucket tạo pool — được lấy từ cùng phía của giao dịch được cấu hình bởi creator_fee_on — cho $3,50 tổng phí. Bucket phí giao dịch và các phần chia giao thức/quỹ của nó không thay đổi. Xác nhận các giá trị mainnet hiện tại so với GET https://api-v3.raydium.io/main/cpmm-config — tỷ lệ có thể thay đổi bởi quản trị viên và nên được đọc mới thay vì được mã hóa cứng.

Phần chia, trong mã

Ghi chú:
  • Tổng phí trên đầu vào làm tròn lên để pool không bao giờ tính phí thấp hơn.
  • Các phần chia của trade_fee (giao thức, quỹ) làm tròn xuống để tổng của chúng không bao giờ vượt quá trade_fee; phần còn lại là phần LP.
  • lp_share = trade_fee − protocol_fee − fund_fee (creator_fee không được trừ ở đây vì nó là bucket riêng của nó).
  • Phí tạo pool được lấy từ đầu vào hoặc đầu ra tùy thuộc vào PoolState.creator_fee_on (xem phần tiếp theo). Tỷ lệ không thay đổi bằng cách nào.

Phía nào của giao dịch mà phí được lấy từ

CPMM có cài đặt creator_fee_on theo pool (BothToken / OnlyToken0 / OnlyToken1) xác định xem phí tạo pool được lấy từ phía đầu vào hay phía đầu ra của một swap nhất định. Trợ giúp thời gian chạy is_creator_fee_on_input(direction) thu gọn nó thành boolean cho mỗi swap: Khi phí tạo pool ở phía đầu vào, cả phí giao dịch và phí tạo pool đều được trừ từ amount_in trước khi đường cong chạy. Toán học báo giá: lấy trade_rate + creator_rate kết hợp từ đầu vào. Khi phí tạo pool ở phía đầu ra, chỉ phí giao dịch được trừ từ amount_in; đường cong tạo ra đầu ra không có phí, sau đó phí tạo pool được trừ từ đầu ra đó. Toán học báo giá: lấy trade_rate từ đầu vào; lấy creator_rate từ đầu ra. Phí giao dịch luôn được lấy từ phía đầu vào (mô hình Uniswap-V2 tiêu chuẩn). Chỉ phí tạo pool có thể nằm trên đầu ra.

Cách phí “tích lũy” tương tác với đường cong

Một điểm tinh tế quan trọng: phí giao thức, quỹ và tạo pool vẫn nằm vật lý trong vault cho đến khi lệnh Collect* tương ứng được gọi. Nhưng chúng bị loại trừ khỏi chế độ xem vault balance của đường cong. Một bức tranh cụ thể sau một swap:
Chương trình sử dụng curve_x (và curve_y tương tự) khi thực thi k' ≥ k. Đây là cách phí không phải LP đạt được điểm đến của chúng mà không làm tăng phần LP của pool. Hậu quả bạn nên thiết kế xung quanh:
  • Báo giá từ raw balances là sai. Nếu bạn xây dựng một quoter từ getTokenAccountBalance, bạn sẽ liên tục phóng đại giá mà pool sẽ danh dự. Luôn trừ phí tích lũy, hoặc mô phỏng thông qua SwapBaseInput / API.
  • CollectProtocolFee không di chuyển giá. Nó di chuyển token ra khỏi vault và đặt lại các bộ đếm protocol_fees_token*, vì vậy curve_x và curve_y không thay đổi.
  • Phí LP không tích lũy vào bộ đếm. Chúng ngầm trong vault balance. Quyền của LP đối với phí LP tích lũy được thực hiện bằng cách đốt token LP (tức là thông qua Withdraw) — không có CollectLpFee.

Tương tác với phí chuyển Token-2022

Phí chuyển Token-2022 được áp dụng bởi mint, không phải bởi CPMM. Chúng hoạt động trên mỗi chuyển token — swap, gửi, rút và các quét Collect*. Toán học phí giao dịch của CPMM được tính dựa trên số tiền thực sự đã hạ cánh trong vault, tức là ròng của phí chuyển mint đầu vào (nếu có). Vì vậy trong trường hợp xấu nhất, người dùng trả ba loại thuế riêng biệt trên swap chính xác đầu vào:
  1. Phí chuyển mint đầu vào trên amount_in (cho cơ quan phí của mint).
  2. Phí trade_fee của pool trên phần còn lại (chia như trên).
  3. Phí chuyển mint đầu ra trên amount_out (cho cơ quan phí của mint).
Quoter của SDK tính toán cả ba để minimum_amount_out được tính bằng những gì người dùng thực sự nhận được. Nếu bạn đang viết quoter của riêng mình, phản ánh hành vi đó, hoặc các kiểm tra slippage của bạn sẽ quá hào phóng một cách có hệ thống. Xem algorithms/token-2022-transfer-fees để có phần dẫn xuất chi tiết.

Phí tạo pool

Phí tạo pool là tùy chọn và theo pool. Tỷ lệ nằm trên AmmConfig.creator_fee_rate; cờ bật và phía (creator_fee_on) nằm trên PoolState:
  • Bật tại tạo pool. Initialize đặt enable_creator_fee = false theo mặc định; các pool được tạo thông qua InitializeWithPermission (được sử dụng bởi các tốt nghiệp LaunchLab và các đường dẫn được gated khác) có thể chuyển enable_creator_fee = true và chọn creator_fee_on.
  • Tỷ lệ được chia sẻ với tầng phí. Tỷ lệ chính nó là AmmConfig.creator_fee_rate, cùng một giá trị trên mỗi pool được ràng buộc với cấu hình đó. Mỗi pool sau đó quyết định có tính phí nó (enable_creator_fee) và phía nào của swap để tính phí nó (creator_fee_on). Khi enable_creator_fee = false, tỷ lệ phí tạo pool hiệu quả của pool là zero bất kể giá trị cấu hình (xem PoolState::adjust_creator_fee_rate trong nguồn).
  • Độc lập với phí giao dịch. Phí tạo pool không bao giờ giảm phần LP / giao thức / quỹ — nó là tỷ lệ riêng của nó, được áp dụng riêng biệt, tích lũy trong các bộ đếm riêng của nó.
  • Được quét thông qua CollectCreatorFee hoặc CollectCreatorFeePermissionless. Đường dẫn gốc yêu cầu PoolState.pool_creator ký. Đường dẫn không cần phép cho phép bất kỳ người thanh toán nào kích hoạt bộ sưu tập nhưng sửa cả hai điểm đến thành ATA chính tắc của người tạo pool. Cả hai đường dẫn đều giải quyết phần giao thức trước — xem phần tiếp theo.
  • Không thể được bật lại hoặc định tuyến lại sau khi tạo. Một pool được khởi tạo với enable_creator_fee = false sẽ không bao giờ tính phí tạo pool; một pool được khởi tạo với một creator_fee_on cụ thể không thể chuyển đổi phía.
Phí tạo pool là cơ chế đằng sau mô hình “Burn & Earn” của Raydium: token LP bị khóa theo chương trình LP Lock để người tạo pool không thể rút thanh khoản, nhưng phí tạo pool tích lũy vẫn có thể được thu thập vô thời hạn.

Phần giao thức của phí tạo pool

Kể từ bản nâng cấp 2026-09-19, giao thức có thể giữ lại một phần có thể cấu hình của phí tạo pool. Không có gì về swap thay đổi: phí tạo pool vẫn được tính theo creator_fee_rate và vẫn tích lũy đầy đủ vào creator_fees_token{0,1}. Phần chia xảy ra một lần, tại thời điểm thu thập, bên trong CollectCreatorFee và CollectCreatorFeePermissionless.

Tỷ lệ đến từ đâu

Hai nguồn, theo thứ tự ưu tiên:
  1. PDA CreatorFeeShare — seeds ["creator_fee_share", creator, amm_config]. Khi tài khoản này tồn tại và được sở hữu bởi CPMM, share_rate của nó thắng. Nó cho phép giao thức thương lượng tỷ lệ cho mỗi người tạo pool trên một tầng phí nhất định mà không cần chạm vào tầng đó.
  2. AmmConfig.creator_fee_share_rate — mặc định cho mỗi người tạo pool trên tầng phí đó. Được sử dụng bất cứ khi nào PDA không tồn tại.
Cả hai đều là u64 trên cùng FEE_RATE_DENOMINATOR = 1_000_000, và cả hai đều bị giới hạn ở mẫu số. Các lệnh thu thập luôn lấy tài khoản creator_fee_share, ngay cả khi nó chưa bao giờ được tạo — chương trình kiểm tra xem nó có trống không và quay lại mặc định. Chuyển địa chỉ sai sẽ không thành công ràng buộc PDA, không phải fallback.

Phần chia làm gì

Được áp dụng độc lập cho creator_fees_token_0 và creator_fees_token_1, sau đó:
  • creator_amount_{0,1} được chuyển ra khỏi vault đến các tài khoản token của người tạo pool.
  • shared_amount_{0,1} được thêm vào protocol_fees_token_{0,1} và nằm trong vault cho đến khi chủ sở hữu giao thức quét nó bằng CollectProtocolFee. Không có lệnh riêng biệt và không có bộ đếm riêng biệt cho nó.
  • creator_fees_token_{0,1} được đặt lại về 0, chính xác như trước đây.
Ba thuộc tính đáng để dựa vào:
  • Làm tròn ưu tiên người tạo pool. Phần giao thức làm tròn xuống, vì vậy bụi nằm với người tạo pool — cùng hướng với protocol_fee và fund_fee, cũng cắt một phần từ một phí đã tích lũy.
  • Giá trị được bảo toàn. creator_amount + shared_amount == creator_fee cho mỗi tỷ lệ và mỗi phí, bao gồm u64::MAX.
  • share_rate = 0 là không hoạt động. Cả giá trị cấu hình mặc định và sự vắng mặt của PDA CreatorFeeShare để lại toàn bộ phí tạo pool với người tạo pool, đó là hành vi trước nâng cấp.

Điều đó có nghĩa gì đối với các nhà tích hợp

  • LP và báo giá không bị ảnh hưởng. Số tiền được chia sẻ di chuyển giữa hai bộ đếm cả hai đã bị loại trừ khỏi chế độ xem vault của đường cong (vault_amount_without_fee), vì vậy curve_x và curve_y không di chuyển trên một bộ sưu tập. k không bị chạm.
  • Một công cụ ước tính phí tạo pool đọc creator_fees_token* bây giờ phóng đại khoản thanh toán. Nhân với (1 − share_rate / 1_000_000) sử dụng tỷ lệ thực sự áp dụng cho cặp (creator, amm_config) đó, không phải mặc định cấu hình.
  • protocol_fees_token* phát triển bên ngoài swap. Một monitor điều hòa accrual giao thức so với khối lượng swap sẽ thấy bước nhảy ở mỗi bộ sưu tập phí tạo pool. Accrual giao thức không còn là trade_fee × protocol_fee_rate một mình.
  • Tỷ lệ có thể thay đổi giữa accrual và collection. Nó được đọc tại thời điểm thu thập, vì vậy phí tích lũy theo một tỷ lệ giải quyết ở bất kỳ tỷ lệ nào có hiệu lực khi ai đó gọi Collect*.
Tài khoản CreatorFeeShare được tạo và đóng bởi quản trị viên hoặc cơ quan có thẩm quyền chia sẻ phí tạo pool chuyên dụng thông qua CreateCreatorFeeShare / CloseCreatorFeeShare; đóng nó trả cặp về AmmConfig.creator_fee_share_rate. Bố cục tài khoản trong products/cpmm/accounts, địa chỉ trong reference/program-addresses.

Luồng hoạt động thu thập

Chủ sở hữu giao thức và quỹ là multisig Raydium trên mainnet; xem security/admin-and-multisig. Trên đường dẫn chỉ dành cho người tạo pool gốc, người ký người tạo pool là tài khoản được ghi lại trong PoolState. Trên đường dẫn không cần phép, người gọi trả tiền để tạo ATA người tạo pool bị thiếu. Chương trình ràng buộc creator với pool_state.pool_creator và lấy mỗi điểm đến từ người tạo pool đó cộng với mint vault tương ứng và chương trình token, vì vậy người gọi không thể chuyển hướng quỹ.

Thay đổi tầng phí

Tỷ lệ phí có thể được thay đổi bởi quản trị viên thông qua UpdateAmmConfig (xem products/cpmm/instructions). Các thay đổi có hiệu lực trên swap tiếp theo cho mỗi pool được ràng buộc với AmmConfig đó — không có di chuyển, vì các pool tải cấu hình mỗi swap. Những gì quản trị viên không thể làm:
  • Di chuyển pool từ một AmmConfig sang AmmConfig khác.
  • Định giá lại các phí đã tích lũy.
  • Thu thập phí mà không có người ký protocol_owner / fund_owner.

Đọc phí từ một pool đang chạy

Giải quyết tỷ lệ chia trên chuỗi, không phải từ cấu hình được lưu trong bộ nhớ cache. creator_fee_share_rate là trường AmmConfig mới được thêm vào, vì vậy hãy đọc nó từ tài khoản thay vì giả định payload cấu hình REST mang nó, và kiểm tra xem PDA CreatorFeeShare có tồn tại tại ["creator_fee_share", creator, ammConfig] trước khi báo giá cho người tạo pool khoản thanh toán của họ. Một PDA vắng mặt là trường hợp phổ biến và có nghĩa là mặc định cấu hình áp dụng.

So sánh với CLMM và AMM v4

Xem reference/fee-comparison để có ma trận so sánh song song. Tóm tắt:
  • AMM v4 sử dụng phí giao dịch cố định 0,25% với phần chia LP/giao thức khác và không có phí quỹ.
  • CLMM phí là theo tầng khoảng tick, tích lũy theo vị trí (không phải theo pool), và được yêu cầu thông qua DecreaseLiquidity hoặc CollectFees.

Tiếp theo đi đâu

  • products/cpmm/math — nơi phần trừ phí giao dịch cắm vào đường cong.
  • products/cpmm/instructions — danh sách tài khoản lệnh Collect*, bao gồm tài khoản creator_fee_share mà cả hai đường dẫn người tạo pool bây giờ yêu cầu.
  • algorithms/token-2022-transfer-fees — cách kết hợp phí giao dịch pool với phí chuyển mint một cách chính xác.
Nguồn: