Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Каждый торгуемый актив на Solana — включая базовый и котируемый активы любого пула Raydium — это токен, выпущенный одной из двух программ: унаследованной программой SPL Token или её преемницей Token-2022. Это отдельные программы с отдельными адресами, разными компоновками учётных записей и семантикой расширений. Raydium поддерживает оба, но не везде: CPMM, CLMM и Farm v6 принимают мальты Token-2022; AMM v4 — нет. Понимание различий критично перед интеграцией с любым пулом.

Две программы

Обе программы поддерживаются командой Solana Labs (теперь Anza) и находятся в репозитории solana-program-library.

Почему две программы?

SPL Token была заморожена для сохранения совместимости — её байткод практически неизменяем, обеспечивая надёжную базу для всей экосистемы. По мере расширения сценариев использования (стейблкоины с комиссией на передачу, институциональные мальты, требующие гибкого контроля заморозки, NFT с указателями на метаданные) команда Solana представила Token-2022 как отдельную расширяемую программу вместо обновления SPL Token. Это сохраняет существующие интеграции и позволяет каждому минту выбрать ровно те расширения, которые ему нужны. Token-2022 — строгий надмножество по функциональности, но не по адресному пространству: две программы сосуществуют, и минт по определённому адресу принадлежит ровно одной из них.

Структура учётной записи

Mint account

Определяет идентичность токена. SPL Token mint (82 байта):
Token-2022 mint: то же базовое расположение плюс ноль или более записей extension TLV (type-length-value) добавлены после базовой части.

Token account

Хранит баланс определённого минта для определённого владельца. SPL Token account (165 байт):
Token-2022 account: то же базовое расположение плюс записи extension TLV, если какие-либо расширения активны.

Расширения Token-2022

Расширения — модульные возможности, которые можно прикрепить к mintам или учётным записям. Каждое расширение — отдельная TLV-запись. Ключевые для Raydium:

Transfer fee

Минт может взимать процентную комиссию при каждой передаче. Комиссия поступает указанному центру вывода. Поддерживается Raydium CPMM и CLMM через SwapV2 — программа учитывает комиссию при расчёте обменных курсов, поэтому математика пула остаётся согласованной.

Transfer hook

Минт указывает на программу, которую runtime вызывает при каждой передаче. Программа hook может отклонить передачу или выполнить побочные эффекты (обновить состояние соответствия, залогировать и т.д.). Raydium CPMM/CLMM вызывает hook через SwapV2 — транзакция включает программу hook и любые дополнительные учётные записи, которые ей нужны.

Interest-bearing

Баланс на цепи увеличивается с процентной ставкой, установленной в конфигурации. Только отображение (балансы со временем выглядят выше) а не фактический минт; базовое предложение остаётся неизменным.

Mint close authority

Позволяет закрыть минт, когда предложение достигает нуля.

Permanent delegate

Назначенный кошелёк может переводить или сжигать токены с любой учётной записи без ограничений. Raydium блокирует создание пулов для mintов с этим расширением — это несовместимо с инвариантом, что резервы пула не могут быть захвачены.

Non-transferable

Токены не могут быть перемещены с учётной записи, на которую они выпущены. Raydium блокирует создание пулов — непродаваемый актив не может быть базовым или котируемым активом LP-пула.

Default account state

Новые token accounts для этого минта заморожены по умолчанию и должны быть разморожены авторитетом заморозки. Полезно, но редко.

Confidential transfer

Балансы и суммы передач зашифрованы. Raydium не поддерживает mints с конфиденциальной передачей (математика пула требует открытых балансов).

Metadata pointer + token metadata

Заменяет метаданные Metaplex для mintов Token-2022. Поддерживается для листинга пулов Raydium.

Group / Member pointer

Объявляет минт как принадлежащий к группе (например, коллекция NFT). Информационное; Raydium использует это для отображения. См. официальную страницу расширений Token-2022 для полного списка.

Какие продукты Raydium что поддерживают

Условия приемлемости минта для пулов Raydium — все расширения разрешены, кроме перечисленных:
  • Блокированы: non-transferable, permanent delegate, confidential transfer, default account state (в отклоняемых конфигурациях).
  • Разрешены с условиями (LP должен принять риск): transfer fee, transfer hook, активный freeze authority.
  • Полностью разрешены: interest-bearing, metadata pointer, group pointer, mint close authority.
Ответ getPoolInfoFromRpc включает флаги расширений минта — клиенты должны проверить перед LP.

Стандарты token account

Associated Token Account (ATA)

Обе программы используют соглашение Associated Token Account: PDA, полученный из [owner, programId, mint] через Associated Token Program (ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL). Почти каждая пользовательская token account на Solana — это ATA.
Программа ATA создаёт учётные записи, принадлежащие соответствующей программе токенов на основе того, какая программа владеет mintом.

Не-ATA token accounts

Кошелёк может иметь несколько token accounts для одного минта; ATA — просто соглашение. Своды пулов, например, не являются ATA — это PDA программы пула, содержащие резервы пула.

Определение, какой программе принадлежит минт

Учётная запись каждого минта имеет поле owner, указывающее либо на SPL Token, либо на Token-2022:
SDK Raydium выполняет это определение автоматически — getPoolInfoFromRpc возвращает соответствующий programId для каждого токена, чтобы клиенты могли построить правильные ATA.

Инструкции swap по программам

CPMM и CLMM Raydium имеют по две инструкции swap: SwapV2 принимает дополнительные учётные записи: учётные записи mintов с обеих сторон, программу токенов для каждой стороны (так как они могут отличаться), и — для mintов с transfer hook — программу hook и её требуемые учётные записи. Клиенты должны всегда использовать SwapV2, когда хотя бы одна сторона — Token-2022; SwapV2 также работает для пулов только с SPL, но устаревший Swap дешевле по вычислениям. SDK выбирает правильный вариант автоматически.

Миграция проекта SPL Token на Token-2022

Token-2022 не является заменой по принципу plug-and-play на уровне минта — минт по адресу X либо SPL, либо Token-2022, и это зафиксировано при создании. Чтобы «мигрировать», вы должны:
  1. Создать новый минт под Token-2022 с нужными вам расширениями.
  2. Предоставить механизм swap/wrap для держателей старого SPL минта, чтобы обменять на новый.
  3. Обновить все LP-пулы, фермы и интеграции, чтобы ссылаться на новый минт.
Это сложно. Большинство проектов, запущенных под SPL, остаются под SPL, если конкретное требование расширения не вынудит переход.

Рабочий пример: создание минта Token-2022 с комиссией на передачу

Этот минт может быть добавлен в пул CPMM Raydium; своппующие платят 0.5% комиссию на передачу поверх комиссии пула.

Соображения безопасности

Перед LP или swap через минт Token-2022:
  • Проверьте freeze_authority. Если он не null и контролируется централизованной стороной, она может заморозить вашу ATA (и, возможно, свод пула).
  • Проверьте transfer_hook. Программа hook может блокировать передачи произвольно — изучите источник hook самостоятельно.
  • Проверьте transfer_fee. Учитывайте комиссию в ожидаемом выводе swap.
  • Проверьте permanent_delegate и non_transferable. Программа Raydium отклоняет их, но проверьте при построении пользовательской интеграции.
Полный фреймворк принятия рисков см. в security/oracle-and-token-risks.

Указатели

Источники: