Skip to main content
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
Raydium は任意の Token-2022 ミントを受け入れません。CPMM と CLMM の両方は厳密な許可リストモードで動作します。デフォルトでは限定的な拡張機能セットのみが通過し、その他はすべてプール作成時に拒否されます。信頼できるミントの一部はハードコードされたアドレスで認められます。CLMM はさらに、管理者が管理するミント単位のレジストリと実行時の Superstate トークン検出をサポートしています。このページは、何が実施されているか、どこで実施されているかについての単一ページのリファレンスで、プログラムソースへのファイルと行の引用が含まれています。

プログラムレベルのサポート

許可リストチェックは以下に存在します: CPMM または CLMM にはスワップ時のミントチェックはありません — ゲートはプール作成時のみ発火します。プールが存在すると、スワップは単にミントが変更されなかったことを信頼します。これは Token-2022 ミント状態の不変部分に対して正しいです。

CLMM ポジション NFT 制限発行者向けフリーズ

ポジション NFT アカウントはデフォルトではフリーズされません。CLMM は、ポジションが V2 オープンパスを使用し、かつ少なくとも 1 つのボルトミントの現在の freeze_authority がハードコードされた制限発行者リストと一致する場合にのみ、1 つをフリーズします。初期リストには、以下の Superstate 検出パスで使用される同じ権限が含まれています。プール PDA をポジション NFT ミントのフリーズ権限として設定することは、それ自体はフリーズではありません。これはプール作成許可リストではなく、別のポジション保管ルールです:
  • プールは既に存在でき、スワップ可能なままです。
  • ポジション NFT ミントは CLMM プール PDA をそれ自体のフリーズ権限として使用します。基礎となる発行者はポジション NFT を制御しません。
  • OpenPositionV2 は Token-2022 プール資産上の従来の SPL ポジション NFT をカバーします。OpenPositionWithToken22Nft は Token-2022 ポジション NFT をカバーします。
  • OpenPosition V1 はボルトミントを検査せず、出荷されたリストが対象とする Token-2022 制限資産に対応できません。
  • 既存のポジションは変更されません。
フリーズされたポジションは所有者によって管理可能なままですが、転送できません。ClosePosition はクライアントがプールを最初の残りアカウントとして渡すときに、アトミックにフリーズ解除して焼却します。products/clmm/ticks-and-positions を参照してください。

CPMM と CLMM 拡張機能許可リスト

静的許可リストショートサーキット(以下でカバー)の後、プログラムはミントの拡張機能を反復処理し、これら 5 つ以外の拡張機能を持つ場合、ミントを拒否します: このリストにない何か — TransferHookNonTransferableConfidentialTransferMintPermanentDelegateMintCloseAuthorityDefaultAccountStateGroupPointerGroupMemberPointerMemberPointerPausable など — は is_supported_mintfalse を返し、プール作成がリバートします。 関連する行(CPMM、CLMM で同じ形状):
cp-swap/src/utils/token.rs:190–200

迂回パス

許可リストに適合しない Token-2022 ミントは、3 つの明示的な迂回パスの 1 つを通じて認められることができます。拡張機能反復が実行される前に、順番に試行されます。

1. 静的ミント許可リスト

定数 MINT_WHITELIST base58 文字列配列は各プログラムにハードコードされています。ミントのアドレスが一致する場合、関数は直ちに true を返し、拡張機能チェックは実行されません。 これらのアドレスはプログラムに焼き込まれています。リストを更新するには、3/4 アップグレードマルチシグを通じたプログラムアップグレードが必要です。

2. ミント単位レジストリ — CLMM のみ

CLMM はさらに、シード [b"support_mint", mint]SupportMintAssociated PDA を参照します。そのミント用の PDA が存在する場合、その拡張機能セットに関係なく認められます。 PDA は CreateSupportMintAssociatedadmin/create_support_mint_associated.rs)によって作成されます。命令は 2 つの署名者にゲートされています:
  • crate::admin::ID — 標準 Raydium 管理権限。
  • crate::create_support_mint_associated_owner::ID — この目的専用の権限:RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY(メインネット)、rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5(デブネット)。
効果:CLMM チームはプログラムアップグレードなしで特定の Token-2022 ミントをプール作成にオプトインできます。CPMM には同等のものはありません — その許可リストは厳密にソースコード化されています。

3. Superstate 検出 — CLMM のみ

CLMM には、CLMM プログラムにリンクされた spl-token-2022 のバージョンがアンパックできない ScaledUiConfig 拡張機能を使用する Superstate のトークン化資産専用の 3 番目のパスがあります。依存関係をアップグレードするのではなく、CLMM は権限形状で Superstate トークンを検出します:
raydium-clmm/programs/amm/src/util/token.rs:485 ミントはすべて 4 つが成立する場合、このブランチを通過します:
  • その所有プログラムは Token-2022 プログラムです。
  • そのフリーズ権限は superstate_allowlist::ID と等しい。メインネット-ベータとデブネット値については reference/program-addresses を参照してください。
  • その DefaultAccountState 拡張機能は Frozen に設定されています。
  • その永続デリゲートも superstate_allowlist::ID です。
これはレジストリではなくヒューリスティックです — Superstate が同じ権限形状で発行する将来のミントは自動的に認められます。

迂回パスが免除しないもの

迂回パスは拡張機能許可リストをスキップしますが、プログラムは引き続き実施します:
  • ミントは Token または Token-2022 のいずれかで所有されています。カスタムトークンプログラムは上流で拒否されます。
  • プールボルトは Token-2022 プール用の正しい ATA 拡張機能で作成されます(ImmutableOwner など)。
  • すべての転送は transfer_checked を通じて行われます — 手数料ベアリングミントはボルトに正しい金額を着地させます。
ホワイトリストまたは PDA 登録されたミントが、例えば後で TransferHook を追加する場合、スワップ時チェックを取得しません。フックは単にすべての転送で実行され、スワップをブリックする可能性があります。したがって、ホワイトリストは高信頼アクションです。

「ブロック」セマンティクス

is_supported_mintfalse を返すと、プール作成は ErrorCode::NotSupportMint(CPMM)/ ErrorCode::NotSupportMint(CLMM)でリバートします。数値コードについては reference/error-codes を参照してください。 既存のプールはこのチェックに遡及的に失敗することはできません — ゲートは作成時のみ実行されます。ミント拡張機能は Raydium が拒否するカテゴリに対して不変です(転送フック、非転送可能、機密転送は作成後に追加できません)。したがって、静的チェックで十分です。

除外された各拡張機能が除外される理由

  • TransferHook — すべての転送でカスタムプログラムを呼び出し、任意の CU 消費、任意の失敗条件、呼び出しプログラムに再入力する機能があります。安全なサンドボックスは存在しません。一部の DEX はフック許可リストを維持しています。Raydium はそうしません。
  • NonTransferableTransfer は常に失敗します。プールは保管を取得できません。
  • ConfidentialTransfer — 転送金額は暗号化されています。曲線はスワップの価格を設定できません。
  • PermanentDelegate — デリゲートの保有者はプールボルトを含む任意のトークンアカウントをスイープできます。信頼できる発行者(例:規制されたステーブルコイン)の静的許可リスト経由でのみ許可されます。
  • MintCloseAuthority — ミントを閉じることができます。既存のプールは使用不可になります。デフォルトで許可されません。
  • DefaultAccountState (Frozen) — プール ATA は Frozen 状態で着地し、アカウントごとにフリーズ解除が必要です。Superstate 検出経由でのみ許可され、発行者が登録時に機関アカウントをフリーズ解除することを想定しています。
  • Group/Member ポインター — 積極的に有害ではありませんが、未レビュー。表面を狭く保つためにデフォルトで許可されません。

転送手数料会計

TransferFeeConfig を持つミントの場合、すべてのスワップ、デポジット、および引き出しは名目金額より少なく移動します。SDK は計算の両方の半分を表示します:
正しい UI は以下を表示します:
  • amountIn + token2022FeeIn を「送信」として
  • amountOut - token2022FeeOut を「受け取り」として
  • feeAmount をプール手数料(LP + プロトコル)として、Token-2022 転送手数料とは別
amountIn → amountOut のみを表示する素朴な UI はコストを過小評価します。

maximumFee キャップ

Token-2022 転送手数料は転送ごとにキャップされます。1% ミントで 10,000 トークンキャップの場合、100,000,000 トークン転送は手数料で 10,000 のみを支払います。SDK の computeSwapAmount はキャップを適用します。直接プログラム呼び出し元はそれを複製する必要があります。

エポック遷移

ミント権限は次のエポックで有効になる手数料レート変更をスケジュールできます。遷移ウィンドウ中、2 つの設定(oldernewer)がミント上に同時に存在し、TransferChecked は現在のエポックで選択します。CPMM SwapV2 と CLMM SwapV2 の両方は accounts に完全なミントアカウントを渡すため、プログラムは追加ルックアップなしで正しい設定を読み取ります。 Trade API または SDK 経由で 1 エポック以上先に引用する場合、実行手数料は引用手数料と異なる可能性があります — 古い設定の maximum_fee_basis_points で制限されます。

利息ベアリングと ScaledUiAmount

プールは元本を保有します。「UI 金額」は元本に時間依存または管理者設定のスケール係数を乗じたものです。スワップ数学は元本で動作します:
SDK は自動的に変換します。直接 RPC リーダーは pool.token0Vault.amount を元本として扱うべきです。

「Token-2022 プール」定義

プールはいずれかのミントが programId == TokenzQdB... を持つ場合、Token-2022 プールです。API はこれを表示します:
ディスパッチに programId を使用し、UI 警告を表示するために hasTransferFee を使用します。

SDK ヘルパー

一般的な統合ミス

  • プログラム ID のみをプリフライトする。 ミントは Token-2022 かつサポートされていない可能性があります。許可リスト(および静的許可リスト)に対して拡張機能リストを確認してから、プール作成を許可します。
  • ミントがまったく受け入れられていない場合、SDK の引用を信頼する。 引用 API は引用を拒否しません — プール作成がリバートするものです。UI でプール作成を公開する前に、オフチェーンで is_supported_mint セマンティクスを確認してください。
  • 転送手数料ヘアカットなしで引用する。 0.25% CPMM プールの両側に 1% 転送手数料ミントがある場合、実効手数料は約 2.25% で、0.25% ではありません。SDK 引用または Trade API 引用を使用してください — プールの手数料層のみから手数料を手動で計算しないでください。
  • Token-2022 プールでレガシー Swap 命令を呼び出す。 Swap は Token-2022 より前のもの。いずれかのミントが Token-2022 の場合は常に SwapV2 を使用してください。
  • 新しい Token-2022 ミントを自動リストする。 ウォレットとアグリゲーターは、ミントをユーザーに表示する前に TransferHookNonTransferable をチェックする必要があります。両方とも Raydium に敵対的です。

将来の作業

このマトリックスを変更する Solana エコシステムとプロトコルロードマップアイテム:
  • Solana レベルでのホワイトリスト転送フックプログラム(エコシステム規約が進化中)。
  • 機密転送互換 AMM(研究段階)。
  • より広い CPMM ミント単位レジストリ(CLMM とのパリティ)。
  • Superstate ヒューリスティックなしで CLMM の ScaledUiConfig デコーディングが機能するように依存関係をアップグレード。
いずれかが実装されたときにこのページは更新されます。

ポインター

ソース:
  • raydium-cp-swap/programs/cp-swap/src/utils/token.rsMINT_WHITELISTis_supported_mint
  • raydium-clmm/programs/amm/src/util/token.rsMINT_WHITELISTsuperstate_allowlistis_superstate_tokenis_supported_mint
  • raydium-clmm/programs/amm/src/instructions/admin/create_support_mint_associated.rs — ミント単位レジストリ命令。
  • raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs — LaunchLab Token-2022 ベースミント作成。