Skip to main content
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Überholt am 2026-10-22. CreatePermissionedPool wurde in CreateCustomizablePoolV2 umbenannt und erlaubnisfrei gemacht, und das Permission-Konto mit CreatePermissionPda / ClosePermissionPda wurde entfernt. Dieser Eintrag beschreibt das Programm zum Stand 2026-07-30. Siehe den Eintrag vom 2026-10-22.
Diese Version 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 Berechtigungsgate 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 Anweisung, 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-Anweisungen, CreatePermissionPda und ClosePermissionPda, verwalten diese Genehmigungen.
  • OpenLimitOrder validiert nun die Output-Seite. Die Anweisung akzeptiert drei zusätzliche Konten — output_token_account, output_vault, output_vault_mint — und lehnt die Bestellung mit NotApproved ab, wenn das Konto des Eigentümers ein eingefrorenes Input- oder Output-Token-Konto hat. 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 Anweisung: CreatePermissionedPool

Gleiche Form und Parameter wie CreateCustomizablePool (sie akzeptiert die gleichen CreateCustomizableParams, sodass einseitige Gebühren und die 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 gehört 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-Anweisungen: 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 beim Öffnen belastet. Der Handler verlangt nun, dass weder das Input- noch das Output-Token-Konto eingefroren 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 eine Bestellung gegen ein Token-Konto geö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 eingefrorenen 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-Anweisungen ab. Die Fehlercode-Tabelle und Nummerierung sind ansonsten unverändert gegenüber der Version vom 2026-05-18. 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 eingefrorenes Konto zurückgegeben wird.
  • Keine Kontogröße oder Layout-Bruch: 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 Anweisungstabelle und Admin-Gating-Notiz, sowie die aktualisierte OpenLimitOrder-Kontoliste / Vorbedingungen / Fehler.
  • products/clmm/accounts — Permission im Inventar und in seinem eigenen 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-Rollentabelle.
  • 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).