Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
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_sellvsreal_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 на запуск:- Полномочия на каждом хранилище
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 и также могут быть получены:
Initialize исходного кода перед использованием вывода в production.)
Хранилища комиссий
Два PDA агрегируют комиссии по запускам:- Хранилище комиссии создателя — PDA с seeds
[creator, quote_mint]. Каждый запуск, который зарабатывает одинаковые комиссии создателя на одном котировочном минте, выливается в одно хранилище. Создатель очищает его черезClaimCreatorFee. - Хранилище комиссии платформы — PDA с seeds
[platform_config, quote_mint]. Каждый запуск, направленный через одну платформу, которая использует один котировочный минт, выливается в одно хранилище.platform_fee_walletплатформы очищает его черезClaimPlatformFeeFromVault. Существует также вариант очистки на запуск (ClaimPlatformFee), который вытягивает изquote_vaultзапуска напрямую без прохождения через агрегированное хранилище.
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.
Переходы аккаунтов жизненного цикла
Куда дальше
products/launchlab/bonding-curve— математика заreal_base↔real_quote.products/launchlab/instructions— списки аккаунтов на инструкцию.products/launchlab/global-config— привязка на уровне протокола.products/launchlab/platform-config— наложение платформы.products/launchlab/vesting— механика заблокированного предложения.products/cpmm/accounts— как выглядитcpmm_pool_stateпосле выпуска.
raydium-launch/programs/launchpad/src/states/pool.rs—PoolState,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.

