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

Raydium-Positionen erkennen

Klassische LP-Token (CPMM, AMM v4)

Diese sehen wie jeder andere SPL-Token aus: Das ATA des Benutzers hält einen Saldo. Eine Wallet zeigt dies standardmäßig einfach als einen weiteren Token an. Um es als Raydium-LP-Position zu offenbaren:
  1. Zählen Sie die Token-Konten des Benutzers auf: connection.getParsedTokenAccountsByOwner(user, { programId: TOKEN_PROGRAM_ID }).
  2. Überprüfen Sie für jede Mint die Raydium-Mint-Liste: GET https://api-v3.raydium.io/pools/info/lps?lps=<LP_MINT>,... (bis zu ~50 LP-Mints pro Aufruf zusammenfassen).
  3. Für Mints, die übereinstimmen, 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 zugrunde liegenden Token, nicht in LP-Einheiten.

CLMM-Positions-NFTs

CLMM-Positionen sind NFTs. Die PersonalPositionState PDA jeder Position wird von der NFT-Mint abgeleitet. Zur Erkennung:
  1. Zählen Sie die NFTs des Benutzers auf. Für Legacy-Metaplex-NFTs: Filtern Sie Token-Konten auf solche mit Supply 1 und Dezimalstellen 0.
  2. Versuchen Sie für jede NFT-Mint, die PersonalPositionState PDA abzuleiten:
  1. Zählen Sie die Positionen der Wallet mit raydium.clmm.getOwnerPositionInfo({ programId }) auf und gleichen Sie nftMint ab (es gibt kein getPositionInfo). Jeder Eintrag gibt Ihnen:
    • poolId → Pool abrufen, um Mints aufzulösen
    • tickLower, tickUpper → Bereich anzeigen
    • liquidity, tokensOwedA/B → Positionswert + ausstehende Gebühren berechnen
    • rewardInfos → ausstehende Rewards pro Stream
  2. Für Positions-NFTs, die unter Token-2022 ausgegeben wurden (OpenPositionWithToken22Nft), ist das Programm der NFT-Mint Token-2022 statt SPL Token. Zählen Sie beide auf, wenn Sie scannen.

Farm-Stakes

Farm v3 / v5 / v6 haben jeweils eine Pro-Benutzer-Ledger-PDA. Ableitungen:
Für Wallets, die vollständige On-Chain-Erkennung bevorzugen: Iterieren Sie mögliche UserLedger PDAs, indem Sie den Benutzer mit einer kuratierten Liste „wahrscheinlicher” 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

Die drei Module teilen keine Signatur: liquidity.getPoolInfoFromRpc nimmt { poolId }, während cpmm.getPoolInfoFromRpc und clmm.getPoolInfoFromRpc einen positionalen Base58-String nehmen.
Multiplizieren Sie dann jeden 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 Rewards pro Stream
  • Bereich: [tickLower_price, tickUpper_price] mit einem visuellen Balken, der zeigt, ob der aktuelle Preis im Bereich liegt

Farm-Stake

Für On-Chain-Berechnung spiegeln Sie die Farm-Buchhaltung:
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 in der Vorschau an. Verwenden Sie simulateTransaction:
Der Parameter accounts fordert den Validator auf, den Post-Simulations-Kontostatus für aufgelistete Adressen zurückzugeben. Viel genauer als der Versuch, 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 eindringen würde, wird die Simulation zurückgerollt (wie die Ausführung). Machen Sie dies deutlich in der UI.
  • Priority Fee. Die Simulation läuft ohne die angewendeten Compute-Budget-Anweisungen. 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 gelingt. Setzen Sie das CU-Limit auch auf der simulierten Tx.
  • Frischer Blockhash. Die Simulation verwendet den aktuellen Blockhash; wenn das Signieren >60s dauert, wird die Tx ungültig. Simulieren Sie erneut, 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 aktuellen transferFeeBasisPoints als „Transfer-Gebühr: X%” neben dem Saldo an. Warnen Sie beim Empfangen — Benutzer könnten nicht realisieren, dass sie weniger erhalten als der Absender gesendet hat.
  • Transfer-Hook-Mints: Zeigen Sie die Hook-Programm-ID. Ein böswilliger Hook kann ausgehende Transfers blockieren; Benutzer sollten überprüfen, dass der Hook der erwartete ist.
  • Nicht übertragbare Mints: Zeigen Sie „Nicht übertragbar” an und deaktivieren Sie Swap/Senden. Dies sind typischerweise Soulbound-Token oder Anmeldedaten.
  • Zinsgestaffelte Mints: Der UI-Saldo, der von TokenAccount.amount abgeleitet ist, spiegelt nicht aufgelaufene Zinsen wider. Verwenden Sie amountToUiAmount von @solana/spl-token (das den Skalierungsfaktor anwendet) für den angezeigten Wert.

Farm-APR-Anzeige

Der APR, der Benutzern angezeigt wird, sollte alle Live-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 Basis-Gebühren-APR des zugrunde liegenden LP und kennzeichnen Sie die Summe als „Gesamt-APR” oder „APR + Gebühren”.

Verweise

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