Zum Hauptinhalt springen

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.

Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →

Was ein Farm ist

Ein Farm ist ein eigenständiges On-Chain-Programm, das ein oder mehrere Reward-Mints an Konten verteilt, die einen Staking-Mint staken. Der Staking-Mint ist in der Regel ein LP-Token, der von CPMM, AMM v4 oder einem Legacy-Pair-Pool ausgegeben wird. Single-Asset-Farms (direktes Staking von SOL, RAY oder einem Projekttoken) werden jedoch unterstützt und für einige lang laufende Programme verwendet. Wichtige Eigenschaften:
  • Emissions-basiert, nicht gebührenbasiert. Anders als die eingebauten Reward-Streams von CLMM sind Farm-Rewards nicht an Swap-Volumen oder Pool-Aktivität gebunden. Das Budget eines Farms wird von vorne herein vom Ersteller eingezahlt und sendet konstant mit einer festen Sekunden-Rate aus, bis es aufgebraucht ist.
  • Unabhängig vom Pool. Der Pool weiß nicht, dass der Farm existiert. Das Verschieben von LP zwischen Wallets benachrichtigt den Farm nicht; ein Benutzer muss zunächst aktiv vom Farm ausführen Withdraw. Ebenso führt Withdraw aus dem Pool nicht zu einem Withdraw aus dem Farm.
  • Pro-Benutzer, Pro-Reward-Ledger. Jeder Staker hat ein UserStake (oder „Ledger”)-Konto pro Farm, das seinen gestakten Betrag und seinen Snapshot des Reward-Pro-Anteil-Zählers für jeden der Farm-Reward-Streams verfolgt.
  • Multi-Reward. Farm v5 unterstützt bis zu 2 Rewards; v6 unterstützt bis zu 5. Jeder Reward hat seinen eigenen Tresor, seine eigene Pro-Sekunden-Rate, Start- und Endzeit.

Die drei Live-Versionen

Raydium hat drei Farm-Programmversionen bereitgestellt. Alle sind live und jede hat ihr eigenes PDA-Schema und Anweisungssatz. Integratoren sollten sie als drei unterschiedliche Programme behandeln, die ein konzeptionelles Modell teilen.
VersionProgramm-ID-SpeicherortMax. RewardsBemerkenswerte Unterschiede
v3siehe reference/program-addresses1Frühestes Schema. Älteste Farms (RAY-USDC, SOL-USDC) führen noch über diesen Weg.
v5siehe reference/program-addresses2Zweiter Reward-Slot hinzugefügt und AddReward-artige Aufstockungen.
v6siehe reference/program-addresses5Aktuelle Version. Erweiterte Slots, verbesserte Admin-Verwaltung, unterstützt CLMM-Position-Farming über einen v6-spezifischen Adapter (in der Praxis selten).
Das SDK stellt raydium.farm als eine einzige Schnittstelle bereit — die Version wird vom Owner des Farm-Kontos hergeleitet. Beim Aufbau von On-Chain-Integrationen müssen Sie manuell dispatchen.

Reward-Pro-Anteil-Buchhaltung

Das Farm-Programm verwendet das Standard-„Master-Chef”-Muster, das in DeFi-Yield-Contracts verbreitet ist:
reward_per_share := total_rewards_distributed_by_stream / total_staked
pending(user)    := user.staked × (reward_per_share − user.reward_debt)
  • reward_per_share wird im Farm-Konto als Fixed-Point-Zähler gespeichert (Q64.64 in v5+, Q56.8 in v3). Es wächst nur.
  • user.reward_debt ist der Snapshot von reward_per_share bei der letzten Interaktion des Benutzers. Es ist keine Schuld, die der Benutzer schuldet; es ist ein Offset zur Berechnung zukünftiger Ansammlungen.
  • Bei Deposit und Withdraw gleicht der Farm zunächst ausstehende Rewards aus (indem er user.pending_reward gutschreibt oder direkt an die ATA des Benutzers sendet, je nach Version), aktualisiert dann user.reward_debt zum aktuellen Zähler.
  • Bei Harvest zahlt der Farm pending_reward aus und erstellt einen Snapshot von reward_debt erneut.
Die Pro-Sekunden-Emissionsrate wird durch ein Lazy-Update in die Buchhaltung aufgenommen:
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
Lazy: Keine Anweisung wird „jede Sekunde” emittiert. Der Zähler wird aktualisiert, jedes Mal wenn jemand den Farm berührt (Deposit, Withdraw, Harvest, Admin-Update). Farms ohne Aktivität sammeln eine wachsende Lücke an, die bei der nächsten Interaktion geschlossen wird.

Staking-Mint vs. Reward-Mint

Der Staking-Mint wird treuhänderisch verwahrt, nicht verbrannt. Wenn ein Benutzer 100 LP stakt, verschiebt der Farm 100 LP von der ATA des Benutzers in den Staking-Tresor des Farms. Bei Withdraw verschiebt der Farm 100 LP zurück. Der Farm ruft niemals den Pool auf. Reward-Mints werden aus Tresoren ausgezahlt, die vom Ersteller vorab finanziert werden. Wenn ein Ersteller einen Farm einrichtet, zahlt er das vollständige Reward-Budget (z. B. 1.000.000 RAY + 500.000 USDC) auf die zwei Reward-Tresore ein. Das Farm-Programm prägt keine neuen Tokens; es verteilt einfach das, was sich im Tresor befindet, über die Dauer des Streams. Wenn der Tresor vor end_time geleert wird, stoppt die Emission.

Emissionszeitpläne

Jeder Reward-Stream hat drei Zeitparameter:
  • start_time — der UNIX-Zeitstempel, ab dem die Emissionen beginnen. Davor erfolgt keine Ansammlung.
  • end_time — der Zeitstempel, ab dem die Emissionen stoppen. Danach wächst reward_per_share nicht mehr aus diesem Stream.
  • per_second — die Emissionsrate während start_time ≤ now < end_time.
Ein Reward kann erweitert werden (schieben Sie end_time nach vorne, füllen Sie den Tresor auf) über AddReward / SetRewards auf v5 / v6. Er kann nach end_time über RestartRewards neu gestartet werden. Er kann nicht ohne Admin-Zusammenarbeit verkürzt werden.

Was Farms nicht sind

  • Kein Gebührenverteiler. CPMM und CLMM erfassen Handelsgebühren direkt im Pool-State. Farms berühren Pool-Gebühren nicht. Der einzige Weg von Pool-Gebühren zu einem Token-Inhaber ist LP-Rückzahlung oder CLMMs CollectFee.
  • Nicht automatisch. LP muss explizit gestaket werden, um Farm-Rewards zu verdienen. LP-Inhaber, die ihre Token in ihrer Brieftasche belassen, verdienen nichts vom Farm.
  • Nicht fungibel. Jedes UserStake-Konto ist an ein (farm, user)-Paar gebunden. Sie können Ihren Stake nicht auf eine andere Brieftasche übertragen, ohne ihn vorher abzustaken.
  • Nicht direkt mit CLMM-Positionen kompatibel. Farm v6 führte einen CLMM-Adapter ein, aber in der Praxis verwenden CLMM-Pools ihre eigenen eingebauten Reward-Streams (siehe products/clmm/fees) anstelle von Farm-Emissionen.

Wenn Farms das richtige Werkzeug sind

Verwenden Sie einen Farm, wenn Sie möchten:
  • LP für einen Ihrer CPMM- oder AMM-v4-Pools mit einem externen Token (Ihr Projekttoken, Token eines Partners usw.) anreizen.
  • Ein Staking-Programm auf einem Single-Asset-Mint ausführen (klassisches „stake RAY, earn RAY”) ohne Ihren eigenen Contract bereitzustellen.
  • Zusätzliche Rewards auf top eines bestehenden Pools layern, ohne dass Sie Admin-Zugriff auf diesen Pool benötigen.
Verwenden Sie stattdessen CLMMs eingebaute Reward-Streams, wenn Ihr Pool CLMM ist. Sie haben identische Ökonomie, aber partizipieren in der Positions-Fee-Growth-Inside-Buchhaltung (In-Range-Positionen verdienen pro Rata, Out-of-Range-Positionen nicht) und erfordern nicht, dass Benutzer ihre Positions-NFT verschieben.

Kapitelinhalte

  • accounts — vollständiges On-Chain-State-Layout pro Version.
  • instructions — jede Farm-Anweisung mit ihrer Kontoliste und Pre- / Postconditions.
  • code-demos — TypeScript-Beispiele für Staking, Harvesting und das Erstellen eines neuen Farms.

Wo Sie als Nächstes hingehen

Quellen: