Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Rayidums neuere Programme (CPMM, CLMM, Farm v6, LaunchLab) sind in Anchor geschrieben — einem Rust-Framework, das auf Solanas nativem Programmmodell aufbaut und Kontovalidierung, Fehlerbehandlung und ein IDL (Interface Description) bereitstellt. AMM v4 und ältere Farms stammen aus der Zeit vor Anchor. Das Verständnis beider Paradigmen hilft Ihnen, den Code zu lesen, Clients aus dem IDL zu generieren und unerwartete Fehler zu debuggen.
Programmbereitstellungsmodell
Jedes Solana-Programm existiert unter einemPubkey. Der Bytecode des Programms wird in einem ausführbaren Konto gespeichert, das vom BPF Upgradable Loader (BPFLoaderUpgradeab1e11111111111111111111111) verwaltet wird.
Eine Programmbereitstellung umfasst drei Konten:
- Programmkonto: kleines Metadatenkonto unter der Programm-ID. Besitzer: BPF Upgradable Loader.
- ProgramData-Konto: enthält den eigentlichen Bytecode. Abgeleitet als
[program_id, "programdata"]. - Buffer-Konto (temporär): enthält neuen Bytecode während eines Upgrades. Wird nach dem Upgrade verworfen.
security/admin-and-multisig.
Überprüfung eines bereitgestellten Programms
Um zu bestätigen, dass das On-Chain-Programm dem auditierten Quellcode entspricht:Anchor: ein Framework auf Solana
Raw-Solana-Programme sind Rust-Funktionen mit dieser Signatur:- Generiert automatisch einen deterministischen 8-Byte-Diskriminator für jede Instruktion und jeden Kontotyp.
- Validiert Kontoeinschränkungen (Besitzer, Seeds, Writable, Signer, Mint-Übereinstimmung, Token-Programm-Übereinstimmung), bevor Ihr Code ausgeführt wird.
- Generiert ein IDL — eine Schnittstellenbeschreibungsdatei, die Clients zum Aufrufen des Programms verwenden.
- Wird mit einer Rust-, TypeScript- und Python-Client-Bibliothek ausgeliefert.
Der 8-Byte-Diskriminator
Jedes Anchor-Konto und jede Anchor-Instruktion beginnt mit einem 8-Byte-Diskriminator — den ersten 8 Bytes des SHA-256 einer festen Zeichenkette:getProgramAccounts, die alle Konten eines Typs aufzählen.
Fehler
Anchor-Programme definieren Fehler über#[error_code]:
reference/error-codes.
Das IDL
Eine Anchor-IDL-Datei (Interface Description Language) ist eine JSON-Beschreibung eines Programms: seine Instruktionen, Konten, Typen, Fehler und Events. Sie ist das Äquivalent eines Ethereum ABI. Raydium veröffentlicht IDLs für alle Anchor-Programme. Abrufen direkt von der Chain:src/raydium/*/idl/*.json.
IDL-Struktur
Generieren eines Clients aus dem IDL
Anchorsanchor CLI generiert TypeScript- und Rust-Typen:
Wenn das IDL Ihr Freund ist
Wenn Sie eine benutzerdefinierte Integration erstellen möchten, die nicht durch das Raydium SDK läuft:- Rufen Sie das IDL ab (live von der Chain oder aus der SDK-Quelle).
- Schlagen Sie die gewünschte Instruktion nach (z. B.
swap_base_input). - Konstruieren Sie die Instruktionsdaten: 8-Byte-Diskriminator + kodierte Argumente.
- Übergeben Sie Konten in der Reihenfolge, die das IDL angibt.
sdk-api/anchor-idl für durchgearbeitete Beispiele.
Pre-Anchor-Programme: AMM v4 und Farm v3/v5
Diese Programme stammen aus der Zeit vor Anchor. Sie verwenden:- Manuelle Instruktionsverteilung: ein
u8-Tag ininstruction_datamit einermatch-Anweisung. - Manuelle Kontovalidierung:
if accounts[0].owner != &expected_program { ... }. - Borsh-serialisierte Instruktionsargumente: kein Diskriminator, nur
instruction_data[1..]. - Layout über
#[repr(C, packed)]: C-Struktur-Binärlayout.
Programmaktualisierungsmechaniken
Nur dieupgrade_authority des ProgramData kann aktualisieren. Schritte:
- Kompilieren Sie den neuen Bytecode.
- Schreiben Sie ihn in ein Buffer-Konto (
solana program write-buffer). - Reichen Sie eine Upgrade-Instruktion ein:
BpfLoaderUpgradeable::Upgrade { buffer, program, authority }. - Die Runtime ersetzt den Bytecode des Programms atomisch durch den Inhalt des Buffers.
security/admin-and-multisig.
Ein Programm unveränderlich machen
Eine Upgrade-Autorität kann aufNone gesetzt werden, woraufhin das Programm dauerhaft unveränderlich wird. Raydium hat dies für kein Produkt getan — das Team behält die Möglichkeit, Sicherheitspatches bereitzustellen. Kompromiss: Benutzer müssen dem Multisig- und Zeitsperre-Prozess vertrauen.
Programme und Miete
Die Bereitstellung eines Programms verbraucht mietbefreite Lamports:- Ein 50-KB-Programm: ~0,35 SOL Miete.
- Ein 200-KB-Programm: ~1,4 SOL Miete.
solana program close) gibt die Lamports zurück. Raydium-Programme bleiben aktiv und sind nicht für die Schließung geplant.
Debugging von Anchor-Programmen
Protokollausgabe
Anchorsmsg!-Makro schreibt in das Transaktionsprotokoll. Simulieren Sie eine Transaktion, um Protokolle zu sehen:
- Programmaufrufe (
Program CPMMoo8... invoke [1]). msg!-Aufrufe aus dem Programmcode.- Compute-Unit-Verbrauch (
consumed 137842 of 400000 compute units). - Programmerfolg oder Fehler.
Fehlercodes
Wenn ein Anchor-Programm wirft, zeigt das Protokoll:SlippageExceeded). Kreuzen Sie mit dem errors-Array des IDL ab.
Siehe reference/error-codes für Rayidums vollständige Fehlertabelle.
Kontolay-Nichtübereinstimmungen
Wenn Sie das falsche Konto in den falschen Slot übergeben, geben Anchors Kontovalidierungsmakros Fehler wie zurück:ErrorCode-Enum); Fehler ≥6000 sind die benutzerdefinierten Codes des Programms.
Verweise
solana-fundamentals/account-model— wie Programme Konten besitzen.solana-fundamentals/pdas-and-cpis— PDAs wie Anchor sie deklariert.sdk-api/anchor-idl— Abrufen und Verwenden von Rayidums IDLs.reference/program-addresses— Programm-IDs.reference/error-codes— Fehlercode-Referenz.security/admin-and-multisig— Upgrade-Autoritätskontrollen.
- Anchor-Dokumentation.
- Solana-Programmbereitstellung.
- Raydium IDLs (veröffentlicht in SDK
src/raydium/*/idl/*.json).

