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.64-alpha terhadap Solana mainnet-beta, diverifikasi 2026-09-09 — setiap nama builder, nama parameter, dan tipe parameter di bawah telah diperiksa terhadap src/raydium/farm/ rilis tersebut dan terhadap raydium-sdk-V2-demo/src/farm. SDK mengirimkan v3 / v5 / v6 secara internal berdasarkan pemilik program farm; contoh di bawah mengasumsikan farm v6. Lihat reference/program-addresses untuk tiga ID program.Nama metode modul farm bukan apa yang Anda duga: tidak ada getFarmById dan tidak ada setRewards. Pengambilan data dilakukan melalui raydium.api.fetchFarmInfoById, dan builder pengeditan reward adalah addNewRewardToken / addNewRewardsToken dan restartReward / restartRewards.Setup
Demo di sini mencerminkan file diraydium-sdk-V2-demo/src/farm. Bootstrap mengikuti config.ts.template repo demo:
Ambil farm berdasarkan id
Tidak adaraydium.farm.getFarmById. Setiap demo farm dimulai dari modul API, yang mengembalikan bentuk FormatFarmInfoOut yang dinormalisasi yang diambil oleh deposit / withdraw / harvestAllRewards:
fetchFarmInfoById mengambil string yang dipisahkan koma dari id dan mengembalikan array, jadi satu panggilan dapat menghidrasi seluruh portfolio. Jika Anda memerlukan kunci akun mentah daripada info tampilan, raydium.api.fetchFarmKeysById({ ids }) mengembalikan vault dan PDA otoritas; SDK memanggilnya secara internal untuk Anda di dalam setiap builder di bawah.
Stake token LP
Sumber:src/farm/stake.ts
Klaim saja (panen)
Sumber:src/farm/harvest.ts
farmInfoList adalah Record yang dikunci berdasarkan id farm, bukan array, dan builder mengembalikan beberapa transaksi — jadi execute harus diberikan sequentially: true:
txIds daripada txId tunggal.
Untuk satu farm, panen dengan idiom amount: 0 — ini adalah apa yang dilakukan src/farm/harvest.ts, di setiap versi termasuk v6:
Unstake
Sumber:src/farm/unstake.ts
Buat farm v6
Sumber:src/farm/createAmmFarm.ts dan editAmmFarm.ts
create mengambil objek info pool untuk pool yang mint LP-nya sedang di-stake (bukan mint kosong), dan setiap entri rewardInfos adalah FarmRewardInfo: { mint: PublicKey, perSecond: string, openTime: number, endTime: number, rewardType: "Standard SPL" | "Option tokens" }. Waktu adalah detik biasa, dan perSecond adalah string, bukan BN. programId default ke program v6, jadi Anda jarang meneruskannya.
perSecondadalah laju emisi per detik dalam unit mentah mint reward, diteruskan sebagai string desimal. SDK mengemas ke representasi fixed-point on-chain sebelum mengirim.- Anggaran penuh (
perSecond × (endTime − openTime)) harus ada di ATA reward Anda —creatememindahkannya ke vault reward secara atomik. - Mint reward Token-2022 tidak didukung oleh builder farm SDK di versi SDK ini; gunakan mint SPL biasa untuk reward.
- Anda dapat menabur hingga 5 reward dalam satu panggilan
create. Daftar akun tumbuh sebesar(reward_mint, reward_vault, sender_ata, token_program)per stream tambahan; tetap sadar akan batas ukuran transaksi 1232-byte. Untuk 4+ reward, buat dengan 1–2 dan gunakanaddNewRewardsTokendalam transaksi lanjutan.
Tambahkan aliran reward baru
Tidak adaraydium.farm.setRewards. Dua builder yang mengubah reward farm adalah addNewRewardToken / addNewRewardsToken (menempati slot gratis dengan mint baru) dan restartReward / restartRewards (re-arm slot yang alirannya telah berakhir). Keduanya mengambil objek FarmRewardInfo dalam bentuk yang sama persis dengan yang digunakan create.
perSecond × duration) ditarik dari ATA pembayar sebagai bagian dari transaksi. Instruksi yang mendasar tidak dapat mempersingkat aliran, tidak dapat menurunkan per_second pada aliran aktif, dan tidak dapat mengubah mint reward slot — untuk menukar mint, tunggu end_time dan gunakan addNewRewardsToken pada slot yang dibebaskan, atau buat farm baru.
Restart aliran yang selesai
Sumber:src/farm/editAmmFarm.ts
restartRewards mengambil newRewardInfos (jamak, array); restartReward adalah bentuk item tunggal dan mengambil newRewardInfo. Bidang mint adalah mint, bukan rewardMint, dan harus cocok dengan slot yang sudah ada di farm — builder mencari slot berdasarkan mint dan error jika tidak ada.
restartRewards adalah v6-only — builder membaca id program farm dan melempar untuk farm v3 / v5. Valid hanya ketika reward_state == 2 slot target (berakhir); pemanggil harus menjadi reward_sender slot. Perhatikan openTime >= endTime ditolak sisi klien sebelum RPC apa pun dibuat.
Rust CPI
Farm v6 terakhir kali di-deploy pada 2024-05-13 dan bukan program Anchor dari sudut pandang integrator. Jika Anda perlu membuat komposisi dengannya dari program on-chain Anda sendiri, buatInstruction dengan tangan — turunkan daftar akun dan diskriminator instruksi secara independen (dari layout TypeScript SDK di bawah raydium-sdk-V2/src/raydium/farm/, atau dengan mendekode transaksi nyata), dan invoke_signed itu. Lihat sdk-api/rust-cpi untuk prosedur itu.
Rute mana pun yang Anda ambil, ekor remaining_accounts harus cocok dengan slot reward aktif farm 1-untuk-1 (pasangan reward_vault_i, user_reward_ata_i dalam urutan indeks). Menghilangkan atau salah mengurutkan ini menghasilkan mis-akuntansi senyap — program akan mentransfer jumlah yang salah.
Jebakan
- Lupa klaim sebelum withdraw. Tidak berbahaya —
Withdrawmenyelesaikan reward yang tertunda terlebih dahulu. Tetapi jika UI Anda menunjukkan “klaim” terpisah dari “withdraw”, pengguna mungkin berpikir masih ada sesuatu untuk diklaim setelahWithdraw. Tidak ada; semuanya yang terakumulasi hingga titik itu telah dibayarkan. total_staked = 0selama emisi. Emisi yang terakumulasi saat tidak ada yang di-stake hilang (formula pembaruanreward_per_sharemembagi dengan 0 dan program melewati pembaruan). Untuk program denganopen_timeterjadwal, jalankan “seed stake” pada open_time untuk menghindari ini.- Biaya transfer Token-2022. Pada farm v6 dengan mint reward Token-2022, biaya transfer berlaku pada emit (vault → pengguna). Faktorkan ini ke dalam kutipan APR.
per_secondkecil di v5. Lajuu64v5 berartiper_second < 1unit token per detik (pada mint dengan ≥9 desimal ini sering kali laju yang diinginkan) tidak dapat diekspresikan — laju aliran dibulatkan ke 0 dan farm tidak memancarkan apa pun. Gunakan v6.
Ke mana selanjutnya
products/farm-staking/instructions— referensi instruksi yang mendasar.products/clmm/fees— bandingkan dengan aliran reward asli CLMM.user-flows/migrate-amm-v4-to-cpmm— sering dipasangkan dengan memutar farm CPMM baru.
- Raydium SDK v2
- IDL Farm v6 bundel di
raydium-io/raydium-sdk-V2di bawahsrc/raydium/farm/.

