Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Raydium не принимает произвольные монеты Token-2022. CPMM и CLMM работают в строгом режиме allow-list: по умолчанию проходит только небольшой набор расширений; всё остальное отклоняется при создании пула. Несколько доверенных монет допускаются по жёстко закодированному адресу; CLMM дополнительно поддерживает управляемый администратором реестр для каждой монеты и обнаружение токенов Superstate во время выполнения. Эта страница — единственный справочник по тому, что применяется и где, с ссылками на файлы и строки исходного кода программы.
Поддержка на уровне программы
Проверки allow-list находятся в:
- CPMM:
is_supported_mintвraydium-cp-swap/programs/cp-swap/src/utils/token.rs:178, вызывается изInitialize. - CLMM:
is_supported_mintвraydium-clmm/programs/amm/src/util/token.rs:280, вызывается изCreatePool. - LaunchLab:
initialize_with_token_2022вraydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs(исходный код не является общедоступным).
Замораживание NFT позиций CLMM для ограниченных издателей
Счета NFT позиций остаются разморожены по умолчанию. CLMM замораживает позицию только когда позиция использует V2 open path и текущийfreeze_authority хотя бы одной монеты хранилища совпадает с жёстко закодированным списком ограниченных издателей. Начальный список содержит тот же authority, используемый путём обнаружения Superstate ниже. Установка пула PDA как freeze authority монеты NFT позиции сама по себе не является замораживанием. Это правило хранения позиции, а не ещё один allow-list при создании пула:
- Пул может уже существовать и оставаться доступным для свопов.
- Монета NFT позиции использует пул PDA CLMM как свой собственный freeze authority; базовый издатель не контролирует NFT позиции.
OpenPositionV2охватывает классические SPL NFT позиций над активами пула Token-2022.OpenPositionWithToken22Nftохватывает NFT позиций Token-2022.OpenPositionV1 не проверяет монеты хранилища и не может служить активам Token-2022 с ограничениями, на которые нацелен поставляемый список.- Существующие позиции не изменяются.
ClosePosition размораживает и сжигает атомарно, когда клиент передаёт пул как первый оставшийся счёт. См. products/clmm/ticks-and-positions.
Allow-list расширений CPMM и CLMM
После того как статический whitelist срабатывает (описано ниже), программа проходит по расширениям монеты и отклоняет монету, если она содержит любое расширение, отличное от этих пяти:
Всё остальное —
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, которая не соответствует allow-list, всё ещё может быть допущена через один из трёх явных путей обхода. Они пробуются по порядку, прежде чем запускается итерация расширений.1. Статический whitelist монет
Константный массивMINT_WHITELIST строк base58 жёстко закодирован в каждой программе. Если адрес монеты совпадает, функция немедленно возвращает true и проверка расширения не выполняется.
Эти адреса запечены в программу; обновление списка требует обновления программы через мультиподпись 3/4.
2. Реестр для каждой монеты — только CLMM
CLMM дополнительно консультирует PDASupportMintAssociated с seed [b"support_mint", mint]. Если этот PDA существует для монеты, она допускается независимо от её набора расширений.
PDA создаётся инструкцией CreateSupportMintAssociated (admin/create_support_mint_associated.rs). Инструкция ограничена двумя подписантами:
crate::admin::ID— стандартный authority администратора Raydium.crate::create_support_mint_associated_owner::ID— выделенный authority для этой цели:RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY(mainnet),rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5(devnet).
3. Обнаружение Superstate — только CLMM
CLMM имеет третий путь специально для токенизированных активов Superstate, которые используют расширениеScaledUiConfig, которое версия spl-token-2022, связанная с программой CLMM, не может распаковать. Вместо обновления зависимости CLMM обнаруживает токены Superstate по форме их authority:
raydium-clmm/programs/amm/src/util/token.rs:485
Монета проходит эту ветвь, если все четыре условия выполнены:
- Её программа-владелец — это программа Token-2022.
- Её freeze authority равна
superstate_allowlist::ID. См.reference/program-addressesдля значений mainnet-beta и devnet. - Её расширение
DefaultAccountStateустановлено наFrozen. - Её permanent delegate также равен
superstate_allowlist::ID.
Что пути обхода не отменяют
Пути обхода пропускают allow-list расширений, но программа всё ещё применяет:- Монета принадлежит либо
Token, либоToken-2022. Пользовательская программа токена отклоняется выше по потоку. - Хранилища пула создаются с правильными расширениями ATA для пулов Token-2022 (
ImmutableOwnerи т. д.). - Все передачи проходят через
transfer_checked— монеты с комиссией попадают в хранилище в правильном количестве.
TransferHook, не получает проверку во время swap; hook просто запустится при каждой передаче и может заблокировать свопы. Поэтому внесение в whitelist — это действие высокого доверия.
Семантика “Blocked”
Когдаis_supported_mint возвращает false, создание пула откатывается с ErrorCode::NotSupportMint (CPMM) / ErrorCode::NotSupportMint (CLMM). См. reference/error-codes для числовых кодов.
Существующие пулы не могут ретроактивно не пройти эту проверку — ограничение срабатывает только при создании. Расширения монет неизменяемы для категорий, которые Raydium отклоняет (transfer hook, non-transferable, confidential transfer не могут быть добавлены после создания), поэтому статической проверки достаточно.
Почему каждое исключённое расширение исключено
- TransferHook — вызывает пользовательскую программу при каждой передаче с произвольным потреблением CU, произвольными условиями отказа и способностью повторно входить в вызывающую программу. Безопасной песочницы не существует. Некоторые DEXes ведут allow-lists для hooks; Raydium — нет.
- NonTransferable —
Transferвсегда не удаётся. Пул не может взять на себя ответственность. - ConfidentialTransfer — суммы передачи зашифрованы; кривая не может оценить своп.
- PermanentDelegate — держатель делегата может очистить любой счёт токена, включая хранилище пула. Разрешено только через статический whitelist для доверенных издателей (например, регулируемые стейблкоины).
- MintCloseAuthority — монета может быть закрыта; существующие пулы становятся непригодными. Запрещено по умолчанию.
- DefaultAccountState (Frozen) — ATA пула приземлятся в состояние
Frozenи потребуют размораживания для каждого счёта. Разрешено только через обнаружение Superstate, которое предполагает, что издатель размораживает институциональные счета при регистрации. - Group/Member pointers — не активно вредны, но не проверены. Запрещены по умолчанию, чтобы сохранить поверхность узкой.
Учёт комиссий за передачу
Для монет сTransferFeeConfig каждый своп, депозит и вывод перемещают меньше номинальной суммы. SDK отображает обе половины расчёта:
amountIn + token2022FeeInкак “вы отправляете”amountOut - token2022FeeOutкак “вы получаете”feeAmountкак комиссию пула (LP + протокол), которая отделена от комиссии за передачу Token-2022
amountIn → amountOut, занижает затраты.
Ограничение maximumFee
Комиссии за передачу Token-2022 ограничены за передачу. Для монеты с 1% и ограничением в 10 000 токенов передача 100 000 000 токенов платит только 10 000 в комиссии. computeSwapAmount SDK применяет ограничение; прямые вызывающие программу должны его воспроизвести.
Переход эпохи
Authority монеты может запланировать изменение ставки комиссии, которое активируется в следующую эпоху. Во время окна переходов две конфигурации (older, newer) живут на монете одновременно и TransferChecked выбирает по текущей эпохе. Оба SwapV2 CPMM и SwapV2 CLMM передают полный счёт монеты в accounts, поэтому программа читает правильную конфигурацию без дополнительного поиска.
Если вы цитируете более чем одну эпоху заранее через Trade API или SDK, выполненная комиссия может отличаться от цитируемой комиссии — ограничена maximum_fee_basis_points более старой конфигурации.
Interest-bearing и ScaledUiAmount
Пул держит основную сумму; “UI amount” — это основная сумма, умноженная на зависящий от времени или установленный администратором коэффициент масштабирования. Математика свопа работает с основной суммой:pool.token0Vault.amount как основную сумму.
Определение “пула Token-2022”
Пул — это пул Token-2022, если любая монета имеетprogramId == TokenzQdB.... API отображает это:
programId для диспетчеризации и hasTransferFee для отображения предупреждения UI.
Помощники SDK
Распространённые ошибки интеграции
- Предварительная проверка только ID программы. Монета может быть Token-2022 и неподдерживаемой. Пройдите по списку расширений в сравнении с allow-list (и статическим whitelist) перед разрешением создания пула.
- Доверие цитате SDK, когда монета вообще не принята. API цитирования не отказывает в цитировании — создание пула — это то, что откатывается. Подтвердите семантику
is_supported_mintвне цепи перед тем, как открыть создание пула в вашем UI. - Цитирование без скидки на комиссию за передачу. Монета с 1% комиссией за передачу с обеих сторон пула CPMM с 0,25% имеет эффективную комиссию около 2,25%, а не 0,25%. Используйте цитату SDK или цитату Trade API — никогда не вычисляйте комиссию вручную только из уровня комиссии пула.
- Вызов устаревшей инструкции
Swapна пуле Token-2022.Swapпредшествует Token-2022. ИспользуйтеSwapV2всякий раз, когда любая монета — Token-2022. - Автоматическое внесение новых монет Token-2022 в список. Кошельки и агрегаторы должны проверять
TransferHookиNonTransferableперед отображением монеты пользователям; оба враждебны Raydium.
Будущая работа
Элементы дорожной карты экосистемы Solana и протокола, которые изменили бы эту матрицу:- Программы transfer-hook в allow-list на уровне Solana (соглашение экосистемы развивается).
- AMM, совместимые с confidential-transfer (стадия исследования).
- Более широкий реестр для каждой монеты CPMM (паритет с CLMM).
- Обновление зависимости, чтобы декодирование
ScaledUiConfigCLMM работало без эвристики 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— создание базовой монеты Token-2022 LaunchLab.

