Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
GlobalConfig — это конфигурационный счет на уровне протокола. Их может быть много — идентифицируются по (curve_type, index) — и каждый запуск выбирает ровно один при инициализации. Значения выбранного GlobalConfig становятся жёсткими ограничениями для параметров этого запуска. Для настройки на уровне платформы (ставка комиссии за платформу, допустимые формы кривых, разделение NFT при выпуске), см. products/launchlab/platform-config.

Что это такое

GlobalConfig — это PDA, уникальный для каждой пары (curve_type, index), который устанавливает правила на уровне протокола, которым должен подчиняться каждый запуск:
  • Тип допустимой кривой связывания (curve_type).
  • Ставка комиссии за торговлю, которую взимает кривая при каждой покупке и продаже.
  • Комиссия за миграцию, взимаемая при выпуске.
  • Минимальные значения для предложения, коэффициента блокировки, коэффициента продажи и коэффициента миграции.
  • Котировочный минт (обычно обёрнутый SOL или USDC) — актив, которым пользователи покупают.
  • Четыре кошелька на уровне протокола: владелец комиссии протокола, владелец комиссии миграции и два кошелька управления миграцией, зарезервированные для выпуска CPMM и устаревшего AMM v4.
Счета GlobalConfig могут создаваться и обновляться либо администратором программы LaunchLab, либо делегированным органом создания конфигураций; любой другой подписант получает InvalidOwner (6001). Канонические органы см. в reference/program-addresses.

Структура

Вывод PDA:
(Перед подписанием проверьте точный порядок seed в счёте в цепи — инструкция create_config программы является источником истины.)

Семантика полей

curve_type и index

Вместе они уникально идентифицируют GlobalConfig. Существует один GlobalConfig для каждой пары (curve_type, index):
  • curve_type = 0 — кривая виртуального резерва с постоянным произведением. По умолчанию и наиболее часто используется.
  • curve_type = 1 — кривая с фиксированной ценой.
  • curve_type = 2 — кривая с линейной ценой.
index — это u16, который позволяет администратору опубликовать несколько конфигураций для каждого типа кривой (например, одну с более жёсткой комиссией, одну с более высоким минимальным сбором котировок). При инициализации запуск предоставляет пару (curve_type, index), и программа загружает соответствующий GlobalConfig.

Комиссии

  • trade_fee_rate — выражена в 1/1_000_000 от объёма торговли. Применяется к каждой покупке и продаже на кривой. protocol_fee_owner требует свою долю через CollectFee.
  • migrate_fee — фиксированная комиссия в лампортах (или единицах котировки, в зависимости от конфигурации), взимаемая один раз при выпуске. Требуется migrate_fee_owner через CollectMigrateFee.
  • max_share_fee_rate — инициализируется как 10_000 (100 bps). Ограничивает аргумент share_fee_rate, который принимают BuyExactIn, BuyExactOut, SellExactIn и SellExactOut — реферальную комиссию, выплачиваемую напрямую получателю доли во время сделки. Это не ограничивает PlatformConfig.fee_rate; у той ставки свои собственные ограничения, описанные в platform-config. CreateConfig при инициализации обеспечивает trade_fee_rate + max_share_fee_rate < RATE_DENOMINATOR_VALUE. На пути обновления сумму перепроверяет только param = 6 (max_share_fee_rate); param = 0 (trade_fee_rate) проверяет лишь trade_fee_rate < RATE_DENOMINATOR_VALUE, поэтому повышение одной торговой комиссии может вывести пару за совместную границу. Устанавливайте их в том порядке, который сохраняет инвариант.

Минимумы предложения и коэффициентов

Эти минимумы ограничивают параметры формы кривой, которые запуск может выбрать при инициализации. Если CurveParams создателя нарушает любой из них, Initialize откатывается с InvalidInput.
  • min_base_supply — минимальное supply (без десятичных знаков), которое может объявить кривая. По умолчанию 10_000_000.
  • max_lock_rate — выражена в 1/1_000_000; по умолчанию 300_000 (30%). Ограничивает вестинг через total_locked_amount <= supply * max_lock_rate / 1_000_000.
  • min_base_sell_rate — выражена в 1/1_000_000; по умолчанию 200_000 (20%). Ограничивает base_supply_graduation / supply снизу.
  • min_base_migrate_rate — выражена в 1/1_000_000; по умолчанию 200_000 (20%). Ограничивает количество токенов, оставшихся для заполнения пула после выпуска.
  • min_quote_fund_raising — минимальный quote_reserve_target, который может объявить запуск (с десятичными знаками). По умолчанию 30_000_000_000 единиц котировочного минта.

Котировочный минт и кошельки протокола

  • quote_mint — актив, которым пользователи покупают. Большинство запусков используют обёрнутый SOL (So111…112) или USDC (EPjF…Dt1v). Один GlobalConfig привязан к одному котировочному минту; запуски, которым нужна другая котировка, нацелены на другую (curve_type, index). Минт может принадлежать либо программе SPL Token, либо Token-2022 — см. ниже.
  • protocol_fee_owner — публичный ключ, который подписывает CollectFee и требует накопленные комиссии протокола для каждого запуска, привязанного к этой конфигурации. Хранится в цепи; администратор может ротировать его через UpdateConfig.
  • migrate_fee_owner — публичный ключ, который подписывает CollectMigrateFee.

Котировочные минты Token-2022

CreateConfig принимает котировочный минт Token-2022, и пулы, привязанные к такой конфигурации, несут его от начала до конца: хранилище котировок, оба хранилища комиссий и счёт получателя комиссии доли создаются на Token-2022, и инструкции swap учитывают TransferFeeConfig на стороне котировки. Бит PoolState.token_program_flag bit1 записывает выбор для каждого запуска. Два ограничения стоит знать, прежде чем полагаться на одно:
  • Устаревший Initialize не может запуститься против него. Только InitializeV2 и InitializeWithToken2022 принимают программу котировки Token-2022. См. instructions.
  • Не применяется список разрешений расширений. В отличие от CPMM и CLMM, LaunchLab не проверяет расширения котировочного минта — CreateConfig принимает минт как есть, поэтому единственным ограничением является усмотрение администратора относительно того, какие минты привязаны к конфигурации. Проверка NoSupportExtension программы охватывает только минты базы Token-2022, которые создаёт сам LaunchLab. Рассматривайте привязку одного как действие с высокой степенью доверия; см. reference/token-2022-support.

Кошельки миграции

Два сохранённых кошелька выпуска требуют разных подписантов:
  • migrate_to_amm_wallet — подписывает MigrateToAmm для существующего устаревшего запуска, чей сохранённый migrate_type = 0.
  • migrate_to_cpswap_wallet — подписывает MigrateToCpswap. Каждый вновь инициализированный запуск использует этот путь.
Обычно они удерживаются операционной кранком выпуска Raydium, поэтому выпуск происходит вскоре после того, как кривая достигает порога, а не ждёт, пока создатель её вызовет.

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

GlobalConfig больше не имеет requires_platform_auth. Его бывший байт — это заполнение, поэтому размер счёта не меняется. Доступ теперь контролируется PlatformConfig.restrict_global_config и счётами PlatformAllowConfig, созданными администратором этой платформы. См. platform-config.

Значения по умолчанию при инициализации

Когда вызывается CreateConfig, программа инициализирует многие поля жёсткими значениями по умолчанию:
Администратор явно устанавливает curve_type, index, migrate_fee, trade_fee_rate, quote_mint и четыре публичных ключа кошельков при создании; последующие значения можно настроить через UpdateConfig.

Как запуск выбирает GlobalConfig

При инициализации создатель передаёт:
  • (curve_type, index) для выбора того, какой PDA GlobalConfig загружать.
  • CurveParams, описывающий форму кривой (supply, total_base_sell, total_quote_fund_raising, migrate_type).
  • VestingParams, описывающий заблокированное предложение.
  • MintParams для базового минта.
Программа обеспечивает:
  • curve_type совпадает с global_config.curve_type.
  • supply >= global_config.min_base_supply.
  • total_locked_amount <= supply * max_lock_rate / 1_000_000.
  • total_base_sell >= supply * min_base_sell_rate / 1_000_000.
  • (supply − total_base_sell − total_locked_amount) >= supply * min_base_migrate_rate / 1_000_000 — т.е. достаточно токенов осталось для заполнения пула после выпуска.
  • total_quote_fund_raising >= min_quote_fund_raising.
  • migrate_type == 1 (CPSWAP).
  • Если выбранная платформа имеет restrict_global_config == 1, включается соответствующий PlatformAllowConfig.
После Initialize PoolState запуска хранит публичный ключ global_config непосредственно, поэтому привязка постоянна.

Путь обновления

UpdateConfig принимает пару (param: u8, value: u64) и допускает в качестве подписанта либо администратора программы LaunchLab, либо делегированный орган создания конфигураций — любой другой подписант получает InvalidOwner (6001). Каждое значение param выбирает, какое поле мутировать:
Четыре ротации кошельков — это обычные значения param в том же диспетчере, а не отдельная форма аргумента. Они полностью игнорируют value и читают новый ключ из первого remaining_account; отсутствие этого аккаунта вызывает панику на unwrap(). Любой param больше 11 возвращает InvalidInput (6002).
Бывший селектор UpdateConfig 12 для авторизации платформы удалён. Администраторы платформ теперь управляют своими собственными списками разрешений.

Чтение GlobalConfig с клиента

Обратите внимание, что имена полей в layout отличаются от имён в Rust в цепи: минимальный порог сбора средств декодируется как minFundRaisingB, минимальное предложение — как minSupplyA, а минимальные ставки продажи и миграции — как minSellRateA / minMigrateRateA. Для пользовательского интерфейса, перечисляющего все доступные конфигурации, запросите конечную точку API LaunchLab, которая их отражает (raydium.api.fetchLaunchConfigs()); количество аккаунтов в цепи невелико (на практике однозначное число).

Ссылки

Источники:
  • raydium-launch/programs/launchpad/src/states/config.rs — структура GlobalConfig и initialize.
  • raydium-launch/programs/launchpad/src/lib.rs — create_config, update_config.