Skip to main content
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Seit dem Programm-Upgrade 2026-07 wurde die OpenBook-/Serum-Abhängigkeit von AMM v4 entfernt. Die Legacy-v1-Anweisungen SwapBaseIn / SwapBaseOut, Deposit und Withdraw behalten ihre alten Kontolayouts für Rückwärtskompatibilität: Die Market-Konten werden weiterhin in ihren alten Positionen akzeptiert, aber sie werden nicht mehr validiert oder verwendet (es wird kein CPI ausgegeben). Neue Integrationen sollten die V2-Swap-Einstiegspunkte verwenden, die die Market-Konten vollständig weglassen. Mehrere Anweisungen wurden entfernt und kehren jetzt zurück – siehe den Changelog-Eintrag. Die Kontolisten unten verwenden die Feldnamen aus dem Raydium SDK; die zugrunde liegende IDL verwendet manchmal serum_*-Präfixe.Das Programm-Upgrade 2026-09 fügt eine Admin-Anweisung hinzu, WithdrawExcessLamports (Tag 18), und entfernt die Rent-Sysvar aus CreateConfigAccount. Alles, was ein Trader oder LP aufruft, bleibt unverändert. Siehe den Changelog-Eintrag vom 2026-09-09.

Anweisungsübersicht

Das SDK stellt Builder nur für die benutzerorientierten Anweisungen bereit. Wartungsanweisungen werden typischerweise vom Raydium-Keeper aufgerufen. Entfernt / nicht mehr aufrufbar (ihre Client-Builder wurden gelöscht): Initialize (Tag 0, verwenden Sie Initialize2), MonitorStep (2), MigrateToOpenBook (5), WithdrawSrm (8), PreInitialize (10, verwenden Sie Initialize2), SimulateInfo (12), AdminCancelOrders (13). Eine Transaktion mit einem dieser Tags schlägt fehl; das Programm führt die Anweisung nie aus. Behandeln Sie alle sieben als gelöscht, nicht als Fehlerpfade zum Verarbeiten.

Initialize2

Bootstrappen Sie einen neuen AMM v4 Pool, der an einen bestehenden OpenBook-Market gebunden ist. Argumente
Konten (beschreibbar W, Unterzeichner S)
Zwei akzeptierte Layouts. Die 19-Konten-Liste oben ist die empfohlene. Aus Gründen der Rückwärtskompatibilität liest das Programm auch ein 21-Konten-Legacy-Layout, das ein ignoriertes amm_open_orders an Position 7 und ein ignoriertes market_program an Position 16 einfügt — genau das gibt der initialize2-Instruction-Builder im Repo weiterhin aus. Jede andere Länge wird positionell gegen das Legacy-Layout geparst und schlägt fehl.
Nachbedingungen
  • An den Ersteller gemintetes LP = sqrt(init_coin_amount × init_pc_amount) − 10^coin_mint.decimals. Die LP-Dezimalstellen entsprechen coin_mint.decimals, der abgezogene Betrag ist also genau ein ganzes LP-Token; es wird nie gemintet und ist dauerhaft aus dem Verkehr. Liegt sqrt(...) darunter, revertiert die Instruction mit InitLpAmountTooLess.
  • AmmInfo.lp_amount speichert das vollständige sqrt(...), nicht den geminteten Betrag — lp_mint.supply ist daher dauerhaft ein ganzes LP-Token niedriger als amm.lp_amount. Die gesamte Pro-Rata-Mathematik verwendet amm.lp_amount.
  • Es werden keine OpenBook-Aufträge gepostet (das Order-Book-Gitter wurde entfernt). AmmInfo.market hält das in Slot 15 übergebene Konto fest, aber AmmInfo.open_orders und AmmInfo.market_program werden beide als Pubkey::default() geschrieben, und coin_lot_size / pc_lot_size / min_size werden auf 0 initialisiert. Im Legacy-Layout mit 21 Konten werden die zusätzlichen Konten amm_open_orders und market_program gelesen und verworfen.
Häufige Fehler — InvalidCoinMint (Coin- und PC-Mint identisch), InvalidConfigAccount (falsche amm_config-PDA), InvalidFee (falsches Ziel für die Create-Pool-Gebühr), InvalidProgramAddress (falsche amm_authority oder falsches nonce), RepeatCreateAmm (für diesen Market existiert bereits ein Pool), InitLpAmountTooLess, InvalidSupply (einer der Init-Beträge ist 0, oder der LP-Mint hat bereits Supply), AlreadyInUse.

Deposit

Liquidität hinzufügen. Argumente
Konten (gekürzt)
Akzeptiert werden 11, 14 oder 15 Konten — nichts anderes. Das Legacy-Layout hat 14 Konten (oder 15 mit einem angehängten ignorierten Konto): dieselbe Liste mit einem ignorierten amm_open_orders an Position 4, einem ignorierten market an Position 9 und einem ignorierten market_event_queue, das an Position 14 angehängt wird. Jede andere Anzahl revertiert mit WrongAccountsNumber.
Mathematik — Standard pro-rata. Mit den effektiven Reserven des Pools (Vaults + On-Book) berechnet das SDK das Coin/PC-Paar, das die angegebene LP-Menge ergibt, und prüft es gegen max_*. Kehrt mit ExceededSlippage zurück, wenn eine Seite die Obergrenze überschreitet.

Withdraw

LP verbrennen, beide Seiten erhalten. Argumente
Konten — empfohlenes Layout mit 11 Konten
Withdraw ist nicht Deposit in umgekehrter Richtung. Akzeptiert werden 11 Konten oder 20 bis 23. Das Legacy-Layout mit 20 Konten stellt das LP-Konto des Benutzers vor die beiden empfangenden ATAs und schiebt fünf ignorierte Market-Konten dazwischen: token_program, amm(W), amm_authority, amm_open_orders(W), amm_target_orders(W), lp_mint(W), pool_coin_token_account(W), pool_pc_token_account(W), market_program, market(W), market_coin_vault(W), market_pc_vault(W), market_vault_signer, user_lp_token_account(W), user_coin_token_account(W), user_pc_token_account(W), user_owner(S), market_event_queue(W), market_bids(W), market_asks(W). Die Formen mit 22 und 23 Konten fügen nach Position 8 zwei ignorierte Padding-Konten ein. Jede andere Anzahl revertiert mit WrongAccountsNumber.
Es gibt keinen Settle-from-OpenBook-Schritt mehr — die Pro-Rata-Mathematik verwendet die Vault-Salden direkt.

SwapBaseIn

Exakte-Input-Swap. Immer ein AMM-Pfad-Swap (wird nicht durch OpenBook-Matching weitergeleitet).
Verwenden Sie die V2-Varianten für neuen Code. Da die OpenBook-Abhängigkeit von AMM v4 entfernt wurde, erwarten die V1-Einstiegspunkte (SwapBaseIn, SwapBaseOut) weiterhin die vollständige 17-Kontoliste (oder 18 mit dem optionalen Target-Orders-Konto), aber die OpenBook-/Market-Konten werden jetzt positionell akzeptiert und ignoriert – sie werden nicht validiert und es wird kein CPI ausgegeben. Das Übergeben einer falschen Kontoanzahl kehrt weiterhin mit WrongAccountsNumber zurück, aber der Inhalt der Market-Konten wird nicht mehr überprüft. Neue Integrationen sollten SwapBaseInV2 / SwapBaseOutV2 verwenden, die eine viel kleinere Kontoliste benötigen und den kanonischen Ausführungspfad heute darstellen. Die V1-Formen werden hier der Vollständigkeit halber und zum Lesen bestehender On-Chain-Transaktionen dokumentiert.
Argumente
Konten (gekürzt) Mathematik — siehe products/amm-v4/math. Vorbedingungen
  • AmmStatus::from_u64(amm.status).swap_permission() ist true — das heißt, status ist 1 (Initialized), 6 (SwapOnly) oder 7 (WaitingTrade). status ist ein Enum-Wert, keine Bitmaske; siehe products/amm-v4/accounts.
  • amm.state_data.pool_open_time <= now.
  • amount_in > 0.
  • user_source_token_account hält mindestens amount_in.
Nachbedingungen
  • Benutzer verliert amount_in des Quell-Tokens, gewinnt amount_out ≥ minimum_amount_out des Ziel-Tokens.
  • Die Swap-Gebühr bleibt in den Vaults und erhöht die Invariante k. Die need_take_pnl_*-Zähler werden von Swaps nicht berührt — der Protokoll-PnL wird beim nächsten Deposit, Withdraw oder WithdrawPnl aus dem k-Delta neu berechnet (Processor::calc_take_pnl).
  • Hinweis: Die state_data.swap_*_in_amount / swap_*_out_amount Analytics-Zähler werden nicht mehr aktualisiert – ihre Werte sind eingefroren. Verwenden Sie Trade-Logs für Volume-Analytics.
Häufige Fehler — ExceededSlippage, InvalidInput, InvalidStatus, NotAllowed (Coin/PC-Mint identisch).

SwapBaseOut

Exakte-Output, Umkehrung von SwapBaseIn. Gleiche Konten. Argumente

SwapBaseInV2 / SwapBaseOutV2

Varianten-Swap-Einstiegspunkte (Tags 16 / 17), die die OpenBook-Konten vollständig überspringen. Die Mathematik ist identisch mit dem V1-Pfad, aber die Kontoliste schrumpft auf nur die AMM-Seite und den Benutzer – 8 Konten, und amm_open_orders wird nicht übergeben: Pool-Reserven sind jetzt die Vault-Salden (minus ausstehende PnL), daher ist die Quote-Mathematik unkompliziert und identisch mit dem v1-Pfad. Verwenden Sie V2, um Compute zu sparen und das Übergeben der (jetzt ignorierten) Market-Konten zu vermeiden. Der Raydium-Router verwendet immer die V2-Form beim Routing durch AMM v4. Die Argumente sind die gleichen wie die V1-Formen (amount_in / minimum_amount_out für SwapBaseInV2; max_amount_in / amount_out für SwapBaseOutV2).

MonitorStep und andere entfernte Anweisungen

Entfernt – nicht mehr aufrufbar. Seit dem Upgrade 2026-07 wurde MonitorStep (Tag 2) aus dem Programm entfernt und kehrt jetzt zurück (unimplemented!), wenn es aufgerufen wird. Sein Client-Builder wurde ebenfalls gelöscht. Das Gleiche gilt für MigrateToOpenBook (5), WithdrawSrm (8), SimulateInfo (12), AdminCancelOrders (13) und die Legacy-Pool-Erstellungs-Einstiegspunkte Initialize (0) / PreInitialize (10) – verwenden Sie stattdessen Initialize2.
Historisch gesehen betrieb MonitorStep die OpenBook-Interaktion des Pools: Es siedelte gefüllte Aufträge an (bewegte Erlöse aus den Market-Vaults in die Pool-Vaults über OpenBook CPI), stornierte veraltete Aufträge und postete neue Aufträge, um die Lücke zwischen target_orders und amm_open_orders zu schließen. Mit der entfernten OpenBook-Abhängigkeit gibt es nichts mehr zu betreiben und die Anweisung ist weg. Jeder Keeper oder jede Integration, die sie noch aufruft, muss den Aufruf entfernen.

WithdrawPnl / TakePnl

Admin-Abräumung aufgelaufener Protokoll-Gebühren. Argumente
  • WithdrawPnl nimmt keine Argumente; es liest need_take_pnl_* und bewegt diese genauen Beträge.
Breaking Change (nur Admin). Die Kontoliste fiel von 17 (+1 optional) auf 10 – amm_open_orders und alle sechs Market-Konten wurden entfernt – ohne Kompatibilitäts-Parsing. Das alte Layout ist nicht ausgerichtet (altes #5 war amm_open_orders, jetzt pool_coin_token_account) und schlägt mit Fehlern wie InvalidCoinVault fehl. Admin-Tools müssen aktualisiert werden.
Konten (neues 10-Konto-Layout) Effekt
  • Überträgt need_take_pnl_coin von pool_coin_token_account zu pnl_coin_token_account.
  • Gleiches für PC.
  • Setzt need_take_pnl_coin und need_take_pnl_pc auf Null.
  • Logik-Änderung: Wenn der Vault-Saldo nicht ausreicht, um aufgelaufene PnL zu decken, gibt die Anweisung direkt TakePnlError zurück (sie manipuliert nicht mehr den Order-Book-Status).
Keine Änderung der Reserven, da aufgelaufene PnL bereits aus der Invariante ausgeschlossen war.

SetParams

Admin-Parameter-Änderungen, aufgerufen vom Raydium-Multisig. Argumente sind ein param: u8-Tag + Payload.
Breaking Change (nur Admin). Die Kontoliste wurde auf nur [amm (W), admin (S)] reduziert (die Authority, Open-Orders, Target-Orders, Vault und alle Market-Konten wurden entfernt). Das param-Enum wurde umnummeriert und gekürzt: Status = 0, State = 1, Fees = 2 (war 9), SetOpenTime = 3 (war 11). Alle Order-Book-Grid-Parameter und AmmOwner, LastOrderDistance, UpdateOpenOrder wurden entfernt, und die SetParamsInstruction-Struktur verlor new_pubkey und last_order_distance. Admin-Tools müssen aktualisiert werden.

CreateConfigAccount / UpdateConfigAccount

Admin-Verwaltung der Programm-Level-AmmConfig-PDA (Seed ["amm_config_account_seed"]). Das Konto enthält genau drei bedeutsame Felder — pnl_owner, cancel_owner und create_pool_fee — plus zwei reservierte Padding-Bereiche; ein Pool-Erstellungs-Flag gibt es nicht. UpdateConfigAccount setzt pnl_owner mit param = 0, cancel_owner mit param = 1 und create_pool_fee mit param = 2.
Geändert in 2026-09 und rückwärtskompatibel. CreateConfigAccount liest die Rent-Sysvar nicht mehr. Seine Kontoliste ist jetzt 4 Konten, reduziert von 5:Das Programm liest Rent-Parameter von Rent::get() statt eine übergebene Sysvar-Konto zu deserialisieren – was die Solana 3.0-Abhängigkeits-Erhöhung natürlich machte.Das entfernte Konto war zuletzt in der Liste, und der Handler liest seine Konten positionell durch next_account_info ohne Längenkontrolle. Ein bestehendes Admin-Tool, das weiterhin die alte 5-Kontoliste übergibt, funktioniert daher weiterhin: das nachfolgende Rent-Konto wird einfach nie gelesen. Aktualisieren Sie es, wenn es bequem ist, nicht dringend. UpdateConfigAccount ist unverändert.
Initialize2 behält die Rent-Sysvar in Position 3 und verwendet sie weiterhin: Das Programm hat aufgehört, Rent::from_account_info darauf aufzurufen, aber es wird weiterhin in die spl_token::initialize_account und initialize_mint CPIs weitergeleitet, die die Pool-Vaults und LP-Mint erstellen. Lassen Sie es nicht aus der Kontoliste fallen.

WithdrawExcessLamports

Admin-Abräumung von Lamports, die über dem Rent-Exempt-Minimum auf Konten sitzen, die das Programm kontrolliert. Hinzugefügt im Upgrade 2026-09, um die Über-Finanzierung wiederherzustellen, die die SIMD-0437 Rent-Reduktion auf Konten hinterlässt, die vor jedem Schritt erstellt wurden. Es bewegt nur den Überschuss. Token-Salden, Kontodaten, Besitzer und Pool-Status bleiben unverändert, und die Anweisung ist ein No-Op auf einem Konto, das bereits bei seinem Minimum ist – daher ist es sicher, sie wiederholt und erneut nach jedem Rollout-Schritt auszuführen. Argumente — keine. Die Payload ist das einzelne Tag-Byte 18. Konten Wie jedes Quellkonto behandelt wird Das Programm verteilt auf den owner des Quellkontos: Häufige Fehler — InvalidSignAccount (falscher Unterzeichner), InvalidSplTokenProgram (falsches Programm in Slot 3), InvalidProgramAddress (falsche amm_authority), LamportsCalculateError (benutzerdefinierter Code 60; die wSOL-Rundreise nettete nicht zu Null), und InsufficientFunds vom Programm-eigenen Pfad, wenn ein Konto weniger als sein eigenes Rent-Minimum hält. Kein SDK-Builder. @raydium-io/raydium-sdk-v2 liefert keinen Builder für diese Anweisung, und auch nicht das raydium-sdk-V2-demo-Repo – es ist ein Admin-Pfad. Kodieren Sie es von Hand, wie die Wallet-seitige Abräumung in solana-fundamentals/rent-and-reclaimable-rent für die Token-Programm-Anweisung.

Zustandsänderungs-Matrix

Die OpenBook-Spalte ist weg – keine Anweisung berührt mehr ein Order-Book.

Nächste Schritte

Quellen: