Passer au contenu principal
Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
Banneau de version. Tous les exemples ciblent @raydium-io/raydium-sdk-v2@0.2.42-alpha sur Solana mainnet-beta, vérifié en 2026-04. Le SDK dispatche v3 / v5 / v6 en interne selon le propriétaire du programme de la farm ; les exemples ci-dessous supposent une farm v6. Consultez reference/program-addresses pour les trois identifiants de programme.

Installation

Les exemples ici reflètent les fichiers dans raydium-sdk-V2-demo/src/farm. L’initialisation suit le config.ts.template du dépôt de démonstration :

Récupérer une farm par ID

getFarmById récupère FarmState hors-chaîne, décode selon la version du programme, et normalise le taux d’émission à virgule fixe en un simple Decimal par seconde.

Mettre en stake des tokens LP

Source : src/farm/stake.ts
Le SDK gère le pré-règlement de toute récompense en attente, donc si ce portefeuille a déjà des stakes dans cette farm, l’instruction versera les récompenses accumulées aux ATAs de l’utilisateur dans la même transaction.

Récolte uniquement (harvest)

Source : src/farm/harvest.ts
harvestAllRewards accepte une liste — pour les UIs montrant une vue de portefeuille, regroupez l’appel. Chaque farm est récoltée dans une instruction séparée au sein d’une transaction (soumis à la limite de 1232 octets ; pour plus de ~6 farms, divisez en plusieurs transactions). Pour une seule farm sur v6, vous pouvez aussi utiliser le chemin Harvest explicite :
Sur v3 et v5, l’idiome amount: 0 est requis ; le SDK le dispatche correctement.

Retirer les stakes

Source : src/farm/unstake.ts

Créer une farm v6

Source : src/farm/createAmmFarm.ts et editAmmFarm.ts
Points clés :
  • perSecond est le taux d’émission entier par seconde. Le SDK le compresse en Q64.64 avant l’envoi. Pour un taux fractionnaire, ajustez l’échelle et la durée.
  • Le budget complet (perSecond × duration) doit être présent dans votre ATA de récompense — create le déplace dans le coffre de récompenses atomiquement.
  • Vous pouvez mettre en place jusqu’à 5 récompenses en un seul appel create. La liste des comptes augmente de (reward_mint, reward_vault, sender_ata, token_program) par flux supplémentaire ; restez conscient de la limite de taille de transaction de 1232 octets. Pour 4+ récompenses, créez avec 1–2 et utilisez AddReward dans les transactions de suivi.

Augmenter un flux de récompense existant

setRewards prolonge end_time et transfère le budget delta. L’instruction ne peut pas raccourcir un flux, ne peut pas diminuer per_second sur un flux actif, et ne peut pas changer le mint de récompense. Pour changer les mints, attendez end_time et utilisez AddReward sur un emplacement libéré (s’il y en a un), ou créez une nouvelle farm.

Redémarrer un flux terminé

Valide uniquement quand l’état reward_state == 2 (terminé) de l’emplacement cible. L’appelant doit être le reward_sender de l’emplacement (v6) ou le propriétaire de la farm (v5).

CPI Rust

Contrairement à AMM v4, le programme farm v6 est livré avec une caisse Anchor (raydium_farm_v6) publiée aux côtés des sources frontend et SDK. Un esquisse minimal de Deposit :
La tranche remaining_accounts doit correspondre exactement aux emplacements de récompense actifs de la farm, 1 pour 1 (paires de reward_vault_i, user_reward_ata_i dans l’ordre des index). Omettre ou mélanger ces éléments produit une mauvaise comptabilité silencieuse — le programme transférera le mauvais montant.

Pièges

  • Oublier de récolter avant de retirer. Inoffensif — Withdraw règle d’abord les récompenses en attente. Mais si votre UI montre « récolter » séparément de « retirer », l’utilisateur peut penser qu’il y a encore quelque chose à récolter après un Withdraw. Ce n’est pas le cas ; tout ce qui s’est accumulé jusqu’à ce point a été versé.
  • total_staked = 0 pendant les émissions. Les émissions accumulées alors que rien n’était en stake sont perdues (la formule de mise à jour reward_per_share divise par 0 et le programme saute la mise à jour). Pour les programmes avec open_time programmé, exécutez un « seed stake » à open_time pour éviter cela.
  • Frais de transfert Token-2022. Sur les farms v6 avec mints de récompense Token-2022, le frais de transfert s’applique lors de l’émission (coffre → utilisateur). Tenez compte de cela dans les devis de APR.
  • Petit per_second sur v5. Le taux u64 de v5 signifie que tout per_second < 1 unité token par seconde (sur les mints avec ≥9 décimales, c’est souvent le taux souhaité) ne peut pas être exprimé — le taux du flux s’arrondit à 0 et la farm n’émet rien. Utilisez v6.

Prochaines étapes

Sources :