Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
LaunchLab предоставляет компактный набор инструкций: шесть пользовательских вызовов плюс несколько административных примитивов. SDK обертывает их все; на этой странице документирован raw-уровень для агрегаторов, инструментов мониторинга и программ, которым нужен CPI.

Реестр инструкций

Разделение “ExactIn/ExactOut” отражает SwapBaseInput / SwapBaseOutput CPMM — в цепи это отдельные дискриминаторы инструкций с немного отличающимся округлением. Выбор пути выпуска. migrate_type записывается на PoolState во время Initialize{V2,WithToken2022} и определяет, какие из двух инструкций выпуска могут работать. Запуски Token-2022 всегда мигрируют на CPMM. Запуски SPL Token мигрируют либо на AMM v4, либо на CPMM в зависимости от amm_creator_fee_on:
  • BothTokenMigrateToAmm → пул AMM v4 (комиссия создателя может быть собрана с обеих сторон; AMM v4 не имеет встроенного поля комиссии создателя, поэтому комиссии берутся через механизм блокировки LP-NFT).
  • QuoteTokenMigrateToCpswap → пул CPMM с creator_fee_on = OnlyQuoteToken (создатель продолжает зарабатывать комиссии от пула CPMM через NFT-ключ LaunchLab Fee — см. /ru/products/launchlab/creator-fees).
Примечание о названии enum AmmCreatorFeeOn. Исходный код Rust называет этот enum AmmCreatorFeeOn с вариантами QuoteToken и BothToken. Название вводит в заблуждение: в текущей операционной практике вариант определяет не только то, с какой стороны собирается комиссия создателя в пуле CPMM после выпуска — он также выбирает целевую программу выпуска (AMM v4 или CPMM) и связывается с migrate_type на PoolState запуска. Рассматривайте поле как “целевая миграция + сторона комиссии после выпуска” в одном. Имя enum в цепи не было переработано, но рассуждение о нем как о MigrationTarget соответствует реальности более точно.

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. Newton-решить кривую для base_out по постоплатному quote.
  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) вместо итерации Newton.

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

Выпустить запуск в торгуемый AMM-пул, как только кривая достигнет total_quote_fund_raising. Две инструкции соответствуют двум целям выпуска — AMM v4 и CPMM — и только одна из них действительна для любого заданного запуска, определенная pool_state.migrate_type (установлено во время Initialize). Кто подписывает
  • MigrateToAmmmigrate_to_amm_wallet записанная на связывании GlobalConfig.
  • MigrateToCpswapmigrate_to_cpswap_wallet записанная на связывании GlobalConfig.
Эти кошельки обычно хранятся операционным crank выпуска Raydium; на практике выпуск происходит через несколько секунд после пересечения порога, независимо от того, кто инициировал финальную покупку. Аргументы MigrateToAmm принимает три (в основном параметры рынка OpenBook, которые программа пересылает на AMM v4):
MigrateToCpswap не принимает никаких. Эффект (общий для обоих)
  1. Проверить pool_state.status == Migrate (т.е., quote_reserve_target был достигнут). Иначе отвернуть с PoolMigrated (статус уже был Migrated) или PoolFunding (все еще в funding).
  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. Разделить результирующий LP в соответствии с связыванием PlatformConfig.{platform_scale, creator_scale, burn_scale} (только CPMM) — одна часть отчеканена на platform_nft_wallet, одна на creator NFT, обернутая программой LP-Lock, одна сожжена через Burn & Earn. Для выпуска AMM v4 расположение LP управляется собственными параметрами инициализации AMM v4.
  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.

CollectFee

Административный сбор накопленных комиссий протокола за торговлю на одном запуске. Аргументы — отсутствуют. Счета Эффект — переместить pool_state.quote_protocol_fee из quote_vault в recipient_token_account, затем обнулить счетчик. Может быть вызвано в любое время после первой покупки.

CollectMigrateFee

Административный сбор миграционной комиссии, накопленной при выпуске. Та же форма счета, что и CollectFee с migrate_fee_owner как подписывающий (вместо protocol_fee_owner) и pool_state.migrate_fee как дренированный счетчик.

ClaimCreatorFee

Сбор создателя накопленных комиссий создателя по всем запускам, которыми владеет создатель и использующим один и тот же quote mint. Дренирует хранилище комиссий для каждого создателя, а не для каждого пула. Аргументы — отсутствуют. Счета Эффект — переместить весь баланс creator_fee_vault в recipient_token_account. Отвернуть с проверкой require-больше-чем-ноль, если хранилище пусто.

ClaimPlatformFee

Сбор платформы, который дренирует хранилище quote запуска напрямую. Используйте, когда платформа хочет требовать свой срез для одного конкретного запуска без прохождения через агрегированное хранилище платформы. Аргументы — отсутствуют. Счета Эффект — переместить pool_state.platform_fee из quote_vault в recipient_token_account, обнулить счетчик.

ClaimPlatformFeeFromVault

Агрегированный сбор платформы. Дренирует хранилище комиссий платформы для каждого quote mint, которое накапливает комиссии с каждого запуска, маршрутизированного через платформу. Аргументы — отсутствуют. Счета Эффект — переместить полный баланс platform_fee_vault в recipient_token_account. Отвернуть, если хранилище пусто.

Инструкции Vesting и platform-config

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

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

Куда дальше

Источники: