Skip to main content
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
このリリースでは、2つのCLMMプログラム変更を記録しています。どちらも追加的で後方互換性があります。既存のプール、ポジション、オープンオーダーは影響を受けず、従来の CreatePool / CreateCustomizablePool パスは変わりません。

インテグレーター向けTL;DR

  • プールIDは許可ゲートの背後で非正規化できるようになりました。 従来は、(amm_config, token_mint_0, token_mint_1) ごとに正確に1つのCLMMプールアドレスが存在していました。新しい命令 CreatePermissionedPool は、クライアント提供の非ゼロ seed_index: u16 をプールPDAシードに組み込むため、ホワイトリスト化されたオペレーターは 同じペアとフィー層に対して複数のプール を各自のアドレスで立ち上げることができます。任意のプールアドレスは特権機能であるため、支払者は管理者によって付与された Permission PDAを保有する必要があります。2つの管理命令 CreatePermissionPdaClosePermissionPda がこれらの付与を管理します。
  • OpenLimitOrder は出力側を検証するようになりました。 この命令は3つの追加アカウント — output_token_accountoutput_vaultoutput_vault_mint — を受け取り、所有者の 入力または出力 トークンアカウントが凍結されている場合、NotApproved でオーダーを拒否します。これにより、最終的なフィルが配信されることを保証し、許可リスト/デフォルト凍結Token-2022ミント(許可制トークン)に重要です。古いシングルサイドアカウントリストに対して構築されたクライアントは、3つの出力アカウントを追加する必要があります。

プログラムで変更されたもの

新命令:CreatePermissionedPool

CreateCustomizablePool と同じ形状とパラメータ(同じ CreateCustomizableParams を受け取るため、シングルサイドフィーと動的フィーオプトインが利用可能)に加えて:
  • seed_index: u16 引数。ゼロ以外である必要があります。プールPDAシードに追加されます(リトルエンディアン): ["pool", amm_config, token_mint_0, token_mint_1, seed_index.to_le_bytes()]
  • permission アカウント:PDA ["permission", payer]。Anchorは存在しないか、プログラムによって所有されていない場合、呼び出しを拒否します。その存在自体が認可です。
  • pool_state.owner として記録される pool_creator アカウント。手数料を支払う payer と異なる場合があります。
seed_index = 0 はレガシープール用に予約されたままです。これらの場合、シードコンポーネントは空に折りたたまれ、従来の4シードアドレスを再現するため、既存のプールアドレスは変わりません。 命令 → CreatePermissionedPool を参照してください。

新アカウント:Permission

その存在 付与である機能アカウント。作成された authority のみを保存します(パディング付き)。PDAシード:["permission", authority]CreatePermissionedPool を呼び出す権利を与え、他には何もできません。資金を移動したり、フィーを変更したり、プールを変更することはできません。アカウント → Permission を参照してください。

新管理命令:CreatePermissionPda / ClosePermissionPda

  • CreatePermissionPda は、与えられた permission_authority に対して Permission PDAを初期化します。
  • ClosePermissionPda はそれを閉じ、呼び出し元に家賃を払い戻し、付与を取り消します。その付与の下で既に作成されたプールは影響を受けません。
どちらもプログラム admin 公開鍵 または 専用の permission_pda_admin キー(メインネットとデブネットで異なる定数)を受け入れます。管理キーとマルチシグ → CLMM を参照してください。

PoolStateseed_index フィールド

2バイトは既存のパディング領域から取り出されました(padding: [u8; 6]seed_index: [u8; 2] + padding: [u8; 4])。fee_on の直後です。総アカウントサイズは変わらず、インデクサーマイグレーションは不要です。 CreatePool / CreateCustomizablePool で作成されたプールの場合、seed_index[0, 0] です。許可制プールの場合、作成者が選択したインデックスを保持し、オフチェーンでプールアドレスを再導出するために必要です。

OpenLimitOrder:出力側アカウントと凍結アカウントガード

OpenLimitOrder アカウントリストは output_token_accountoutput_vaultoutput_vault_mint を取得します。これらは検証にのみ使用されます。オープン時に出力は引き落とされません。ハンドラーは 入力も出力も トークンアカウントが凍結されていないことを要求し、そうでない場合は NotApproved を返します(同じコードは既にプールがスワップまたはリミットオーダーを無効にしている場合に返されます)。これにより、フィルを受け取ることができないトークンアカウント(例えば、デフォルト凍結Token-2022ミント用のまだ解凍されていないアカウント)に対してオーダーを開くことができるギャップを閉じます。 命令 → OpenLimitOrder を参照してください。

エラーコード

新しいエラーコードはありません。既存の 6000 NotApproved は、OpenLimitOrder の凍結入力/出力トークンアカウントとスワップ/リミットオーダー無効ケース、および許可命令の「署名者は admin でも permission_pda_admin でもない」ケースをカバーするようになりました。エラーコードテーブルと番号付けは、2026-05-18リリース から変わりません。エラーコード → CLMM を参照してください。

マイグレーションノート

  • プールアドレスの読み取り(config, mint0, mint1) ごとに1つのプールと仮定しないでください。ペアは正規プールに加えて、seed_index 導出アドレスで1つ以上の許可制プールを持つことができます。単一のPDAを導出するのではなく、APIまたはインデクサーからプールを列挙し、許可制プールを再導出する必要がある場合は seed_index を保存してください。
  • リミットオーダーの配置OpenLimitOrder トランザクションに3つの出力側アカウントを追加し、凍結アカウントに対して NotApproved が返された場合は明確なメッセージを表示してください。
  • アカウントサイズまたはレイアウトの破損なしPoolState は同じサイズです。廃止されたパディングバイトは seed_index を保持するようになりました。

更新されたページ

  • products/clmm/overview — 許可制マルチプールとリミットオーダーガードに関する「新機能」ノート。
  • products/clmm/instructions — 新しい CreatePermissionedPool セクション、命令テーブルと管理ゲートノートの CreatePermissionPda / ClosePermissionPda、および更新された OpenLimitOrder アカウントリスト/前提条件/エラー。
  • products/clmm/accounts — インベントリの Permission とそのセクション、PoolState.seed_index フィールド、PDA導出ヘルパー(derivePermissionedPoolderivePermission)、およびライフサイクルクイックリファレンス。
  • security/admin-and-multisig — CLMMロールテーブルの新しい permission_pda_admin 行と許可スコープ説明。
  • reference/error-codes — 拡張された NotApproved 説明。
検証対象
  • raydium-clmm ソース(create_permissioned_pool.rsadmin/create_permission_pda.rsadmin/close_permission_pda.rsstates/permission.rsstates/pool.rslimit_order/open_limit_order.rslib.rs)。