Bu sayfa yapay zekâ tarafından otomatik olarak çevrilmiştir. İngilizce sürüm esas alınır.İngilizce sürümü görüntüle →
Sürüm notu. Tüm örnekler Solana mainnet-beta üzerinde
@raydium-io/raydium-sdk-v2@0.2.64-alpha hedeflemektedir, 2026-09-09 tarihinde doğrulanmıştır — aşağıdaki her builder adı, parametre adı ve parametre türü o sürümün src/raydium/farm/ dosyasına ve raydium-sdk-V2-demo/src/farm dosyasına karşı kontrol edilmiştir. SDK, farm’ın program sahibine göre v3 / v5 / v6’yı dahili olarak gönderir; aşağıdaki örnekler v6 farm’ı varsayar. Üç program ID’si için reference/program-addresses bölümüne bakın.Farm modülünün method adları tahmin ettiğiniz gibi değildir: getFarmById yoktur ve setRewards yoktur. Getirme işlemi raydium.api.fetchFarmInfoById üzerinden gerçekleşir ve ödül düzenleme builder’ları addNewRewardToken / addNewRewardsToken ve restartReward / restartRewards şeklindedir.Kurulum
Buradaki örneklerraydium-sdk-V2-demo/src/farm dosyalarını yansıtır. Bootstrap, demo repo’nun config.ts.template dosyasını takip eder:
Farm’ı ID’ye göre getir
raydium.farm.getFarmById yoktur. Her farm örneği API modülünden başlar; bu modül deposit / withdraw / harvestAllRewards tarafından alınan normalleştirilmiş FormatFarmInfoOut şeklini döndürür:
fetchFarmInfoById virgülle ayrılmış bir ID dizesi alır ve bir dizi döndürür; böylece bir çağrı tüm portföyü hidrate edebilir. Ham hesap anahtarlarına ihtiyacınız varsa, raydium.api.fetchFarmKeysById({ ids }) vault’ları ve authority PDA’larını döndürür; SDK bunu aşağıdaki her builder içinde sizin için dahili olarak çağırır.
LP token’larını stake et
Kaynak:src/farm/stake.ts
Yalnızca talep et (hasat)
Kaynak:src/farm/harvest.ts
farmInfoList bir dizi değil, farm id’ye göre anahtarlanmış bir Record şeklindedir ve builder birden fazla işlem döndürür — bu nedenle execute öğesine sequentially: true verilmelidir:
txId yerine txIds döndürür.
Tek bir farm için, amount: 0 idiomunu kullanarak hasat yapın — bu, src/farm/harvest.ts dosyasının yaptığı şeydir, v6 dahil her sürümde:
Stake’i geri çek
Kaynak:src/farm/unstake.ts
v6 farm oluştur
Kaynak:src/farm/createAmmFarm.ts ve editAmmFarm.ts
create, LP mint’i stake edilen pool’un pool info nesnesi alır (bare mint değil) ve rewardInfos öğesinin her girdisi bir FarmRewardInfo şeklindedir: { mint: PublicKey, perSecond: string, openTime: number, endTime: number, rewardType: "Standard SPL" | "Option tokens" }. Zamanlar düz saniye cinsindedir ve perSecond bir BN değil, string şeklindedir. programId varsayılan olarak v6 program’ıdır; bu nedenle nadiren geçirirsiniz.
perSecond, ödül mint’inin ham birimlerinde saniye başına emisyon oranıdır; ondalık string olarak geçirilir. SDK, göndermeden önce bunu zincir üstü sabit nokta gösterimine paketler.- Tam bütçe (
perSecond × (endTime − openTime)) ödül ATA’nızda bulunmalıdır —createbunu ödül vault’una atomik olarak taşır. - Token-2022 ödül mint’leri bu SDK sürümünde SDK’nın farm builder’ları tarafından desteklenmez; ödüller için düz SPL mint kullanın.
- Bir
createçağrısında 5’e kadar ödülü seed’leyebilirsiniz. Hesap listesi her ekstra stream için(reward_mint, reward_vault, sender_ata, token_program)kadar büyür; 1232 baytlık işlem boyutu sınırının farkında olun. 4+ ödül için 1–2 ile oluşturun ve takip eden işlemlerdeaddNewRewardsTokenkullanın.
Yeni ödül akışı ekle
raydium.farm.setRewards yoktur. Farm’ın ödüllerini değiştiren iki builder, addNewRewardToken / addNewRewardsToken (boş bir slot’u yeni bir mint ile işgal et) ve restartReward / restartRewards (akışı sona ermiş bir slot’u yeniden başlat) şeklindedir. Her ikisi de create tarafından kullanılan şekilde tam olarak FarmRewardInfo nesneleri alır.
perSecond × duration) işlemin bir parçası olarak ödeyenin ATA’sından çekilir. Temel instruction, bir akışı kısaltamaz, canlı bir akışta per_second öğesini düşüremez ve bir slot’un ödül mint’ini değiştiremez — mint’leri değiştirmek için end_time bekleyin ve serbest bırakılan bir slot’ta addNewRewardsToken kullanın veya yeni bir farm oluşturun.
Bitmiş akışı yeniden başlat
Kaynak:src/farm/editAmmFarm.ts
restartRewards newRewardInfos (çoğul, bir dizi) alır; restartReward tek öğeli form’dur ve newRewardInfo alır. Mint alanı mint şeklindedir, rewardMint değil ve farm’da zaten var olan bir slot’u eşleştirmelidir — builder slot’u mint’e göre arar ve yoksa hata verir.
restartRewards yalnızca v6’dır — builder farm’ın program id’sini okur ve v3 / v5 farm’ları için hata verir. Yalnızca hedef slot’un reward_state == 2 (bitmiş) olduğunda geçerlidir; çağıran slot’un reward_sender öğesi olmalıdır. openTime >= endTime öğesinin herhangi bir RPC yapılmadan önce istemci tarafında reddedildiğini unutmayın.
Rust CPI
Farm v6, 2024-05-13 tarihinde son kez dağıtılmıştır ve bir integratör açısından Anchor program’ı değildir. Kendi zincir üstü program’ınızdan bununla oluşturmanız gerekiyorsa,Instruction öğesini elle oluşturun — hesap listesini ve instruction discriminator’larını bağımsız olarak türetin (SDK’nın raydium-sdk-V2/src/raydium/farm/ altındaki TypeScript düzenlerinden veya gerçek işlemleri çözerek) ve invoke_signed yapın. Bu prosedür için sdk-api/rust-cpi bölümüne bakın.
Hangi yolu alırsanız alın, remaining_accounts tail’i farm’ın etkin ödül slot’larıyla 1’e 1 eşleşmelidir (reward_vault_i, user_reward_ata_i çiftleri dizin sırasında). Bunları atlama veya yanlış sıralama sessiz yanlış muhasebeleye neden olur — program yanlış tutarı transfer eder.
Tuzaklar
- Çekmeden önce talep etmeyi unutmak. Zararsız —
Withdrawönce bekleyen ödülleri kapatır. Ancak UI’niz “talep”i “çek”ten ayrı gösteriyorsa, kullanıcıWithdrawsonrasında talep edilecek bir şey olduğunu düşünebilir. Yoktur; o noktaya kadar birikmiş her şey ödendi. - Emisyon sırasında
total_staked = 0. Hiçbir şey stake edilmemişken birikmiş emisyonlar kaybedilir (reward_per_sharegüncelleme formülü 0’a bölünür ve program güncellemeyi atlar). Zamanlanmışopen_timeolan program’lar için, bunu önlemek amacıyla open_time’da “seed stake” çalıştırın. - Token-2022 transfer ücretleri. Token-2022 ödül mint’lerine sahip v6 farm’larında, transfer ücreti emit sırasında uygulanır (vault → kullanıcı). Bunu APR alıntılarına dahil edin.
- v5’te küçük
per_second. v5’inu64oranı, herhangi birper_second < 1token-birim saniye başına (9+ ondalık basamağa sahip mint’lerde bu genellikle istenen orandır) ifade edilemeyeceği anlamına gelir — akış oranı 0’a yuvarlanır ve farm hiçbir şey yayınlamaz. v6 kullanın.
Sonraki adımlar
products/farm-staking/instructions— temel instruction referansı.products/clmm/fees— CLMM’nin yerel ödül akışlarıyla karşılaştırın.user-flows/migrate-amm-v4-to-cpmm— genellikle yeni bir CPMM farm’ı başlatmakla eşleştirilir.
- Raydium SDK v2
- Farm v6 IDL,
raydium-io/raydium-sdk-V2içindesrc/raydium/farm/altında paketlenmiştir.

