本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
Raydium 不接受任意的 Token-2022 代幣。CPMM 和 CLMM 都執行嚴格的允許清單模式:預設只有一小組擴充功能通過;其他所有功能在建立流動性池時都會被拒絕。少數受信任的代幣透過硬編碼位址被允許;CLMM 另外支援管理員管理的按代幣登記和執行時 Superstate 代幣偵測。本頁是單一參考頁面,說明執行了什麼以及在哪裡,並附上程式原始碼的檔案和行號引用。
程式級支援
允許清單檢查位於:
- CPMM:
raydium-cp-swap/programs/cp-swap/src/utils/token.rs:178中的is_supported_mint,從Initialize呼叫。 - CLMM:
raydium-clmm/programs/amm/src/util/token.rs:280中的is_supported_mint,從CreatePool呼叫。 - LaunchLab:
raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs中的initialize_with_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。OpenPositionV1 不檢查金庫代幣,無法服務已發送清單針對的 Token-2022 受限資產。- 現有位置保持不變。
ClosePosition 解凍並原子性地燒毀。請參閱 products/clmm/ticks-and-positions。
CPMM 和 CLMM 擴充功能允許清單
在靜態白名單短路(下面涵蓋)之後,程式迭代代幣的擴充功能,如果它攜帶任何除了這五個以外的擴充功能,則拒絕代幣:
不在此清單中的任何內容 —
TransferHook、NonTransferable、ConfidentialTransferMint、PermanentDelegate、MintCloseAuthority、DefaultAccountState、GroupPointer、GroupMemberPointer、MemberPointer、Pausable 等 — 會導致 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 由 CreateSupportMintAssociated(admin/create_support_mint_associated.rs)建立。指令被限制為兩個簽署者:
crate::admin::ID— 標準 Raydium 管理員權限。crate::create_support_mint_associated_owner::ID— 為此目的的專用權限:RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY(主網)、rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5(開發網)。
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。
繞過不豁免的內容
繞過跳過擴充功能允許清單,但程式仍然強制執行:- 代幣由
Token或Token-2022擁有。自訂代幣程式在上游被拒絕。 - 流動性池金庫使用 Token-2022 流動性池的正確 ATA 擴充功能建立(
ImmutableOwner等)。 - 所有轉移都透過
transfer_checked進行 — 費用承載代幣在金庫中著陸正確金額。
TransferHook 不會獲得交換時檢查;掛鉤將在每次轉移時執行,可能會破壞交換。因此白名單是高信任行為。
「被阻止」語義
當is_supported_mint 返回 false 時,流動性池建立還原為 ErrorCode::NotSupportMint(CPMM)/ ErrorCode::NotSupportMint(CLMM)。請參閱 reference/error-codes 以取得數字代碼。
現有流動性池無法追溯性地失敗此檢查 — 限制只在建立時執行。代幣擴充功能對於 Raydium 拒絕的類別是不可變的(轉移掛鉤、不可轉移、機密轉移無法在建立後添加),所以靜態檢查是足夠的。
為什麼排除每個擴充功能
- TransferHook — 在每次轉移時呼叫自訂程式,具有任意 CU 消耗、任意失敗條件,以及重新進入呼叫程式的能力。不存在安全沙箱。某些 DEX 維護掛鉤允許清單;Raydium 不維護。
- NonTransferable —
Transfer總是失敗。流動性池無法取得保管。 - ConfidentialTransfer — 轉移金額被加密;曲線無法為交換定價。
- PermanentDelegate — 委託的持有者可以掃除任何代幣帳戶,包括流動性池金庫。僅透過受信任發行人的靜態白名單允許(例如,受監管的穩定幣)。
- MintCloseAuthority — 代幣可以關閉;現有流動性池變得無法使用。預設不允許。
- DefaultAccountState (Frozen) — 流動性池 ATA 將著陸在
Frozen狀態,需要按帳戶解凍。僅透過 Superstate 偵測允許,假設發行人在註冊時解凍機構帳戶。 - Group/Member 指標 — 不是主動有害,但未審查。預設不允許以保持表面狹窄。
轉移費用會計
對於攜帶TransferFeeConfig 的代幣,每次交換、存款和提款移動少於名義金額。SDK 表面計算的兩個部分:
amountIn + token2022FeeIn作為「你發送」amountOut - token2022FeeOut作為「你接收」feeAmount作為流動性池費用(LP + 協議),與 Token-2022 轉移費用分開
amountIn → amountOut 的天真 UI 低估了成本。
maximumFee 上限
Token-2022 轉移費用按轉移上限。對於 1% 代幣,上限為 10,000 個代幣,100,000,000 個代幣轉移只支付 10,000 費用。SDK 的 computeSwapAmount 應用上限;直接程式呼叫者必須複製它。
紀元轉換
代幣權限可以排程費率變更,在下一個紀元啟動。在轉換視窗期間,兩個配置(older、newer)同時存在於代幣上,TransferChecked 按目前紀元選擇。CPMM SwapV2 和 CLMM SwapV2 都在 accounts 中傳遞完整代幣帳戶,所以程式讀取正確配置而無需額外查詢。
如果你透過 Trade API 或 SDK 提前超過一個紀元報價,執行費用可能與報價費用不同 — 受舊配置的 maximum_fee_basis_points 限制。
計息和 ScaledUiAmount
流動性池持有本金金額;「UI 金額」是本金乘以時間相關或管理員設定的縮放因子。交換數學對本金進行操作: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 代幣。 錢包和聚合器應在向使用者表面代幣之前檢查
TransferHook和NonTransferable;兩者都對 Raydium 不利。
未來工作
Solana 生態系統和協議路線圖項目,將改變此矩陣:- Solana 級別允許列出的轉移掛鉤程式(生態系統慣例演變)。
- 機密轉移相容 AMM(研究階段)。
- 更廣泛的 CPMM 按代幣登記(與 CLMM 奇偶)。
- 依賴項升級,使 CLMM 的
ScaledUiConfig解碼無需 Superstate 啟發式工作。
指標
algorithms/token-2022-transfer-fees— 交換中的費用數學。products/cpmm/instructions—SwapV2、Initialize。products/clmm/instructions—SwapV2、CreatePool、CreateSupportMintAssociated。reference/error-codes— 每個程式的NotSupportMint數字代碼。
raydium-cp-swap/programs/cp-swap/src/utils/token.rs—MINT_WHITELIST、is_supported_mint。raydium-clmm/programs/amm/src/util/token.rs—MINT_WHITELIST、superstate_allowlist、is_superstate_token、is_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 基礎代幣建立。

