Ana içeriğe atla
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 →
Farm talimatları sürüme özgüdür. v6 üzerindeki bir Deposit işlemi v5 farm’da veya tersi şekilde çağrılamaz. SDK, farm’ın program sahibini okuyarak gönderir; zincir üstü CPI için program ID’sini önceden seçmelisiniz.

Talimatlı envanter

v3 ve v5’te, stake’i değiştirmeden ödülleri talep etmenin kanonik yolu Deposit’i amount = 0 ile çağırmaktır. Program bunu saf bir ödeme olarak işler. v6 netlik için açık bir Harvest sunmuştur. SDK, tüm bunları raydium.farm.deposit({ ... }) gibi işlemlerin arkasına alır. Aşağıdaki bölümler, talimatları manuel olarak oluşturması gereken entegratörler (agregatörler, izleme araçları, SDK uzantıları) için temel hesap listelerini belgelemektedir.

CreateFarm (v6)

Yeni bir v6 farm başlatın. Argümanlar
Hesaplar (özetlenmiş, reward_info_count = 1 için) Ön koşullar
  • open_time > now, end_time > open_time.
  • creator ATA’ları en az emission_per_second_x64 × (end_time − open_time) / 2^64 ödül mint’ini tutar.
  • staking_mint dondurma yetkinliğine sahip değildir veya dondurma yetkinliği devre dışıdır.
Son koşullar
  • FarmState başlatıldı, total_staked = 0.
  • Ödül vault’ları tam akış bütçesiyle finanse edildi.
  • Yaratıcının ödül ATA’sı bu miktardan boşaltılır.

Deposit (v6)

Stake etme mint’inin amount kadarını stake edin. Argümanlar
Hesaplar user_ledger yoksa, SDK bir CreateAccount tarzı ix’i başa ekler; v6 programı sistem programı hesabı verildiğinde bunu tembelce oluşturabilir. Kalan hesaplar deseni: her canlı ödül için (reward_vault, user_reward_ata) ekleyin, böylece ödeme yapılabilir. Etki
  1. Her canlı ödül akışı için tembel güncelleme formülünü kullanarak reward_per_share_x64[i]’ı yenileyin.
  2. pending_i = user_ledger.deposited × reward_per_share_x64[i] / 2^64 − user_ledger.reward_debts[i] hesaplayın.
  3. pending_i’ı reward_vault_{i}’dan user_reward_ata_{i}’ye aktarın.
  4. amount stake etme mint’ini user_staking_ata’dan staking_vault’a aktarın.
  5. user_ledger.deposited += amount’ı güncelleyin ve reward_debts[i]’ı yeniden görüntüleyin.
  6. farm_state.total_staked += amount’ı güncelleyin.
Ön koşullar
  • amount > 0 gerçek bir stake için (v6 amount = 0’ı yasaklar — sadece talep için Harvest kullanın).
  • user_staking_ata en az amount tutar.
  • Her canlı ödül vault’u bu kullanıcıya en az borçlu olunan tutarı tutar.

Withdraw (v6)

amount kadar unstake yapın. Argümanlar
HesaplarDeposit ile aynı. EtkiDeposit ile aynı ödeme, ardından stake etme mint’ini kullanıcıya geri taşıyın: staking_vault → user_staking_ata. total_staked ve user_ledger.deposited her ikisi de azalır. Ön koşullar
  • amount ≤ user_ledger.deposited.
  • Farm duraklatılmamış.

Harvest (v6)

Stake değiştirilmeden beklemede olan ödülleri talep edin. Argümanlar — hiçbiri. HesaplarDeposit ile aynı, stake tarafında hareket yok. Etkireward_per_share_x64[i]’ı yenileyin, pending_i ödeyin, reward_debts[i]’ı yeniden görüntüleyin. total_staked veya deposited değişmez.

AddReward (v5/v6)

Kullanmamış bir slot’a sahip mevcut farm’a yeni bir ödül akışı ekleyin. Argümanlar
Ön koşullar
  • Boş bir slot mevcuttur (v6’de reward_info_count < 5, v5’te < 2).
  • open_time ≥ now (gelecekte olabilir) veya open_time < now yalnızca program sürümü izin verirse — v6 verir, v5 vermez.
Son koşullar
  • Yeni akış reward_info_count dizininde başlatıldı, reward_info_count++.
  • Ödül vault’u arayanın ATA’sından tam akış bütçesiyle kredilendi.
Genel hata — mint, mevcut bir slot’la çakışıyorsa RewardAlreadyExists.

SetRewards (v5/v6)

Mevcut bir ödül akışını uzatın veya güçlendirin. Mint’i değiştiremez; end_time’ı kısaltamaz; çalışmaya başladıktan sonra emission_per_second_x64’ü düşüremez. Argümanlar
Ön koşullar
  • Akış hala çalışıyor (reward_state == 1).
  • new_end_time ≥ geçerli end_time.
  • Gerekli ek bütçe (yeni_emisyon × yeni_süre − zaten_emitlenmiş) gönderenin ATA’sında mevcuttur ve talimattan ödül vault’una aktarılır.
v5’te, eşdeğer çağrı daha küçük bir argüman seti ile SetRewards’tir (canlı akışlarda saniye başına değişiklik yok).

RestartRewards (v5/v6)

end_time’ı geçtikten sonra bir akışı yeniden başlatın. Kavramsal olarak zaten bir slot’a sahip olan mint için AddReward ile aynı. ArgümanlarAddReward ile aynı şekil, o indekste. Ön koşullar
  • reward_state == 2 (sona erdi).
  • Arayanı slot’un reward_sender’ı (v6) veya farm owner’ı (v5).

WithdrawReward (v5/v6)

Bir akış sona erdikten ve tüm stake edenler hasat etme şansı bulduktan sonra talep edilmemiş ödül vault bakiyesinin yönetici tarafından temizlenmesi. Argümanlar
Ön koşullar
  • Akış sona erdi (reward_state == 2).
  • reward_total_emissioned == reward_claimed + vault_balance (şu anda hiç bir şey borçlu değil).
Etki — kalanı reward_sender_ata’ya taşır. Program, stake edenler hala beklemede talepleri varken çekmeyi engellemez; yönetici beklemede kalan stake edenler adına ilk olarak hasat etmesi beklenir (veya onların hasat etmesine izin verir). Erken temizlerseniz, kullanıcılar talep edilmemiş ödüllerine erişim kaybeder. Bunu erken çağırmayın.

v5 varyasyonları

  • Deposit / Withdraw v6 ile aynı şekle sahiptir ancak 2 adede kadar ödül slot’u kullanır ve reward_per_share u128’dir (farklı bir radiks ile sabit nokta).
  • CreateAssociatedLedger ilk Deposit’ten önce gerekli bir ayrı çağrıdır; v6 bunu birleştirdi.
  • AddReward mevcuttur, Harvest değildir (Deposit 0 kullanın).

v3 varyasyonları

  • Tek ödül akışı. AddReward yok, ikinci slot yok.
  • Deposit 0 talep etmenin tek yoludur.
  • CreateUserLedger ilk Deposit’ten önce çağrılmalıdır.

Durum değişikliği matrisi

Sonraki adım nereye

Kaynaklar: