Skip to main content
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
CLMM erhält dieselbe Framework-Aktualisierung, die CPMM und LaunchLab am 2026-09-09 erhalten haben. Anchor wechselt von 0.32.1 zu =1.0.2, und die Build-Toolchain wechselt von Agave 2.3.0 zu 3.1.10. Zwei administratorische Änderungen kommen hinzu: eine neue CollectExcessLamports-Anweisung und feste Gebühreninhaber in CreateAmmConfig. Jede Anweisung, die ein Trader, ein LP, ein Limit-Order-Benutzer oder ein Pool-Ersteller aufruft, behält seine Kontoliste, Argumente und Mathematik.

TL;DR für Integratoren

  • Keine benutzergerichtete Anweisung hat sich geändert. CreatePool, CreateCustomizablePool, CreatePermissionedPool, alle OpenPosition* / IncreaseLiquidity* / DecreaseLiquidity*-Pfade, ClosePosition, Swap / SwapV2 / SwapRouterBaseIn, die fünf Limit-Order-Anweisungen und die Reward-Anweisungen sind auf dem Draht identisch. Kein Kontolayout hat sich geändert.
  • Eine Anweisung wird hinzugefügt: CollectExcessLamports. Sie ist nur für Administratoren und nimmt keine Argumente. Sie verarbeitet einen Pool pro Aufruf: Der PoolState des Pools wird immer verarbeitet, und der Pool-PDA unterzeichnet seine Vaults, die Sie in remaining_accounts übergeben. Jedes andere CLMM-eigene Konto in remaining_accounts wird ebenfalls verarbeitet. Siehe products/clmm/instructions.
  • Ein Fehlercode wird hinzugefügt: 6052 LamportsCalculateError. Codes 6000–6051 sind unverändert.
  • CreateAmmConfig kopiert den Unterzeichner nicht mehr in owner / fund_owner. Neue Konfigurationen erhalten hardcodierte protocol_fee_owner- und fund_fee_owner-Schlüssel. Im Mainnet sind dies dieselben zwei Schlüssel, die bereits auf allen 21 bestehenden Konfigurationen gespeichert sind. Bestehende AmmConfig-Konten bleiben unverändert, lesen Sie also die Felder aus dem Konto.
  • Aktualisieren Sie Ihre IDL. Sie fügt eine Anweisung und eine Fehler-Variante hinzu, insgesamt 39 Anweisungen und 53 Fehler.
  • Sie können jetzt CPMM und CLMM in einer Crate zusammenfassen. Beide Repos pinnen anchor-lang / anchor-spl =1.0.2 auf ihren chore/upgrade-anchor-Branches, sodass ein einzelnes Programm in beide CPIs durchführen kann. Siehe sdk-api/rust-cpi.
  • Das TypeScript-Client-Paket wird umbenannt. Die Test-Suite wechselt von @coral-xyz/anchor 0.32.1 zu @anchor-lang/core 1.0.2.

CollectExcessLamports

Stufe 1 von SIMD-0437 wurde am 3. September 2026 im Mainnet aktiviert. Jedes CLMM-Konto, das vor einer Stufe erstellt wurde, ist jetzt überfinanziert, und nur das CLMM-Programm kann Lamports aus einem Konto verschieben, das es besitzt. Das umfasst Pool-Vaults, Reward-Vaults, PoolState, AmmConfig, ObservationState, TickArrayBitmapExtension und den Rest. Die Anweisung nimmt vier feste Konten, dann eine beliebige Anzahl von Quellkonten in remaining_accounts: Der Pool ist die Unterzeichnungsbehörde, nicht eine programmweite PDA. CPMM unterzeichnet mit einer globalen vault_and_lp_mint_auth_seed-Behörde. CLMM-Token-Vaults gehören ihrem PoolState, sodass ein einzelner Aufruf nur für den in Slot 2 übergebenen Pool unterzeichnen kann. Jedes Token-Programm-Quellkonto muss diesen Pool als seine Behörde haben: token_vault_0, token_vault_1 oder einen der Pool-Reward-Vaults. Ein Token-Konto aus einem anderen Pool oder ein Benutzer-Token-Konto schlägt die Eigentümerprüfung des Token-Programms fehl und setzt die gesamte Anweisung zurück. Das Programm überspringt es nicht. Position-NFT-Mints können nicht verarbeitet werden, da ihre Mint-Behörde widerrufen wird, wenn die Position geöffnet wird. Verarbeiten Sie Pool für Pool. Die Anweisung macht zwei Durchläufe, und diese Reihenfolge ist festgelegt:
  1. Token-Programm-CPIs zuerst. Für jede Quelle, die SPL Token oder Token-2022 gehört, erhält ein nicht-natives Konto WithdrawExcessLamports (Diskriminant 38). Ein natives wSOL-Vault erhält die SyncNative → UnwrapLamports (Diskriminant 45)-Rundreise, die mit einer Prüfung endet, dass der umhüllte Saldo seinem Wert vor der Synchronisierung entspricht. Wenn nicht, schlägt der Aufruf mit LamportsCalculateError fehl. Ein SOL-seitiger Vault behält seine volle Liquidität, und kein Swap-Angebot ändert sich über eine Verarbeitung hinweg.
  2. Direkte Belastungen zweite. Durchlauf 2 belastet pool_state zuerst, dann jedes Quellkonto, das dem CLMM-Programm gehört, bis zu rent.minimum_balance(data_len).
Quellkonten, die einem anderen Programm gehören, werden stillschweigend übersprungen. Diese Zwei-Durchlauf-Reihenfolge ist die, die CPMM am 2026-09-19 übernommen hat. CLMM hat sie seit seiner ersten Veröffentlichung. Wenn ein PDA vor einem CPI belastet wird, bricht die Laufzeit mit UnbalancedInstruction ab, sodass Aufrufer Quellen in beliebiger Reihenfolge übergeben können.
Der programmgeführte Durchlauf prüft nicht, welchem Pool oder Benutzer ein Konto gehört. Jedes Konto, das dem CLMM-Programm gehört, ist berechtigt, einschließlich einiger, deren Miete ein Benutzer bezahlt hat: PersonalPositionState, LimitOrderState und TickArrayState. Nur der Überschuss über das Miete-Minimum wird verschoben. Das Konto behält seine Daten und bleibt mietbefreit. Wenn eine Position oder Bestellung später geschlossen wird, erstattet das Programm den Saldo zurück, den das Konto zu diesem Zeitpunkt hält. Nach einer Verarbeitung ist dieser Saldo das aktuelle Miete-Minimum.
Die Wallet-Adressen sind in reference/program-addresses aufgelistet.

CreateAmmConfig schreibt feste Gebühreninhaber

Vor dieser Veröffentlichung setzte create_amm_config beide Gebühreninhaber-Felder vom aufrufenden Unterzeichner:
Es schreibt jetzt die eigenen Konstanten des Programms:
CreateAmmConfig ist immer noch auf crate::admin::ID beschränkt. Vor dieser Veröffentlichung startete jede neue Gebührenebene mit dem Administrator in beiden Feldern und musste mit UpdateAmmConfig-Parameter 3 / 4 rotiert werden. Jetzt startet sie mit den operativen Wallets. Im Mainnet sind die Konstanten dieselben Schlüssel, die bereits als owner / fund_owner auf allen 21 bestehenden Konfigurationen gespeichert sind. Das Programm schreibt jetzt einen Wert, den Operationen früher von Hand setzen mussten. Collection-Unterzeichner ändern sich nicht. CollectProtocolFee akzeptiert amm_config.owner oder crate::admin::ID, und CollectFundFee akzeptiert amm_config.fund_owner oder crate::admin::ID, sowohl vor als auch nach dieser Veröffentlichung. Im Devnet werden beide Konstanten auf denselben Schlüssel aufgelöst. Siehe reference/program-addresses.
Dies ist keine Migration. Jedes bestehende AmmConfig behält den owner und fund_owner, den es bereits hat. Lesen Sie die Felder, anstatt entweder die Konstanten oder den Administrator-Schlüssel hardcodiert zu verwenden.

Toolchain- und Abhängigkeitsänderungen

Die Anchor-1.0-Änderungen an CPI-Aufrufstellen sind dieselben, die CPMM-Integratoren bereits bearbeitet haben. CpiContext::new nimmt den Pubkey des Programms statt seines AccountInfo, und Context hat einen Lifetime-Parameter statt vier. In der Client-Crate gibt RequestBuilder::instructions() jetzt Vec<Instruction> ohne Result zurück, und system_program wurde zu solana-system-interface verschoben. Siehe sdk-api/rust-cpi. Build-System-Details ohne On-Chain-Effekt:
  • Localnet-Administrator. Das localnet-Feature kompiliert nicht mehr einen festen Test-Schlüssel, der durch eine committed Fixture gestützt wird. Stattdessen liest es den Administrator aus der CLMM_LOCALNET_ADMIN-Umgebungsvariable zur Build-Zeit, die yarn test:local-admin aus Ihrer lokalen Wallet setzt. Die .gitignore-Ausnahme der Fixture ist weg.
  • Release-Profil. Der doppelte [profile.release]-Block in programs/amm/Cargo.toml wurde gelöscht. Cargo ignoriert [profile] außerhalb des Workspace-Roots, sodass der Root-Block bereits der gültige war, und das Programm-Level panic = "abort" wurde nie angewendet.
  • Anchor.toml. seeds = false wird zu resolution = true plus skip-lint = false, und die veraltete [registry]-URL wird entfernt.
  • Lints. programs/amm/Cargo.toml fügt eine [lints.rust] unexpected_cfgs-Allowlist für die Feature-Cfgs hinzu, die die Anchor- und Solana-Makros ausgeben.
  • README. Auf diesem Branch sagt Ihnen das README immer noch, rustup default 1.86.0 und avm install 0.32.1 von coral-xyz/anchor auszuführen. Folgen Sie stattdessen Anchor.toml und solana-fundamentals/toolchain.

Was sich nicht geändert hat

  • Jedes Kontolayout. PoolState, AmmConfig, TickArrayState, TickArrayBitmapExtension, PersonalPositionState, ObservationState, LimitOrderState, DynamicFeeConfig, Permission und SupportMintAssociated behalten dieselben Größen und Offsets.
  • Fehlercodes 6000–6051.
  • Swap-, Liquiditäts-, Gebühren-, dynamische Gebühren- und Limit-Order-Mathematik. CollectExcessLamports verschiebt Lamports, die nie Teil der Reserven eines Pools waren.
  • Position-NFT-Einfrieren von 2026-08-17, einschließlich der Pool-als-Freeze-Authority-Regel und des ClosePosition-Auftau-Pfads.
  • spl_memo. Die Memo-Programm-Einschränkung von DecreaseLiquidityV2 wurde von spl_memo::id() zu anchor_spl::memo::ID verschoben. Beide benennen dieselbe Adresse; anchor-spl hat nur den Export umbenannt.
  • Programm-ID.

Aktualisierte Seiten

  • products/clmm/instructions: Upgrade-Banner; CollectExcessLamports-Abschnitt mit seiner Kontoliste, Zwei-Durchlauf-Dispatch-Tabelle und Pro-Pool-Scoping; Inventar-, Admin-Gating- und State-Change-Matrix-Zeilen; Gebühreninhaber-Notiz auf CollectProtocolFee / CollectFundFee.
  • products/clmm/accounts: AmmConfig-Eigentümer-Kommentare und eine Notiz darüber, was CreateAmmConfig schreibt.
  • products/clmm/code-demos: Versions-Banner und Rust-CPI-Skelett zu Anchor 1.0 verschoben.
  • products/cpmm/code-demos: Die Notiz „kann eine Crate nicht mit CLMM teilen” entfernt.
  • reference/error-codes: 6052 dokumentiert.
  • reference/program-addresses: neuer Abschnitt „CLMM-Gebühreninhaber-Wallets”; CLMM zu „Excess-Lamports-Collection-Wallets” hinzugefügt.
  • sdk-api/rust-cpi, sdk-api/anchor-idl, solana-fundamentals/toolchain: Anchor-1.0-Pins für raydium-clmm, und die Crate-Split-Warnung in den Ruhestand versetzt.
  • solana-fundamentals/rent-and-reclaimable-rent: CLMM zu „Was die Raydium-Programme auf ihrer eigenen Seite verarbeiten” hinzugefügt.
  • security/admin-and-multisig: CLMM-Excess-Lamports-Collector-Rolle.
  • protocol-overview/versions-and-migration: CLMM-Upgrade-Verlauf-Punkt.