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 — 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) — 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 trả tiề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.
trade_fee chỉ, không bao giờ từ creator_fee. Một pool có 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 đó người tạo pool giữ 0,10% và bucket phí giao dịch nhận 0,25%.
Các tỷ lệ phí giao dịch (trade_fee_rate, protocol_fee_rate, fund_fee_rate) và creator_fee_rate đề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 tính) nằm trên PoolState. 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 tính” dưới đây).creator_fee_ratelà một phần của khối lượng swap, được tính riêng biệt với 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.
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 phí 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 phí tạo pool — được tính trên 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 của nó cho giao thức/quỹ 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 admin 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í thiếu.
- 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 tính 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 dù bằng cách nào.
Phía nào của giao dịch mà phí được tính
CPMM có cài đặtcreator_fee_on theo pool (BothToken / OnlyToken0 / OnlyToken1) xác định xem phí tạo pool được tính từ phía đầu vào hay đầu ra của một swap nhất định. Trình trợ giúp runtime is_creator_fee_on_input(direction) thu gọn nó thành một 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 curve chạy. Toán học quote: 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; curve tạo ra đầu ra không có phí, sau đó phí tạo pool được trừ từ đầu ra đó. Toán học quote: lấy trade_rate từ đầu vào; lấy creator_rate từ đầu ra.
Bản thân phí giao dịch luôn được tính trên 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 curve
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 curve.
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 đến đ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:
- Quoting từ raw balances là sai. Nếu bạn xây dựng 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ự đã đến vault, tức là ròng của phí chuyển của 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 đầu vào chính xác:
- Phí chuyển của mint đầu vào trên
amount_in(cho cơ quan quản lý phí của mint). trade_feecủa pool trên phần còn lại (chia theo trên).- Phí chuyển của mint đầu ra trên
amount_out(cho cơ quan quản lý 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 config đó. Mỗi pool sau đó quyết định có tính nó (enable_creator_fee) và phía nào của swap để tính 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ị config (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ó.
- 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 trả tiề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. - 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ớicreator_fee_oncụ thể không thể chuyển phía.
Luồng hoạt động bộ sưu tậ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ý 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 từng đ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 admin 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 config trên mỗi swap.
Những gì admin không thể làm:
- Di chuyển pool từ
AmmConfignày sangAmmConfigkhá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
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ỹ.
- Phí CLMM 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 curve.products/cpmm/instructions— danh sách tài khoản lệnhCollect*.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.

