Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
На этой странице описан граф аккаунтов на запуск: PoolState (корневой аккаунт состояния одного запуска), его два хранилища, PDA полномочий и ссылки после выпуска, которые он получает при завершении запуска. Для конфигурации на уровне протокола, которая ограничивает каждый запуск, см. products/launchlab/global-config. Для наложения на уровне платформы см. products/launchlab/platform-config. Для аккаунтов вестинга (VestingSchedule на PoolState, VestingRecord на бенефициара), см. products/launchlab/vesting.

Инвентарь аккаунтов

Метод SDK raydium.launchpad.getLaunchById возвращает PoolState плюс флаг, указывающий, был ли запуск выпущен; если да, включается ID пула после миграции.

PoolState

Корневое состояние на запуск. Названия полей ниже соответствуют структуре Rust на цепи (states/pool.rs); некоторые значения упрощены для читаемости — обратитесь к исходному коду для точного расположения в памяти.
Значения PoolStatus (из Anchor IDL):
Поля, видимые интеграторам:
  • status — три значения, монотонные (Funding → Migrate → Migrated). Чтение всегда безопасно; запись ограничена.
  • real_base, real_quote — текущее состояние кривой. В сочетании с virtual_base / virtual_quote они достаточны для вычисления спотовой цены без обращения к хранилищам. См. bonding-curve.
  • total_base_sell vs real_base — соотношение «прогресс к выпуску» для UI.
  • migrate_type — новая инициализация требует 1 (CPSWAP). Сохраненный 0 остается значимым только для существующего запуска, созданного до принудительного использования CPMM.
  • amm_creator_fee_on — выбирает creator_fee_on = OnlyQuoteToken (0) или BothToken (1) на пуле CPMM после выпуска. Это не выбирает цель миграции. См. creator-fees.
  • token_program_flag — битовое поле, не логическое значение. Bit0 — это базовый минт, а bit1 — котировочный минт, каждый 0 для SPL Token и 1 для Token-2022, поэтому байт принимает четыре значения: 0 (оба устаревшие), 1 (Token-2022 базовый), 2 (Token-2022 котировочный), 3 (оба Token-2022). Прочитайте один минт с помощью (token_program_flag >> bit) & 1. Сравнение всего байта с 0 для классификации базового минта разрешает 2 в неправильную программу. Bit1 был постоянно 0 до поддержки котировочных минтов Token-2022.
  • quote_protocol_fee / platform_fee / migrate_fee — три независимых счетчика комиссий. Каждый имеет свою инструкцию требования; см. instructions.
  • vesting_schedule — присутствует на каждом PoolState, но неактивен, когда total_locked_amount == 0. См. vesting для полного жизненного цикла.

PDA полномочий

LaunchLab использует единственный PDA полномочий для всех запусков, полученный без seed на запуск:
Этот единственный PDA:
  • Полномочия на каждом хранилище base_vault и quote_vault запуска.
  • mint_authority на каждом base_mint запуска (до выпуска).
  • Подписант на CPI выпуска CPMM и на устаревший выпуск AMM v4 для существующего состояния.
  • Подписант на передачи ClaimVestedToken из базового хранилища.
  • transfer_fee_config_authority на TransferFeeConfig базового минта Token-2022, для всей фазы до выпуска — и его withdraw_withheld_authority тоже, но только когда платформа не установила PlatformConfig.transfer_fee_extension_auth.
mint_authority отзывается сразу после вызова MigrateToCpswap или устаревшего MigrateToAmm, поэтому предложение навсегда фиксируется. Два дополнительных PDA ограничивают хранилища комиссий:
Они подписывают передачу из соответствующего хранилища комиссий во время ClaimCreatorFee и ClaimPlatformFeeFromVault.

Базовый минт

Создается встроенно Initialize с:
  • mint_authority = authority (отзывается при выпуске).
  • freeze_authority = None.
  • supply = supply, полностью отчеканено в base_vault.
  • decimals, выбранные создателем при Initialize (обычно 6).
Поскольку полное предложение предварительно отчеканено, base_mint.supply постоянно на протяжении жизни запуска. Покупки по кривой перемещают токены из base_vault покупателю, но не вызывают mint_to. Initialize / InitializeV2 создают базовые минты SPL Token. Выделенная инструкция InitializeWithToken2022 позволяет базовому минту быть минтом Token-2022 (с опциональным TransferFeeConfig). Все три пути инициализации требуют выпуска CPMM. Когда InitializeWithToken2022 присоединяет TransferFeeConfig, минт создается с transfer_fee_config_authority = authority и withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth, возвращаясь к authority, когда платформа не установила это поле. Обе полномочия переназначаются ключу платформы при выпуске, сторона вывода только если PDA все еще ее держит. См. platform-config. Котировочный минт независим от базового минта и сам может быть минтом Token-2022 — InitializeV2 и InitializeWithToken2022 принимают любую программу в своем слоте котировочной программы. Устаревший Initialize не принимает: его аккаунт котировочной программы по-прежнему типизирован как SPL Token, поэтому конфиг, чей котировочный минт является Token-2022, может быть запущен только через два других. Котировочный минт никогда не создается LaunchLab; это то, что называет GlobalConfig.quote_mint. См. global-config и reference/token-2022-support.

Хранилища

Оба base_vault и quote_vault — это аккаунты токенов, принадлежащие PDA LaunchLab authority, каждый созданный на программе, которая владеет своим собственным минтом — поэтому запуск может иметь устаревшее базовое хранилище и хранилище котировочного Token-2022, или любую другую комбинацию. token_program_flag записывает, какое это. Адреса хранятся на PoolState и также могут быть получены:
(Проверьте точные префиксы seed из структуры аккаунтов Initialize исходного кода перед использованием вывода в production.)

Хранилища комиссий

Два PDA агрегируют комиссии по запускам:
  • Хранилище комиссии создателя — PDA с seeds [creator, quote_mint]. Каждый запуск, который зарабатывает одинаковые комиссии создателя на одном котировочном минте, выливается в одно хранилище. Создатель очищает его через ClaimCreatorFee.
  • Хранилище комиссии платформы — PDA с seeds [platform_config, quote_mint]. Каждый запуск, направленный через одну платформу, которая использует один котировочный минт, выливается в одно хранилище. platform_fee_wallet платформы очищает его через ClaimPlatformFeeFromVault. Существует также вариант очистки на запуск (ClaimPlatformFee), который вытягивает из quote_vault запуска напрямую без прохождения через агрегированное хранилище.
Оба создаются лениво при первом своппе, который начисляет комиссию, на программе, которая владеет котировочным минтом. Создатель или платформа, которые запускают запуски как на устаревшем, так и на котировочном минте Token-2022, заканчиваются одним хранилищем на минт, как это уже было для двух разных устаревших минтов. Паттерн агрегированного хранилища позволяет высокообъемному создателю или платформе амортизировать стоимость аренды накопления комиссий по многим запускам.

Quote vault ↔ real_quote

quote_vault.balance и PoolState.real_quote должны оставаться синхронизированными. Они могут отличаться максимум на сумму трех счетчиков ожидающих комиссий (quote_protocol_fee, platform_fee, migrate_fee), которые находятся в хранилище, но принадлежат счетчикам комиссий, а не резерву кривой. Математика кривой всегда использует real_quote, никогда не использует сырой баланс хранилища. Инвариант до выпуска:

PlatformCurveRule

Один аккаунт на пару (PlatformConfig, GlobalConfig), содержащий формы запусков, которые эта платформа разрешает на этом конфиге. PDA seeds — это [b"platform_curve_rule", platform_config, global_config].
Аккаунт создается без группы и изменяется в размере при каждом изменении группы, поэтому его длина составляет 150 + Σ(14 + 18 × constraints) и декодеры не должны предполагать фиксированный размер. Группы ORed: запуск разрешен, как только все ограничения одной группы выполняются. Нулевые группы означают отсутствие ограничений. Читайте его только когда владеющий PlatformConfig.restrict_curve_param равен 1 — при 0 программа игнорирует аккаунт, и там может находиться устаревшее правило. ID полей, операторы и сборники находятся в products/launchlab/curve-rules.

Переходы аккаунтов жизненного цикла

Куда дальше

Источники:
  • raydium-launch/programs/launchpad/src/states/pool.rsPoolState, PoolStatus, VestingSchedule, AmmCreatorFeeOn.
  • raydium-launch/programs/launchpad/src/lib.rs — константы PDA seed (AUTH_SEED, CREATOR_FEE_VAULT_AUTH_SEED, PLATFORM_FEE_VAULT_AUTH_SEED).
  • Модуль Raydium SDK v2 launchpad.