Skip to main content
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Drei Programme, drei Schemas. Farm v3, v5 und v6 sind separate Programme mit separaten State-Layouts. Diese Seite dokumentiert jede Version nebeneinander. In der Praxis zielen die meisten neuen Integrationen auf v6 ab; v3 und v5 sind für die meisten Integratoren schreibgeschützt (Staking fand dort vor langer Zeit statt und die Pools laufen aus).

Kontobestand (pro Farm, beliebige Version)

Das SDK gibt die Anzeige-Ansicht über raydium.api.fetchFarmInfoById({ ids }) zurück und die rohen Konten-Keys — Authority, LP-Vault, Reward-Vaults pro Slot — über raydium.api.fetchFarmKeysById({ ids }). (Ein raydium.farm.getFarmById gibt es nicht.) Dieselben Daten sind über HTTP unter GET https://api-v3.raydium.io/main/farms/info?ids=<FARM_ID> verfügbar.

FarmState-Layout — v6

v6 ist die aktuelle Version. Ihre Kontostruktur ist die allgemeinste.
Für Integratoren relevante Felder:
  • staking_mint, staking_vault — was gestaked wird und wo es sitzt.
  • total_staked — aktuell gesamt. Erforderlich zur Berechnung der APR: reward_per_second × 86400 / total_staked.
  • reward_infos[i].emission_per_second_x64 — die Q64.64-Rate. Durch 2^64 teilen für die echte Token-Anzahl pro Sekunde.
  • reward_infos[i].open_time / end_time — für UI-Anzeigen „X Tage verbleibend”.
  • reward_infos[i].reward_per_share_x64 — der Zähler, dem das UserLedger entgegenrechnet.

FarmState-Layout — v5

Unterschiede zu v6:
  • Pro Slot, nicht pro Sekunde. v5’s Update-Schleife läuft auf Slots statt auf der Wanduhr. Das SDK normalisiert dies in der UI in „pro Sekunde”, aber on-chain ist die Einheit Slots.
  • Integer-Emissionsrate. reward_per_second ist u64. Dies begrenzt die minimal ausdrückbare Rate auf 1 Einheit pro Sekunde, was zu grob für Low-Emission-Streams auf 9-Dezimal-Mints ist. v6 behob dies mit der Q64.64-Rate.
  • Kein reward_sender. In v5 ist der Eigentümer der implizite Absender; nur owner kann aufstocken.

FarmState-Layout — v3

Single-Reward. Slot-basiert. Die älteste Programmgeneration, am Leben erhalten für die RAY-USDC und SOL-USDC Farms, die v5 vorausgehen.

UserLedger (v6) / UserStake (v5/v3)

Pro-Benutzer-State, ein Konto pro (farm, user) Paar. Seeded PDA:
(Seed-Strings sind die Werte, die tatsächlich vom SDK verwendet werden; Programmversionen haben sie historisch unterschiedlich gestaltet. Überprüfen Sie gegen die v6-Quelle für alles Sicherheitskritisches.)
Die Pro-Stream-Schuld ist der Accounting-Offset, der in der Übersicht beschrieben wird:
Nach jedem Deposit, Withdraw oder Harvest wird die Schuld auf den aktuellen deposited × reward_per_share_x64[i] / 2^64 zurückgesetzt.

Authority-PDAs

Alle drei Versionen leiten die Farm-Authority pro Farm mit einem einzelnen Seed ab. Diese PDA ist die Authority auf dem Staking-Vault und auf jedem Reward-Vault. Sie signiert jeden Transfer, den die Farm vornimmt.

Vaults

Staking- und Reward-Vaults sind Standard-SPL-Token-Konten, deren owner die Farm-Authority-PDA ist. Adressen werden auf FarmState gespeichert — nicht neu ableiten; aus dem State lesen. Freeze-Authorities müssen auf dem Staking-Mint für v5/v6 deaktiviert werden (das Programm überprüft dies). Token-2022-Hinweise:
  • v3: Nur SPL Token.
  • v5: Nur SPL Token.
  • v6: Unterstützt Token-2022 auf Staking- und Reward-Mints, gated auf staking_token_program / reward_token_program Felder. Transfergebühren auf Token-2022 Reward-Mints werden beim Emit berechnet (Vault → Benutzer).

Beobachtung und APR

Farms speichern keine APR on-chain. Zur Berechnung:
Consumer ziehen typischerweise staking_mint_usd_price aus dem Pool, zu dem die LP gehört (über api-v3.raydium.io/pools/info/ids) und reward_usd_price aus einem beliebigen Price-Oracle.

Nächste Schritte

Quellen: