Ana içeriğe atla

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

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

Amaçv3v5v6
Farm oluşturmaCreateFarmCreateFarmCreateFarm
Kullanıcı defteri ekleme (örtülü olabilir)CreateUserLedgerCreateAssociatedLedgerDeposit içinde örtülü
Stake etmeDepositDepositDeposit
Unstake yapmaWithdrawWithdrawWithdraw
Sadece ödülleri talep etmeN/A (Deposit 0 kullanın)N/A (Deposit 0 kullanın)Harvest
Oluşturulduktan sonra ödül akışı eklemeN/AAddRewardAddReward
Mevcut ödül akışını düzenlemeN/ASetRewardsSetRewards
Son_zaman’dan sonra ödülü yeniden başlatmaN/ARestartRewardsRestartRewards
Talep edilmemiş ödül bütçesini çekme (yönetici)N/AWithdrawRewardWithdrawReward
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
reward_info_count: u8               // oluşturulma sırasında ödül akışı sayısı (1..=5)
reward_infos: [
  {
    open_time:            u64,
    end_time:             u64,
    emission_per_second_x64: u128,   // Q64.64
    mint:                 Pubkey,    // ödül mint'i
    token_program:        Pubkey,    // SPL veya Token-2022
  }
]
Hesaplar (özetlenmiş, reward_info_count = 1 için)
#AdWSNotlar
1creatorWSKirayı öder, farm’a sahiptir.
2farm_stateWYeni FarmState hesabı.
3farm_authorityPDA [farm_id].
4staking_mint
5staking_vaultWYetkilinin ATA’sı veya bir PDA vault’u olarak oluşturulur.
6staking_token_program
7reward_mint
8reward_vaultWİlk bütçeyi alacaktır.
9reward_token_program
10reward_sender_ataWÖdül mint’indeki yaratıcının ATA’sı; bu talimattan boşaltılır.
11system_program
12token_program
13associated_token_program
14rent
Ö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
amount: u64
Hesaplar
#AdWS
1userWS
2user_ledgerW
3farm_stateW
4farm_authority
5staking_vaultW
6user_staking_ataW
7..(7+n)reward_vault_{i}W
user_reward_ata_{i}W
son−2system_program
son−1token_program
sonassociated_token_program
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
amount: u64
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
reward_info: {
  open_time:            u64,
  end_time:             u64,
  emission_per_second_x64: u128,
  mint:                 Pubkey,
  token_program:        Pubkey,
}
Ö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
reward_index:         u8
new_open_time:        u64,
new_end_time:         u64,
new_emission_per_second_x64: u128,
Ö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
reward_index: u8
Ö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

Talimatlıtotal_stakeduser.depositedreward_per_shareÖdül vault’ları
CreateFarm00yaratıcı tarafından finanse edildi
Deposit(n)+n+nyenilendi−pending (ödeme yapıldı)
Withdraw(n)−n−nyenilendi−pending
Harvestyenilendi−pending
AddReward+yeni bütçe
SetRewards+delta bütçe
RestartRewards+bütçe
WithdrawReward−kalan

Sonraki adım nereye

Kaynaklar: