Langsung ke konten utama

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.

Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Instruksi farm bergantung pada versi. Deposit pada v6 tidak dapat dipanggil pada farm v5 dan sebaliknya. SDK mengirimkan dengan membaca pemilik program farm; untuk CPI on-chain Anda harus memilih program ID yang tepat di awal.

Inventaris instruksi

Tujuanv3v5v6
Membuat farmCreateFarmCreateFarmCreateFarm
Menambahkan ledger pengguna (mungkin implisit)CreateUserLedgerCreateAssociatedLedgerImplisit dalam Deposit
StakingDepositDepositDeposit
UnstakingWithdrawWithdrawWithdraw
Klaim hadiah sajaN/A (gunakan Deposit 0)N/A (gunakan Deposit 0)Harvest
Tambahkan aliran hadiah setelah pembuatanN/AAddRewardAddReward
Ubah aliran hadiah yang adaN/ASetRewardsSetRewards
Mulai ulang hadiah setelah end_timeN/ARestartRewardsRestartRewards
Tarik anggaran hadiah yang belum diklaim (admin)N/AWithdrawRewardWithdrawReward
Pada v3 dan v5, cara kanonikus untuk mengklaim hadiah tanpa mengubah staking adalah memanggil Deposit dengan amount = 0. Program memperlakukan ini sebagai penyelesaian murni. v6 memperkenalkan Harvest eksplisit untuk kejelasan. SDK mengabstraksi semua ini di balik raydium.farm.deposit({ ... }) dll. Bagian di bawah mendokumentasikan daftar akun yang mendasar untuk integrator yang perlu membangun instruksi secara manual (agregator, alat pemantauan, ekstensi SDK).

CreateFarm (v6)

Jalankan farm v6 baru. Argumen
reward_info_count: u8               // jumlah aliran hadiah saat pembuatan (1..=5)
reward_infos: [
  {
    open_time:            u64,
    end_time:             u64,
    emission_per_second_x64: u128,   // Q64.64
    mint:                 Pubkey,    // reward mint
    token_program:        Pubkey,    // SPL atau Token-2022
  }
]
Akun (ringkas, untuk reward_info_count = 1)
#NamaWSCatatan
1creatorWSMembayar rent, memiliki farm.
2farm_stateWAkun FarmState baru.
3farm_authorityPDA [farm_id].
4staking_mint
5staking_vaultWDibuat sebagai ATA authority atau vault PDA.
6staking_token_program
7reward_mint
8reward_vaultWAkan menerima anggaran awal.
9reward_token_program
10reward_sender_ataWATA creator pada reward mint; dikurangi oleh instruksi ini.
11system_program
12token_program
13associated_token_program
14rent
Prekondisi
  • open_time > now, end_time > open_time.
  • creator ATA memegang setidaknya emission_per_second_x64 × (end_time − open_time) / 2^64 dari reward mint.
  • staking_mint tidak memiliki freeze authority, atau freeze authority dinonaktifkan.
Postkondisi
  • FarmState diinisialisasi, total_staked = 0.
  • Vault hadiah didanai dengan anggaran aliran penuh.
  • ATA hadiah creator dikurangi dengan jumlah tersebut.

Deposit (v6)

Staking amount dari staking mint. Argumen
amount: u64
Akun
#NamaWS
1userWS
2user_ledgerW
3farm_stateW
4farm_authority
5staking_vaultW
6user_staking_ataW
7..(7+n)reward_vault_{i}W
user_reward_ata_{i}W
last−2system_program
last−1token_program
lastassociated_token_program
Jika user_ledger tidak ada, SDK menambahkan instruksi gaya CreateAccount; program v6 juga dapat membuat lazilynya diberikan akun system program. Pola remaining accounts: untuk setiap hadiah aktif, tambahkan (reward_vault, user_reward_ata) sehingga penyelesaian dapat membayar. Efek
  1. Segarkan reward_per_share_x64[i] untuk setiap aliran hadiah aktif menggunakan formula pembaruan lazy.
  2. Hitung pending_i = user_ledger.deposited × reward_per_share_x64[i] / 2^64 − user_ledger.reward_debts[i].
  3. Pindahkan pending_i dari reward_vault_{i} ke user_reward_ata_{i}.
  4. Pindahkan amount staking mint dari user_staking_ata ke staking_vault.
  5. Perbarui user_ledger.deposited += amount dan re-snapshot reward_debts[i].
  6. Perbarui farm_state.total_staked += amount.
Prekondisi
  • amount > 0 untuk staking asli (v6 melarang amount = 0 — gunakan Harvest untuk klaim-saja).
  • user_staking_ata memegang setidaknya amount.
  • Setiap vault hadiah aktif memegang setidaknya pending yang diwajibkan kepada pengguna ini.

Withdraw (v6)

Unstaking amount. Argumen
amount: u64
Akun — identik dengan Deposit. Efek — penyelesaian sama seperti Deposit, kemudian pindahkan staking mint kembali ke pengguna: staking_vault → user_staking_ata. total_staked dan user_ledger.deposited keduanya berkurang. Prekondisi
  • amount ≤ user_ledger.deposited.
  • Farm tidak dijeda.

Harvest (v6)

Klaim hadiah pending tanpa mengubah staking. Argumen — tidak ada. Akun — sama seperti Deposit, tidak ada pergerakan sisi staking. Efek — segarkan reward_per_share_x64[i], bayar pending_i, re-snapshot reward_debts[i]. Tidak ada perubahan pada total_staked atau deposited.

AddReward (v5/v6)

Tambahkan aliran hadiah baru ke farm yang ada yang memiliki slot kosong. Argumen
reward_info: {
  open_time:            u64,
  end_time:             u64,
  emission_per_second_x64: u128,
  mint:                 Pubkey,
  token_program:        Pubkey,
}
Prekondisi
  • Slot kosong ada (reward_info_count < 5 pada v6, < 2 pada v5).
  • open_time ≥ now (mungkin di masa depan) atau open_time < now hanya diizinkan jika versi program memungkinkannya — v6 memungkinkan, v5 tidak.
Postkondisi
  • Aliran baru diinisialisasi pada indeks reward_info_count, reward_info_count++.
  • Vault hadiah dikreditkan dengan anggaran aliran penuh dari ATA pemanggil.
Kesalahan umumRewardAlreadyExists jika mint bertabrakan dengan slot yang ada.

SetRewards (v5/v6)

Perpanjang atau isi ulang aliran hadiah yang ada. Tidak dapat mengubah mint; tidak dapat mempersingkat end_time; tidak dapat menurunkan emission_per_second_x64 setelah berjalan. Argumen
reward_index:         u8
new_open_time:        u64,
new_end_time:         u64,
new_emission_per_second_x64: u128,
Prekondisi
  • Aliran masih berjalan (reward_state == 1).
  • new_end_time ≥ current end_time.
  • Anggaran tambahan yang diperlukan (new_emission × new_duration − already_emissioned) ada dalam ATA pengirim dan ditransfer ke vault hadiah oleh instruksi.
Pada v5, panggilan yang setara adalah SetRewards dengan set argumen yang lebih kecil (tidak ada perubahan per-detik pada aliran aktif).

RestartRewards (v5/v6)

Mulai ulang aliran setelah end_time terlampaui. Secara konseptual sama dengan AddReward untuk mint yang sudah memiliki slot. Argumen — bentuk identik dengan AddReward pada indeks itu. Prekondisi
  • reward_state == 2 (berakhir).
  • Pemanggil adalah reward_sender slot (v6) atau farm owner (v5).

WithdrawReward (v5/v6)

Admin sweep saldo vault hadiah yang belum diklaim setelah aliran berakhir dan semua staker memiliki kesempatan untuk harvest. Argumen
reward_index: u8
Prekondisi
  • Aliran berakhir (reward_state == 2).
  • reward_total_emissioned == reward_claimed + vault_balance (tidak ada yang saat ini diwajibkan).
Efek — memindahkan sisa ke reward_sender_ata. Program tidak mencegah penarikan saat staker masih memiliki klaim pending; admin diharapkan melakukan harvest atas nama staker yang tertinggal terlebih dahulu (atau membiarkan mereka harvest). Jika Anda melakukan sweep terlalu awal, pengguna kehilangan akses ke hadiah yang belum diklaim mereka. Jangan panggil ini terlalu awal.

Variasi v5

  • Deposit / Withdraw memiliki bentuk yang sama dengan v6 tetapi menggunakan hingga 2 slot hadiah dan reward_per_share adalah u128 (titik-tetap dengan radix berbeda).
  • CreateAssociatedLedger adalah panggilan terpisah yang diperlukan sebelum Deposit pertama; v6 menggabungkannya.
  • AddReward tersedia, Harvest tidak (gunakan Deposit 0).

Variasi v3

  • Aliran hadiah tunggal. Tidak ada AddReward, tidak ada slot kedua.
  • Deposit 0 adalah satu-satunya cara untuk klaim.
  • CreateUserLedger harus dipanggil sebelum Deposit pertama.

Matriks perubahan state

Instruksitotal_stakeduser.depositedreward_per_shareVault hadiah
CreateFarm00didanai oleh creator
Deposit(n)+n+ndisegarkan−pending (dibayarkan)
Withdraw(n)−n−ndisegarkan−pending
Harvestdisegarkan−pending
AddReward+anggaran baru
SetRewards+anggaran delta
RestartRewards+anggaran
WithdrawReward−sisa

Langkah selanjutnya

Sumber: