Passer au contenu principal

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.

Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →

Qu’est-ce qu’une farm

Une farm est un programme on-chain autonome qui distribue un ou plusieurs reward mints aux comptes qui stakent un staking mint. Le staking mint est presque toujours un token LP émis par CPMM, AMM v4, ou un pool de paire hérité, mais les farms sur un seul actif (staker SOL, RAY, ou un token de projet directement) sont prises en charge et utilisées pour un petit nombre de programmes de longue durée. Propriétés clés :
  • Basé sur l’émission, non sur les frais. Contrairement aux flux de récompenses intégrés de CLMM, les récompenses de farm ne sont pas liées au volume d’échange ou à l’activité du pool. Le budget d’une farm est déposé à l’avance par le créateur et s’émet à un taux constant par seconde jusqu’à épuisement.
  • Indépendante du pool. Le pool ne sait pas que la farm existe. Déplacer des LP entre les portefeuilles ne notifie pas la farm ; un utilisateur doit d’abord effectuer un Withdraw de la farm. De même, un Withdraw du pool ne retire pas de la farm.
  • Ledger par utilisateur et par récompense. Chaque staker a un compte UserStake (ou « Ledger ») par farm qui suit son montant staké et son snapshot du compteur de récompense par part pour chacun des flux de récompenses de la farm.
  • Multi-récompense. Farm v5 supporte jusqu’à 2 récompenses ; v6 supporte jusqu’à 5. Chaque récompense a son propre vault, taux par seconde, heure de début et heure de fin.

Les trois versions actives

Raydium a déployé trois versions du programme de farm. Toutes sont actives, et chacune porte son propre schéma PDA et ensemble d’instructions. Les intégrateurs doivent les traiter comme trois programmes distincts qui partagent un modèle conceptuel.
VersionLocalisation du Program IDRécompenses maxDifférences notables
v3voir reference/program-addresses1Schéma le plus ancien. Les plus anciennes farms (RAY-USDC, SOL-USDC) passent encore par ici.
v5voir reference/program-addresses2Ajout d’une deuxième slot de récompense et AddReward pour les rehaussements.
v6voir reference/program-addresses5Version actuelle. Slots élargis, admin plus propre, supporte le farming de positions CLMM via un adaptateur v6 spécifique (rare en pratique).
Le SDK expose raydium.farm comme une seule façade — la version est déduite du propriétaire du compte farm. Lors de la construction d’intégrations on-chain, vous devez dispatcher manuellement.

Comptabilité de récompense par part

Le programme de farm utilise le pattern « master-chef » standard vu dans les contrats de rendement DeFi :
reward_per_share := total_rewards_distributed_by_stream / total_staked
pending(user)    := user.staked × (reward_per_share − user.reward_debt)
  • reward_per_share est stocké sur le compte farm comme un compteur en virgule fixe (Q64.64 en v5+, Q56.8 en v3). Il ne fait que croître.
  • user.reward_debt est le snapshot de reward_per_share à la dernière interaction de l’utilisateur. Ce n’est pas une dette que l’utilisateur doit ; c’est un offset utilisé pour calculer les accruals futurs.
  • Sur Deposit et Withdraw, la farm règle d’abord les récompenses en attente (en créditant user.pending_reward ou en envoyant directement à l’ATA de l’utilisateur, selon la version), puis met à jour user.reward_debt vers le compteur actuel.
  • Sur Harvest, la farm verse pending_reward et fait un snapshot de reward_debt à nouveau.
Le taux d’émission par seconde entre dans la comptabilité via une mise à jour paresseuse :
elapsed        := min(now, reward.end_time) − reward.last_update_time
new_emissions  := reward.per_second × elapsed
if total_staked > 0:
    reward_per_share += new_emissions / total_staked
reward.last_update_time := now
Paresseuse : aucune instruction n’est émise « chaque seconde ». Le compteur est rafraîchi chaque fois que quelqu’un touche la farm (Deposit, Withdraw, Harvest, mise à jour admin). Les farms sans activité accumulent un écart croissant qui est comblé à la prochaine interaction.

Staking mint vs reward mint

Le staking mint est tenu en séquestre, non brûlé. Quand un utilisateur stake 100 LP, la farm déplace 100 LP de l’ATA de l’utilisateur dans le vault de staking de la farm. Sur Withdraw, la farm redéplace 100 LP. La farm n’appelle jamais le pool. Les reward mints sont payés à partir de vaults préfinancés par le créateur. Quand un créateur configure une farm, il dépose le budget de récompense complet (disons, 1 000 000 RAY + 500 000 USDC) dans les deux vaults de récompense. Le programme de farm ne crée pas de nouveaux tokens ; il distribue simplement ce qui est dans le vault sur la durée du flux. Si le vault est vidé avant end_time, les émissions s’arrêtent.

Calendriers d’émission

Chaque flux de récompenses a trois paramètres de temps :
  • start_time — le timestamp UNIX auquel les émissions commencent. Avant cela, aucune accrual.
  • end_time — le timestamp auquel les émissions s’arrêtent. Après cela, reward_per_share ne croît plus à partir de ce flux.
  • per_second — le taux d’émission tandis que start_time ≤ now < end_time.
Une récompense peut être prolongée (pousser end_time en avant, remplir le vault) via AddReward / SetRewards sur v5 / v6. Elle peut être relancée après end_time via RestartRewards. Elle ne peut pas être raccourcie sans coopération admin.

Ce que les farms ne sont pas

  • Pas un distributeur de frais. CPMM et CLMM collectent les frais de trading directement dans l’état du pool. Les farms ne touchent pas aux frais du pool. Le seul chemin des frais de pool à un détenteur de token est la rédemption de LP ou CollectFee de CLMM.
  • Pas automatique. Le LP doit être explicitement staké pour gagner des récompenses de farm. Les détenteurs de LP qui laissent leurs tokens dans leur portefeuille ne gagnent rien de la farm.
  • Pas fongible. Chaque compte UserStake est lié à une paire (farm, user). Vous ne pouvez pas transférer votre stake à un autre portefeuille sans d’abord vous unstaker.
  • Non compatible directement avec les positions CLMM. Farm v6 a introduit un adaptateur CLMM, mais en pratique les pools CLMM utilisent leurs propres flux de récompenses intégrés (voir products/clmm/fees) plutôt que les émissions de farm.

Quand les farms sont l’outil approprié

Utilisez une farm quand vous voulez :
  • Inciter le LP pour l’un de vos pools CPMM ou AMM v4 de projet avec un token externe (votre token de projet, le token d’un partenaire, etc.).
  • Exécuter un programme de staking sur un mint d’un seul actif (le classique « stake RAY, gagne RAY ») sans déployer votre propre contrat.
  • Superposer des récompenses supplémentaires au-dessus d’un pool existant sans avoir besoin d’accès administrateur à ce pool.
Utilisez plutôt les flux de récompenses intégrés de CLMM quand votre pool est CLMM. Ils ont une économie identique mais participent à la comptabilité de croissance des frais internes à la position (les positions in-range gagnent pro rata, les positions out-of-range non) et ne nécessitent pas que les utilisateurs déplacent leur position NFT.

Contenu du chapitre

  • accounts — disposition complète de l’état on-chain par version.
  • instructions — chaque instruction de farm avec sa liste de comptes et ses pré/postconditions.
  • code-demos — exemples TypeScript pour staker, harvest, et créer une nouvelle farm.

Où aller ensuite

Sources :