> ## 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.

# LaunchLab GlobalConfig

> Конфигурационные счета уровня протокола для каждого запуска LaunchLab — ставки комиссий, минимумы предложения, потолки коэффициентов блокировки, кошельки миграции для контроля выпуска и схема индексирования кривых.

<Info>
  **Эта страница переведена с помощью ИИ. За эталон принимается английская версия.**

  [Открыть английскую версию →](/products/launchlab/global-config)
</Info>

<Info>
  `GlobalConfig` — это конфигурационный счет **уровня протокола**. Их может быть несколько — индексированные по `(curve_type, index)` — и каждый запуск выбирает ровно один на этапе `Initialize`. Значения выбранного `GlobalConfig` становятся жёсткими ограничениями для параметров этого запуска. Для настройки на уровне платформы (ставка комиссии за платформу, допустимые формы кривых, распределение NFT при выпуске) см. [`products/launchlab/platform-config`](/ru/products/launchlab/platform-config).
</Info>

## Что это такое

`GlobalConfig` — это PDA, уникальный для каждой пары `(curve_type, index)`, который устанавливает правила уровня протокола, которые должен соблюдать каждый запуск:

* Тип допускаемой кривой бондинга (`curve_type`).
* Ставка торговой комиссии, взимаемая кривой при каждой покупке и продаже.
* Комиссия на миграцию, взимаемая при выпуске.
* Минимальные значения для предложения, коэффициента блокировки, ставки продажи и ставки миграции.
* Минт котировочного токена (обычно завёрнутый SOL или USDC) — актив, которым пользователи покупают.
* Три кошелька уровня протокола: владелец комиссии протокола, владелец комиссии миграции и два кошелька управления миграцией, которые авторизируют выпуск на AMM v4 / CPMM.
* Опциональный флаг (`requires_platform_auth`), который ограничивает, какие платформы могут использовать эту конфигурацию.

Счета `GlobalConfig` создаются и обновляются администратором программы LaunchLab (жёстко закодированный адрес администратора, общий для всех программ Raydium на основе Anchor — см. [`reference/program-addresses`](/ru/reference/program-addresses)).

## Структура

```rust theme={null}
// 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:

```ts theme={null}
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`](/ru/products/launchlab/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`](/ru/products/launchlab/platform-config) для механики на стороне платформы.

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

Когда вызывается `CreateConfig`, программа инициализирует множество полей жёстко закодированными значениями по умолчанию:

```rust theme={null}
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` | Изменённое поле          |
| ------- | ------------------------ |
| 0       | `migrate_fee`            |
| 1       | `trade_fee_rate`         |
| 2       | `max_share_fee_rate`     |
| 3       | `min_base_supply`        |
| 4       | `max_lock_rate`          |
| 5       | `min_base_sell_rate`     |
| 6       | `min_base_migrate_rate`  |
| 7       | `min_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` с клиента

```ts theme={null}
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, которая их зеркалирует; количество счетов в цепи невелико (единичные цифры на практике).

## Ссылки

* [`products/launchlab/platform-config`](/ru/products/launchlab/platform-config) — наложение на уровне платформы, которое дополнительно ограничивает форму кривой.
* [`products/launchlab/accounts`](/ru/products/launchlab/accounts) — полный граф счетов для запуска.
* [`products/launchlab/instructions`](/ru/products/launchlab/instructions) — инструкции `Initialize` и обновления.
* [`reference/program-addresses`](/ru/reference/program-addresses) — публичный ключ администратора, ID программы, общие органы управления.

Источники:

* `raydium-launch/programs/launchpad/src/states/config.rs` — структура `GlobalConfig` и `initialize`.
* `raydium-launch/programs/launchpad/src/lib.rs` — `create_config`, `update_config`.
