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 — 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) — 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 trả tiề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.
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 tính trên đầu vào swap, nhưng mỗi tỷ lệ vẫn là một bucket riêng — phần giao thức và quỹ luôn được lấy từ 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_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 tính” dưới đây).
  • creator_fee_rate là 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_ratefund_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.
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 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 = truecreator_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ã

Ghi chú:
  • 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 đặt creator_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ệnh Collect* 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:
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 đế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 qua SwapBaseInput / API.
  • CollectProtocolFee không di chuyển giá. Nó di chuyển token ra khỏi vault đặt lại các bộ đếm protocol_fees_token*, vì vậy curve_xcurve_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ự đã đế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:
  1. Phí chuyển của mint đầu vào trên amount_in (cho cơ quan quản lý phí của mint).
  2. trade_fee của pool trên phần còn lại (chia theo trên).
  3. Phí chuyển của mint đầu ra trên amount_out (cho cơ quan quản lý 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ậtphí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 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). Khi enable_creator_fee = false, tỷ lệ phí tạo pool hiệu quả của pool là zero bất kể giá trị config (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ó.
  • 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 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 = false sẽ không bao giờ tính phí tạo pool; một pool được khởi tạo với creator_fee_on cụ thể không thể chuyển 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.

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 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 config trên mỗi swap. Những gì admin không thể làm:
  • Di chuyển pool từ AmmConfig này 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

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ỹ.
  • 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 DecreaseLiquidity hoặc CollectFees.

Tiếp theo đi đâu

Nguồn: