Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
Raydium 不接受任意的 Token-2022 代幣。CPMM 和 CLMM 都執行嚴格的允許清單模式:預設只有一小組擴充功能通過;其他所有功能在建立流動性池時都會被拒絕。少數受信任的代幣透過硬編碼位址被允許;CLMM 另外支援管理員管理的按代幣登記和執行時 Superstate 代幣偵測。本頁是單一參考頁面,說明執行了什麼以及在哪裡,並附上程式原始碼的檔案和行號引用。

程式級支援

允許清單檢查位於: CPMM 或 CLMM 上沒有交換時代幣檢查 — 限制只在流動性池建立時觸發。一旦流動性池存在,交換只是信任代幣沒有改變,這對 Token-2022 代幣狀態的不可變部分是正確的。

CLMM 位置 NFT 凍結受限發行人

位置 NFT 帳戶預設保持未凍結。CLMM 只在位置使用 V2 開放路徑至少一個金庫代幣的目前 freeze_authority 符合硬編碼受限發行人清單時凍結一個。初始清單包含 Superstate 偵測路徑下方使用的相同權限。將流動性池 PDA 設定為位置 NFT 代幣的凍結權限本身不是凍結。這是位置保管規則,不是另一個流動性池建立允許清單:
  • 流動性池已經存在並保持可交換。
  • 位置 NFT 代幣使用 CLMM 流動性池 PDA 作為其自己的凍結權限;基礎發行人不控制位置 NFT。
  • OpenPositionV2 涵蓋經典 SPL 位置 NFT 超過 Token-2022 流動性池資產。OpenPositionWithToken22Nft 涵蓋 Token-2022 位置 NFT。
  • OpenPosition V1 不檢查金庫代幣,無法服務已發送清單針對的 Token-2022 受限資產。
  • 現有位置保持不變。
凍結的位置仍可由其所有者管理,但無法轉移。當用戶端將流動性池作為第一個剩餘帳戶傳遞時,ClosePosition 解凍並原子性地燒毀。請參閱 products/clmm/ticks-and-positions

CPMM 和 CLMM 擴充功能允許清單

在靜態白名單短路(下面涵蓋)之後,程式迭代代幣的擴充功能,如果它攜帶任何除了這五個以外的擴充功能,則拒絕代幣: 不在此清單中的任何內容 — TransferHookNonTransferableConfidentialTransferMintPermanentDelegateMintCloseAuthorityDefaultAccountStateGroupPointerGroupMemberPointerMemberPointerPausable 等 — 會導致 is_supported_mint 返回 false 並且流動性池建立還原。 相關行(CPMM,CLMM 中的相同形狀):
cp-swap/src/utils/token.rs:190–200

繞過路徑

不符合允許清單的 Token-2022 代幣仍然可以透過三個明確繞過之一被允許。它們按順序嘗試,在擴充功能迭代執行之前。

1. 靜態代幣白名單

常數 MINT_WHITELIST base58 字串陣列在每個程式中硬編碼。如果代幣的位址符合,函式立即返回 true,不執行擴充功能檢查。 這些位址被烤入程式中;更新清單需要透過 3/4 升級多簽進行程式升級。

2. 按代幣登記 — 僅限 CLMM

CLMM 另外查詢種子為 [b"support_mint", mint]SupportMintAssociated PDA。如果該 PDA 對代幣存在,無論其擴充功能集如何,它都被允許。 PDA 由 CreateSupportMintAssociatedadmin/create_support_mint_associated.rs)建立。指令被限制為兩個簽署者:
  • crate::admin::ID — 標準 Raydium 管理員權限。
  • crate::create_support_mint_associated_owner::ID — 為此目的的專用權限:RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY(主網)、rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5(開發網)。
效果:CLMM 團隊可以選擇特定的 Token-2022 代幣進入流動性池建立,無需程式升級。CPMM 沒有等效項 — 其允許清單嚴格來自原始碼。

3. Superstate 偵測 — 僅限 CLMM

CLMM 有第三條路徑專門用於 Superstate 的代幣化資產,它們使用 ScaledUiConfig 擴充功能,連結到 CLMM 程式的 spl-token-2022 版本無法解包。CLMM 不是升級依賴項,而是透過其權限形狀偵測 Superstate 代幣:
raydium-clmm/programs/amm/src/util/token.rs:485 如果全部四個成立,代幣通過此分支:
  • 其擁有程式是 Token-2022 程式。
  • 其凍結權限等於 superstate_allowlist::ID。請參閱 reference/program-addresses 以取得主網測試版和開發網值。
  • DefaultAccountState 擴充功能設定為 Frozen
  • 其永久委託也是 superstate_allowlist::ID
這是啟發式,不是登記 — Superstate 發行的任何具有相同權限形狀的未來代幣都將自動被允許。

繞過不豁免的內容

繞過跳過擴充功能允許清單,但程式仍然強制執行:
  • 代幣由 TokenToken-2022 擁有。自訂代幣程式在上游被拒絕。
  • 流動性池金庫使用 Token-2022 流動性池的正確 ATA 擴充功能建立(ImmutableOwner 等)。
  • 所有轉移都透過 transfer_checked 進行 — 費用承載代幣在金庫中著陸正確金額。
白名單或 PDA 登記的代幣,例如,稍後添加 TransferHook 不會獲得交換時檢查;掛鉤將在每次轉移時執行,可能會破壞交換。因此白名單是高信任行為。

「被阻止」語義

is_supported_mint 返回 false 時,流動性池建立還原為 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 應用上限;直接程式呼叫者必須複製它。

紀元轉換

代幣權限可以排程費率變更,在下一個紀元啟動。在轉換視窗期間,兩個配置(oldernewer)同時存在於代幣上,TransferChecked 按目前紀元選擇。CPMM SwapV2 和 CLMM SwapV2 都在 accounts 中傳遞完整代幣帳戶,所以程式讀取正確配置而無需額外查詢。 如果你透過 Trade API 或 SDK 提前超過一個紀元報價,執行費用可能與報價費用不同 — 受舊配置的 maximum_fee_basis_points 限制。

計息和 ScaledUiAmount

流動性池持有本金金額;「UI 金額」是本金乘以時間相關或管理員設定的縮放因子。交換數學對本金進行操作:
SDK 自動轉換。直接 RPC 讀取器應將 pool.token0Vault.amount 視為本金。

「Token-2022 流動性池」定義

如果任一代幣具有 programId == TokenzQdB...,流動性池是 Token-2022 流動性池。API 表面這個:
使用 programId 分派,使用 hasTransferFee 表面 UI 警告。

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 奇偶)。
  • 依賴項升級,使 CLMM 的 ScaledUiConfig 解碼無需 Superstate 啟發式工作。
任何著陸時此頁面將被更新。

指標

來源:
  • 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 基礎代幣建立。