Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
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 до этого ограничения. Выпуск не переписывает существующее состояние пула и не удаляет устаревшую инструкцию.

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 (приблизительно).
Частые ошибки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.
Эффект
  1. Разделить quote_in на quote_in_after_fee и части комиссии.
  2. Решить кривую методом Ньютона для base_out с учётом пост-комиссионной котировки.
  3. require(base_out ≥ minimum_base_out) иначе вернуть ExceededSlippage.
  4. Переместить quote_in пользователь → хранилище. Переместить base_out хранилище → пользователь.
  5. Обновить base_sold += base_out, quote_reserve_real += quote_in_after_fee × (lp_share / total_share).
  6. Обновить счётчики комиссий (protocol_fees_quote, creator_fees_quote).
  7. state_data.num_buys += 1.
  8. Если 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 уменьшается. Комиссии по-прежнему начисляются.

MigrateToAmm / MigrateToCpswap

Выпуск запуска в торгуемый пул после того, как кривая достигла total_quote_fund_raising. Новые запуски только CPMM. MigrateToAmm сохраняется для существующих пулов, чьё сохранённое migrate_type равно 0. Кто подписывает
  • MigrateToAmmmigrate_to_amm_wallet, записанный на привязке GlobalConfig.
  • MigrateToCpswapmigrate_to_cpswap_wallet, записанный на привязке GlobalConfig.
Эти кошельки обычно удерживаются операционным краном выпуска Raydium; на практике выпуск происходит через несколько секунд после пересечения порога, независимо от того, кто инициировал финальную покупку. Аргументы MigrateToAmm принимает три (в основном параметры рынка OpenBook, которые программа передаёт в AMM v4):
MigrateToCpswap не принимает никаких. Эффект (общий для обоих)
  1. Проверить pool_state.status == Migrate (т.е. quote_reserve_target был достигнут). Иначе вернуть PoolMigrated (статус уже Migrated) или PoolFunding (всё ещё в финансировании).
  2. Проверить pool_state.migrate_type соответствует инструкции (0 для AMM, 1 для CPMM). Иначе вернуть MigrateTypeNotMatch.
  3. Вычислить резервы после выпуска:
    • base_amount_out = base_vault.amount − vesting_schedule.total_locked_amount
    • quote_amount_out = quote_vault.amount − quote_protocol_fee − migrate_fee − platform_fee
  4. CPI в целевую программу (AMM v4 Initialize2 или CPMM InitializeWithPermission) с этими резервами для создания пула после выпуска.
  5. Для миграций CPMM, выполненных после обновления 2026-08-17, объединить platform_scale + creator_scale в одну заблокированную долю LP, принадлежащую платформе, и выпустить максимум один Fee Key NFT в platform_nft_wallet. Сжечь остаток burn_scale. До обновления creator_scale был заблокирован отдельно и его Fee Key перешёл создателю токена. Завершённые исторические миграции не изменяются. Для устаревшего выпуска AMM v4 распределение LP следует существующему потоку этой инструкции.
  6. Отозвать base_mint.mint_authority (установить на None).
  7. Переключить pool_state.status = Migrated, установить vesting_schedule.start_time = block_time + cliff_period.
ПостусловияBuyExactIn, BuyExactOut, SellExactIn, SellExactOut будут отклонены с этого момента с PoolMigrated. Результирующий пул AMM канонический и торгуется как любой другой пул AMM v4 / CPMM. Частые ошибкиPoolFunding, PoolMigrated, MigrateTypeNotMatch, InvalidCpSwapConfig, MathOverflow.

Оставшиеся аккаунты миграции CPMM

Клиенты, создающие MigrateToCpswap, должны использовать эти фиксированные индексы remaining_accounts: Инструкция требует как минимум десять оставшихся аккаунтов на обновленном пути. Аккаунты поддержки монеты — это входы CPI только для чтения. Получите оба адреса даже когда монета не имеет инициализированной записи поддержки. Старые построители, которые всё ещё добавляют аккаунты блокировки создателя или опускают индексы 8–9, должны быть обновлены.

Список разрешений GlobalConfig платформы

PlatformConfig.restrict_global_config управляет проверкой:
  • 0: платформа принимает любой иначе допустимый GlobalConfig; аккаунт разрешения не требуется.
  • 1: Initialize, InitializeV2 и InitializeWithToken2022 должны включать соответствующий PlatformAllowConfig где-либо в remaining_accounts.
Администратор платформы создаёт или закрывает PDA с помощью CreatePlatformAllowConfig и ClosePlatformAllowConfig. Его семена — [b"platform_allow_config", platform_config, global_config]. Бывшие управляемые администратором инструкции PlatformGlobalAccess и PDA сняты с производства.

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. Возвращает ошибку, если хранилище пусто.

Инструкции вестинга и конфигурации платформы

Они документированы на отдельных страницах, потому что каждая имеет свою модель состояния:

Матрица изменения состояния

Куда дальше

Источники: