Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
Les instructions de farm sont spécifiques à la version. Un
Deposit sur v6 ne peut pas être appelé sur un farm v5 et vice versa. Le SDK effectue la distribution en lisant le propriétaire du programme de la farm ; pour une CPI on-chain, vous devez choisir le bon ID de programme en amont.Inventaire des instructions
Sur v3 et v5, le moyen canonique de réclamer des récompenses sans modifier le stake est d’appeler
Deposit avec amount = 0. Le programme traite cela comme un règlement pur. v6 a introduit un Harvest explicite pour plus de clarté.
Le SDK abstrait tous ces éléments derrière raydium.farm.deposit({ ... }), etc. Les sections ci-dessous documentent les listes de comptes sous-jacentes pour les intégrateurs qui doivent construire les instructions manuellement (agrégateurs, outils de monitoring, extensions SDK).
CreateFarm (v6)
Démarrez une nouvelle farm v6.
Arguments
reward_info_count = 1)
Préconditions
open_time > now,end_time > open_time.- Les ATA du
creatorcontiennent au moinsemission_per_second_x64 × (end_time − open_time) / 2^64du mint de récompense. staking_mintn’a pas d’autorité de gel, ou l’autorité de gel est désactivée.
FarmStateinitialisé,total_staked = 0.- Coffre-fort(s) de récompense financé(s) avec l’intégralité du budget du flux.
- L’ATA de récompense du créateur est drainé de ce montant.
Deposit (v6)
Stakez amount du mint de staking.
Arguments
Si le
user_ledger n’existe pas, le SDK ajoute une instruction de style CreateAccount ; le programme v6 peut également le créer paresseusement en cas de compte système. Motif des comptes restants : pour chaque récompense active, ajoutez (reward_vault, user_reward_ata) afin que le règlement puisse verser les paiements.
Effet
- Actualisez
reward_per_share_x64[i]pour chaque flux de récompense actif en utilisant la formule de mise à jour paresseuse. - Calculez
pending_i = user_ledger.deposited × reward_per_share_x64[i] / 2^64 − user_ledger.reward_debts[i]. - Transférez
pending_idereward_vault_{i}versuser_reward_ata_{i}. - Transférez
amountdu mint de staking deuser_staking_ataversstaking_vault. - Mettez à jour
user_ledger.deposited += amountet reprenez un instantané dereward_debts[i]. - Mettez à jour
farm_state.total_staked += amount.
amount > 0pour un véritable stake (v6 interditamount = 0— utilisezHarvestpour réclamer uniquement).user_staking_atacontient au moinsamount.- Chaque coffre-fort de récompense actif contient au moins ce qui est dû à cet utilisateur.
Withdraw (v6)
Unstakez amount.
Arguments
Deposit.
Effet — même règlement que Deposit, puis renvoyez le mint de staking à l’utilisateur : staking_vault → user_staking_ata. total_staked et user_ledger.deposited diminuent tous deux.
Préconditions
amount ≤ user_ledger.deposited.- La farm n’est pas en pause.
Harvest (v6)
Réclamez les récompenses en attente sans modifier le stake.
Arguments — aucun.
Comptes — identiques à Deposit, aucun mouvement du côté du staking.
Effet — actualisez reward_per_share_x64[i], versez pending_i, reprenez un instantané de reward_debts[i]. Aucun changement à total_staked ou deposited.
AddReward (v5/v6)
Ajoutez un nouveau flux de récompense à une farm existante qui dispose d’un emplacement inutilisé.
Arguments
- Un emplacement libre existe (
reward_info_count < 5sur v6,< 2sur v5). open_time ≥ now(peut être dans le futur) ouopen_time < nowest autorisé uniquement si la version du programme le permet — v6 le permet, v5 ne le permet pas.
- Le nouveau flux est initialisé à l’index
reward_info_count,reward_info_count++. - Le coffre-fort de récompense est crédité du budget intégral du flux provenant de l’ATA du participant.
RewardAlreadyExists si le mint entre en collision avec un emplacement existant.
SetRewards (v5/v6)
Prolongez ou alimentez un flux de récompense existant. Impossible de modifier le mint ; impossible de raccourcir end_time ; impossible de diminuer emission_per_second_x64 une fois en cours d’exécution.
Arguments
- Le flux est toujours en cours d’exécution (
reward_state == 1). new_end_time ≥ current end_time.- Le budget supplémentaire requis
(new_emission × new_duration − already_emissioned)est présent dans l’ATA du participant et est transféré au coffre-fort de récompense par l’instruction.
SetRewards avec un ensemble d’arguments plus petit (pas de modifications par seconde sur les flux en cours d’exécution).
RestartRewards (v5/v6)
Redémarrez un flux après que son end_time soit écoulé. Conceptuellement identique à AddReward pour un mint qui possède déjà un emplacement.
Arguments — forme identique à AddReward à cet index.
Préconditions
reward_state == 2(terminé).- Le participant est
reward_senderde l’emplacement (v6) ouownerde la farm (v5).
WithdrawReward (v5/v6)
Balayage administratif du solde du coffre-fort de récompense non réclamé après qu’un flux s’est terminé et que tous les stakeurs ont eu la chance de réclamer.
Arguments
- Le flux est terminé (
reward_state == 2). reward_total_emissioned == reward_claimed + vault_balance(rien n’est actuellement dû).
reward_sender_ata. Le programme n’empêche pas de retirer tant que les stakeurs ont encore des réclamations en attente ; l’administrateur est censé réclamer au nom des stakeurs lents en premier (ou les laisser réclamer). Si vous effectuez un balayage prématuré, les utilisateurs perdent l’accès à leurs récompenses non réclamées. N’appelez pas ceci prématurément.
Variations de v5
Deposit/Withdrawont la même forme que v6 mais utilisent jusqu’à 2 emplacements de récompense etreward_per_shareestu128(virgule fixe avec une base différente).CreateAssociatedLedgerest un appel séparé obligatoire avant le premierDeposit; v6 l’a fusionné.AddRewardest disponible,Harvestne l’est pas (utilisezDeposit 0).
Variations de v3
- Flux de récompense unique. Pas de
AddReward, pas de deuxième emplacement. Deposit 0est la seule façon de réclamer.CreateUserLedgerdoit être appelé avant le premierDeposit.
Matrice de changement d’état
Où aller ensuite
products/farm-staking/code-demos— Exemples TypeScript.products/farm-staking/accounts— LayoutsFarmState/UserLedger/UserStake.reference/error-codes— Énumération des erreurs de farm.
- Raydium SDK v2
Farmmodule - Raydium farm program source (v3 / v5 / v6)

