Skip to main content
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Ein Dokumentations-Changelog-Eintrag. Für den Index aller Updates siehe reference/changelog. Für die historische Zeitleiste des Protokolls siehe introduction/history-and-milestones.
Dieses Release dokumentiert zwei CLMM-Programm-Änderungen. Beide sind additiv und rückwärtskompatibel: Bestehende Pools, Positionen und offene Aufträge sind nicht betroffen, und die klassischen CreatePool- / CreateCustomizablePool-Pfade bleiben unverändert.

TL;DR für Integratoren

  • Pool-IDs können nun nicht-kanonisch sein und hinter einem Permission-Gate stehen. Historisch gab es genau eine CLMM-Pool-Adresse pro (amm_config, token_mint_0, token_mint_1) — die PDA-Seeds pinten sie fest. Eine neue Instruktion, CreatePermissionedPool, faltet einen vom Client bereitgestellten nicht-null seed_index: u16 in die Pool-PDA-Seeds, sodass ein whitelisteter Operator mehrere Pools für das gleiche Paar und die gleiche Gebührenebene einrichten kann, jeweils unter seiner eigenen Adresse. Da beliebige Pool-Adressen eine privilegierte Fähigkeit sind, muss der Zahler eine Permission-PDA halten, die vom Admin gewährt wird. Zwei Admin-Instruktionen, CreatePermissionPda und ClosePermissionPda, verwalten diese Genehmigungen.
  • OpenLimitOrder validiert nun die Output-Seite. Die Instruktion akzeptiert drei zusätzliche Konten — output_token_account, output_vault, output_vault_mint — und lehnt den Auftrag mit NotApproved ab, wenn das Konto des Eigentümers ein gefrorenes Input- oder Output-Token-Konto ist. Dies garantiert, dass die eventuelle Ausführung geliefert werden kann, was für Allow-List- / Default-Frozen-Token-2022-Mints (permissioned tokens) wichtig ist. Clients, die gegen die alte einseitige Kontoliste erstellt wurden, müssen die drei Output-Konten hinzufügen.

Was sich im Programm geändert hat

Neue Instruktion: CreatePermissionedPool

Gleiche Form und Parameter wie CreateCustomizablePool (sie akzeptiert die gleichen CreateCustomizableParams, sodass einseitige Gebühren und das Dynamic-Fee-Opt-in verfügbar sind), plus:
  • Ein seed_index: u16-Argument, das nicht null sein darf. Es wird (Little-Endian) an die Pool-PDA-Seeds angehängt: ["pool", amm_config, token_mint_0, token_mint_1, seed_index.to_le_bytes()].
  • Ein permission-Konto: die PDA ["permission", payer]. Anchor lehnt den Aufruf ab, wenn er nicht existiert oder nicht vom Programm besessen wird — seine bloße Existenz ist die Autorisierung.
  • Ein pool_creator-Konto, das als pool_state.owner aufgezeichnet wird und sich vom gebührenzahlenden payer unterscheiden kann.
seed_index = 0 bleibt für Legacy-Pools reserviert: Für diese kollabiert die Seed-Komponente zu leer, wodurch die klassische Vier-Seed-Adresse reproduziert wird, sodass sich keine bestehende Pool-Adresse ändert. Siehe Instructions → CreatePermissionedPool.

Neues Konto: Permission

Ein Capability-Konto, dessen Existenz die Genehmigung ist. Es speichert nur die authority, für die es erstellt wurde (plus Padding). PDA-Seeds: ["permission", authority]. Es verleiht das Recht, CreatePermissionedPool aufzurufen und nichts anderes — es kann keine Gelder bewegen, Gebühren ändern oder einen Pool mutieren. Siehe Accounts → Permission.

Neue Admin-Instruktionen: CreatePermissionPda / ClosePermissionPda

  • CreatePermissionPda initialisiert eine Permission-PDA für eine gegebene permission_authority.
  • ClosePermissionPda schließt sie und erstattet die Miete an den Aufrufer, wodurch die Genehmigung widerrufen wird. Pools, die bereits unter dieser Genehmigung erstellt wurden, sind nicht betroffen.
Beide akzeptieren entweder den Programm-admin-Pubkey oder einen dedizierten permission_pda_admin-Schlüssel (eine unterschiedliche Konstante auf Mainnet vs. Devnet). Siehe Admin keys and multisig → CLMM.

PoolState: seed_index-Feld

Zwei Bytes wurden aus einer bestehenden Padding-Region (padding: [u8; 6]seed_index: [u8; 2] + padding: [u8; 4]) direkt nach fee_on herausgeschnitten. Die Gesamtkontogröße ist unverändert, und es ist keine Indexer-Migration erforderlich. Für Pools, die über CreatePool / CreateCustomizablePool erstellt wurden, ist seed_index [0, 0]; für permissioned Pools trägt es den vom Creator gewählten Index und ist erforderlich, um die Pool-Adresse offline neu abzuleiten.

OpenLimitOrder: Output-Seiten-Konten und Frozen-Account-Guard

Die OpenLimitOrder-Kontoliste erhält output_token_account, output_vault und output_vault_mint. Sie werden nur zur Validierung verwendet — kein Output wird bei der Eröffnung belastet. Der Handler verlangt nun, dass weder das Input- noch das Output-Token-Konto gefroren ist, und gibt andernfalls NotApproved zurück (der gleiche Code, der bereits zurückgegeben wurde, wenn der Pool Swap oder Limit-Order deaktiviert hat). Dies schließt eine Lücke, in der ein Auftrag gegen ein Token-Konto eröffnet werden könnte, das die Ausführung niemals erhalten könnte (z. B. ein noch nicht aufgetautes Konto für einen Default-Frozen-Token-2022-Mint). Siehe Instructions → OpenLimitOrder.

Fehlercodes

Keine neuen Fehlercodes. Der bestehende 6000 NotApproved deckt nun zusätzlich die gefrorenen Input-/Output-Token-Konten und die Swap-/Limit-Order-deaktiviert-Fälle auf OpenLimitOrder sowie den Fall „Unterzeichner ist weder admin noch permission_pda_admin” auf den Permission-Instruktionen ab. Die Fehlercode-Tabelle und Nummerierung sind ansonsten unverändert vom 2026-05-18 Release. Siehe Error codes → CLMM.

Migrationsnoten

  • Pool-Adressen lesen: Gehen Sie nicht davon aus, dass es einen Pool pro (config, mint0, mint1) gibt. Ein Paar kann nun einen kanonischen Pool plus einen oder mehrere permissioned Pools unter seed_index-abgeleiteten Adressen haben. Zählen Sie Pools aus der API / dem Indexer auf, anstatt eine einzelne PDA abzuleiten, und speichern Sie seed_index, wenn Sie einen permissioned Pool neu ableiten müssen.
  • Limit-Orders platzieren: Fügen Sie die drei Output-Seiten-Konten zu Ihrer OpenLimitOrder-Transaktion hinzu, und zeigen Sie eine klare Nachricht an, wenn NotApproved für ein gefrorenes Konto zurückgegeben wird.
  • Keine Account-Größen- oder Layout-Unterbrechung: PoolState hat die gleiche Größe; die eingestellten Padding-Bytes enthalten nun seed_index.

Aktualisierte Seiten

  • products/clmm/overview — „What’s new”-Notiz zu permissioned Multi-Pools und dem Limit-Order-Guard.
  • products/clmm/instructions — neuer CreatePermissionedPool-Abschnitt, CreatePermissionPda / ClosePermissionPda in der Instruktions-Tabelle und Admin-Gating-Notiz, sowie die aktualisierte OpenLimitOrder-Kontoliste / Vorbedingungen / Fehler.
  • products/clmm/accountsPermission im Inventar und sein eigener Abschnitt, das PoolState.seed_index-Feld, PDA-Ableitungshelfer (derivePermissionedPool, derivePermission) und die Lifecycle-Schnellreferenz.
  • security/admin-and-multisig — neue permission_pda_admin-Zeile und Permission-Scope-Erklärung in der CLMM-Rollen-Tabelle.
  • reference/error-codes — erweiterte NotApproved-Beschreibung.
Verifiziert gegen:
  • raydium-clmm-Quelle (create_permissioned_pool.rs, admin/create_permission_pda.rs, admin/close_permission_pda.rs, states/permission.rs, states/pool.rs, limit_order/open_limit_order.rs, lib.rs).