Zum Hauptinhalt springen
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Versionsbanner. Alle Beispiele zielen auf @raydium-io/raydium-sdk-v2@0.2.42-alpha gegen Solana mainnet-beta, verifiziert 2026-04. Das SDK versendet intern v3 / v5 / v6 basierend auf dem Programmeigentümer der Farm; die Beispiele unten setzen eine v6-Farm voraus. Siehe reference/program-addresses für die drei Programm-IDs.

Setup

Die Beispiele hier spiegeln Dateien in raydium-sdk-V2-demo/src/farm wider. Das Bootstrap folgt dem config.ts.template des Demo-Repos:

Farm nach ID abrufen

getFarmById ruft FarmState Off-Chain ab, dekodiert nach Programmversion und normalisiert die Fixed-Point-Emissionsrate in ein einfaches Decimal pro Sekunde.

LP-Token staken

Quelle: src/farm/stake.ts
Das SDK kümmert sich um die Vor-Abrechnung etwaiger ausstehender Rewards. Falls diese Wallet bereits Stake in dieser Farm hat, zahlt die Instruction akkumulierte Rewards in den gleichen Transaktionen an die ATAs des Benutzers aus.

Nur-Claim (Harvest)

Quelle: src/farm/harvest.ts
harvestAllRewards akzeptiert eine Liste — für UIs, die eine Portfolio-Ansicht zeigen, bündeln Sie den Aufruf. Jede Farm wird in einer separaten Instruction innerhalb einer Transaktion beansprucht (unterworfen der 1232-Byte-Größenlimit; für >~6 Farmen in mehrere Transaktionen aufteilen). Für eine einzelne Farm auf v6 können Sie auch den expliziten Harvest-Pfad verwenden:
Auf v3 und v5 ist das amount: 0-Idiom erforderlich; das SDK sendet es korrekt.

Unstake

Quelle: src/farm/unstake.ts

Erstellen einer v6-Farm

Quelle: src/farm/createAmmFarm.ts und editAmmFarm.ts
Wichtige Punkte:
  • perSecond ist die ganzzahlige Emissionsrate pro Sekunde. Das SDK packt sie in Q64.64 vor dem Versand. Für eine fraktionale Rate skalieren und passen Sie die Dauer an.
  • Das vollständige Budget (perSecond × duration) muss in Ihrem Reward-ATA vorhanden sein — create verschiebt es atomar in den Reward-Vault.
  • Sie können bis zu 5 Rewards in einem create-Aufruf seeden. Die Kontoliste wächst um (reward_mint, reward_vault, sender_ata, token_program) pro zusätzlichem Stream; achten Sie auf die 1232-Byte-Transaktionsgrößenlimit. Für 4+ Rewards erstellen mit 1–2 und verwenden Sie AddReward in nachfolgenden Transaktionen.

Auffüllen eines vorhandenen Reward-Streams

setRewards verlängert end_time und transferiert das Budget-Delta. Die Instruction kann einen Stream nicht verkürzen, kann per_second bei einem laufenden Stream nicht senken und kann das Reward-Mint nicht ändern. Zum Austausch von Mints warten Sie auf end_time und verwenden AddReward auf einem freien Slot (falls vorhanden), oder erstellen Sie eine neue Farm.

Neustart eines abgelaufenen Streams

Nur gültig, wenn der Ziel-Slot reward_state == 2 (abgelaufen) ist. Der Aufrufer muss der reward_sender des Slots (v6) oder der Farm-Eigentümer (v5) sein.

Rust CPI

Im Gegensatz zu AMM v4 wird das v6-Farm-Programm mit einer Anchor-Crate (raydium_farm_v6) versendet, die zusammen mit den Frontend- und SDK-Quellen veröffentlicht wird. Ein minimales Deposit-Sketch:
Der remaining_accounts-Slice muss 1-zu-1 mit den aktiven Reward-Slots der Farm übereinstimmen (Paare von reward_vault_i, user_reward_ata_i in Indexreihenfolge). Das Auslassen oder Fehlordnen dieser führt zu einer stillen Fehlbuchung — das Programm wird den falschen Betrag transferieren.

Fallstricke

  • Vergessen, vor dem Rückzug zu beanspruchen. Harmlos — Withdraw regelt ausstehende Rewards zuerst ab. Wenn Ihre UI aber „Claim” getrennt von „Withdraw” zeigt, könnte der Benutzer denken, es gibt nach einem Withdraw noch etwas zu beanspruchen. Das ist nicht der Fall; alles bis zu diesem Punkt akkumulierte wurde ausgezahlt.
  • total_staked = 0 während Emissionen. Während Emissionen, während nichts gestaked war, gehen verloren (die reward_per_share-Update-Formel dividiert durch 0 und das Programm springt das Update über). Für Programme mit geplanter open_time führen Sie einen „Seed-Stake” zur open_time aus, um dies zu vermeiden.
  • Token-2022-Transfergebühren. Bei v6-Farmen mit Token-2022-Reward-Mints gilt die Transfergebühr bei der Emission (Vault → Benutzer). Berücksichtigen Sie dies in APR-Angeboten.
  • Kleiner per_second auf v5. v5’s u64-Rate bedeutet, dass jeder per_second < 1 Token-Einheit pro Sekunde (bei Mints mit ≥9 Dezimalstellen ist dies oft die gewünschte Rate) nicht ausgedrückt werden kann — die Stream-Rate rundet auf 0 und die Farm gibt nichts aus. Verwenden Sie v6.

Nächste Schritte

Quellen: