Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
LaunchLab предоставляет компактный набор инструкций: шесть пользовательских вызовов плюс несколько примитивов администратора. SDK оборачивает все из них; эта страница документирует сырую поверхность для агрегаторов, инструментов мониторинга и программ, которым нужен CPI.
Инвентарь инструкций
Разделение “ExactIn/ExactOut” отражает
SwapBaseInput / SwapBaseOutput CPMM — в цепи это отдельные дискриминаторы инструкций с немного отличающимся округлением.
Выбор пути выпуска. Каждый новый вызов Initialize, InitializeV2 и InitializeWithToken2022 должен установить migrate_type = 1 (CPSWAP). Любая попытка инициализировать новый пул, привязанный к AMM v4, возвращает MigrateTypeNotMatch. amm_creator_fee_on только выбирает, применяется ли результирующая комиссия создателя CPMM к токену котировки или обоим токенам; это не выбирает целевую программу.
MigrateToAmm остается вызываемым для существующего PoolState, который был инициализирован с migrate_type = 0 до этого ограничения. Выпуск не переписывает существующее состояние пула и не удаляет устаревшую инструкцию.
Программа токена на стороне котировки. Минт котировки может принадлежать либо программе SPL Token, либо Token-2022. Каждая инструкция, которая его касается — CreateConfig, InitializeV2, InitializeWithToken2022, все четыре торговые инструкции, CollectFee, CollectMigrateFee, ClaimCreatorFee, ClaimPlatformFee и ClaimPlatformFeeFromVault — принимает владеющую программу в слот своего аккаунта quote-program. Позиции аккаунтов не изменились; изменилось только принимаемое значение. Передайте программу, которая фактически владеет GlobalConfig.quote_mint, которую вы можете прочитать из бита1 PoolState.token_program_flag для существующего запуска (см. accounts) или из владельца аккаунта минта в противном случае.
Устаревший Initialize — исключение: его аккаунт quote-program по-прежнему типизирован как SPL Token, поэтому конфигурация, чей минт котировки — Token-2022, должна быть запущена через InitializeV2 или InitializeWithToken2022.
MigrateToCpswap — другое исключение, в противоположном направлении — он принимает обе программы безусловно, а не одну на минт. См. аккаунты миграции ниже.
Initialize
Создание нового запуска.
Аргументы
Предусловия
quote_mint ∈ launch_config.allowed_quote_mints.base_supply_graduation ≤ base_supply_max.- Параметры комиссии проходят проверки
launch_config.max_*_fee_rate. open_time ≥ now − slop(SDK требует≥ now; программа допускает небольшое задатирование).curve_typeраспознан.
base_mintимеетsupply = base_supply_max, все вbase_vault.base_mint.mint_authority = launch_authority,freeze_authority = None.LaunchStateинициализирован сstatus = Active,base_sold = 0,quote_reserve_real = 0.quote_reserve_targetвычислен из параметров кривой +base_supply_graduation+buy_numerator(приблизительно).- Для
InitializeWithToken2022с прикрепленнымTransferFeeConfig:transfer_fee_config_authority = launch_authority, иwithdraw_withheld_authority = PlatformConfig.transfer_fee_extension_authкогда это поле установлено, иначеlaunch_authority. Сторона вывода записывается при создании минта именно для того, чтобы платформа могла собрать удержанные комиссии перед выпуском. См.platform-config.
InvalidQuoteMint, FeeRateTooHigh, InvalidCurveParams, MathOverflow.
Buy (канонический вариант: BuyExactIn)
Пользователь предоставляет фиксированный quote_in; кривая вычисляет base_out.
Аргументы
Предусловия
launch_state.status == Active.now ≥ open_time.user_quote_ata.balance ≥ quote_in.quote_in > 0.
- Разделить
quote_inнаquote_in_after_feeи части комиссии. - Решить кривую методом Ньютона для
base_outс учетом пост-комиссионной котировки. require(base_out ≥ minimum_base_out)иначе вернутьExceededSlippage.- Переместить
quote_inпользователь → хранилище. Переместитьbase_outхранилище → пользователь. - Обновить
base_sold += base_out,quote_reserve_real += quote_in_after_fee × (lp_share / total_share). - Обновить счетчики комиссий (
protocol_fees_quote,creator_fees_quote). state_data.num_buys += 1.- Если
quote_reserve_real ≥ quote_reserve_targetпосле обновления, SDK обычно цепляет инструкциюGraduateв той же транзакции. Программа не выполняет автоматический выпуск внутриBuy— требуется последующийGraduate.
BuyExactOut
Пользователь указывает точный base_out; программа вычисляет quote_in.
Аргументы
BuyExactIn. Использует замкнутую форму квадратичного интеграла (или обратный CPMM для curve_type 1) вместо итерации Ньютона.
Sell / SellExactIn / SellExactOut
Зеркало Buy. Пользователь возвращает base_in кривой и получает quote_out. Комиссия вычитается из quote_out, поэтому пользователь получает меньше, чем сырые интегрированные доходы.
Предусловия —
user_base_ata.balance ≥ base_in.- Продажа не может снизить
base_soldниже 0 (избыточно с учетом того, что учет согласован). - Запуск —
Active.
Buy. base_sold уменьшается, quote_reserve_real уменьшается. Комиссии по-прежнему начисляются.
Комиссии за передачу на стороне котировки
Когда минт котировки имеетTransferFeeConfig, сумма, которую перемещает хранилище, и сумма, на которую дебетуется или кредитуется плательщик, отличаются, и граница проскальзывания проверяется со стороны плательщика. На минте котировки без расширения каждый случай ниже идентичен простому устаревшему минту.
Два следствия для котирования:
- Граница, вычисленная так, как если бы минт был без комиссии, отклоняется. Передача стоимости без комиссии как
maximum_amount_inили доходов без комиссии какminimum_amount_outвозвращаетExceededSlippage. real_quoteпродвигается только на то, что достигло хранилища.BuyExactInизamount_inна минте котировки с 5% комиссией перемещаетreal_quoteнаamount_in × 0.95.
10000 базовых пункта) не может быть инвертирован и возвращает CalculateOverflow на путях exact-out.
Оба минта на стороне торговли также ограничены программой, переданной в их соответствующий слот, поэтому несоответствие base_token_program теперь не срабатывает, а не игнорируется. См. algorithms/token-2022-transfer-fees для базовой математики комиссий.
MigrateToAmm / MigrateToCpswap
Выпуск запуска в торгуемый пул после того, как кривая достигла total_quote_fund_raising. Новые запуски только CPMM. MigrateToAmm сохраняется для существующих пулов, чье сохраненное migrate_type — 0.
Кто подписывает
MigrateToAmm—migrate_to_amm_walletзаписанный на привязкеGlobalConfig.MigrateToCpswap—migrate_to_cpswap_walletзаписанный на привязкеGlobalConfig.
MigrateToAmm принимает три (в основном параметры рынка OpenBook, которые программа передает AMM v4):
MigrateToCpswap не принимает никаких.
Эффект (общий для обоих)
- Проверить
pool_state.status == Migrate(т.е.quote_reserve_targetбыл достигнут). Иначе вернутьPoolMigrated(статус уже былMigrated) илиPoolFunding(все еще в финансировании). - Проверить
pool_state.migrate_typeсоответствует инструкции (0для AMM,1для CPMM). Иначе вернутьMigrateTypeNotMatch. - Вычислить пост-выпускные резервы:
base_amount_out = base_vault.amount − vesting_schedule.total_locked_amountquote_amount_out = quote_vault.amount − quote_protocol_fee − migrate_fee − platform_fee
- CPI в целевую программу (
AMM v4 Initialize2илиCPMM InitializeWithPermission) с этими резервами для создания пост-выпускного пула. - Для миграций CPMM, выполненных после обновления 2026-08-17, объединить
platform_scale + creator_scaleв одну заблокированную долю LP, принадлежащую платформе, и выпустить максимум один Fee Key NFT вplatform_nft_wallet. Сжечь остатокburn_scale. До обновленияcreator_scaleбыл заблокирован отдельно и его Fee Key перешел создателю токена. Завершенные исторические миграции не изменяются. Для устаревшего выпуска AMM v4 расположение LP следует существующему потоку этой инструкции. - Отозвать
base_mint.mint_authority(установить наNone). - Переключить
pool_state.status = Migrated, установитьvesting_schedule.start_time = block_time + cliff_period.
TransferFeeConfig и PlatformConfig.transfer_fee_extension_auth не по умолчанию, миграция также переназначает полномочия этого расширения ключу платформы:
transfer_fee_config_authorityвсегда переназначается. PDA запускаauthorityдержит его на протяжении всей пред-выпускной фазы, поэтому всегда есть что переместить.WithheldWithdrawпереназначается только когда PDAauthorityвсе еще его держит. Запуски, созданные с 2026-08-27 и позже, уже несутtransfer_fee_extension_authна этом полномочии от создания минта, поэтому шаг пропускается. Охрана — это то, что предотвращает возврат миграции на этих минтах — PDA не может отказаться от полномочия, которое оно больше не держит.
transfer_fee_extension_auth — Pubkey::default() во время миграции, ни одно полномочие не перемещается и оба остаются с PDA authority навсегда. См. platform-config.
Постусловия — BuyExactIn, BuyExactOut, SellExactIn, SellExactOut будут отклонять с этого момента с PoolMigrated. Результирующий пул AMM канонический и торгуется как любой другой пул AMM v4 / CPMM.
Распространенные ошибки — PoolFunding, PoolMigrated, MigrateTypeNotMatch, InvalidCpSwapConfig, MathOverflow.
Оставшиеся аккаунты миграции CPMM
Клиенты, создающиеMigrateToCpswap, должны использовать эти фиксированные индексы remaining_accounts:
Инструкция требует как минимум десять оставшихся аккаунтов на обновленном пути. Аккаунты поддержки-минта — это входы CPI только для чтения. Получите оба адреса даже когда минт не имеет инициализированной записи поддержки. Старые построители, которые все еще добавляют аккаунты блокировки создателя или опускают индексы 8–9, должны быть обновлены.
Программы токенов миграции CPMM
MigrateToCpswap принимает обе программы токенов безусловно и сам определяет, какая программа владеет каждым минтом. Его два аккаунта программы токенов были переименованы соответственно:
Они заменяют бывший
base_token_program (какая бы программа ни владела базовым минтом) и quote_token_program (всегда устаревший). Позиции не изменились, поэтому это изменение значения, а не изменение макета — но два значения близки к инвертированным, и построитель, который продолжает передавать свою старую пару, будет поставлять Token-2022 там, где требуется устаревшая программа, как только любой минт будет минтом Token-2022.
Устаревшая программа требуется даже когда ни один минт её не использует, потому что минт LP CPMM и заблокированный Fee Key NFT ликвидности всегда живут на нём.
Список разрешений GlobalConfig платформы
PlatformConfig.restrict_global_config контролирует проверку:
0: платформа принимает любой иначе-действительныйGlobalConfig; аккаунт разрешения не требуется.1:Initialize,InitializeV2иInitializeWithToken2022должны включать соответствующийPlatformAllowConfigгде-нибудь вremaining_accounts.
CreatePlatformAllowConfig и ClosePlatformAllowConfig. Его семена — [b"platform_allow_config", platform_config, global_config]. Бывшие управляемые администратором инструкции PlatformGlobalAccess и PDA сняты с производства.
Правила параметров запуска платформы
Четыре инструкции управляют одним аккаунтомPlatformCurveRule. Все четыре подписаны PlatformConfig.curve_rule_manager или администратором платформы — программа принимает администратора путем повторного получения PDA PlatformConfig от подписывающего, поэтому отдельный аккаунт это не доказывает. Подписывающий, который ни то ни другое, возвращает InvalidCurveRuleAuthority.
platform_curve_rule — это PDA в [b"platform_curve_rule", platform_config, global_config].
Createвыделяет аккаунт, не содержащий группу. Это состояние ничего не ограничивает.Updateвставляет или обновляет группу с этимgroup_id, полностью заменяя её, если она существует. Он изменяет размер аккаунта, чтобы он подошел, поэтому подписывающий пополняет ренту, на которую он растет, и получает обратно ренту, на которую он сжимается. Новая группа сверх десятой возвращаетCurveRuleGroupsExceeded; более 25 ограничений, неизвестное поле или оператор, или одна и та же пара(field, op)дважды в одной группе возвращаетInvalidCurveRuleConstraint; четыре поля, полученные изTotalSellA, на конфигурации без постоянного произведения возвращаютCurveRuleFieldNotSupportedByCurve.Removeудаляет одну группу по id, сжимая аккаунт и возвращая разницу. Неизвестный id возвращаетCurveRuleGroupNotExist.Closeвозвращает всю ренту подписывающему. Конфигурация затем снова не ограничена, даже еслиrestrict_curve_paramостается1.
UpdatePlatformConfig::RestrictCurveParam(0 | 1), которую может вызвать только администратор платформы.
На пути запуска. Пока restrict_curve_param — 1, InitializeV2 и InitializeWithToken2022 требуют PDA правила в remaining_accounts — включая когда он не существует, чтобы его опущение не могло пропустить проверку. Отсутствующий аккаунт — NotEnoughRemainingAccounts; запуск, который не удовлетворяет ни одной группе — CurveParamNotMatchPlatformRule. Проверка выполняется перед собственными ограничениями GlobalConfig и может только их сузить. Модель и сборники: products/launchlab/curve-rules. Обе ошибки избежны на стороне клиента — SDK отражает эту проверку как чистую функцию, см. Проверьте перед отправкой.
CollectFee
Административный сбор накопленных комиссий протокола за торговлю на одном запуске.
Аргументы — нет.
Аккаунты
Эффект — передать
pool_state.quote_protocol_fee из quote_vault в recipient_token_account, затем обнулить счетчик. Может быть вызвана в любое время после первой покупки.
CollectMigrateFee
Административный сбор комиссии миграции, накопленной при выпуске. Та же форма аккаунта, что и CollectFee, с migrate_fee_owner как подписывающий (вместо protocol_fee_owner) и pool_state.migrate_fee как осушаемый счетчик.
ClaimCreatorFee
Сбор по создателю накопленных комиссий создателя по каждому запуску, который создатель владеет, который использует один и тот же минт котировки. Осушает хранилище комиссий по создателю, а не по пулу.
Аргументы — нет.
Аккаунты
Эффект — передать весь баланс
creator_fee_vault в recipient_token_account. Возвращает с проверкой требования больше нуля, если хранилище пусто.
ClaimPlatformFee
Сбор по платформе, который осушает хранилище котировок запуска напрямую. Используйте это, когда платформа хочет получить свою долю для одного конкретного запуска без прохождения через агрегированное хранилище платформы.
Аргументы — нет.
Аккаунты
Эффект — передать
pool_state.platform_fee из quote_vault в recipient_token_account, обнулить счетчик.
ClaimPlatformFeeFromVault
Агрегированный сбор по платформе. Осушает хранилище комиссий платформы по минту котировки, которое накапливает комиссии из каждого запуска, маршрутизированного через платформу.
Аргументы — нет.
Аккаунты
Эффект — передать полный баланс
platform_fee_vault в recipient_token_account. Возвращает, если хранилище пусто.
Инструкции вестинга и конфигурации платформы
Они документированы на отдельных страницах, потому что каждая имеет свою собственную модель состояния:CreateVestingAccount,CreatePlatformVestingAccount,ClaimVestedTokenCreatePlatformConfig,UpdatePlatformConfig,CreatePlatformAllowConfig,ClosePlatformAllowConfigCreatePlatformCurveRule,UpdatePlatformCurveRule,RemovePlatformCurveRule,ClosePlatformCurveRuleCreateConfig,UpdateConfig
Матрица изменения состояния
Куда дальше
products/launchlab/code-demos— примеры TypeScript для каждой инструкции.products/launchlab/accounts— полная форма состояния.reference/error-codes— перечисление ошибок LaunchLab.
- Модуль Raydium SDK v2
LaunchLab - Исходный код программы Raydium LaunchLab

