Zum Hauptinhalt springen
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Wallets, die Raydium integrieren, müssen pro Benutzer typischerweise vier Fragen beantworten: In welchen Pools hält dieser Benutzer LP-Positionen? Welche Positionen (CLMM-NFTs) hält er? In welchen Farms hat er Stakes? Wie viel ist das alles wert? Diese Seite dokumentiert die Antworten.

Raydium-Positionen erkennen

Classic LP-Tokens (CPMM, AMM v4)

Diese sehen aus wie jeder andere SPL-Token: Das ATA des Benutzers hält einen Kontostand. Eine Wallet zeigt dies normalerweise einfach als weiteren Token an. Um es als Raydium-LP-Position zu erkennen:
  1. Aufzählung der Token-Konten des Benutzers: connection.getParsedTokenAccountsByOwner(user, { programId: TOKEN_PROGRAM_ID }).
  2. Für jede Mint, prüfen Sie Raydiums Mint-Liste: GET https://api-v3.raydium.io/pools/info/lps?lps=<LP_MINT>,... (bis zu ~50 LP-Mints pro Aufruf bündeln).
  3. Für Mints, die passen, gibt die API die Pool-Referenz zurück. Verwenden Sie sie, um den Token-denominierten Wert der Position zu berechnen:
Zeigen Sie sowohl den LP-Saldo als auch die unwrapped-Beträge an — Benutzer denken in zugrundeliegenden Tokens, nicht in LP-Einheiten.

CLMM-Position-NFTs

CLMM-Positionen sind NFTs. Der PersonalPositionState PDA jeder Position wird aus dem NFT-Mint abgeleitet. Zum Erkennen:
  1. Aufzählung der NFTs des Benutzers. Für Legacy-Metaplex-NFTs: Filtern Sie Token-Konten auf solche mit Supply 1 und Dezimalzahlen 0.
  2. Für jede NFT-Mint, versuchen Sie, den PersonalPositionState PDA abzuleiten:
  1. Dekodieren über raydium.clmm.getPositionInfo({ positionPda }), um zu erhalten:
    • poolId → Pool abrufen, um Mints zu auflösen
    • tickLower, tickUpper → Bereich anzeigen
    • liquidity, tokensOwedA/B → Positionswert + ausstehende Gebühren berechnen
    • rewardInfos → ausstehende Belohnungen pro Stream
  2. Für Position-NFTs, die unter Token-2022 ausgegeben wurden (OpenPositionWithToken22Nft), ist das Programm des NFT-Mint Token-2022 statt SPL Token. Zählen Sie beide auf, wenn Sie scannen.

Farm-Stakes

Farm v3 / v5 / v6 haben jeweils einen pro-Benutzer Ledger PDA. Ableitungen:
Für Wallets, die vollständige On-Chain-Erkennung bevorzugen: Durchlaufen Sie mögliche UserLedger PDAs, indem Sie den Benutzer mit einer kuratierten Liste von „wahrscheinlichen” Farm-IDs hashen. Das vollständige Aufzählen aller Farm-IDs ist unpraktisch (es existieren Tausende); verwenden Sie die API.

Positionswert berechnen

CPMM / AMM v4 LP

Dann multiplizieren Sie jedes mit dem USD-Preis der Mint (von raydium.token oder einem Price-Oracle).

CLMM-Position

Rendern Sie als:
  • Liquiditätswert (aktueller Preis)
  • Nicht eingezogene Gebühren
  • Ausstehende Belohnungen pro Stream
  • Bereich: [tickLower_price, tickUpper_price] mit einer visuellen Leiste, die zeigt, ob der aktuelle Preis im Bereich liegt

Farm-Stake

Für On-Chain-Berechnung spiegeln Sie die Farm-Rechnungslegung wider:
Stellen Sie sicher, dass Sie reward_per_share_x64 mit der Lazy-Update-Formel aktualisieren, bevor Sie berechnen (verstrichene Zeit × Emissionsrate ÷ total_staked).

Transaktionssimulation für Vorschau

Bevor ein Benutzer signiert, zeigen Wallets normalerweise die Saldoänderungen vor. Verwenden Sie simulateTransaction:
Der Parameter accounts fordert den Validator auf, den Post-Simulations-Kontostatus für aufgelistete Adressen zurückzugeben. Viel genauer, als zu versuchen, die Saldoänderung allein aus der Anweisungsform vorherzusagen.

Simulations-Fallstricke

  • CLMM-Swaps benötigen gültige Tick-Arrays. Wenn die Eingabegröße des Benutzers in ein nicht initialisiertes Tick-Array übergehen würde, wird die Simulation rückgängig gemacht (wie auch die Ausführung). Zeigen Sie dies deutlich in der UI.
  • Priority Fee. Simulation wird ohne die angewendeten Compute-Budget-Anweisungen ausgeführt. Für eine große Transaktion, die das Standard-200k CU überschreiten würde, schlägt die Simulation fehl, aber die tatsächliche Ausführung mit einem expliziten CU-Limit erfolgreich. Setzen Sie das CU-Limit auch auf der simulierten Tx.
  • Frischer Blockhash. Simulation verwendet den aktuellen Blockhash; wenn das Signieren >60s dauert, wird die Tx ungültig. Simulieren Sie neu, wenn der Benutzer zögert.

Token-2022-Anzeige

Token unter dem Token-2022-Programm sollten in der Token-Liste der Wallet als solche gekennzeichnet werden, da sie unterschiedliche Risikoflächen haben:
  • Transfer-Fee-Mints: Zeigen Sie die aktuelle transferFeeBasisPoints als „Transfer Fee: X%” neben dem Saldo an. Warnen Sie beim Empfang — Benutzer könnten nicht realisieren, dass sie weniger erhalten, als der Sender gesendet hat.
  • Transfer-Hook-Mints: Machen Sie die Hook-Programm-ID sichtbar. Ein böswilliger Hook kann ausgehende Transfers blockieren; Benutzer sollten überprüfen, dass der Hook der ist, den sie erwarten.
  • Non-Transferable-Mints: Zeigen Sie „Non-transferable” an und deaktivieren Sie Swap/Senden. Dies sind typischerweise Soulbound-Tokens oder Credentials.
  • Interest-Bearing-Mints: Der UI-Saldo, der aus TokenAccount.amount abgeleitet ist, spiegelt nicht aufgelaufene Zinsen wider. Verwenden Sie amountToUiAmount aus @solana/spl-token (der den Skalierungsfaktor anwendet) für den angezeigten Wert.

Farm-APR-Anzeige

Die APR, die Benutzern angezeigt wird, sollte alle aktiven Reward-Streams kombinieren, in USD umgerechnet und annualisiert:
Zeigen Sie als APR: X.Y% an. Wenn die Staking-Mint ein LP-Token ist, berechnen Sie auch den zugrundeliegenden LP-Basis-Fee-APR und kennzeichnen Sie die Summe als „Total APR” oder „APR + Gebühren”.

Hinweise

Quellen:
  • Raydium SDK v2 — Position/Farm-Helfer.
  • Benutzer-Positions-Endpunkte auf api-v3.raydium.io.