Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Dua biaya independen, empat tujuan
CPMM mengenakan dua biaya dengan tarif terpisah pada setiap swap:- Biaya perdagangan — dikenakan pada
AmmConfig.trade_fee_ratedan dibagi antara tiga tujuan:- Bagian LP — tetap di vault dan menambah
k. Diklaim secara implisit dengan membakar token LP. - Bagian protokol — terakumulasi ke
PoolState.protocol_fees_token*; dikumpulkan olehprotocol_ownermelaluiCollectProtocolFee. - Bagian dana — terakumulasi ke
PoolState.fund_fees_token*; dikumpulkan olehfund_ownermelaluiCollectFundFee.
- Bagian LP — tetap di vault dan menambah
- Biaya kreator (opsional, per-pool) — dikenakan pada
AmmConfig.creator_fee_ratesecara independen dari biaya perdagangan dan terakumulasi kePoolState.creator_fees_token*. Kreator dapat mengumpulkannya melaluiCollectCreatorFee, atau pembayar apa pun dapat memicu jalurCollectCreatorFeePermissionlessyang dibatasi tujuan. Aktif hanya ketika pool dibuat denganenable_creator_fee = true.
trade_fee saja, tidak pernah dari creator_fee. Pool dengan creator_fee_rate = 1000 (0,10%) dan trade_fee_rate = 2500 (0,25%) mengenakan biaya gabungan 0,35% dari input pada swap dengan creator-fee-on-input, di mana kreator menyimpan 0,10% dan bucket biaya perdagangan mendapat 0,25%.
Tarif biaya perdagangan (trade_fee_rate, protocol_fee_rate, fund_fee_rate) dan creator_fee_rate semuanya berada di AmmConfig. Flag enable_creator_fee per-pool dan mode creator_fee_on (sisi perdagangan mana biaya kreator diambil) berada di PoolState. Lihat products/cpmm/accounts.
Tarif dan satuan
Semua tarif adalahu64 yang dinyatakan dalam satuan 1 / FEE_RATE_DENOMINATOR di mana FEE_RATE_DENOMINATOR = 1_000_000.
trade_fee_rateadalah fraksi dari volume swap.2500⇒ 0,25% dari sisi yang relevan (input atau output, tergantungcreator_fee_on— lihat “Sisi perdagangan mana biaya diambil” di bawah).creator_fee_rateadalah fraksi dari volume swap, diambil secara terpisah dari biaya perdagangan.1000⇒ 0,10% dari sisi yang relevan.protocol_fee_ratedanfund_fee_rateadalah fraksi dari biaya perdagangan, bukan dari volume.120_000⇒ 12% dari biaya perdagangan.
AmmConfig[index=0] (pool “standar” 0,25%) di mainnet, sebagai referensi:
Jadi pada swap $1.000 terhadap
AmmConfig[0] dengan enable_creator_fee = false: $2,50 total biaya perdagangan, di mana $2,10 tetap bersama LP, $0,30 ke protokol, $0,10 ke dana. Bucket kreator adalah 0 karena biaya kreator dinonaktifkan.
Jika pool yang sama memiliki enable_creator_fee = true dan creator_fee_rate = 1000 (0,10%), pengguna membayar tambahan $1,00 ke bucket kreator — diambil dari sisi perdagangan yang sama yang dikonfigurasi oleh creator_fee_on — untuk total $3,50 biaya. Bucket biaya perdagangan dan pembagian protokol/dana-nya tidak berubah.
Konfirmasi nilai mainnet saat ini terhadap GET https://api-v3.raydium.io/main/cpmm-config — tarif dapat diubah admin dan harus dibaca segar daripada dikodekan.
Pembagian, dalam kode
- Total biaya pada input dibulatkan ke atas sehingga pool tidak pernah mengenakan biaya kurang.
- Sub-pembagian
trade_fee(protokol, dana) dibulatkan ke bawah sehingga jumlahnya tidak pernah melebihitrade_fee; sisanya adalah bagian LP. lp_share = trade_fee − protocol_fee − fund_fee(creator_fee tidak dikurangi di sini karena merupakan bucket tersendiri).- Biaya kreator diambil dari input atau output tergantung
PoolState.creator_fee_on(lihat bagian berikutnya). Tarifnya tidak berubah baik cara.
Sisi perdagangan mana biaya diambil
CPMM memiliki pengaturancreator_fee_on per-pool (BothToken / OnlyToken0 / OnlyToken1) yang menentukan apakah biaya kreator diambil dari sisi input atau output dari swap tertentu. Helper runtime is_creator_fee_on_input(direction) menyederhanakan itu menjadi boolean per swap:
Ketika biaya kreator berada di sisi input, baik biaya perdagangan maupun biaya kreator dikurangi dari
amount_in sebelum kurva berjalan. Matematika quote: ambil trade_rate + creator_rate gabungan dari input.
Ketika biaya kreator berada di sisi output, hanya biaya perdagangan yang dikurangi dari amount_in; kurva menghasilkan output tanpa biaya, kemudian biaya kreator dikurangi dari output itu. Matematika quote: ambil trade_rate dari input; ambil creator_rate dari output.
Biaya perdagangan itu sendiri selalu diambil dari sisi input (pola Uniswap-V2 standar). Hanya biaya kreator yang dapat mendarat di output.
Bagaimana biaya “terakumulasi” berinteraksi dengan kurva
Nuansa penting: biaya protokol, dana, dan kreator tetap secara fisik di vault sampai instruksiCollect* masing-masing dipanggil. Tetapi mereka dikecualikan dari pandangan kurva tentang saldo vault.
Gambaran konkret setelah satu swap:
curve_x (dan curve_y analog) ketika menegakkan k' ≥ k. Ini adalah bagaimana biaya non-LP mencapai tujuan mereka tanpa menginflasi bagian LP dari pool.
Konsekuensi yang harus Anda desain:
- Quoting dari saldo mentah salah. Jika Anda membangun quoter dari
getTokenAccountBalance, Anda akan secara konsisten menyatakan harga yang terlalu tinggi yang akan dihormati pool. Selalu kurangi biaya terakumulasi, atau simulasikan melaluiSwapBaseInput/ API. CollectProtocolFeetidak menggerakkan harga. Ini memindahkan token keluar dari vault dan menolkan counterprotocol_fees_token*, jadicurve_xdancurve_ytidak berubah.- Biaya LP tidak terakumulasi ke counter. Mereka implisit dalam saldo vault. Hak LP atas biaya LP terakumulasi dilakukan dengan membakar token LP (yaitu, melalui
Withdraw) — tidak adaCollectLpFee.
Interaksi dengan biaya transfer Token-2022
Biaya transfer Token-2022 diterapkan oleh mint, bukan oleh CPMM. Mereka bertindak pada setiap transfer token — swap, deposit, penarikan, dan sweepCollect*. Matematika biaya perdagangan CPMM dihitung terhadap jumlah yang benar-benar mendarat di vault, yaitu, bersih dari biaya transfer mint input (jika ada).
Jadi dalam kasus terburuk pengguna membayar tiga pajak berbeda pada swap input-exact:
- Biaya transfer mint input pada
amount_in(ke otoritas biaya mint). - Biaya
trade_feepool pada sisanya (dibagi per di atas). - Biaya transfer mint output pada
amount_out(ke otoritas biaya mint).
minimum_amount_out dinyatakan dalam apa yang benar-benar diterima pengguna. Jika Anda menulis quoter Anda sendiri, cerminkan perilaku itu, atau pemeriksaan slippage Anda akan secara sistematis terlalu murah hati.
Lihat algorithms/token-2022-transfer-fees untuk derivasi terperinci.
Biaya kreator
Biaya kreator bersifat opsional dan per-pool. Tarif berada diAmmConfig.creator_fee_rate; flag enable dan sisi (creator_fee_on) berada di PoolState:
- Diaktifkan saat pembuatan pool.
Initializemenetapkanenable_creator_fee = falsesecara default; pool yang dibuat melaluiInitializeWithPermission(digunakan oleh kelulusan LaunchLab dan jalur gated lainnya) dapat melewatienable_creator_fee = truedan memilihcreator_fee_on. - Tarif dibagikan dengan tier biaya. Tarif itu sendiri adalah
AmmConfig.creator_fee_rate, nilai yang sama di setiap pool yang terikat pada config itu. Setiap pool kemudian memutuskan apakah akan mengenakan itu (enable_creator_fee) dan sisi swap mana untuk mengenakan itu (creator_fee_on). Ketikaenable_creator_fee = false, tarif biaya kreator efektif pool adalah nol terlepas dari nilai config (lihatPoolState::adjust_creator_fee_ratedalam sumber). - Independen dari biaya perdagangan. Biaya kreator tidak pernah mengurangi bagian LP / protokol / dana — itu adalah tarif tersendiri, diterapkan secara terpisah, terakumulasi di counter tersendiri.
- Dikumpulkan melalui
CollectCreatorFeeatauCollectCreatorFeePermissionless. Jalur asli memerlukanPoolState.pool_creatoruntuk menandatangani. Jalur tanpa izin memungkinkan pembayar apa pun untuk memicu pengumpulan tetapi memperbaiki kedua tujuan ke ATA kanonik kreator. - Tidak dapat diaktifkan kembali atau dialihkan setelah pembuatan. Pool yang diinisialisasi dengan
enable_creator_fee = falsetidak akan pernah mengenakan biaya kreator; satu yang diinisialisasi dengancreator_fee_ontertentu tidak dapat beralih sisi.
Alur operasional pengumpulan
Pemilik protokol dan dana adalah multisig Raydium di mainnet; lihat
security/admin-and-multisig. Pada jalur kreator-saja asli, penandatangan kreator adalah akun yang dicatat di PoolState. Pada jalur tanpa izin, pemanggil membayar untuk membuat ATA kreator yang hilang. Program membatasi creator ke pool_state.pool_creator dan menurunkan setiap tujuan dari kreator itu ditambah mint vault dan program token yang sesuai, jadi pemanggil tidak dapat mengalihkan dana.
Mengubah tier biaya
Tarif biaya dapat diubah oleh admin melaluiUpdateAmmConfig (lihat products/cpmm/instructions). Perubahan berlaku pada swap berikutnya untuk setiap pool yang terikat pada AmmConfig itu — tidak ada migrasi, karena pool memuat config setiap swap.
Apa yang tidak dapat dilakukan admin:
- Pindahkan pool dari satu
AmmConfigke yang lain. - Harga ulang biaya yang sudah terakumulasi secara retroaktif.
- Kumpulkan biaya tanpa penandatangan
protocol_owner/fund_owner.
Membaca biaya dari pool yang berjalan
Perbandingan dengan CLMM dan AMM v4
Lihatreference/fee-comparison untuk matriks berdampingan. Ringkasan:
- AMM v4 menggunakan biaya perdagangan tetap 0,25% dengan pembagian LP/protokol berbeda dan tidak ada biaya dana.
- CLMM biaya adalah per-tick-spacing tier, terakumulasi per-posisi (bukan per-pool), dan diklaim melalui
DecreaseLiquidityatauCollectFees.
Ke mana selanjutnya
products/cpmm/math— di mana pengurangan biaya perdagangan terhubung ke kurva.products/cpmm/instructions— daftar akun instruksiCollect*.algorithms/token-2022-transfer-fees— cara menggabungkan biaya perdagangan pool dengan biaya transfer mint dengan benar.

