Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Banner versi. Semua demo menargetkan
@raydium-io/raydium-sdk-v2@0.2.42-alpha terhadap Solana mainnet-beta, diverifikasi 2026-04. ID program berasal dari reference/program-addresses melalui SDK.Setup
raydium-sdk-V2-demo/src/clmm; tautan GitHub berada di samping setiap bagian. Bootstrap mengikuti config.ts.template repo demo (sumber) — disableFeatureCheck: true adalah pengaturan yang direkomendasikan untuk integrasi apa pun yang tidak trivial:
Buat pool CLMM
Sumber:src/clmm/createPool.ts
- Mengurutkan
mint1/mint2berdasarkan urutan byte sebelum derivasi. - Menghitung
sqrt_price_x64 = floor(sqrt(initialPrice × 10^(dB−dA)) × 2^64). - Membuat akun
observationdantick_array_bitmap_extension. - Membayar biaya pembuatan pool yang ditentukan oleh
ammConfig.
Buka posisi dalam rentang pilihan
Sumber:src/clmm/createPosition.ts
InitTickArray jika ada yang belum diinisialisasi.
Tingkatkan likuiditas pada posisi yang ada
Sumber:src/clmm/increaseLiquidity.ts
Kurangi likuiditas (dan kumpulkan biaya pada saat yang sama)
Sumber:src/clmm/decreaseLiquidity.ts dan src/clmm/closePosition.ts
decreaseLiquidity dengan liquidity = new BN(0). Efek samping instruksi adalah menyelesaikan tokens_fees_owed_{0,1} dan mentransfernya keluar.
Untuk menutup posisi sepenuhnya setelah menolkan likuiditas dan biaya, teruskan closePosition: true pada panggilan decreaseLiquidity terakhir. SDK menambahkan ClosePosition dan membakar NFT.
Untuk klien Anchor langsung, pertahankan akun yang dideklarasikan tidak berubah dan tambahkan pool:
poolId pada setiap penutupan. CLMM membacanya hanya ketika positionNftAccount beku, yang membuat satu jalur klien kompatibel dengan posisi lama dan baru.
Kumpulkan reward
Sumber:src/clmm/harvestAllRewards.ts
harvestAllRewards berjalan melalui setiap posisi di setiap pool yang dilewatkan, membuat batch instruksi CollectReward (dan UpdateRewardInfos apa pun), dan membaginya ke beberapa transaksi jika diperlukan.
Swap
Sumber:src/clmm/swap.ts
computeAmountOutFormat berjalan melalui peta tick secara offline menggunakan logika yang sama dengan program on-chain dan mengembalikan:
- jumlah yang diharapkan keluar,
- jumlah minimum keluar setelah slippage,
- daftar akun tick-array yang akan disentuh swap sebenarnya (
remainingAccounts).
remainingAccounts yang dikembalikan oleh simulasi: jika Anda melewatkan terlalu sedikit, swap akan kembali di tengah-jalan dengan TickArrayNotFound; jika Anda melewatkan yang sudah usang, komputasi terbuang.
Buat pool CLMM yang dapat disesuaikan
createCustomizablePool adalah titik masuk baru yang mengekspos toggle biaya dinamis dan biaya satu sisi pada waktu pembuatan pool. Ini mengambil bentuk yang sama dengan createPool ditambah tiga penambahan:
createPool terus bekerja untuk jalur biaya default, tanpa limit order, tanpa biaya dinamis. Gunakan createCustomizablePool kapan pun Anda memerlukan salah satu dari tiga tombol baru. Lihat products/clmm/instructions untuk daftar akun on-chain.
Limit order
Limit order memarkir input pengguna pada satu tick dan diisi FIFO ketika swap melintasi tick tersebut. Output didorong ke ATA pemilik pada waktu penyelesaian; pemilik tidak perlu online untuk diisi.Buka limit order
LimitOrderState dari (pool, owner, tick, nonce), meningkatkan LimitOrderNonce per-(pool, owner), dan menyisipkan pesanan ke dalam kohort FIFO pada tick tersebut.
Tingkatkan / kurangi pesanan terbuka
decreaseLimitOrder hanya dapat menghapus dari bagian yang belum diisi dari pesanan; bagian yang diisi dikunci sampai penyelesaian. Kedua instruksi kembali dengan InvalidOrderPhase jika pesanan sudah sepenuhnya diisi.
Selesaikan pesanan yang diisi
settleLimitOrder membaca unfilled_ratio_x64 pesanan terhadap pelacak kohort, menghitung output yang diisi, dan mentransfernya ke ATA pemilik. Pemilik dapat memanggil ini sendiri; limit_order_admin (pemelihara operasional off-chain) juga dapat memanggilnya atas nama pemilik — output masih pergi ke pemilik.
Untuk menutup pesanan yang sepenuhnya diselesaikan untuk memulihkan sewa, gunakan closeLimitOrder (tunggal) atau closeAllLimitOrder (batch). Untuk menyelesaikan banyak sekaligus, settleAllLimitOrder mengemas sebanyak mungkin panggilan SettleLimitOrder yang sesuai dalam transaksi v0.
Daftar pesanan yang diparkir dompet (off-chain)
totalAmount / filledAmount / pendingSettle membedakan fase). Untuk riwayat pesanan tertutup gunakan /limit-order/history/order/list-by-user?wallet=… (per-dompet, dipaginasi oleh nextPageId); untuk log acara lengkap pesanan tertentu gunakan /limit-order/history/event/list-by-pda?pda=….
Kerangka CPI Rust
SwapV2:
Jebakan umum
- Titik akhir tick off-spacing →
InvalidTickIndex. Selalu snap melaluiTickUtils.getPriceAndTick. - Tidak cukup tick array yang disediakan dalam
SwapV2→TickArrayNotFound. GunakancomputeAmountOutFormatuntuk mendapatkan daftar lengkap. - Posisi jangkauan penuh tanpa ekstensi bitmap → PDA ekstensi harus dapat ditulis; SDK menangani ini secara otomatis.
- Mengacaukan
sqrt_price_x64denganprice→ kebingungan faktor-2 di sini sangat menyakitkan. Jika ragu, biarkan SDK menghitungnya dari harga yang dapat dibaca manusia. - Mengumpulkan reward terlalu cepat → setiap pengumpulan memerlukan satu transaksi. Batch melalui
harvestAllRewardsdi banyak posisi. - Menutup akun NFT sendiri →
ClosePositionmembakar NFT dan menutup ATA-nya. Ini juga menutup mint NFT Token-2022; mint SPL Token klasik tetap pada pasokan nol karena program itu tidak dapat menutup mint. Jangan tutup akun yang didukung secara terpisah atau instruksi akan kembali. - Membuka limit order pada tick yang tidak berspasi →
InvalidTickIndex. Selalu kuantisasi melaluiTickUtils.getPriceAndTick. - Memanggil
decreaseLimitOrderpada pesanan yang sepenuhnya diisi →InvalidOrderPhase. GunakansettleLimitOrderkemudiancloseLimitOrdersebagai gantinya. - Lupa
dynamicFeeConfigIdsambil melewatkanenableDynamicFee: true→ pengembalianCreateCustomizablePooladalahInvalidDynamicFeeConfigParams. Baik matikan biaya dinamis, atau pilih konfigurasi dari/main/clmm-dynamic-config.
Ke mana selanjutnya
sdk-api/typescript-sdk— permukaan SDK lengkap.sdk-api/rest-api— titik akhir kutipan dan metadata pool.user-flows/create-clmm-pool— panduan tanpa kode.integration-guides/aggregator— perutean CLMM sebagai bagian dari jalur.

