Перейти к основному содержанию

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

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

Что это такое

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

Структура

// states/config.rs
pub const GLOBAL_CONFIG_SEED: &str = "global_config";

#[account]
pub struct GlobalConfig {
    pub epoch:                   u64,         // recent_epoch tracker
    pub curve_type:              u8,          // 0 = ConstantProduct, 1 = FixedPrice, 2 = LinearPrice
    pub index:                   u16,         // discriminator within a curve_type
    pub migrate_fee:             u64,         // SOL paid on graduation
    pub trade_fee_rate:          u64,         // 1/1_000_000 of volume
    pub max_share_fee_rate:      u64,         // 100 bps cap on platform share fee
    pub min_base_supply:         u64,         // floor on Initialize supply (no decimals)
    pub max_lock_rate:           u64,         // ceiling on vesting locked / supply
    pub min_base_sell_rate:      u64,         // floor on base_supply_graduation / supply
    pub min_base_migrate_rate:   u64,         // floor on tokens that seed the post-graduation pool
    pub min_quote_fund_raising:  u64,         // floor on quote_reserve_target (with decimals)
    pub quote_mint:              Pubkey,
    pub protocol_fee_owner:      Pubkey,      // claims protocol fees via CollectFee
    pub migrate_fee_owner:       Pubkey,      // claims migration fees via CollectMigrateFee
    pub migrate_to_amm_wallet:   Pubkey,      // can sign MigrateToAmm
    pub migrate_to_cpswap_wallet:Pubkey,      // can sign MigrateToCpswap
    pub requires_platform_auth:  u8,          // 0/1 flag
    pub padding_alignment:       [u8; 7],
    pub padding:                 [u64; 15],
}
Вывод PDA:
const [globalConfig] = PublicKey.findProgramAddressSync(
  [
    Buffer.from("global_config"),
    Buffer.from(quoteMint.toBytes()),
    Buffer.from([curveType]),
    u16ToBytes(index),
  ],
  LAUNCHLAB_PROGRAM_ID,
);
(Перед подписанием проверьте точный порядок seed’ов в счете на блокчейне — инструкция create_config программы является источником истины.)

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

curve_type и index

Вместе они однозначно идентифицируют GlobalConfig. Существует один GlobalConfig на каждую пару (curve_type, index):
  • curve_type = 0 — кривая с постоянным произведением и виртуальным резервом. По умолчанию и наиболее часто используется.
  • curve_type = 1 — кривая с фиксированной ценой.
  • curve_type = 2 — кривая с линейной ценой.
index — это u16, который позволяет администратору опубликовать несколько конфигураций на тип кривой (например, одна с более жёсткой комиссией, одна с более высоким минимальным сбором котировок). При Initialize запуск предоставляет пару (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). Ограничивает ставку комиссии за долю платформы из привязанного PlatformConfig (см. platform-config). Программа обеспечивает trade_fee_rate + max_share_fee_rate < RATE_DENOMINATOR_VALUE.

Минимумы предложения и ставок

Эти минимумы ограничивают, какие параметры формы кривой запуск может выбрать при Initialize. Если 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).
  • protocol_fee_owner — публичный ключ, который подписывает CollectFee и получает накопленные комиссии протокола на каждом запуске, привязанном к этой конфигурации. Хранится в цепи; администратор может ротировать его через UpdateConfig.
  • migrate_fee_owner — публичный ключ, который подписывает CollectMigrateFee.

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

Два пути выпуска требуют разных подписантов:
  • migrate_to_amm_wallet — должен подписать MigrateToAmm. Используется для запусков, чей migrate_type = 0 (выпуск на AMM v4 + OpenBook).
  • migrate_to_cpswap_wallet — должен подписать MigrateToCpswap. Используется для migrate_type = 1 (выпуск на CPMM). Запуски Token-2022 всегда берут этот путь.
Обычно они держатся операционным краном выпуска Raydium, поэтому выпуск происходит вскоре после того, как кривая достигнет порога, а не ждёт вызова от создателя.

requires_platform_auth

Флаг u8 (0 = любой может использовать эту конфигурацию; ненулевое значение = только платформы с действительным PDA PlatformGlobalAccess могут запускаться против неё). Когда установлен, каждый Initialize для этого GlobalConfig должен включать соответствующий счет PlatformGlobalAccess, доказывающий, что платформа была предварительно авторизирована через CreatePlatformGlobalAccess (инструкция только для администратора). См. platform-config для механики на стороне платформы.

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

Когда вызывается CreateConfig, программа инициализирует множество полей жёстко закодированными значениями по умолчанию:
self.max_share_fee_rate     = 10_000;                  // 100 bps
self.min_base_supply        = 10_000_000;              // no decimals
self.max_lock_rate          = 300_000;                 // 30%
self.min_base_migrate_rate  = 200_000;                 // 20%
self.min_base_sell_rate     = 200_000;                 // 20%
self.min_quote_fund_raising = 30_000_000_000;
self.requires_platform_auth = 0;
Администратор явно устанавливает curve_type, index, migrate_fee, trade_fee_rate, quote_mint и четыре публичных ключа кошельков при создании; последующие значения можно настроить через UpdateConfig.

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

При Initialize создатель передаёт:
  • (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.
  • Если requires_platform_auth != 0, включен действительный PDA PlatformGlobalAccess.
После Initialize PoolState запуска напрямую сохраняет публичный ключ global_config, поэтому привязка постоянна.

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

UpdateConfig доступна только администратору и принимает пару (param: u8, value: u64). Каждое значение param выбирает какое поле мутировать:
paramИзменённое поле
0migrate_fee
1trade_fee_rate
2max_share_fee_rate
3min_base_supply
4max_lock_rate
5min_base_sell_rate
6min_base_migrate_rate
7min_quote_fund_raising
Ротации кошельков (protocol_fee_owner, migrate_fee_owner, migrate_to_amm_wallet, migrate_to_cpswap_wallet) используют отдельную форму аргумента Pubkey; проверьте исходный код update_config для точной таблицы диспетчеризации перед составлением транзакции администратора. requires_platform_auth переключается через set_requires_platform_auth(bool).

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

import { Raydium } from "@raydium-io/raydium-sdk-v2";

// Fetch by PDA derivation:
const [configPda] = PublicKey.findProgramAddressSync(
  [
    Buffer.from("global_config"),
    quoteMint.toBytes(),
    Buffer.from([curveType]),
    u16ToBytes(index),
  ],
  LAUNCHLAB_PROGRAM_ID,
);

const config = await raydium.launchpad.getGlobalConfig(configPda);
console.log(config.tradeFeeRate, config.minQuoteFundRaising);
Для пользовательского интерфейса со списком всех доступных конфигураций используйте вспомогательную функцию SDK getAllGlobalConfigs или запросите конечную точку API LaunchLab, которая их зеркалирует; количество счетов в цепи невелико (единичные цифры на практике).

Ссылки

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