Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
Support au niveau du programme
Les vérifications de la liste blanche se trouvent dans :
- CPMM :
is_supported_mintdansraydium-cp-swap/programs/cp-swap/src/utils/token.rs:178, appelé depuisInitialize. - CLMM :
is_supported_mintdansraydium-clmm/programs/amm/src/util/token.rs:280, appelé depuisCreatePool. - LaunchLab :
initialize_with_token_2022dansraydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs(source non disponible publiquement).
Gel du NFT de position CLMM pour les émetteurs restreints
Les comptes NFT de position restent dégelés par défaut. CLMM en gèle un uniquement quand la position utilise un chemin V2 ouvert et qu’au moins un mint de vault a unefreeze_authority actuelle correspondant à la liste d’émetteurs restreints codée en dur. La liste initiale contient la même autorité utilisée par le chemin de détection Superstate ci-dessous. Définir le PDA du pool comme autorité de gel du mint NFT de position n’est pas en soi un gel. C’est une règle de garde de position, pas une autre liste blanche de création de pool :
- Le pool peut déjà exister et rester échangeable.
- Le mint NFT de position utilise le PDA du pool CLMM comme sa propre autorité de gel ; l’émetteur sous-jacent ne contrôle pas le NFT de position.
OpenPositionV2couvre les NFT de position SPL classiques sur les actifs de pool Token-2022.OpenPositionWithToken22Nftcouvre les NFT de position Token-2022.OpenPositionV1 n’inspecte pas les mints de vault et ne peut pas servir les actifs Token-2022 restreints ciblés par la liste fournie.- Les positions existantes restent inchangées.
ClosePosition dégèle et brûle atomiquement quand le client passe le pool comme premier compte restant. Voir products/clmm/ticks-and-positions.
Liste blanche d’extensions CPMM et CLMM
Après que les raccourcis de liste blanche statique (couverts ci-dessous) s’activent, le programme itère les extensions du mint et rejette le mint s’il porte une quelconque extension autre que ces cinq :
Tout ce qui ne figure pas dans cette liste —
TransferHook, NonTransferable, ConfidentialTransferMint, PermanentDelegate, MintCloseAuthority, DefaultAccountState, GroupPointer, GroupMemberPointer, MemberPointer, Pausable, etc. — fait que is_supported_mint retourne false et la création du pool revient en arrière.
Les lignes pertinentes (CPMM, forme identique dans CLMM) :
cp-swap/src/utils/token.rs:190–200
Chemins de contournement
Un mint Token-2022 qui ne correspond pas à la liste blanche peut toujours être admis via l’un des trois contournements explicites. Ils sont tentés dans l’ordre, avant que l’itération d’extension ne s’exécute.1. Liste blanche statique de mints
Un tableau constantMINT_WHITELIST de chaînes base58 est codé en dur dans chaque programme. Si l’adresse du mint correspond, la fonction retourne true immédiatement et aucune vérification d’extension n’est effectuée.
Ces adresses sont intégrées au programme ; la mise à jour de la liste nécessite une mise à niveau du programme via le multisig de mise à niveau 3/4.
2. Registre par mint — CLMM uniquement
CLMM consulte en outre un PDASupportMintAssociated à la graine [b"support_mint", mint]. Si ce PDA existe pour le mint, il est admis indépendamment de son ensemble d’extensions.
Le PDA est créé par CreateSupportMintAssociated (admin/create_support_mint_associated.rs). L’instruction est contrôlée par deux signataires :
crate::admin::ID— l’autorité administrateur Raydium standard.crate::create_support_mint_associated_owner::ID— une autorité dédiée à cet effet :RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY(mainnet),rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5(devnet).
3. Détection Superstate — CLMM uniquement
CLMM a un troisième chemin spécifiquement pour les actifs tokenisés de Superstate, qui utilisent l’extensionScaledUiConfig que la version de spl-token-2022 liée au programme CLMM ne peut pas dépacker. Plutôt que de mettre à niveau la dépendance, CLMM détecte les tokens Superstate par leur forme d’autorité :
raydium-clmm/programs/amm/src/util/token.rs:485
Un mint passe cette branche si les quatre conditions sont vraies :
- Son programme propriétaire est le programme Token-2022.
- Son autorité de gel est égale à
superstate_allowlist::ID. Voirreference/program-addressespour les valeurs mainnet-beta et devnet. - Son extension
DefaultAccountStateest définie surFrozen. - Son délégué permanent est également
superstate_allowlist::ID.
Ce que les contournements ne dispensent pas
Les contournements contournent la liste blanche d’extensions, mais le programme applique toujours :- Le mint est détenu par
TokenouToken-2022. Un programme de token personnalisé est rejeté en amont. - Les vaults du pool sont créés avec les bonnes extensions ATA pour les pools Token-2022 (
ImmutableOwner, etc.). - Tous les transferts passent par
transfer_checked— les mints porteurs de frais atterrissent le bon montant dans le vault.
TransferHook plus tard ne gagne pas de vérification au moment du swap ; le hook s’exécuterait simplement à chaque transfert et pourrait bloquer les swaps. La mise sur liste blanche est donc une action de haute confiance.
Sémantique « bloqué »
Quandis_supported_mint retourne false, la création du pool revient en arrière avec ErrorCode::NotSupportMint (CPMM) / ErrorCode::NotSupportMint (CLMM). Voir reference/error-codes pour les codes numériques.
Les pools existants ne peuvent pas échouer rétroactivement cette vérification — le contrôle ne s’exécute qu’à la création. Les extensions de mint sont immuables pour les catégories que Raydium rejette (le hook de transfert, non-transférable, le transfert confidentiel ne peut pas être ajouté après création), donc la vérification statique est suffisante.
Pourquoi chaque extension exclue est exclue
- TransferHook — invoque un programme personnalisé à chaque transfert, avec consommation CU arbitraire, conditions d’échec arbitraires, et la capacité de réentrer le programme appelant. Aucun bac à sable sûr n’existe. Certains DEX maintiennent des listes blanche de hooks ; Raydium ne le fait pas.
- NonTransferable —
Transferéchoue toujours. Un pool ne peut pas prendre la garde. - ConfidentialTransfer — les montants de transfert sont chiffrés ; la courbe ne peut pas évaluer le swap.
- PermanentDelegate — un détenteur du délégué peut balayer n’importe quel compte de token, y compris le vault du pool. Autorisé uniquement via la liste blanche statique pour les émetteurs de confiance (par exemple, les stablecoins réglementés).
- MintCloseAuthority — le mint peut être fermé ; les pools existants deviennent inutilisables. Désallowé par défaut.
- DefaultAccountState (Frozen) — les ATA du pool atterriraient dans l’état
Frozenet nécessiteraient un dégel par compte. Autorisé uniquement via la détection Superstate, qui suppose que l’émetteur dégèle les comptes institutionnels à l’inscription. - Pointeurs Group/Member — pas activement nuisibles, mais non examinés. Désallowés par défaut pour garder la surface étroite.
Comptabilité des frais de transfert
Pour les mints portantTransferFeeConfig, chaque swap, dépôt et retrait déplace moins que le montant nominal. Le SDK expose les deux moitiés du calcul :
amountIn + token2022FeeIncomme « vous envoyez »amountOut - token2022FeeOutcomme « vous recevez »feeAmountcomme les frais du pool (LP + protocole), qui sont séparés des frais de transfert Token-2022
amountIn → amountOut sous-estime les coûts.
Plafond maximumFee
Les frais de transfert Token-2022 sont plafonnés par transfert. Pour un mint à 1 % avec un plafond de 10 000 tokens, un transfert de 100 000 000 tokens paie seulement 10 000 en frais. Le computeSwapAmount du SDK applique le plafond ; les appelants de programme directs doivent le répliquer.
Transition d’époque
Une autorité de mint peut planifier un changement de taux de frais qui s’active à la prochaine époque. Pendant la fenêtre de transition, deux configs (older, newer) vivent sur le mint à la fois et TransferChecked sélectionne par époque actuelle. CPMM SwapV2 et CLMM SwapV2 passent tous deux le compte mint complet dans accounts, donc le programme lit la bonne config sans recherche supplémentaire.
Si vous cotez plus d’une époque à l’avance via l’API Trade ou le SDK, les frais exécutés peuvent différer des frais cotés — limités par les maximum_fee_basis_points de la config plus ancienne.
Intérêts porteurs et ScaledUiAmount
Le pool détient le montant principal ; le « montant UI » est le principal multiplié par un facteur d’échelle dépendant du temps ou défini par l’administrateur. Les mathématiques du swap opèrent sur le principal :pool.token0Vault.amount comme principal.
Définition « pool Token-2022 »
Un pool est un pool Token-2022 si l’un ou l’autre mint aprogramId == TokenzQdB.... L’API expose ceci :
programId pour dispatcher, et hasTransferFee pour afficher un avertissement UI.
Assistants SDK
Erreurs d’intégration courantes
- Pré-vérifier uniquement l’ID du programme. Un mint peut être Token-2022 et non supporté. Parcourez la liste d’extensions par rapport à la liste blanche (et la liste blanche statique) avant d’autoriser la création du pool.
- Faire confiance à la cotation du SDK quand le mint n’est pas accepté du tout. L’API de cotation ne refuse pas de coter — c’est la création du pool qui revient en arrière. Confirmez la sémantique
is_supported_minthors chaîne avant d’exposer la création du pool dans votre UI. - Coter sans la réduction des frais de transfert. Un mint avec frais de transfert de 1 % des deux côtés d’un pool CPMM à 0,25 % a un frais effectif d’environ 2,25 %, pas 0,25 %. Utilisez la cotation du SDK ou la cotation de l’API Trade — ne calculez jamais les frais manuellement à partir du seul niveau de frais du pool.
- Appeler l’instruction
Swaphéritée sur un pool Token-2022.Swapest antérieur à Token-2022. UtilisezSwapV2chaque fois que l’un ou l’autre mint est Token-2022. - Lister automatiquement les nouveaux mints Token-2022. Les portefeuilles et agrégateurs doivent vérifier
TransferHooketNonTransferableavant de présenter un mint aux utilisateurs ; les deux sont hostiles à Raydium.
Travaux futurs
Éléments de la feuille de route de l’écosystème Solana et du protocole qui changeraient cette matrice :- Programmes de hook de transfert sur liste blanche au niveau Solana (convention d’écosystème en évolution).
- AMM compatibles avec le transfert confidentiel (stade de recherche).
- Registre par mint CPMM plus large (parité avec CLMM).
- Mise à niveau de dépendance pour que le décodage
ScaledUiConfigde CLMM fonctionne sans l’heuristique Superstate.
Pointeurs
algorithms/token-2022-transfer-fees— mathématiques des frais dans les swaps.products/cpmm/instructions—SwapV2,Initialize.products/clmm/instructions—SwapV2,CreatePool,CreateSupportMintAssociated.reference/error-codes— codes numériquesNotSupportMintpar programme.
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— instruction de registre par mint.raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs— création de mint de base Token-2022 de LaunchLab.

