Skip to main content
Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Program produk Raydium adalah basis kode independen, tetapi dirancang berdasarkan serangkaian konvensi bersama. Halaman ini adalah referensi kanonik untuk konvensi tersebut. Bab per-produk menjelaskan bagaimana konvensi diinstansiasi dalam akun mereka; halaman ini menjelaskan konvensi itu sendiri.

Apa arti “bersama” di sini

Tiga jenis berbagi berjalan melalui basis kode:
  • Berbagi konvensi. Setiap program menggunakan pola derivasi PDA yang sama, bentuk pembagian biaya yang sama, dan ide akun observasi yang sama — tetapi masing-masing mengimplementasikannya dalam program mereka sendiri dengan seed mereka sendiri.
  • Berbagi akun. Segelintir akun adalah literal catatan yang sama di banyak pool (PDA otoritas global di CPMM, akun AmmConfig).
  • Berbagi off-chain. Satu REST API dan satu SDK TypeScript melayani keempat program. Integrator berinteraksi dengan satu host HTTP dan satu paket NPM terlepas dari program mana yang akhirnya mereka panggil.
Lima primitif di bawah mencakup semua yang melampaui batas program.

1. PDA Otoritas

Setiap program Raydium memiliki tepat satu PDA yang memiliki vault token-nya. Pengguna tidak pernah memegang otoritas vault secara langsung — PDA otoritas adalah satu-satunya penanda tangan yang dapat memindahkan dana keluar, dan hanya menandatangani ketika instruksi program yang valid menyuruhnya. Polanya identik di seluruh produk; seed berbeda: Beberapa hal mengikuti dari ini:
  • Untuk CPMM dan CLMM, PDA otoritas adalah akun global — setiap pool dari tipe itu menggunakannya. Jika Anda melakukan CPI ke CPMM, Anda membutuhkannya sekali, bukan per pool.
  • Untuk otoritas per-pool / per-farm, Anda menurunkan PDA dari ID pool/farm. SDK melakukan ini di getPoolKeys / getFarmKeys; jika Anda mengintegrasikan secara langsung, Anda menurunkan dengan findProgramAddressSync.
  • Kepemilikan vault tidak dapat diubah. Setelah akun token dibuat dengan PDA otoritas sebagai pemilik, hanya PDA itu — dipanggil oleh program — yang dapat mentransfer keluar. Tidak ada penggantian admin.
Untuk seed yang tepat dan tata letak ATA per program, lihat products/cpmm/accounts, products/clmm/accounts, products/amm-v4/accounts, products/farm-staking/accounts, products/launchlab/accounts.

2. Akun Admin dan Konfigurasi

CPMM dan CLMM berbagi pola akun konfigurasi yang disebut AmmConfig: akun global kecil, diindeks oleh u16, yang menyimpan tingkat biaya dan tujuan admin yang berlaku untuk seluruh tingkat biaya. Pool mengikat ke konfigurasi saat pembuatan dan tidak pernah mengikat ulang.
Aturan jalan:
  • Tingkat biaya bersifat global. Ketika pool mengatakan “ini adalah pool 0,25%”, itu berarti mengikat ke AmmConfig yang trade_fee_rate-nya adalah 0,25% pada waktu pembuatan. Tidak ada penggantian tingkat per-pool.
  • Konfigurasi dapat diubah tetapi pool tidak mengikuti. Jika otoritas konfigurasi mengedit AmmConfig, setiap pool yang ada yang terikat ke konfigurasi itu segera mengambil tingkat baru. Ini adalah fitur, bukan bug; ini adalah cara perubahan ekonomi tingkat protokol menyebar tanpa migrasi per-pool.
  • disable_create_pool adalah tuas penghentian. Ketika tingkat biaya dihentikan, multisig protokol menetapkan flag ini — pool yang ada terus bekerja tetapi tidak ada pool baru yang dapat memilih tingkat tersebut.
  • protocol_owner / fund_owner adalah penanda tangan untuk panggilan pengumpulan biaya. Menetapkannya ke multisig adalah apa yang membatasi penarikan biaya. Mereka BUKAN alamat tujuan untuk biaya itu sendiri; itu adalah protocol_fee_destination / fund_fee_destination pada akun yang sama.
AMM v4 tidak memiliki AmmConfig — parameter biayanya per-pool, dikodekan keras saat pembuatan. Farm dan LaunchLab memiliki padanan mereka sendiri (FarmConfig, LaunchConfig) yang tercakup dalam bab masing-masing. Tabel lengkap siapa yang dapat mengubah apa ada di security/admin-and-multisig. Pembagian biaya yang menghadap pengguna saat ini ada di ray/protocol-fees.

3. Pembagian biaya protokol / dana / kreator

Setiap biaya swap CPMM dan CLMM dibagi di antara hingga empat tujuan dalam perjalanan keluar:
Secara mekanis:
  1. Biaya perdagangan terakumulasi ke dalam pool. Biaya dihapus dari sisi input swap dan jumlah pasca-biaya adalah apa yang dilihat oleh matematika produk konstan. Ini adalah apa arti “LP mendapatkan biaya” — k naik dan begitu juga nilai token per-LP yang tersirat.
  2. Porsi protokol/dana/kreator dikurangi dari akumulasi sisi-LP itu ke akun penghitung per-pool. Mereka duduk di status pool (protocol_fees_token{0,1}, fund_fees_token{0,1}, dll.) sampai seseorang memanggil instruksi pengumpulan yang sesuai. Mereka tidak meninggalkan vault pool sampai saat itu; dari perspektif swap mereka masih “di pool”.
  3. Pengumpulan memindahkannya keluar. Jalur protokol dan dana memerlukan penanda tangan protocol_owner / fund_owner masing-masing dari AmmConfig. Biaya kreator CPMM menggunakan jalur CollectCreatorFee yang ditandatangani kreator atau CollectCreatorFeePermissionless, yang dapat dipicu oleh pembayar apa pun tetapi menetapkan tujuan ke ATA kanonik kreator.
Beberapa pengamatan yang penting:
  • Persentase pembagian adalah dari biaya perdagangan, bukan dari perdagangan. Biaya perdagangan 0,25% dengan bagian protokol 12% berarti protokol mendapatkan 0,25% × 12% = 0,03% dari perdagangan — bukan 12% dari perdagangan.
  • Biaya kreator hanya ada di pool yang lulus LaunchLab. Pool CPMM/CLMM standar memiliki pembagian 3 arah (LP / protokol / dana). LaunchLab menambahkan slot keempat yang diarahkan ke siapa pun yang meluncurkan token, dikonfigurasi pada Initialize dan tidak dapat diubah.
  • AMM v4 hanya membagi dua cara, dikodekan keras per-pool: LP dan protokol. Tidak ada slot dana, tidak ada slot kreator.
  • Dana vs protokol — keduanya adalah tujuan treasury protokol, tetapi mereka memiliki penanda tangan berbeda dan penggunaan yang dimaksudkan berbeda. protocol secara historis mendanai operasi; fund adalah treasury jangka panjang. Pembagian antara keduanya itu sendiri dapat disesuaikan.
Tingkat spesifik ada di reference/fee-comparison dan ray/protocol-fees.

4. Akun Observasi (Ring Buffer TWAP)

Baik CPMM maupun CLMM mempertahankan akun observasi per pool — ring buffer berukuran tetap dari sampel (timestamp, cumulative_price) yang dapat digunakan kontrak lain untuk menurunkan TWAP yang tahan manipulasi.
Cara kerjanya:
  • Setiap swap memanggil update_observation. Program membaca harga saat ini, mengalikan dengan detik yang telah berlalu sejak observasi sebelumnya, dan menambahkannya ke penghitung kumulatif. Entri baru menimpa slot tertua (gaya ring-buffer).
  • TWAP selama jendela = (cumul[end] − cumul[start]) / (timestamp[end] − timestamp[start]). Konsumen memilih dua observasi yang mengapit jendela yang diinginkan dan membagi.
  • Raydium itu sendiri tidak menggunakan TWAP untuk penetapan harga. Matematika AMM membaca cadangan spot secara langsung. Observasi adalah eksternalitas — Raydium membayar biaya menulisnya sehingga kontrak lain dapat membacanya.
  • AMM v4 tidak memiliki akun observasi. Ini lebih tua dari desain ObservationState; integrator yang menginginkan TWAP v4 harus menghitung satu off-chain dari riwayat log.
Detail tata letak dan matematika pengindeksan ada di products/cpmm/accounts dan products/clmm/accounts.

5. REST API + SDK + IDL

Permukaan off-chain adalah trio tunggal yang digunakan oleh setiap produk:
  • REST APIhttps://api-v3.raydium.io. Tampilan terindeks yang sebagian besar hanya-baca dari semua status on-chain ditambah mesin kutipan. Satu host, satu skema.
  • TypeScript SDK@raydium-io/raydium-sdk-v2 di NPM. Membangun dan menandatangani transaksi untuk setiap program. Berbicara dengan API untuk kutipan/metadata, berbicara dengan RPC Solana untuk penyegaran status pra-tanda tangan.
  • Registri IDL — IDL Anchor untuk setiap program yang dipublikasikan tinggal di repositori raydium-idl (satu JSON per program: CPMM, CLMM, LaunchLab). TypeScript SDK menggunakan IDL ini secara internal; klien Rust / Python hilir meregenerasi dari file yang sama.
Batas antara mereka tajam: Kesalahan umum adalah memberi makan output REST API langsung ke transaksi. Jangan — ambil ulang status pool/posisi yang relevan dari RPC Solana di slot yang Anda tandatangani. SDK melakukan ini secara otomatis untuk alur pihak pertama; jika Anda melewati SDK, Anda harus melakukannya sendiri. Referensi lengkap ada di sdk-api/, dengan permukaan IDL khususnya di sdk-api/anchor-idl.

6. Indexer dan Feed Harga

REST API diberi makan oleh indexer Raydium sendiri, yang berlangganan log program dari armada RPC Solana dan menulis catatan denormalisasi ke penyimpanan SQL. Dua konsekuensi untuk integrator:
  • Indexer adalah satu-satunya hal yang “tahu tentang” status lintas-program. Memetakan pool CPMM ke padanannya CLMM, menghitung angka volume 24j di seluruh versi program, mengambil farm yang terkait dengan mint LP — semua itu adalah pekerjaan indexer. Program itu sendiri tidak melakukannya.
  • Downtime indexer adalah downtime API. Jika API mengembalikan data basi atau kosong, indexer adalah tersangka. Status on-chain tidak terpengaruh; integrator dengan RPC dan SDK mereka sendiri dapat terus bertransaksi.
Feed harga adalah masalah terpisah. API menerbitkan bidang priceUsd pada sebagian besar respons pool; ini dihitung off-chain dari snapshot tampilan indexer tentang cadangan pool dan harga referensi yang dikutip (pool USDC sebagai pivot umum). Cukup baik untuk UI; tidak aman digunakan sebagai oracle on-chain. Gunakan TWAP observasi untuk itu.

Apa yang tidak dibagikan

Layak untuk didaftar secara eksplisit, karena pembaca baru sering menganggap lebih banyak berbagi daripada yang ada:
  • Program tidak memanggil satu sama lain. Swap CPMM tidak pernah melakukan CPI ke CLMM atau AMM v4. Satu-satunya program yang menggabungkan beberapa AMM adalah program AMM Routing — dan itu sendiri tipis, hanya memancarkan CPI ke setiap AMM secara berurutan.
  • Tidak ada otoritas upgrade bersama di seluruh program. Setiap program on-chain memiliki kunci upgrade program-nya sendiri (multisig 3/4 ditambah timelock 24j). Mereka tidak terhubung.
  • Tidak ada status bersama antara farm dan AMM. Farm tidak tahu LP mana yang dipertaruhkan berasal dari pool CPMM, NFT-mint posisi CLMM, atau token SPL yang tidak terkait. Program farm memperlakukan mint staking sebagai buram.
  • Tidak ada ketergantungan oracle. Penetapan harga adalah cadangan on-chain. Tidak ada fallback Pyth/Switchboard; AMM tidak memeriksa oracle sebelum menyelesaikan.

Penunjuk

Sumber:
  • Raydium SDK v2 — sumber kebenaran untuk seed PDA, tata letak akun, dan definisi IDL.
  • Registri IDL Raydium — IDL Anchor.
  • Halaman akun per-produk yang dikutip secara inline di atas.