Skip to main content
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:
  1. Biaya perdagangan — dikenakan pada AmmConfig.trade_fee_rate dan 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 oleh protocol_owner melalui CollectProtocolFee.
    • Bagian dana — terakumulasi ke PoolState.fund_fees_token*; dikumpulkan oleh fund_owner melalui CollectFundFee.
  2. Biaya kreator (opsional, per-pool) — dikenakan pada AmmConfig.creator_fee_rate secara independen dari biaya perdagangan dan terakumulasi ke PoolState.creator_fees_token*. Kreator dapat mengumpulkannya melalui CollectCreatorFee, atau pembayar apa pun dapat memicu jalur CollectCreatorFeePermissionless yang dibatasi tujuan. Aktif hanya ketika pool dibuat dengan enable_creator_fee = true.
Biaya kreator bukan bagian dari biaya perdagangan. Kedua tarif ditambahkan bersama ketika biaya diambil dari input swap, tetapi masing-masing tetap menjadi bucket tersendiri — bagian protokol dan dana selalu berasal dari 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 adalah u64 yang dinyatakan dalam satuan 1 / FEE_RATE_DENOMINATOR di mana FEE_RATE_DENOMINATOR = 1_000_000.
  • trade_fee_rate adalah fraksi dari volume swap. 2500 ⇒ 0,25% dari sisi yang relevan (input atau output, tergantung creator_fee_on — lihat “Sisi perdagangan mana biaya diambil” di bawah).
  • creator_fee_rate adalah fraksi dari volume swap, diambil secara terpisah dari biaya perdagangan. 1000 ⇒ 0,10% dari sisi yang relevan.
  • protocol_fee_rate dan fund_fee_rate adalah fraksi dari biaya perdagangan, bukan dari volume. 120_000 ⇒ 12% dari biaya perdagangan.
Parameter default untuk 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

Catatan:
  • 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 melebihi trade_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 pengaturan creator_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 instruksi Collect* masing-masing dipanggil. Tetapi mereka dikecualikan dari pandangan kurva tentang saldo vault. Gambaran konkret setelah satu swap:
Program menggunakan 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 melalui SwapBaseInput / API.
  • CollectProtocolFee tidak menggerakkan harga. Ini memindahkan token keluar dari vault dan menolkan counter protocol_fees_token*, jadi curve_x dan curve_y tidak 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 ada CollectLpFee.

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 sweep Collect*. 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:
  1. Biaya transfer mint input pada amount_in (ke otoritas biaya mint).
  2. Biaya trade_fee pool pada sisanya (dibagi per di atas).
  3. Biaya transfer mint output pada amount_out (ke otoritas biaya mint).
Quoter SDK memperhitungkan ketiga-tiganya sehingga 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 di AmmConfig.creator_fee_rate; flag enable dan sisi (creator_fee_on) berada di PoolState:
  • Diaktifkan saat pembuatan pool. Initialize menetapkan enable_creator_fee = false secara default; pool yang dibuat melalui InitializeWithPermission (digunakan oleh kelulusan LaunchLab dan jalur gated lainnya) dapat melewati enable_creator_fee = true dan memilih creator_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). Ketika enable_creator_fee = false, tarif biaya kreator efektif pool adalah nol terlepas dari nilai config (lihat PoolState::adjust_creator_fee_rate dalam 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 CollectCreatorFee atau CollectCreatorFeePermissionless. Jalur asli memerlukan PoolState.pool_creator untuk 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 = false tidak akan pernah mengenakan biaya kreator; satu yang diinisialisasi dengan creator_fee_on tertentu tidak dapat beralih sisi.
Biaya kreator adalah mekanisme di balik pola “Burn & Earn” Raydium: token LP dikunci di bawah program LP Lock sehingga kreator tidak dapat menarik likuiditas, tetapi biaya kreator terakumulasi masih dapat dikumpulkan tanpa batas.

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 melalui UpdateAmmConfig (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 AmmConfig ke 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

Lihat reference/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 DecreaseLiquidity atau CollectFees.

Ke mana selanjutnya

Sumber: