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

> Các tài khoản cấu hình ở mức giao thức được liên kết với mọi phiên LaunchLab — tỷ lệ phí, mức tối thiểu cung cấp, giới hạn tỷ lệ khóa, các ví di chuyển kiểm soát tốt nghiệp, và sơ đồ lập chỉ mục cho mỗi đường cong.

<Info>
  **Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.**

  [Xem bản tiếng Anh →](/products/launchlab/global-config)
</Info>

<Info>
  `GlobalConfig` là tài khoản cấu hình **ở mức giao thức**. Có thể có nhiều tài khoản — được khóa bằng `(curve_type, index)` — và mỗi phiên đều chọn chính xác một tài khoản tại thời điểm `Initialize`. Các giá trị trên `GlobalConfig` được chọn sau đó trở thành giới hạn cứng cho các tham số của phiên đó. Để tùy chỉnh ở mức nền tảng (tỷ lệ phí cho mỗi nền tảng, hình dạng đường cong được phép, phân chia NFT tại thời điểm tốt nghiệp), hãy xem [`products/launchlab/platform-config`](/vi/products/launchlab/platform-config).
</Info>

## Nó là gì

`GlobalConfig` là một PDA singleton-per-`(curve_type, index)` giữ cố định các quy tắc ở mức giao thức mà mọi phiên phải tuân theo:

* Loại bonding curve được cho phép (`curve_type`).
* Tỷ lệ phí giao dịch mà đường cong tính phí trên mỗi lần mua và bán.
* Phí di chuyển tính phí tại thời điểm tốt nghiệp.
* Giới hạn dưới cho tỷ lệ cung cấp, tỷ lệ khóa, tỷ lệ bán và tỷ lệ di chuyển.
* Quote mint (thường là wrapped SOL hoặc USDC) — tài sản mà người dùng mua với.
* Ba ví ở mức giao thức: chủ sở hữu phí giao thức, chủ sở hữu phí di chuyển, và hai ví kiểm soát di chuyển ủy quyền tốt nghiệp sang AMM v4 / CPMM.
* Một cờ tùy chọn (`requires_platform_auth`) giới hạn các nền tảng nào có thể sử dụng cấu hình này.

Các tài khoản `GlobalConfig` được tạo và cập nhật bởi quản trị viên chương trình LaunchLab (khóa quản trị cứng được chia sẻ trên các chương trình Raydium dựa trên Anchor — xem [`reference/program-addresses`](/vi/reference/program-addresses)).

## Bố cục

```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],
}
```

Dẫn xuất PDA:

```ts theme={null}
const [globalConfig] = PublicKey.findProgramAddressSync(
  [
    Buffer.from("global_config"),
    Buffer.from(quoteMint.toBytes()),
    Buffer.from([curveType]),
    u16ToBytes(index),
  ],
  LAUNCHLAB_PROGRAM_ID,
);
```

(Xác minh thứ tự hạt giống chính xác từ tài khoản trên chuỗi trước khi ký — lệnh `create_config` của chương trình là nguồn sự thật.)

## Ngữ nghĩa trường

### `curve_type` và `index`

Cùng nhau, những trường này khóa một `GlobalConfig` một cách duy nhất. Có một `GlobalConfig` cho mỗi cặp `(curve_type, index)`:

* `curve_type = 0` — Đường cong dự trữ ảo với sản phẩm hằng số. Mặc định và được sử dụng nhiều nhất.
* `curve_type = 1` — Đường cong giá cố định.
* `curve_type = 2` — Đường cong giá tuyến tính.

`index` là một `u16` cho phép quản trị viên công bố nhiều cấu hình cho mỗi loại đường cong (ví dụ: một có phí chặt hơn, một có mức tối thiểu nâng cao hơn). Tại `Initialize`, phiên cung cấp cặp `(curve_type, index)` và chương trình tải `GlobalConfig` phù hợp.

### Phí

* `trade_fee_rate` — được tính theo `1/1_000_000` của khối lượng giao dịch. Áp dụng cho mỗi lần mua và bán trên đường cong. `protocol_fee_owner` yêu cầu phần chia của nó thông qua `CollectFee`.
* `migrate_fee` — phí cố định tính bằng lamports (hoặc đơn vị quote, tùy thuộc vào cấu hình) tính một lần tại thời điểm tốt nghiệp. Được yêu cầu bởi `migrate_fee_owner` thông qua `CollectMigrateFee`.
* `max_share_fee_rate` — được khởi tạo thành `10_000` (100 bps). Giới hạn tỷ lệ phí chia sẻ của **nền tảng** từ `PlatformConfig` ràng buộc (xem [`platform-config`](/vi/products/launchlab/platform-config)). Chương trình thực thi `trade_fee_rate + max_share_fee_rate < RATE_DENOMINATOR_VALUE`.

### Giới hạn dưới của cung cấp và tỷ lệ

Những giới hạn này giới hạn những tham số hình dạng đường cong mà một phiên có thể chọn tại `Initialize`. Nếu `CurveParams` của người tạo vi phạm bất kỳ điều nào trong số chúng, `Initialize` sẽ hoàn nguyên với `InvalidInput`.

* `min_base_supply` — `supply` tối thiểu (không có số thập phân) mà đường cong có thể khai báo. Mặc định là `10_000_000`.
* `max_lock_rate` — được tính theo `1/1_000_000`; mặc định `300_000` (30%). Giới hạn vesting thông qua `total_locked_amount <= supply * max_lock_rate / 1_000_000`.
* `min_base_sell_rate` — được tính theo `1/1_000_000`; mặc định `200_000` (20%). Giới hạn `base_supply_graduation / supply` từ dưới.
* `min_base_migrate_rate` — được tính theo `1/1_000_000`; mặc định `200_000` (20%). Giới hạn số lượng token còn lại để hạt giống nhân giống sau tốt nghiệp.
* `min_quote_fund_raising` — `quote_reserve_target` tối thiểu mà một phiên có thể khai báo (với số thập phân). Mặc định là `30_000_000_000` đơn vị của quote mint.

### Quote mint và ví giao thức

* `quote_mint` — tài sản mà người dùng mua với. Hầu hết các phiên sử dụng wrapped SOL (`So111…112`) hoặc USDC (`EPjF…Dt1v`). Một `GlobalConfig` được liên kết với một quote mint; các phiên cần một mục tiêu quote khác nhắm mục tiêu `(curve_type, index)` khác.
* `protocol_fee_owner` — pubkey ký `CollectFee` và yêu cầu các phí giao thức tích lũy trên mỗi phiên được liên kết với cấu hình này. Được lưu trữ trên chuỗi; quản trị viên có thể xoay nó thông qua `UpdateConfig`.
* `migrate_fee_owner` — pubkey ký `CollectMigrateFee`.

### Ví di chuyển

Hai đường dẫn tốt nghiệp yêu cầu các ký tên khác nhau:

* `migrate_to_amm_wallet` — phải ký `MigrateToAmm`. Được sử dụng cho các phiên có `migrate_type = 0` (tốt nghiệp thành AMM v4 + OpenBook).
* `migrate_to_cpswap_wallet` — phải ký `MigrateToCpswap`. Được sử dụng cho `migrate_type = 1` (tốt nghiệp thành CPMM). Các phiên Token-2022 luôn lấy đường dẫn này.

Những ví này thường được giữ bởi crank tốt nghiệp do Raydium vận hành, vì vậy tốt nghiệp diễn ra ngay sau khi đường cong chạm ngưỡng chứ không phải chờ người tạo gọi nó.

### `requires_platform_auth`

Cờ `u8` (`0` = bất cứ ai cũng có thể sử dụng cấu hình này; khác 0 = chỉ các nền tảng có `PlatformGlobalAccess` PDA hợp lệ mới có thể khởi chạy chống lại nó). Khi được đặt, mỗi `Initialize` chống lại `GlobalConfig` này phải bao gồm tài khoản `PlatformGlobalAccess` phù hợp chứng minh nền tảng đã được ủy quyền trước thông qua `CreatePlatformGlobalAccess` (lệnh chỉ quản trị viên). Xem [`platform-config`](/vi/products/launchlab/platform-config) để tìm hiểu cơ chế ở phía nền tảng.

## Mặc định tại khởi tạo

Khi `CreateConfig` được gọi, chương trình hạt giống nhiều trường với mặc định được mã hóa cứng:

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

Quản trị viên đặt `curve_type`, `index`, `migrate_fee`, `trade_fee_rate`, `quote_mint`, và bốn pubkey ví một cách rõ ràng tại thời điểm tạo; các giá trị tiếp theo có thể được điều chỉnh thông qua `UpdateConfig`.

## Cách một phiên chọn `GlobalConfig`

Tại `Initialize`, người tạo truyền:

* `(curve_type, index)` để chọn PDA `GlobalConfig` nào để tải.
* `CurveParams` mô tả hình dạng đường cong (`supply`, `total_base_sell`, `total_quote_fund_raising`, `migrate_type`).
* `VestingParams` mô tả cung cấp bị khóa.
* `MintParams` cho base mint.

Chương trình thực thi:

* `curve_type` khớp với `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` — tức là, đủ token còn lại để hạt giống nhân giống sau tốt nghiệp.
* `total_quote_fund_raising >= min_quote_fund_raising`.
* Nếu `requires_platform_auth != 0`, một `PlatformGlobalAccess` PDA hợp lệ được bao gồm.

Sau `Initialize`, `PoolState` của phiên lưu trữ pubkey `global_config` trực tiếp, do đó ràng buộc là vĩnh viễn.

## Đường dẫn cập nhật

`UpdateConfig` là chỉ quản trị viên và lấy cặp `(param: u8, value: u64)`. Mỗi giá trị `param` chọn trường nào để đột biến:

| `param` | Trường thay đổi          |
| ------- | ------------------------ |
| 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` |

Quay vòng ví (`protocol_fee_owner`, `migrate_fee_owner`, `migrate_to_amm_wallet`, `migrate_to_cpswap_wallet`) mất một hình dạng đối số `Pubkey` riêng biệt; kiểm tra nguồn `update_config` để biết bảng gửi chính xác trước khi soạn giao dịch quản trị viên.

`requires_platform_auth` được bật/tắt thông qua `set_requires_platform_auth(bool)`.

## Đọc `GlobalConfig` từ máy khách

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

Đối với UI liệt kê tất cả các cấu hình có sẵn, hãy dùng trợ giúp `getAllGlobalConfigs` của SDK hoặc truy vấn điểm cuối API LaunchLab phản ánh chúng; số lượng tài khoản trên chuỗi rất nhỏ (vài chữ số trong thực tế).

## Con trỏ

* [`products/launchlab/platform-config`](/vi/products/launchlab/platform-config) — lớp nền tảng trên mỗi nền tảng giới hạn hình dạng đường cong thêm.
* [`products/launchlab/accounts`](/vi/products/launchlab/accounts) — đồ thị tài khoản hoàn chỉnh cho một phiên.
* [`products/launchlab/instructions`](/vi/products/launchlab/instructions) — `Initialize` và cập nhật lệnh.
* [`reference/program-addresses`](/vi/reference/program-addresses) — pubkey quản trị viên, ID chương trình, quyền hạn dùng chung.

Nguồn:

* `raydium-launch/programs/launchpad/src/states/config.rs` — cấu trúc `GlobalConfig` và `initialize`.
* `raydium-launch/programs/launchpad/src/lib.rs` — `create_config`, `update_config`.
