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:- Phí giao dịch — được tính theo
AmmConfig.trade_fee_ratevà 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ởiprotocol_ownerthông quaCollectProtocolFee. - Phần quỹ — tích lũy vào
PoolState.fund_fees_token*; được quét bởifund_ownerthông quaCollectFundFee.
- Phần LP — nằm trong vault và làm tăng
- 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àoPoolState.creator_fees_token*. Người tạo pool có thể quét nó thông quaCollectCreatorFee, hoặc bất kỳ người thanh toán nào có thể kích hoạt đường dẫnCollectCreatorFeePermissionlessbị ràng buộc bởi điểm đến. Chỉ hoạt động khi pool được tạo vớienable_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.
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_ratelà 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àocreator_fee_on— xem “Phía nào của giao dịch mà phí được lấy từ” bên dưới).creator_fee_ratelà 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_ratevàfund_fee_ratelà 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_ratelà 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 trongcreator_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.
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ã
- 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 đặtcreator_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ệnhCollect* 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:
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 quaSwapBaseInput/ API. CollectProtocolFeekhông di chuyển giá. Nó di chuyển token ra khỏi vault và đặt lại các bộ đếmprotocol_fees_token*, vì vậycurve_xvàcurve_ykhô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étCollect*. 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:
- Phí chuyển mint đầu vào trên
amount_in(cho cơ quan phí của mint). - Phí
trade_feecủa pool trên phần còn lại (chia như trên). - Phí chuyển mint đầu ra trên
amount_out(cho cơ quan phí của mint).
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ênAmmConfig.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đặtenable_creator_fee = falsetheo mặc định; các pool được tạo thông quaInitializeWithPermission(đượ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ểnenable_creator_fee = truevà chọncreator_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). Khienable_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 (xemPoolState::adjust_creator_fee_ratetrong 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
CollectCreatorFeehoặcCollectCreatorFeePermissionless. Đường dẫn gốc yêu cầuPoolState.pool_creatorký. Đườ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 = falsesẽ không bao giờ tính phí tạo pool; một pool được khởi tạo với mộtcreator_fee_oncụ thể không thể chuyển đổi phía.
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 theocreator_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:- 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_ratecủ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 đó. 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.
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ì
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àoprotocol_fees_token_{0,1}và nằm trong vault cho đến khi chủ sở hữu giao thức quét nó bằngCollectProtocolFee. 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.
- 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_feevà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_feecho mỗi tỷ lệ và mỗi phí, bao gồmu64::MAX. share_rate = 0là không hoạt động. Cả giá trị cấu hình mặc định và sự vắng mặt của PDACreatorFeeShaređể 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ậycurve_xvàcurve_ykhông di chuyển trên một bộ sưu tập.kkhô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_ratemộ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*.
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 quaUpdateAmmConfig (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
AmmConfigsangAmmConfigkhá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
Xemreference/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
DecreaseLiquidityhoặcCollectFees.
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ệnhCollect*, bao gồm tài khoảncreator_fee_sharemà 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.

