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

# Instruksi LaunchLab

> Initialize, Buy, Sell, Graduate, CollectFees, SetParams — bentuk argumen, daftar akun, dan kondisi pre/post untuk setiap instruksi LaunchLab.

<Info>
  **Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.**

  [Lihat versi bahasa Inggris →](/products/launchlab/instructions)
</Info>

<Info>
  LaunchLab mengekspos set instruksi yang ketat: enam panggilan yang menghadap pengguna ditambah beberapa primitif admin. SDK membungkus semuanya; halaman ini mendokumentasikan permukaan mentah untuk agregator, alat pemantauan, dan program yang memerlukan CPI.
</Info>

## Inventori instruksi

| Grup                  | Instruksi                                                  | Dapat dipanggil oleh                                                                                                                                                                |
| --------------------- | ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Konfigurasi global    | `CreateConfig` / `UpdateConfig`                            | Admin                                                                                                                                                                               |
| Daur hidup peluncuran | `Initialize` / `InitializeV2`                              | Siapa saja (kreator) — peluncuran SPL Token; V2 merekam `amm_creator_fee_on` untuk kelulusan CPMM yang akan datang                                                                  |
| Daur hidup peluncuran | `InitializeWithToken2022`                                  | Siapa saja (kreator) — peluncuran Token-2022, `TransferFeeConfig` opsional                                                                                                          |
| Perdagangan           | `BuyExactIn` / `BuyExactOut`                               | Siapa saja — pembelian input-pasti / output-pasti pada kurva ikatan                                                                                                                 |
| Perdagangan           | `SellExactIn` / `SellExactOut`                             | Siapa saja — penjualan input-pasti / output-pasti pada kurva ikatan                                                                                                                 |
| Kelulusan             | `MigrateToAmm`                                             | Dompet migrasi (diatur pada `GlobalConfig`) — kelulusan ke AMM v4. Digunakan ketika `amm_creator_fee_on = BothToken` sehingga biaya kreator dapat dikumpulkan dari kedua sisi.      |
| Kelulusan             | `MigrateToCpswap`                                          | Dompet migrasi — kelulusan ke CPMM. Digunakan ketika `amm_creator_fee_on = QuoteToken` dan diperlukan untuk peluncuran Token-2022. Membungkus `InitializeWithPermission` pada CPMM. |
| Biaya                 | `CollectFee`                                               | Admin — kumpulkan biaya protokol dari peluncuran                                                                                                                                    |
| Biaya                 | `CollectMigrateFee`                                        | Admin — kumpulkan biaya migrasi yang terakumulasi                                                                                                                                   |
| Biaya                 | `ClaimCreatorFee`                                          | Kreator — klaim biaya kreator yang terakumulasi selama fase kurva                                                                                                                   |
| Vesting               | `CreateVestingAccount`                                     | Kreator — alokasikan token terkunci kepada penerima, dibuka setelah kelulusan                                                                                                       |
| Vesting               | `CreatePlatformVestingAccount`                             | Admin platform — alokasikan token terkunci kepada penerima sisi platform                                                                                                            |
| Vesting               | `ClaimVestedToken`                                         | Penerima — klaim token yang tidak terkunci setelah tebing                                                                                                                           |
| Konfigurasi platform  | `CreatePlatformConfig` / `UpdatePlatformConfig`            | Admin platform                                                                                                                                                                      |
| Konfigurasi platform  | `UpdatePlatformCurveParam` / `RemovePlatformCurveParam`    | Admin platform — kelola daftar per-platform bentuk kurva yang diizinkan                                                                                                             |
| Biaya platform        | `ClaimPlatformFee` / `ClaimPlatformFeeFromVault`           | Admin platform                                                                                                                                                                      |
| Akses platform        | `CreatePlatformGlobalAccess` / `ClosePlatformGlobalAccess` | Admin — batasi platform mana yang dapat menggunakan `GlobalConfig` tertentu                                                                                                         |

Pembagian "ExactIn/ExactOut" mencerminkan `SwapBaseInput` / `SwapBaseOutput` CPMM — di chain mereka adalah diskriminator instruksi terpisah dengan pembulatan yang sedikit berbeda.

**Pemilihan jalur kelulusan.** `migrate_type` dicatat pada `PoolState` saat `Initialize{V2,WithToken2022}` dan menentukan instruksi kelulusan mana yang dapat berjalan. Peluncuran Token-2022 selalu bermigrasi ke CPMM. Peluncuran SPL Token bermigrasi ke AMM v4 atau CPMM tergantung pada pengaturan `amm_creator_fee_on`:

* `BothToken` → `MigrateToAmm` → pool AMM v4 (biaya kreator dapat dikumpulkan dari kedua sisi; AMM v4 tidak memiliki bidang biaya kreator asli, jadi biaya kreator diambil melalui mekanisme kunci LP NFT sebagai gantinya).
* `QuoteToken` → `MigrateToCpswap` → pool CPMM dengan `creator_fee_on = OnlyQuoteToken` (kreator terus mendapatkan biaya dari pool CPMM melalui NFT LaunchLab Fee Key — lihat [`products/launchlab/creator-fees`](/id/products/launchlab/creator-fees)).

<Tip>
  **Catatan tentang nama enum `AmmCreatorFeeOn`.** Sumber Rust menyebut enum ini `AmmCreatorFeeOn` dengan varian `QuoteToken` dan `BothToken`. Namanya menyesatkan: dalam praktik operasional saat ini varian tidak hanya mengontrol sisi mana biaya kreator dikumpulkan dari pool CPMM pasca-kelulusan — varian juga memilih program target kelulusan **target program** (AMM v4 vs CPMM) dan berpasangan dengan `migrate_type` pada `PoolState` peluncuran. Perlakukan bidang ini sebagai "target migrasi + sisi biaya kreator pasca-kelulusan" digabungkan menjadi satu. Nama enum on-chain belum difaktorisasi ulang, tetapi penalaran tentangnya sebagai `MigrationTarget` cocok dengan kenyataan lebih dekat.
</Tip>

## `Initialize`

Buat peluncuran baru.

**Argumen**

```
launch_params: {
    curve_type:                 u8,
    base_supply_max:            u64,
    base_supply_graduation:     u64,
    k:                          u128,              // atau initial_virtual_quote_reserve untuk curve_type=1
    open_time:                  u64,
    quote_mint:                 Pubkey,
    base_token_metadata: {                         // nama/simbol/uri inline; program CPI ke Metaplex
        name:   String,
        symbol: String,
        uri:    String,
    },
    fees: {
        buy_numerator:   u64,
        buy_denominator: u64,
        sell_numerator:  u64,
        sell_denominator: u64,
        lp_share:        u64,
        creator_share:   u64,
        protocol_share:  u64,
        total_share:     u64,
    },
    post_graduation_lp_policy:  u8,                // 0 = Burn, 1 = Lock, 2 = ToCreator
}
```

**Akun** (ringkas)

| #  | Nama               | W | S | Catatan                                                       |
| -- | ------------------ | - | - | ------------------------------------------------------------- |
| 1  | `creator`          | W | S | Membayar sewa + pembuatan base mint.                          |
| 2  | `launch_config`    |   |   | Pengikatan konfigurasi protokol.                              |
| 3  | `launch_state`     | W |   | Akun baru.                                                    |
| 4  | `launch_authority` |   |   | PDA.                                                          |
| 5  | `base_mint`        | W | S | Keypair segar (atau PDA) — instruksi ini menginisialisasinya. |
| 6  | `base_vault`       | W |   | ATA dari `launch_authority` pada `base_mint`.                 |
| 7  | `quote_mint`       |   |   |                                                               |
| 8  | `quote_vault`      | W |   | ATA dari `launch_authority` pada `quote_mint`.                |
| 9  | `metadata`         | W |   | PDA metdata Metaplex.                                         |
| 10 | `metaplex_program` |   |   |                                                               |
| 11 | `token_program`    |   |   | SPL Token saja.                                               |
| 12 | `system_program`   |   |   |                                                               |
| 13 | `rent`             |   |   |                                                               |

**Kondisi sebelumnya**

* `quote_mint ∈ launch_config.allowed_quote_mints`.
* `base_supply_graduation ≤ base_supply_max`.
* Parameter biaya lulus pemeriksaan `launch_config.max_*_fee_rate`.
* `open_time ≥ now − slop` (SDK memberlakukan `≥ now`; program mentoleransi backdating kecil).
* `curve_type` dikenali.

**Kondisi sesudahnya**

* `base_mint` memiliki `supply = base_supply_max`, semuanya di `base_vault`.
* `base_mint.mint_authority = launch_authority`, `freeze_authority = None`.
* `LaunchState` diinisialisasi dengan `status = Active`, `base_sold = 0`, `quote_reserve_real = 0`.
* `quote_reserve_target` dihitung dari parameter kurva + `base_supply_graduation` + `buy_numerator` (kira-kira).

**Kesalahan umum** — `InvalidQuoteMint`, `FeeRateTooHigh`, `InvalidCurveParams`, `MathOverflow`.

## `Buy` (varian kanonik: `BuyExactIn`)

Pengguna menyediakan `quote_in` tetap; kurva menghitung `base_out`.

**Argumen**

```
quote_in:          u64
minimum_base_out:  u64
```

**Akun**

| #  | Nama                       | W | S |
| -- | -------------------------- | - | - |
| 1  | `user`                     | W | S |
| 2  | `launch_state`             | W |   |
| 3  | `launch_authority`         |   |   |
| 4  | `base_vault`               | W |   |
| 5  | `quote_vault`              | W |   |
| 6  | `user_base_ata`            | W |   |
| 7  | `user_quote_ata`           | W |   |
| 8  | `base_mint`                |   |   |
| 9  | `quote_mint`               |   |   |
| 10 | `token_program`            |   |   |
| 11 | `associated_token_program` |   |   |
| 12 | `system_program`           |   |   |

**Kondisi sebelumnya**

* `launch_state.status == Active`.
* `now ≥ open_time`.
* `user_quote_ata.balance ≥ quote_in`.
* `quote_in > 0`.

**Efek**

1. Pisahkan `quote_in` menjadi `quote_in_after_fee` dan bagian biaya.
2. Newton-solve kurva untuk `base_out` yang diberikan quote pasca-biaya.
3. `require(base_out ≥ minimum_base_out)` jika tidak balik `ExceededSlippage`.
4. Pindahkan `quote_in` pengguna → vault. Pindahkan `base_out` vault → pengguna.
5. Perbarui `base_sold += base_out`, `quote_reserve_real += quote_in_after_fee × (lp_share / total_share)`.
6. Perbarui penghitung biaya (`protocol_fees_quote`, `creator_fees_quote`).
7. `state_data.num_buys += 1`.
8. Jika `quote_reserve_real ≥ quote_reserve_target` setelah pembaruan, SDK biasanya menggabungkan `Graduate` ix dalam transaksi yang sama. Program tidak secara otomatis kelulusan di dalam `Buy` — `Graduate` berikutnya diperlukan.

## `BuyExactOut`

Pengguna menentukan `base_out` yang tepat; program menghitung `quote_in`.

**Argumen**

```
base_out:      u64
maximum_quote_in: u64
```

Akun yang sama seperti `BuyExactIn`. Menggunakan integral kuadrat bentuk tertutup (atau invers CPMM, untuk curve\_type 1) daripada iterasi Newton.

## `Sell` / `SellExactIn` / `SellExactOut`

Cerminan `Buy`. Pengguna mengembalikan `base_in` ke kurva dan menerima `quote_out`. Biaya dikurangkan dari `quote_out`, sehingga pengguna menerima lebih sedikit daripada hasil integral mentah.

**Kondisi sebelumnya** —

* `user_base_ata.balance ≥ base_in`.
* Menjual tidak dapat mendorong `base_sold` di bawah 0 (redundan dengan di atas mengingat akuntansi konsisten).
* Peluncuran adalah `Active`.

**Efek** — simetris ke `Buy`. `base_sold` berkurang, `quote_reserve_real` berkurang. Biaya masih terakumulasi.

## `MigrateToAmm` / `MigrateToCpswap`

Keluluskan peluncuran menjadi pool AMM yang dapat diperdagangkan setelah kurva mencapai `total_quote_fund_raising`. Kedua instruksi sesuai dengan dua target kelulusan — AMM v4 dan CPMM — dan **hanya salah satu yang valid untuk peluncuran tertentu**, ditentukan oleh `pool_state.migrate_type` (diatur saat waktu `Initialize`).

**Yang menandatangani**

* `MigrateToAmm` — `migrate_to_amm_wallet` yang dicatat pada `GlobalConfig` pengikatan.
* `MigrateToCpswap` — `migrate_to_cpswap_wallet` yang dicatat pada `GlobalConfig` pengikatan.

Dompet ini biasanya dipegang oleh crank kelulusan yang dioperasikan Raydium; dalam praktik kelulusan mendarat detik setelah ambang batas terlampaui, terlepas dari siapa yang memicu pembelian akhir.

**Argumen**

`MigrateToAmm` mengambil tiga (terutama parameter pasar OpenBook yang program teruskan ke AMM v4):

```
base_lot_size:               u64
quote_lot_size:              u64
market_vault_signer_nonce:   u8
```

`MigrateToCpswap` tidak mengambil yang mana pun.

**Efek (umum untuk keduanya)**

1. Verifikasi `pool_state.status == Migrate` (yaitu, `quote_reserve_target` telah tercapai). Jika tidak balik dengan `PoolMigrated` (status sudah `Migrated`) atau `PoolFunding` (masih dalam pendanaan).
2. Verifikasi `pool_state.migrate_type` cocok dengan instruksi (`0` untuk AMM, `1` untuk CPMM). Jika tidak balik dengan `MigrateTypeNotMatch`.
3. Hitung cadangan pasca-kelulusan:
   * `base_amount_out = base_vault.amount − vesting_schedule.total_locked_amount`
   * `quote_amount_out = quote_vault.amount − quote_protocol_fee − migrate_fee − platform_fee`
4. CPI ke program target (`AMM v4 Initialize2` atau `CPMM InitializeWithPermission`) dengan cadangan tersebut untuk membuat pool pasca-kelulusan.
5. Bagikan LP hasil per pengikatan `PlatformConfig.{platform_scale, creator_scale, burn_scale}` (CPMM saja) — satu bagian dicetak ke `platform_nft_wallet`, satu ke NFT kreator dibungkus oleh program LP-Lock, satu dibakar melalui Burn & Earn. Untuk kelulusan AMM v4, disposisi LP diatur oleh parameter inisialisasi AMM v4 sendiri.
6. Cabut `base_mint.mint_authority` (atur ke `None`).
7. Balik `pool_state.status = Migrated`, atur `vesting_schedule.start_time = block_time + cliff_period`.

**Kondisi sesudahnya** — `BuyExactIn`, `BuyExactOut`, `SellExactIn`, `SellExactOut` akan menolak sejak saat ini dengan `PoolMigrated`. Pool AMM yang dihasilkan adalah kanonik dan berdagang seperti pool AMM v4 / CPMM lainnya.

**Kesalahan umum** — `PoolFunding`, `PoolMigrated`, `MigrateTypeNotMatch`, `InvalidCpSwapConfig`, `MathOverflow`.

## `CollectFee`

Penyapu admin dari biaya perdagangan terakumulasi protokol pada peluncuran tunggal.

**Argumen** — tidak ada.

**Akun**

| # | Nama                      | W | S | Catatan                                                    |
| - | ------------------------- | - | - | ---------------------------------------------------------- |
| 1 | `protocol_fee_owner`      |   | S | Harus sama dengan `global_config.protocol_fee_owner`.      |
| 2 | `authority`               |   |   | PDA `[b"vault_auth_seed"]`; menandatangani transfer vault. |
| 3 | `pool_state`              | W |   | Dimutasi untuk mengosongkan `quote_protocol_fee`.          |
| 4 | `global_config`           |   |   | Sumber kebenaran untuk penandatangan.                      |
| 5 | `quote_vault`             | W |   | Dikosongkan oleh `quote_protocol_fee`.                     |
| 6 | `recipient_token_account` | W |   | ATA dari `protocol_fee_owner` pada `quote_mint`.           |
| 7 | `quote_mint`              |   |   |                                                            |
| 8 | `token_program`           |   |   | SPL Token (quote mint selalu SPL Token).                   |

**Efek** — transfer `pool_state.quote_protocol_fee` dari `quote_vault` ke `recipient_token_account`, kemudian kosongkan penghitung. Dapat dipanggil kapan saja setelah pembelian pertama.

## `CollectMigrateFee`

Penyapu admin dari biaya migrasi yang terakumulasi saat kelulusan. Bentuk akun yang sama seperti `CollectFee` dengan `migrate_fee_owner` sebagai penandatangan (bukan `protocol_fee_owner`) dan `pool_state.migrate_fee` sebagai penghitung yang dikosongkan.

## `ClaimCreatorFee`

Penyapu per-kreator dari biaya kreator terakumulasi di **setiap peluncuran yang dimiliki kreator** yang menggunakan mint quote yang sama. Mengosongkan vault biaya per-kreator, bukan vault per-pool.

**Argumen** — tidak ada.

**Akun**

| # | Nama                       | W | S | Catatan                                                      |
| - | -------------------------- | - | - | ------------------------------------------------------------ |
| 1 | `creator`                  | W | S | Kreator pool.                                                |
| 2 | `fee_vault_authority`      |   |   | PDA `[b"creator_fee_vault_auth_seed"]`.                      |
| 3 | `creator_fee_vault`        | W |   | PDA di seeds `[creator, quote_mint]`; vault kreator agregat. |
| 4 | `recipient_token_account`  | W |   | `init_if_needed`; ATA dari `creator` pada `quote_mint`.      |
| 5 | `quote_mint`               |   |   |                                                              |
| 6 | `token_program`            |   |   |                                                              |
| 7 | `system_program`           |   |   | Untuk pembuatan ATA jika diperlukan.                         |
| 8 | `associated_token_program` |   |   |                                                              |

**Efek** — transfer seluruh saldo `creator_fee_vault` ke `recipient_token_account`. Kembali dengan pemeriksaan require-greater-than-zero jika vault kosong.

## `ClaimPlatformFee`

Penyapu per-platform yang mengosongkan vault quote peluncuran secara langsung. Gunakan ini ketika platform ingin mengklaim bagiannya untuk satu peluncuran spesifik tanpa melalui vault platform agregat.

**Argumen** — tidak ada.

**Akun**

| #  | Nama                       | W | S | Catatan                                                  |
| -- | -------------------------- | - | - | -------------------------------------------------------- |
| 1  | `platform_fee_wallet`      | W | S | Harus sama dengan `platform_config.platform_fee_wallet`. |
| 2  | `authority`                |   |   | PDA `[b"vault_auth_seed"]`.                              |
| 3  | `pool_state`               | W |   | Dikosongkan oleh `pool_state.platform_fee`.              |
| 4  | `platform_config`          |   |   | Sumber kebenaran untuk penandatangan.                    |
| 5  | `quote_vault`              | W |   | Dikosongkan.                                             |
| 6  | `recipient_token_account`  | W |   | `init_if_needed`; ATA dari `platform_fee_wallet`.        |
| 7  | `quote_mint`               |   |   |                                                          |
| 8  | `token_program`            |   |   |                                                          |
| 9  | `system_program`           |   |   |                                                          |
| 10 | `associated_token_program` |   |   |                                                          |

**Efek** — transfer `pool_state.platform_fee` dari `quote_vault` ke `recipient_token_account`, kosongkan penghitung.

## `ClaimPlatformFeeFromVault`

Penyapu agregat per-platform. Mengosongkan vault biaya per-quote-mint platform yang mengakumulasi biaya dari setiap peluncuran yang dirutekan melalui platform.

**Argumen** — tidak ada.

**Akun**

| # | Nama                       | W | S | Catatan                                                  |
| - | -------------------------- | - | - | -------------------------------------------------------- |
| 1 | `platform_fee_wallet`      | W | S | Harus sama dengan `platform_config.platform_fee_wallet`. |
| 2 | `fee_vault_authority`      |   |   | PDA `[b"platform_fee_vault_auth_seed"]`.                 |
| 3 | `platform_config`          |   |   |                                                          |
| 4 | `platform_fee_vault`       | W |   | PDA di seeds `[platform_config, quote_mint]`.            |
| 5 | `recipient_token_account`  | W |   | `init_if_needed`; ATA dari `platform_fee_wallet`.        |
| 6 | `quote_mint`               |   |   |                                                          |
| 7 | `token_program`            |   |   |                                                          |
| 8 | `system_program`           |   |   |                                                          |
| 9 | `associated_token_program` |   |   |                                                          |

**Efek** — transfer saldo penuh `platform_fee_vault` ke `recipient_token_account`. Kembali jika vault kosong.

## Instruksi vesting dan konfigurasi platform

Instruksi ini didokumentasikan di halaman tersendiri karena masing-masing memiliki model state sendiri:

* [`CreateVestingAccount`, `CreatePlatformVestingAccount`, `ClaimVestedToken`](/id/products/launchlab/vesting)
* [`CreatePlatformConfig`, `UpdatePlatformConfig`, `UpdatePlatformCurveParam`, `RemovePlatformCurveParam`, `CreatePlatformGlobalAccess`, `ClosePlatformGlobalAccess`](/id/products/launchlab/platform-config)
* [`CreateConfig`, `UpdateConfig`](/id/products/launchlab/global-config)

## Matriks perubahan state

| Instruksi                               | `status`   | `real_base` | `real_quote`     | Penghitung biaya                               | Pool state-post                        |
| --------------------------------------- | ---------- | ----------- | ---------------- | ---------------------------------------------- | -------------------------------------- |
| `Initialize{V2,WithToken2022}`          | Funding    | 0           | 0                | 0                                              | —                                      |
| `BuyExactIn(q_in)`                      | Funding    | +∆          | +∆q\_after\_fee  | `quote_protocol_fee += ∆`, `platform_fee += ∆` | —                                      |
| `SellExactIn(b_in)`                     | Funding    | −∆          | −∆q\_before\_fee | (sama)                                         | —                                      |
| Ambang batas tercapai                   | → Migrate  | —           | —                | —                                              | —                                      |
| `MigrateToAmm` / `MigrateToCpswap`      | → Migrated | (beku)      | (beku)           | `migrate_fee` diatur                           | dibuat, LP dibagi per `PlatformConfig` |
| `CollectFee` / `CollectMigrateFee`      | setiap     | —           | —                | penghitung dikosongkan                         | —                                      |
| `ClaimCreatorFee` / `ClaimPlatformFee*` | setiap     | —           | —                | mengosongkan vault                             | —                                      |
| `CreateVestingAccount`                  | Funding    | —           | —                | —                                              | bumps `allocated_share_amount`         |
| `ClaimVestedToken`                      | Migrated   | —           | —                | —                                              | mengosongkan `base_vault`              |

## Ke mana selanjutnya

* [`products/launchlab/code-demos`](/id/products/launchlab/code-demos) — contoh TypeScript untuk setiap instruksi.
* [`products/launchlab/accounts`](/id/products/launchlab/accounts) — bentuk state penuh.
* [`reference/error-codes`](/id/reference/error-codes) — enum kesalahan LaunchLab.

Sumber:

* [Modul Raydium SDK v2 `LaunchLab`](https://github.com/raydium-io/raydium-sdk-V2)
* Sumber program Raydium LaunchLab
