Skip to main content
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Die Produktprogramme von Raydium sind unabhängige Codebasen, wurden aber gegen einen gemeinsamen Satz von Konventionen entworfen. Diese Seite ist die kanonische Referenz für diese Konventionen. Produktspezifische Kapitel beschreiben, wie die Konventionen in ihren Konten umgesetzt werden; diese Seite beschreibt die Konventionen selbst.

Was „gemeinsam” hier bedeutet

Drei Arten von Sharing durchziehen die Codebasis:
  • Konventions-Sharing. Jedes Programm verwendet das gleiche PDA-Ableitungsmuster, die gleiche Gebührenaufteilungsform und die gleiche Observation-Account-Idee — aber jedes implementiert sie in seinem eigenen Programm mit seinen eigenen Seeds.
  • Account-Sharing. Eine Handvoll Konten sind buchstäblich der gleiche Datensatz über viele Pools hinweg (die globale Authority-PDA in CPMM, die AmmConfig-Konten).
  • Off-Chain-Sharing. Eine REST-API und ein TypeScript-SDK bedienen alle vier Programme. Integratoren interagieren mit einem HTTP-Host und einem NPM-Paket, unabhängig davon, welches Programm sie letztendlich aufrufen.
Die fünf Grundelemente unten decken alles ab, was Programm-Grenzen überschreitet.

1. Authority-PDAs

Jedes Raydium-Programm hat genau eine PDA, die seine Token-Vaults besitzt. Benutzer halten die Vault-Authority nie direkt — die Authority-PDA ist der einzige Unterzeichner, der Gelder bewegen kann, und sie unterzeichnet nur, wenn eine gültige Programmanweisung dies anfordert. Das Muster ist über alle Produkte hinweg identisch; die Seeds unterscheiden sich: Einige Dinge folgen daraus:
  • Für CPMM und CLMM ist die Authority-PDA ein globales Konto — jeder Pool dieses Typs nutzt es. Wenn Sie in CPMM CPI-en, benötigen Sie es einmal, nicht pro Pool.
  • Für Pro-Pool- / Pro-Farm-Authorities leiten Sie die PDA aus der Pool-/Farm-ID ab. Das SDK macht dies in getPoolKeys / getFarmKeys; wenn Sie direkt integrieren, leiten Sie mit findProgramAddressSync ab.
  • Vault-Besitz kann nicht geändert werden. Sobald ein Token-Konto mit der Authority-PDA als Besitzer erstellt wird, kann nur diese PDA — aufgerufen vom Programm — Gelder transferieren. Es gibt keine Admin-Überschreibung.
Für die genauen Seeds und ATA-Layouts pro Programm siehe products/cpmm/accounts, products/clmm/accounts, products/amm-v4/accounts, products/farm-staking/accounts, products/launchlab/accounts.

2. Admin- und Config-Konten

CPMM und CLMM teilen sich ein Config-Account-Muster namens AmmConfig: ein kleines globales Konto, indiziert durch einen u16, das die Gebührensätze und Admin-Ziele enthält, die für eine ganze Gebühren-Tier gelten. Pools binden sich bei der Erstellung an eine Config und binden sich nie neu.
Spielregeln:
  • Gebühren-Tiers sind global. Wenn ein Pool sagt „das ist ein 0,25%-Pool”, bedeutet das, dass er sich an die AmmConfig bindet, deren trade_fee_rate bei der Erstellung 0,25% war. Es gibt keine Pro-Pool-Rate-Überschreibung.
  • Eine Config kann geändert werden, aber Pools folgen nicht. Wenn die Config-Authority eine AmmConfig bearbeitet, übernimmt jeder bestehende Pool, der an diese Config gebunden ist, sofort den neuen Satz. Dies ist ein Feature, kein Bug; so propagieren sich wirtschaftliche Änderungen auf Protokollebene ohne Pro-Pool-Migrationen.
  • disable_create_pool ist der Deprecation-Hebel. Wenn eine Gebühren-Tier eingestellt wird, setzt das Protokoll-Multisig dieses Flag — bestehende Pools funktionieren weiter, aber keine neuen Pools können die Tier wählen.
  • protocol_owner / fund_owner sind die Unterzeichner für Gebührensammlungsaufrufe. Sie auf ein Multisig zu setzen ist das, was die Gebührenabhebung kontrolliert. Sie sind NICHT die Zieladressen für die Gebühren selbst; das ist protocol_fee_destination / fund_fee_destination auf dem gleichen Konto.
AMM v4 hat keine AmmConfig — seine Gebührenparameter sind Pro-Pool, bei der Erstellung hartcodiert. Farm und LaunchLab haben ihre eigenen Äquivalente (FarmConfig, LaunchConfig), die in ihren jeweiligen Kapiteln behandelt werden. Eine vollständige Tabelle, wer was ändern kann, ist in security/admin-and-multisig. Aktuelle benutzerfreundliche Gebührenaufteilungen sind in ray/protocol-fees.

3. Die Protokoll- / Fonds- / Creator-Gebührenaufteilung

Jede CPMM- und CLMM-Swap-Gebühr wird auf bis zu vier Ziele aufgeteilt:
Mechanisch:
  1. Handelsgebühr sammelt sich im Pool an. Die Gebühr wird von der Eingabeseite des Swaps entfernt und der Betrag nach Gebühr ist das, was die Constant-Product-Mathematik sieht. Das ist das, was „die LP verdient die Gebühr” bedeutet — k steigt und damit auch der implizite Pro-LP-Token-Wert.
  2. Protokoll-/Fonds-/Creator-Anteile werden von dieser LP-seitigen Ansammlung in Pro-Pool-Counter-Konten abgezogen. Sie sitzen auf dem Pool-Status (protocol_fees_token{0,1}, fund_fees_token{0,1}, usw.) bis jemand die entsprechende Sammlungsanweisung aufruft. Sie verlassen die Vaults des Pools nicht bis dahin; aus Swap-Perspektive sind sie immer noch „im Pool”.
  3. Sammlung bewegt sie raus. Protokoll- und Fonds-Pfade erfordern den jeweiligen protocol_owner / fund_owner Unterzeichner aus AmmConfig. CPMM Creator-Gebühren verwenden entweder den vom Creator unterzeichneten CollectCreatorFee-Pfad oder CollectCreatorFeePermissionless, den jeder Zahler auslösen kann, aber der die Ziele auf die kanonischen ATAs des Creators fixiert.
Ein paar tragende Beobachtungen:
  • Die Aufteilungsprozentsätze sind von der Handelsgebühr, nicht vom Handel. Eine 0,25%-Handelsgebühr mit einem 12%-Protokoll-Anteil bedeutet, dass das Protokoll 0,25% × 12% = 0,03% des Handels erhält — nicht 12% des Handels.
  • Creator-Gebühren existieren nur auf LaunchLab-graduierten Pools. Standard-CPMM-/CLMM-Pools haben eine 3-Wege-Aufteilung (LP / Protokoll / Fonds). LaunchLab fügt einen vierten Slot hinzu, der an denjenigen weitergeleitet wird, der das Token gestartet hat, konfiguriert bei Initialize und unveränderlich.
  • AMM v4 teilt nur auf zwei Wegen auf, hartcodiert Pro-Pool: LP und Protokoll. Kein Fonds-Slot, kein Creator-Slot.
  • Fonds vs. Protokoll — beide sind Protokoll-Treasury-Ziele, aber sie haben unterschiedliche Unterzeichner und unterschiedliche beabsichtigte Verwendungen. protocol finanziert historisch Operationen; fund ist die längerfristige Treasury. Die Aufteilung zwischen den beiden ist selbst eine abstimmbare.
Spezifische Sätze sind in reference/fee-comparison und ray/protocol-fees.

4. Observation-Konten (TWAP-Ringpuffer)

Sowohl CPMM als auch CLMM unterhalten ein Observation-Konto pro Pool — einen Ringpuffer mit fester Größe von (timestamp, cumulative_price) Samples, die andere Verträge verwenden können, um einen manipulationsresistenten TWAP abzuleiten.
So funktioniert es:
  • Jeder Swap ruft update_observation auf. Das Programm liest den aktuellen Preis, multipliziert mit den verstrichenen Sekunden seit der vorherigen Observation und addiert ihn zum kumulativen Zähler. Der neue Eintrag überschreibt den ältesten Slot (Ringpuffer-Stil).
  • TWAP über ein Fenster = (cumul[end] − cumul[start]) / (timestamp[end] − timestamp[start]). Verbraucher wählen zwei Observations, die das gewünschte Fenster einklammern, und dividieren.
  • Raydium selbst verwendet den TWAP nicht für Preisgestaltung. Die AMM-Mathematik liest die Spot-Reserven direkt. Observations sind eine Externalität — Raydium zahlt die Kosten für das Schreiben, damit andere Verträge lesen können.
  • AMM v4 hat kein Observation-Konto. Es ist älter als das ObservationState-Design; Integratoren, die einen v4-TWAP wünschen, müssen einen aus der Log-Historie off-chain berechnen.
Layout-Details und Indexierungs-Mathematik sind in products/cpmm/accounts und products/clmm/accounts.

5. REST-API + SDK + IDL

Die Off-Chain-Oberfläche ist ein einzelnes Trio, das von jedem Produkt verwendet wird:
  • REST-APIhttps://api-v3.raydium.io. Eine Read-Mostly-indizierte Ansicht aller On-Chain-States plus eine Quote-Engine. Ein Host, ein Schema.
  • TypeScript-SDK@raydium-io/raydium-sdk-v2 auf NPM. Erstellt und signiert Transaktionen für jedes Programm. Spricht mit der API für Quotes/Metadaten, spricht mit einem Solana-RPC für Pre-Sign-State-Aktualisierungen.
  • IDL-Registry — Anchor-IDLs für jedes veröffentlichte Programm leben im raydium-idl Repo (eine JSON pro Programm: CPMM, CLMM, LaunchLab). Das TypeScript-SDK verbraucht diese IDLs intern; nachgelagerte Rust- / Python-Clients regenerieren aus den gleichen Dateien.
Die Grenze zwischen ihnen ist scharf: Ein häufiger Fehler ist, REST-API-Ausgabe direkt in eine Transaktion einzuspeisen. Nicht — rufen Sie den relevanten Pool-/Position-State von einem Solana-RPC im Slot ab, gegen den Sie signieren. Das SDK macht dies automatisch für First-Party-Flows; wenn Sie das SDK umgehen, müssen Sie es selbst tun. Die vollständige Referenz ist in sdk-api/, mit der IDL-Oberfläche speziell in sdk-api/anchor-idl.

6. Indexer und Price Feeds

Die REST-API wird von Raydiums eigenem Indexer gespeist, der sich auf Programm-Logs von einer Flotte von Solana-RPCs abonniert und denormalisierte Datensätze in einen SQL-Store schreibt. Zwei Konsequenzen für Integratoren:
  • Der Indexer ist das einzige, das „über” Cross-Program-State „weiß”. Einen CPMM-Pool seinem CLMM-Gegenstück zuordnen, eine 24h-Volume-Zahl über Programmversionen hinweg berechnen, eine Farm abholen, die mit einem LP-Mint verbunden ist — all das ist Indexer-Arbeit. Programme selbst tun es nicht.
  • Indexer-Ausfallzeit ist API-Ausfallzeit. Wenn die API veraltete oder leere Daten zurückgibt, ist der Indexer der Verdächtige. Der On-Chain-State ist unbeeinträchtigt; Integratoren mit ihrem eigenen RPC und SDK können weiter transagieren.
Price Feeds sind eine separate Angelegenheit. Die API veröffentlicht ein priceUsd-Feld auf den meisten Pool-Antworten; dies wird off-chain aus einem Snapshot der Indexer-Ansicht der Pool-Reserven und einem zitierten Referenzpreis berechnet (USDC-Pools als gemeinsamer Pivot). Es ist gut genug für die UI; es ist nicht sicher, als On-Chain-Oracle zu verwenden. Verwenden Sie dafür den Observation-TWAP.

Was nicht gemeinsam ist

Es lohnt sich, explizit aufzulisten, da neue Leser oft mehr Sharing annehmen, als es gibt:
  • Programme rufen sich nicht gegenseitig auf. Ein CPMM-Swap CPIs nie in CLMM oder AMM v4. Das einzige Programm, das mehrere AMMs zusammensetzt, ist das AMM-Routing-Programm — und dieses ist selbst dünn, emittiert nur CPIs in jeden AMM der Reihe nach.
  • Keine gemeinsame Upgrade-Authority über Programme hinweg. Jedes On-Chain-Programm hat seinen eigenen Programm-Upgrade-Schlüssel (ein 3/4-Multisig plus ein 24h-Timelock). Sie sind nicht verlinkt.
  • Kein gemeinsamer State zwischen Farms und AMMs. Eine Farm weiß nicht, welche LP sie stakelt, von einem CPMM-Pool, einem CLMM-Position-NFT-Mint oder einem unabhängigen SPL-Token stammt. Das Farm-Programm behandelt den Staking-Mint als opak.
  • Keine Oracle-Abhängigkeit. Preisgestaltung ist On-Chain-Reserven. Es gibt keinen Pyth/Switchboard-Fallback; der AMM prüft kein Oracle vor dem Clearing.

Verweise

Quellen:
  • Raydium SDK v2 — die Quelle der Wahrheit für PDA-Seeds, Account-Layouts und IDL-Definitionen.
  • Raydium IDL Registry — Anchor-IDLs.
  • Produktspezifische Accounts-Seiten, die oben inline zitiert werden.