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*; disapu olehprotocol_ownermelaluiCollectProtocolFee. - Bagian dana — terakumulasi ke
PoolState.fund_fees_token*; disapu 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 menyapunya melaluiCollectCreatorFee, atau pembayar apa pun dapat memicu jalurCollectCreatorFeePermissionlessyang dibatasi tujuan. Aktif hanya ketika pool dibuat denganenable_creator_fee = true. Sejak upgrade 2026-09-19, biaya kreator yang terakumulasi dibagi sekali lagi pada saat pengumpulan: bagian yang dapat dikonfigurasi dipindahkan ke bucket protokol pool dan hanya sisanya yang mencapai kreator — lihat Bagian protokol dari biaya kreator.
trade_fee saja, tidak pernah dari creator_fee. Pool dengan creator_fee_rate = 1000 (0,10%) dan trade_fee_rate = 2500 (0,25%) mengenakan total 0,35% dari input pada swap dengan creator-fee-on-input, di mana bucket kreator mendapat 0,10% dan bucket biaya perdagangan mendapat 0,25%.
Bagian protokol dari biaya kreator berjalan sebaliknya dan mudah dikacaukan dengan di atas: biaya tersebut diambil dari bucket kreator, bukan dari biaya perdagangan, dan bukan pada swap — biaya tersebut diterapkan ketika CollectCreatorFee atau CollectCreatorFeePermissionless menyelesaikan saldo yang terakumulasi. Matematika swap tidak berubah karenanya.
Tarif biaya perdagangan (trade_fee_rate, protocol_fee_rate, fund_fee_rate), creator_fee_rate dan default creator_fee_share_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. Override per-kreator dari share rate berada di PDA CreatorFeeShare tersendiri. Lihat products/cpmm/accounts.
Tarif dan unit
Semua tarif adalahu64 yang dinyatakan dalam unit 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, tergantung padacreator_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.creator_fee_share_rateadalah fraksi dari biaya kreator yang terakumulasi, bukan dari volume dan bukan dari biaya perdagangan.200_000⇒ 20% dari apa pun yang berada dicreator_fees_token*pada saat dikumpulkan.0(default) membiarkan seluruh biaya kreator bersama kreator.
AmmConfig[index=0] (pool “standar” 0,25%) di mainnet, sebagai referensi:
Jadi pada swap $1.000 terhadap
AmmConfig[0] dengan enable_creator_fee = false: total biaya perdagangan $2,50, 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 pada
PoolState.creator_fee_on(lihat bagian berikutnya). Tarifnya tidak berubah.
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 sisi 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 rancang:
- Quoting dari saldo mentah salah. Jika Anda membangun quoter dari
getTokenAccountBalance, Anda akan secara konsisten menyatakan harga 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 yang 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 penyapuanCollect*. 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 melewatkanenable_creator_fee = truedan memilihcreator_fee_on. - Tarif dibagikan dengan tier biaya. Tarifnya sendiri adalah
AmmConfig.creator_fee_rate, nilai yang sama di setiap pool yang terikat pada config itu. Setiap pool kemudian memutuskan apakah akan mengenakan biaya (enable_creator_fee) dan sisi swap mana untuk mengenakan biaya (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 — biaya tersebut adalah tarifnya sendiri, diterapkan secara terpisah, terakumulasi di counter tersendiri.
- Disapu melalui
CollectCreatorFeeatauCollectCreatorFeePermissionless. Jalur asli memerlukanPoolState.pool_creatoruntuk menandatangani. Jalur tanpa izin membiarkan pembayar apa pun memicu pengumpulan tetapi memperbaiki kedua tujuan ke ATA kanonik kreator. Kedua jalur menyelesaikan bagian protokol terlebih dahulu — lihat bagian berikutnya. - Tidak dapat diaktifkan kembali atau dialihkan setelah pembuatan. Pool yang diinisialisasi dengan
enable_creator_fee = falsetidak akan pernah mengenakan biaya kreator; yang diinisialisasi dengancreator_fee_ontertentu tidak dapat beralih sisi.
Bagian protokol dari biaya kreator
Sejak upgrade 2026-09-19, protokol dapat mempertahankan bagian yang dapat dikonfigurasi dari biaya kreator. Tidak ada yang berubah tentang swap: biaya kreator masih dikenakan padacreator_fee_rate dan masih terakumulasi penuh ke creator_fees_token{0,1}. Pembagian terjadi sekali, pada saat pengumpulan, di dalam CollectCreatorFee dan CollectCreatorFeePermissionless.
Dari mana tarifnya berasal
Dua sumber, dalam urutan prioritas:- PDA
CreatorFeeShare— seeds["creator_fee_share", creator, amm_config]. Ketika akun ini ada dan dimiliki oleh CPMM,share_rate-nya menang. Ini memungkinkan protokol untuk menegosiasikan tarif per-kreator pada tier biaya tertentu tanpa menyentuh tier itu sendiri. AmmConfig.creator_fee_share_rate— default untuk setiap kreator pada tier biaya itu. Digunakan setiap kali PDA tidak ada.
u64 di atas FEE_RATE_DENOMINATOR = 1_000_000 yang sama, dan keduanya dibatasi pada denominator. Instruksi pengumpulan selalu mengambil akun creator_fee_share, bahkan ketika belum pernah dibuat — program memeriksa apakah kosong dan kembali ke config. Melewatkan alamat yang salah gagal pada constraint PDA, bukan fallback.
Apa yang dilakukan pembagian
creator_fees_token_0 dan creator_fees_token_1, kemudian:
creator_amount_{0,1}ditransfer keluar dari vault ke akun token kreator.shared_amount_{0,1}ditambahkan keprotocol_fees_token_{0,1}dan tetap di vault sampai pemilik protokol menyapunya denganCollectProtocolFee. Tidak ada instruksi terpisah dan tidak ada counter terpisah untuk itu.creator_fees_token_{0,1}dinolkan, persis seperti sebelumnya.
- Pembulatan menguntungkan kreator. Bagian protokol lantai, jadi debu tetap bersama kreator — arah yang sama dengan
protocol_feedanfund_fee, yang juga mengukir bagian dari biaya yang sudah terakumulasi. - Nilai dikonservasi.
creator_amount + shared_amount == creator_feeuntuk setiap tarif dan setiap biaya, termasuku64::MAX. share_rate = 0adalah no-op. Baik nilai config default maupun ketiadaan PDACreatorFeeSharemembiarkan seluruh biaya kreator bersama kreator, yang merupakan perilaku pra-upgrade.
Apa artinya bagi integrator
- LP dan quoting tidak terpengaruh. Jumlah bersama bergerak antara dua counter yang keduanya sudah dikecualikan dari pandangan kurva tentang vault (
vault_amount_without_fee), jadicurve_xdancurve_ytidak bergerak di seluruh pengumpulan.ktidak tersentuh. - Estimator biaya kreator yang membaca
creator_fees_token*sekarang menyatakan pembayaran berlebihan. Kalikan dengan(1 − share_rate / 1_000_000)menggunakan tarif yang benar-benar berlaku untuk pasangan(creator, amm_config)itu, bukan default config. protocol_fees_token*tumbuh di luar swap. Monitor yang merekonsiliasi akrual protokol terhadap volume swap akan melihat lompatan pada setiap pengumpulan biaya kreator. Akrual protokol tidak lagitrade_fee × protocol_fee_ratesaja.- Tarifnya dapat berubah antara akrual dan pengumpulan. Tarifnya dibaca pada saat pengumpulan, jadi biaya yang terakumulasi di bawah satu tarif menyelesaikan pada tarif apa pun yang berlaku ketika seseorang memanggil
Collect*.
CreatorFeeShare dibuat dan ditutup oleh admin atau otoritas share biaya kreator khusus melalui CreateCreatorFeeShare / CloseCreatorFeeShare; menutupnya mengembalikan pasangan ke AmmConfig.creator_fee_share_rate. Tata letak akun di products/cpmm/accounts, alamat di reference/program-addresses.
Alur operasional pengumpulan
Pemilik protokol dan dana adalah multisig Raydium di mainnet; lihat
security/admin-and-multisig. Pada jalur kreator 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
Selesaikan share rate on-chain, bukan dari config yang di-cache.
creator_fee_share_rate adalah bidang AmmConfig yang baru ditambahkan, jadi bacanya dari akun daripada mengasumsikan payload config REST membawanya, dan periksa apakah PDA CreatorFeeShare ada di ["creator_fee_share", creator, ammConfig] sebelum mengutip pembayaran kreator. PDA yang tidak ada adalah kasus umum dan berarti default config berlaku.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 yang 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*, termasuk akuncreator_fee_shareyang sekarang diperlukan oleh kedua jalur kreator.algorithms/token-2022-transfer-fees— cara menggabungkan biaya perdagangan pool dengan biaya transfer mint dengan benar.

