> ## 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>
  **本頁內容由 AI 自動翻譯，所有內容以英文版本為準。**

  [查看英文版 →](/products/launchlab/global-config)
</Info>

<Info>
  `GlobalConfig` 是**協議層級**的設定帳戶。可以有多個 — 以 `(curve_type, index)` 為鍵 — 每次啟動在 `Initialize` 時會選擇一個。選定的 `GlobalConfig` 上的數值隨後會成為該啟動參數的硬限制。若要進行平台層級的自訂（每平台費率、允許的曲線形狀、畢業時的 NFT 拆分），請參閱 [`products/launchlab/platform-config`](/zh-Hant/products/launchlab/platform-config)。
</Info>

## 是什麼

`GlobalConfig` 是一個按 `(curve_type, index)` 的單例 PDA，它固定了每次啟動必須遵守的協議側規則：

* 允許的連結曲線類型（`curve_type`）。
* 曲線在每次買賣時收取的交易費率。
* 畢業時收取的遷移費用。
* 供應量、鎖定率、賣出率和遷移率的下限。
* 報價幣種（通常是包裝的 SOL 或 USDC） — 使用者用來購買的資產。
* 三個協議側錢包：協議費擁有者、遷移費擁有者，以及兩個授權畢業到 AMM v4 / CPMM 的遷移控制錢包。
* 一個選項標誌（`requires_platform_auth`），用於控制哪些平台可以使用此設定。

`GlobalConfig` 帳戶由 LaunchLab 程式管理員（跨 Anchor 型 Raydium 程式共享的硬編碼管理員公鑰 — 見 [`reference/program-addresses`](/zh-Hant/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,
);
```

（在簽署前從鏈上帳戶驗證確切的種子順序 — 程式的 `create_config` 指令是唯一的真實來源。）

## 欄位語義

### `curve_type` 和 `index`

這兩者共同唯一確定一個 `GlobalConfig`。每個 `(curve_type, index)` 對都有一個 `GlobalConfig`：

* `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` — 畢業時收取的固定費用，以 lamports（或報價單位，取決於設定）計算。由 `migrate_fee_owner` 通過 `CollectMigrateFee` 聲稱。
* `max_share_fee_rate` — 初始化為 `10_000`（100 bps）。限制來自綁定 `PlatformConfig` 的**平台**份額費率（見 [`platform-config`](/zh-Hant/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 運營的畢業 crank 持有，因此畢業在曲線達到閾值後不久就進行，而不是等待建立者呼叫它。

### `requires_platform_auth`

一個 `u8` 標誌（`0` = 任何人都可以使用此設定；非零 = 只有具有有效 `PlatformGlobalAccess` PDA 的平台才能針對它啟動）。設定時，對此 `GlobalConfig` 的每個 `Initialize` 都必須包含一個匹配的 `PlatformGlobalAccess` 帳戶，證明該平台已通過 `CreatePlatformGlobalAccess`（僅限管理員的指令）獲得預授權。見 [`platform-config`](/zh-Hant/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)` 用於選擇要載入的 `GlobalConfig` PDA。
* `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`，則包含一個有效的 `PlatformGlobalAccess` PDA。

在 `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);
```

對於列出所有可用設定的 UI，請遍歷 SDK 的 `getAllGlobalConfigs` 幫助程式或查詢鏡像它們的 LaunchLab API 端點；鏈上帳戶數量很少（實踐中為個位數）。

## 指標

* [`products/launchlab/platform-config`](/zh-Hant/products/launchlab/platform-config) — 進一步約束曲線形狀的每平台覆蓋。
* [`products/launchlab/accounts`](/zh-Hant/products/launchlab/accounts) — 啟動的完整帳戶圖。
* [`products/launchlab/instructions`](/zh-Hant/products/launchlab/instructions) — `Initialize` 和更新指令。
* [`reference/program-addresses`](/zh-Hant/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`。
