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

> PoolState (런칭당 루트), 기본 및 인용 볼트, 권한 PDA, 그리고 런칭당 계정의 소규모 그래프. 프로토콜 수준의 GlobalConfig와 플랫폼 수준의 PlatformConfig는 별도 페이지에 있습니다.

<Info>
  **이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.**

  [영문판 보기 →](/products/launchlab/accounts)
</Info>

<Info>
  이 페이지는 **런칭당** 계정 그래프를 문서화합니다: `PoolState` (한 번의 런칭을 위한 루트 상태 계정), 두 개의 볼트, 권한 PDA, 그리고 런칭이 정산될 때 획득하는 졸업 후 참조입니다.

  모든 런칭을 제한하는 프로토콜 수준 설정은 [`products/launchlab/global-config`](/ko/products/launchlab/global-config)을 참조하세요. 플랫폼별 오버레이는 [`products/launchlab/platform-config`](/ko/products/launchlab/platform-config)을 참조하세요. 베스팅 계정(`PoolState`의 `VestingSchedule`, 수익자당 `VestingRecord`)은 [`products/launchlab/vesting`](/ko/products/launchlab/vesting)을 참조하세요.
</Info>

## 계정 목록

| 계정                                                         | 소유자                    | 목적                                                                            |
| ---------------------------------------------------------- | ---------------------- | ----------------------------------------------------------------------------- |
| [`GlobalConfig`](/ko/products/launchlab/global-config)     | LaunchLab 프로그램         | 프로토콜 수준 규칙: 수수료, 공급 하한선, 마이그레이션 지갑. 하나의 `(curve_type, index)`당 하나.            |
| [`PlatformConfig`](/ko/products/launchlab/platform-config) | LaunchLab 프로그램         | 플랫폼별 오버레이: 브랜딩, 플랫폼 수수료, 졸업 시 NFT 분할, 곡선 형태 화이트리스트.                           |
| `PoolState`                                                | LaunchLab 프로그램         | 런칭당 루트 상태: 민트, 볼트, 곡선 매개변수, 판매 카운터, 수수료 카운터, 베스팅 스케줄, 졸업 상태.                  |
| `authority`                                                | LaunchLab 프로그램         | 시드 `[b"vault_auth_seed"]`에서 파생되는 단일 PDA로, 모든 런칭 전체의 볼트를 소유하고 졸업 후 CPI에 서명합니다. |
| `base_vault`                                               | SPL Token / Token-2022 | 미판매 기본 토큰을 보유하는 런칭당 볼트.                                                       |
| `quote_vault`                                              | SPL Token              | 누적된 인용 토큰을 보유하는 런칭당 볼트.                                                       |
| [`VestingRecord`](/ko/products/launchlab/vesting)          | LaunchLab 프로그램         | 수익자당 클리프 + 선형 해제 기록. 선택사항.                                                    |
| `creator_fee_vault`                                        | SPL Token              | 크리에이터별 + 인용 민트별 볼트로 누적된 크리에이터 수수료를 보유하며, `ClaimCreatorFee`로 회수됩니다.            |
| `platform_fee_vault`                                       | SPL Token              | 플랫폼별 + 인용 민트별 볼트로 누적된 플랫폼 수수료를 보유하며, `ClaimPlatformFeeFromVault`로 회수됩니다.      |
| (졸업 후) `cpmm_pool_state` *또는* `amm_pool_state`             | CPMM / AMM v4 프로그램     | `MigrateToCpswap` / `MigrateToAmm`에 의해 생성된 풀.                                 |
| (졸업 후) Fee Key NFT                                         | LP-Lock 프로그램           | CPMM 졸업 시 크리에이터의 LP 슬라이스를 래핑합니다. 소유자에게 CPMM 풀의 `ClaimCreatorFee` 권리를 부여합니다.   |

SDK의 `raydium.launchpad.getLaunchById`는 `PoolState`와 런칭이 졸업했는지 여부를 나타내는 플래그를 반환합니다. 졸업했다면 마이그레이션 후 풀 ID가 포함됩니다.

## `PoolState`

런칭당 루트 상태. 아래 필드명은 온체인 Rust 구조체(`states/pool.rs`)와 일치합니다. 일부 값은 가독성을 위해 단순화되었으므로, 정확한 메모리 레이아웃은 소스를 참조하세요.

```rust theme={null}
// states/pool.rs (abridged)
pub struct PoolState {
    pub epoch:                     u64,        // recent_epoch tracker
    pub auth_bump:                 u8,
    pub status:                    u8,         // PoolStatus enum
    pub base_decimals:             u8,
    pub quote_decimals:            u8,
    pub migrate_type:              u8,         // 0 = AMM v4, 1 = CPMM
    pub supply:                    u64,        // total base tokens (no decimals)
    pub total_base_sell:           u64,        // base supply allocated to the curve
    pub virtual_base:              u64,        // virtual-reserve seed
    pub virtual_quote:             u64,        // virtual-reserve seed
    pub real_base:                 u64,        // base sold so far
    pub real_quote:                u64,        // quote raised so far (excl. fees)
    pub total_quote_fund_raising:  u64,        // graduation threshold in quote

    pub quote_protocol_fee:        u64,        // accrued, pending CollectFee
    pub platform_fee:              u64,        // accrued, pending ClaimPlatformFee
    pub migrate_fee:               u64,        // accrued, pending CollectMigrateFee
    pub vesting_schedule:          VestingSchedule,

    pub global_config:             Pubkey,
    pub platform_config:           Pubkey,
    pub creator:                   Pubkey,
    pub base_mint:                 Pubkey,
    pub quote_mint:                Pubkey,
    pub base_vault:                Pubkey,
    pub quote_vault:               Pubkey,

    pub amm_creator_fee_on:        u8,         // 0 = QuoteToken, 1 = BothToken (CPMM-only)
    pub token_program_flag:        u8,         // bit flags for SPL Token vs Token-2022
    pub padding:                   [u8; 54],
}

#[derive(Default, Debug, Clone)]
pub struct VestingSchedule {
    pub total_locked_amount:    u64,
    pub cliff_period:           u64,
    pub unlock_period:          u64,
    pub start_time:             u64,           // set at graduation
    pub allocated_share_amount: u64,           // running sum across VestingRecords
}
```

`PoolStatus` 값 (Anchor IDL에서):

```
0 = Funding         — 매입/매도 수락 중; quote_reserve_target 아래
1 = Migrate         — quote_reserve_target 도달됨; MigrateTo* 대기 중
2 = Migrated        — MigrateTo* 이미 실행됨; 베스팅 시계 실행 중
```

통합자 대면 필드:

* **`status`** — 세 가지 값, 단조로운 (Funding → Migrate → Migrated). 읽기는 항상 안전합니다. 쓰기는 제어됩니다.
* **`real_base`**, **`real_quote`** — 현재 곡선 상태. `virtual_base` / `virtual_quote`와 함께 볼트에 접근하지 않고도 현물 가격을 계산하기에 충분합니다. [`bonding-curve`](/ko/products/launchlab/bonding-curve)를 참조하세요.
* **`total_base_sell`** vs `real_base` — UI를 위한 "졸업 진행도" 비율.
* **`migrate_type`** — `MigrateToAmm` 또는 `MigrateToCpswap`이 유효한 졸업 경로인지를 선택합니다. Token-2022 런칭은 CPMM을 사용해야 합니다.
* **`amm_creator_fee_on`** — CPMM으로 졸업할 때만 의미 있습니다. 졸업 후 CPMM 풀에서 `creator_fee_on = OnlyQuoteToken` (`0`) 또는 `BothToken` (`1`)을 선택합니다. *이름과 무관하게 이 열거형은 마이그레이션 대상도 효과적으로 결정합니다. 현재 운영 관행에서 `BothToken`은 `MigrateToAmm`과 짝을 이루고, `QuoteToken`은 `MigrateToCpswap`과 짝을 이룹니다.* [`creator-fees`](/ko/products/launchlab/creator-fees)를 참조하세요.
* **`quote_protocol_fee` / `platform_fee` / `migrate_fee`** — 세 개의 독립적인 수수료 카운터. 각각 자체 청구 명령이 있습니다. [`instructions`](/ko/products/launchlab/instructions)를 참조하세요.
* **`vesting_schedule`** — 모든 `PoolState`에 있지만 `total_locked_amount == 0`일 때 비활성입니다. 전체 라이프사이클은 [`vesting`](/ko/products/launchlab/vesting)을 참조하세요.

## 권한 PDA

LaunchLab은 런칭당 시드 없이 모든 런칭 전체에서 **단일** 권한 PDA를 사용합니다:

```ts theme={null}
const LAUNCHLAB_PROGRAM_ID = new PublicKey("<LAUNCHLAB_ID>"); // see reference/program-addresses

const [authority, bump] = PublicKey.findProgramAddressSync(
  [Buffer.from("vault_auth_seed")],
  LAUNCHLAB_PROGRAM_ID,
);
```

그 단일 PDA는:

* 모든 런칭의 `base_vault` 및 `quote_vault`의 권한입니다.
* 각 런칭의 `base_mint`의 `mint_authority` (졸업 전)입니다.
* AMM v4 / CPMM으로의 졸업 후 CPI(`MigrateTo*`)의 서명자입니다.
* `ClaimVestedToken` 기본 볼트 외 전송의 서명자입니다.

`mint_authority`는 `MigrateToAmm` / `MigrateToCpswap` 직후 취소되므로 공급이 영구적으로 고정됩니다.

두 개의 추가 PDA가 수수료 볼트를 제어합니다:

```ts theme={null}
const [creatorFeeVaultAuthority] = PublicKey.findProgramAddressSync(
  [Buffer.from("creator_fee_vault_auth_seed")],
  LAUNCHLAB_PROGRAM_ID,
);

const [platformFeeVaultAuthority] = PublicKey.findProgramAddressSync(
  [Buffer.from("platform_fee_vault_auth_seed")],
  LAUNCHLAB_PROGRAM_ID,
);
```

이들은 `ClaimCreatorFee` 및 `ClaimPlatformFeeFromVault` 중에 해당 수수료 볼트 외의 전송에 서명합니다.

## 기본 민트

`Initialize`에 의해 인라인으로 생성됩니다:

* `mint_authority = authority` (졸업 시 취소).
* `freeze_authority = None`.
* `supply = supply`, 전체가 `base_vault`에 민팅됩니다.
* `decimals`는 `Initialize`에서 크리에이터가 선택합니다 (보통 6).

전체 공급이 사전 민팅되므로, `base_mint.supply`는 런칭 기간 전체에 상수입니다. 곡선 매입은 토큰을 `base_vault`에서 구매자로 이동하지만, `mint_to`를 호출하지 않습니다.

`Initialize` / `InitializeV2`는 SPL Token 런칭을 생성합니다. 전용 `InitializeWithToken2022` 명령은 기본 민트가 Token-2022 민트(선택적 `TransferFeeConfig` 포함)가 되도록 합니다. 인용 민트는 여전히 SPL Token입니다. Token-2022 런칭은 AMM v4가 SPL Token 볼트만 지원하기 때문에 CPMM 풀로 졸업해야 합니다.

## 볼트

`base_vault`와 `quote_vault` 모두 LaunchLab `authority` PDA가 소유하는 표준 SPL Token 계정입니다. 주소는 `PoolState`에 저장되며 또한 파생될 수 있습니다:

```ts theme={null}
const [baseVault] = PublicKey.findProgramAddressSync(
  [Buffer.from("pool_vault"), poolState.toBuffer(), baseMint.toBuffer()],
  LAUNCHLAB_PROGRAM_ID,
);
const [quoteVault] = PublicKey.findProgramAddressSync(
  [Buffer.from("pool_vault"), poolState.toBuffer(), quoteMint.toBuffer()],
  LAUNCHLAB_PROGRAM_ID,
);
```

(프로덕션에서 파생에 의존하기 전에 소스의 `Initialize` 계정 구조에서 정확한 시드 접두사를 확인하세요.)

## 수수료 볼트

두 개의 PDA가 런칭 전체에서 수수료를 집계합니다:

* **크리에이터 수수료 볼트** — 시드 `[creator, quote_mint]`의 PDA. 같은 크리에이터가 같은 인용 민트에서 얻은 모든 런칭은 같은 볼트에 쏟아집니다. 크리에이터는 `ClaimCreatorFee`를 통해 이를 회수합니다.
* **플랫폼 수수료 볼트** — 시드 `[platform_config, quote_mint]`의 PDA. 같은 플랫폼을 통해 라우팅되고 같은 인용 민트를 사용하는 모든 런칭은 같은 볼트에 쏟아집니다. 플랫폼의 `platform_fee_wallet`은 `ClaimPlatformFeeFromVault`를 통해 이를 회수합니다. 집계된 볼트를 거치지 않고 런칭의 `quote_vault`에서 직접 끌어가는 런칭별 회수 변형(`ClaimPlatformFee`)도 있습니다.

집계된 볼트 패턴은 많은 런칭 전체에서 높은 볼륨의 크리에이터나 플랫폼이 수수료 누적의 임차료 비용을 분할할 수 있도록 합니다.

## Quote vault ↔ `real_quote`

`quote_vault.balance`와 `PoolState.real_quote`는 동기화 상태를 유지해야 합니다. 이들은 세 개의 미결 수수료 카운터(`quote_protocol_fee`, `platform_fee`, `migrate_fee`)의 합계만큼 벗어날 수 있습니다. 이 수수료들은 볼트에 있지만 수수료 카운터에 속하며 곡선 준비금에 속하지 않습니다. 곡선 수학은 항상 `real_quote`를 사용하며 원본 볼트 잔액을 사용하지 않습니다.

졸업 전 불변성:

```
quote_vault.balance ==
   real_quote
 + quote_protocol_fee
 + platform_fee
 + migrate_fee
```

## 라이프사이클 계정 전환

| 이벤트                                     | 상태                           | `real_base` | `real_quote`            | 졸업 후 풀                                       |
| --------------------------------------- | ---------------------------- | ----------- | ----------------------- | -------------------------------------------- |
| `Initialize`                            | Funding                      | 0           | 0                       | —                                            |
| `BuyExactIn` / `BuyExactOut`            | Funding                      | `+base_out` | `+quote_in_after_fee`   | —                                            |
| `SellExactIn` / `SellExactOut`          | Funding                      | `−base_in`  | `−quote_out_before_fee` | —                                            |
| `MigrateToAmm` / `MigrateToCpswap`      | Funding → Migrate → Migrated | (동결)        | (동결)                    | 생성됨, LP는 `PlatformConfig`에 따라 분할됨            |
| `ClaimCreatorFee` / `ClaimPlatformFee*` | 모든                           | —           | —                       | 수수료 볼트 드레인                                   |
| `CreateVestingAccount`                  | Funding                      | —           | —                       | `vesting_schedule.allocated_share_amount` 증가 |
| `ClaimVestedToken`                      | Migrated만                    | —           | —                       | `base_vault` 드레인                             |

## 다음 단계

* [`products/launchlab/bonding-curve`](/ko/products/launchlab/bonding-curve) — `real_base` ↔ `real_quote` 뒤의 수학.
* [`products/launchlab/instructions`](/ko/products/launchlab/instructions) — 명령별 계정 목록.
* [`products/launchlab/global-config`](/ko/products/launchlab/global-config) — 프로토콜 수준 제한.
* [`products/launchlab/platform-config`](/ko/products/launchlab/platform-config) — 플랫폼 오버레이.
* [`products/launchlab/vesting`](/ko/products/launchlab/vesting) — 잠금 공급 메커니즘.
* [`products/cpmm/accounts`](/ko/products/cpmm/accounts) — 졸업 후 `cpmm_pool_state`의 모양.

출처:

* `raydium-launch/programs/launchpad/src/states/pool.rs` — `PoolState`, `PoolStatus`, `VestingSchedule`, `AmmCreatorFeeOn`.
* `raydium-launch/programs/launchpad/src/lib.rs` — PDA 시드 상수 (`AUTH_SEED`, `CREATOR_FEE_VAULT_AUTH_SEED`, `PLATFORM_FEE_VAULT_AUTH_SEED`).
* [Raydium SDK v2 `launchpad` module](https://github.com/raydium-io/raydium-sdk-V2).
