Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Этот релиз описывает предстоящее обновление программы LaunchLab. Он был проверен на локальной ветке релиза перед развёртыванием. Перед включением новых путей в production убедитесь в развёрнутой программе и опубликованном IDL.
Этот релиз позволяет использовать Token-2022 mint в качестве quote. До сих пор сторона quote была привязана к программе SPL Token, поэтому только base mint мог быть Token-2022. Теперь везде, где используется quote mint — создание GlobalConfig, инициализация пула, четыре инструкции swap, все сборы комиссий и миграция CPMM — поддерживается любая программа токенов, и инструкции swap учитывают комиссию за трансфер quote mint.

TL;DR для интеграторов

  • Quote mints могут быть Token-2022. CreateConfig принимает Token-2022 quote_token_mint, а InitializeV2 / InitializeWithToken2022 принимают любую программу токенов в слоте quote-program. Порядок аккаунтов не меняется — меняется только значение, которое вы передаёте в этот слот.
  • Устаревший Initialize остаётся только для legacy. Его аккаунт quote-program по-прежнему типизирован под SPL Token, поэтому конфиг с Token-2022 quote mint можно запустить только через InitializeV2 или InitializeWithToken2022.
  • Границы slippage теперь соответствуют тому, что платит и получает плательщик. minimum_amount_out и maximum_amount_in теперь сравниваются с суммой за вычетом комиссии за трансфер quote mint, а не с суммой, которую переместил vault. Существующая логика расчёта цены недооценивает стоимость и переоценивает доход при использовании quote mint с комиссией.
  • Бит1 PoolState.token_program_flag становится значимым. Раньше он всегда был 0, пока quote mints были только legacy. Клиенты, которые сравнивают весь байт с 0, будут читать legacy base mint как Token-2022 всякий раз, когда quote mint является Token-2022. Это наиболее вероятный скрытый сбой в этом релизе.
  • MigrateToCpswap переименовывает два аккаунта token-program. base_token_program / quote_token_program становятся token_program / token_program_2022. Оба всегда требуются, и программа выбирает правильный для каждого mint.
  • Пары mint/program теперь валидируются. Оба swap mint получили ограничение mint::token_program, как и quote mint в ClaimPlatformFee, поэтому несовпадающая пара теперь вызывает ошибку вместо игнорирования.
  • Новая ошибка 6023 CalculateOverflow. Коды 60006022 не изменились. 6023 был освобождён в предыдущем релизе и теперь переиспользуется.
  • Fee vaults следуют за quote mint. Vault комиссий создателя и платформы, а также аккаунт токенов получателя share-fee, находятся в программе, которой принадлежит quote mint.

Какие аккаунты изменили тип

Ни один из них не меняет позицию в списке аккаунтов. Меняется только допустимое значение. Initialize (устаревший путь V1) намеренно не включён в эту таблицу. Его аккаунт quote-program остаётся типизирован под SPL Token. Несколько из них также усилили ограничения на mint, поэтому несовпадающая пара mint/program теперь вызывает ошибку вместо того, чтобы быть принятой или проигнорированной:
  • Четыре инструкции swap ограничивают как base_token_mint, так и quote_token_mint программой, переданной в соответствующий слот. Раньше ни один из них не имел этого ограничения, поэтому неправильная base программа была молча принята.
  • ClaimPlatformFee добавляет то же ограничение на quote_mint.
  • ClaimPlatformFeeFromVault исправляет своё ограничение с формы token-account на форму mint для того, что является аккаунтом mint.

Учёт комиссии за трансфер на стороне quote

Это часть, которая меняет числа, а не списки аккаунтов. На quote mint без TransferFeeConfig каждая формула ниже сворачивается к предыдущему поведению, поэтому legacy пулы и пулы Token-2022 без комиссии остаются бит-в-бит неизменными. Два следствия, которые стоит сформулировать ясно:
  • Граница, вычисленная из эквивалентного пула без комиссии, больше не приемлема. BuyExactOut с cost пула без комиссии как maximum_amount_in теперь вызывает ошибку ExceededSlippage, как и SellExactIn с proceeds пула без комиссии как minimum_amount_out. Это предусмотренное поведение — старое сравнение позволяло плательщику быть дебетованным на комиссию за трансфер поверх границы, которую они уже согласовали.
  • Пул учитывает только то, что попало в vault. После BuyExactIn на amount_in на 5% quote mint, real_quote увеличивается на amount_in × 0.95, а не на amount_in.
get_transfer_inverse_fee также отказался от специального случая для mint со 100% комиссией: вместо возврата к maximum_fee он теперь возвращает новую ошибку CalculateOverflow, когда обратная комиссия не может быть вычислена. Quote mint с 10000 basis points поэтому не пройдёт exact-out пути вместо молчаливого транзакта на лимите комиссии.

Бит1 token_program_flag

PoolState.token_program_flag — это битовое поле, и всегда было:
Поле, позиции битов и код, который записывает оба бита, все предшествуют этому релизу. Что меняется, так это то, что бит1 теперь может быть 1, потому что quote mint теперь может быть Token-2022 mint. Четыре значения: Читайте программу каждого mint с помощью (token_program_flag >> bit) & 1. Любой клиент, который рассматривает байт как булево значение для base mint — flag === 0 ? Token : Token-2022 — разрешит значение 2 как Token-2022 base mint и построит base-side token account и трансфер против неправильной программы. Нет изменений размера аккаунта или смещения поля, поэтому индексаторам не нужна миграция хранилища, только исправление декодирования.

Переименование аккаунта миграции CPMM

MigrateToCpswap раньше принимал одну программу токенов на mint, и вызывающий решал, какая какая. Теперь он принимает обе программы безусловно и выводит отображение из самих mint: Две позиции не изменились, поэтому это изменение значения, а не изменение макета — но значения почти инвертированы, и разработчик, который продолжает передавать свою старую пару, будет передавать Token-2022 там, где требуется legacy программа, как только один из mint будет Token-2022 mint. Legacy программа по-прежнему требуется безусловно независимо от любого mint, потому что LP mint CPMM и заблокированный NFT Fee Key всегда находятся на ней. Макет remaining_accounts из релиза 2026-08-17 не изменился.

Quote mints допускаются только по усмотрению администратора

В отличие от CPMM и CLMM, LaunchLab не запускает список разрешений расширений для quote mint. CreateConfig принимает аккаунт mint как есть, поэтому единственный контроль — какие mint администратор привязывает к GlobalConfig. Проверка NoSupportExtension программы применяется исключительно к Token-2022 base mint, которые создаёт сама LaunchLab, где разрешены только MetadataPointer и TransferFeeConfig. Рассматривайте привязку Token-2022 quote mint как действие высокого доверия с тем же обоснованием, что и статические списки разрешений CPMM/CLMM в reference/token-2022-support. Quote mint с TransferHook или PermanentDelegate будет допущен во время создания конфига и затем будет запущен на, или сможет очистить, каждый пул, котируемый в нём.

Временные ворота amm_creator_fee_on

InitializeV2 отказывается от временных ворот, которые отклоняли любой amm_creator_fee_on, отличный от BothToken, до времени обновления. Эквивалентные ворота по-прежнему присутствуют в InitializeWithToken2022. На практике оба пути принимают любое значение на mainnet-beta сегодня, потому что это время (1755522000, 2025-08-18 13:00 UTC) давно прошло — это очистка, а не изменение поведения для текущих вызывающих.

Влияние на ошибки и IDL

Коды 60006022 не изменились, включая 6022 InvalidPlatformAllowConfig. Предыдущий релиз отказался от старого 6023 и оставил его вакантным; этот релиз переиспользует номер. Не декодируйте 6023 с IDL из любой более ранней версии. Обновите IDL LaunchLab перед передачей Token-2022 quote программы, декодированием бита1 token_program_flag или построением переименованного списка аккаунтов MigrateToCpswap.

Влияние на SDK

Сторона quote модуля launchpad SDK была жёстко закодирована на TOKEN_PROGRAM_ID в тех же местах, что и программа. Ветка, которая сопровождает этот релиз, вместо этого разрешает владельца quote mint, передаёт его через создание token-account, ATA получателя share-fee и слот quote-program инструкции, и добавляет опциональный transferFeeConfigB к четырём методам Curve, чтобы цены отражали формулы выше. Результаты Curve получают поле transferFeeB; amountB сохраняет своё значение — что платит плательщик или получает продавец — поэтому quote mint без комиссии производит идентичные числа, как раньше. Эти изменения SDK не выпущены. Канонический pin на страницах code-demo в этом наборе документации не изменился; проверьте опубликованную версию перед использованием новых параметров.

Эталонная реализация

Новая демонстрация подписывается на программу LaunchLab через Yellowstone gRPC и логирует для каждого обновления GlobalConfig и PoolState, является ли каждый mint Token или Token-2022 mint: raydium-sdk-V2-demo/src/grpc/launchpadPoolInfo.ts Это компактный эталон для двух вещей, которые этот релиз делает необходимыми. Пулы классифицируются прямо из token_program_flag, декодируя оба бита без выборки mint вообще — это исправление для сбоя bit1, описанного выше. Конфиги не могут быть классифицированы таким образом, потому что GlobalConfig хранит только адрес своего quote mint и никакой флаг программы, поэтому демонстрация читает владельца аккаунта mint один раз и кэширует его на mint. Видение обоих путей рядом — это самый быстрый способ проверить ваш собственный декодер. Смотрите products/launchlab/code-demos для пошагового руководства.

Обновлённые страницы

  • products/launchlab/accounts — программа token quote-mint, макет бита token_program_flag и владение vault.
  • products/launchlab/instructions — аккаунты quote-program, семантика slippage swap и переименованные аккаунты миграции.
  • products/launchlab/global-configquote_mint может быть Token-2022 mint, и что его контролирует, а что нет.
  • products/launchlab/code-demos — наблюдатель gRPC config/pool.
  • reference/token-2022-support — строка LaunchLab и раздел quote-mint.
  • reference/error-codes6023 CalculateOverflow.