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

# 2026-08-24 — LaunchLab: Token-2022 quote mints

> LaunchLab menerima Token-2022 quote mints di seluruh config, pembuatan pool, swap, klaim fee, dan migrasi CPMM. Batas slippage swap sekarang memperhitungkan transfer fee sisi quote, bit1 PoolState.token_program_flag menjadi bermakna, dan MigrateToCpswap mengganti nama dua akun token-program-nya.

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

  [Lihat versi bahasa Inggris →](/reference/changelog/2026-08-24-launchlab-token2022-quote-mint)
</Info>

<Info>
  Entri ini mencakup pembaruan program LaunchLab yang akan datang. Entri ini telah diverifikasi terhadap cabang rilis lokal sebelum deployment. Konfirmasi program yang di-deploy dan IDL yang dipublikasikan sebelum mengaktifkan jalur baru di production.
</Info>

Rilis ini memungkinkan launch dikutip dalam Token-2022 mint. Sampai sekarang sisi quote terikat pada program SPL Token legacy, jadi hanya base mint yang bisa Token-2022. Setiap tempat quote mint disentuh — pembuatan `GlobalConfig`, inisialisasi pool, empat instruksi swap, semua klaim fee, dan migrasi CPMM — sekarang menerima salah satu token program, dan instruksi swap memperhitungkan transfer fee quote mint.

## TL;DR untuk integrator

* **Quote mints bisa Token-2022.** `CreateConfig` menerima Token-2022 `quote_token_mint`, dan `InitializeV2` / `InitializeWithToken2022` menerima salah satu token program di slot quote-program. Urutan akun tidak berubah — nilai yang Anda lewatkan di slot itu yang berubah.
* **`Initialize` yang sudah usang masih legacy-only.** Akun quote-program-nya masih diketik ke SPL Token, jadi config yang quote mint-nya Token-2022 hanya bisa diluncurkan melalui `InitializeV2` atau `InitializeWithToken2022`.
* **Batas slippage bergerak ke apa yang sebenarnya dibayar dan diterima payer.** `minimum_amount_out` dan `maximum_amount_in` sekarang dibandingkan dengan jumlah bersih transfer fee quote mint, bukan jumlah yang dipindahkan vault. Logika quoting yang ada under-quote biaya dan over-quote proceeds pada quote mint yang membawa fee.
* **`PoolState.token_program_flag` bit1 menjadi bermakna.** Selalu `0` saat quote mints legacy-only. Client yang membandingkan seluruh byte terhadap `0` sekarang akan membaca base mint legacy sebagai Token-2022 kapan pun quote mint adalah Token-2022. Ini adalah kemungkinan silent breakage terbesar dalam rilis ini.
* **`MigrateToCpswap` mengganti nama dua akun token-program-nya.** `base_token_program` / `quote_token_program` menjadi `token_program` / `token_program_2022`. Keduanya selalu diperlukan, dan program memilih yang tepat per mint.
* **Pasangan mint/program sekarang divalidasi.** Kedua swap mints mendapat constraint `mint::token_program`, begitu juga quote mint `ClaimPlatformFee`, jadi pasangan yang tidak cocok reverts daripada diabaikan.
* **Error baru `6023` `CalculateOverflow`.** Kode `6000`–`6022` tidak berubah. `6023` dikosongkan oleh rilis sebelumnya dan sekarang digunakan kembali.
* **Fee vaults mengikuti quote mint.** Creator dan platform fee vaults, dan token account penerima share-fee, berada di program mana pun yang memiliki quote mint.

## Akun mana yang berubah tipe

Tidak ada yang mengubah posisi dalam daftar akun mereka. Hanya nilai yang diizinkan yang berubah.

| Instruksi                                                            | Akun                  | Sebelum        | Sesudah                      |
| -------------------------------------------------------------------- | --------------------- | -------------- | ---------------------------- |
| `CreateConfig`                                                       | `quote_token_mint`    | SPL Token mint | mint dari salah satu program |
| `InitializeV2`                                                       | `quote_token_program` | SPL Token      | salah satu program           |
| `InitializeWithToken2022`                                            | `quote_token_program` | SPL Token      | salah satu program           |
| `BuyExactIn` / `BuyExactOut` / `SellExactIn` / `SellExactOut`        | `quote_token_program` | SPL Token      | salah satu program           |
| `CollectFee` / `CollectMigrateFee`                                   | `token_program`       | SPL Token      | salah satu program           |
| `ClaimCreatorFee` / `ClaimPlatformFee` / `ClaimPlatformFeeFromVault` | `token_program`       | SPL Token      | salah satu program           |

`Initialize` (jalur V1 yang sudah usang) sengaja tidak ada di tabel ini. Akun quote-program-nya tetap diketik ke SPL Token.

Beberapa dari ini juga memperketat constraint mint mereka, jadi pasangan mint/program yang tidak cocok sekarang reverts di mana sebelumnya diterima atau tidak diperiksa:

* Empat instruksi swap membatasi `base_token_mint` dan `quote_token_mint` ke program yang dilewatkan di slot yang cocok. Tidak ada yang membawa constraint itu sebelumnya, jadi program base yang salah diterima secara diam-diam.
* `ClaimPlatformFee` menambahkan constraint yang sama pada `quote_mint`.
* `ClaimPlatformFeeFromVault` memperbaiki constraint-nya dari bentuk token-account ke bentuk mint pada apa yang merupakan akun mint.

## Akuntansi transfer-fee sisi quote

Ini adalah bagian yang mengubah angka daripada daftar akun. Pada quote mint tanpa `TransferFeeConfig` setiap formula di bawah runtuh ke perilaku sebelumnya, jadi pool legacy dan pool Token-2022 bebas fee adalah bit-for-bit tidak berubah.

| Instruksi      | Apa arti argumen sekarang                                                                                                                                                                                                                                                             |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BuyExactIn`   | `amount_in` adalah debit kotor. Kurva dihargai pada `amount_in − transfer_fee(amount_in)`, yang merupakan apa yang masuk ke vault. Pada pengisian penuh payer dikenakan biaya tepat `amount_in`; pada pengisian sebagian biaya adalah jumlah vault yang dikonsumsi dinaikkan kembali. |
| `BuyExactOut`  | `maximum_amount_in` dibandingkan dengan jumlah vault **plus** inverse transfer fee — debit nyata — daripada hanya jumlah vault.                                                                                                                                                       |
| `SellExactIn`  | `minimum_amount_out` dibandingkan dengan apa yang tersisa untuk penjual setelah mint menahan fee-nya, bukan terhadap jumlah kotor yang dilepaskan dari vault.                                                                                                                         |
| `SellExactOut` | `amount_out` adalah apa yang akhirnya diterima penjual. Kurva menargetkan `amount_out` plus inverse transfer fee, jadi jumlah yang diminta tiba dengan tepat.                                                                                                                         |

Dua konsekuensi yang patut dinyatakan dengan jelas:

* Batas yang dihitung dari pool bebas fee yang setara tidak lagi dapat diterima. `BuyExactOut` dengan biaya bebas fee sebagai `maximum_amount_in` sekarang reverts dengan `ExceededSlippage`, begitu juga `SellExactIn` dengan proceeds bebas fee sebagai `minimum_amount_out`. Itu adalah perilaku yang dimaksudkan — perbandingan lama membiarkan payer dikenakan transfer fee di atas batas yang sudah mereka setujui.
* Pool hanya membukukan apa yang mencapai vault. Setelah `BuyExactIn` dari `amount_in` pada mint quote 5%, `real_quote` maju sebesar `amount_in × 0.95`, bukan `amount_in`.

`get_transfer_inverse_fee` juga menghilangkan kasus khusus untuk mint dengan fee 100%: daripada kembali ke `maximum_fee`, sekarang mengembalikan error `CalculateOverflow` baru ketika inverse fee tidak dapat dihitung. Quote mint pada `10000` basis points oleh karena itu gagal pada jalur exact-out daripada secara diam-diam bertransaksi pada batas fee.

## Bit1 `token_program_flag`

`PoolState.token_program_flag` adalah bitfield, dan selalu demikian:

```text theme={null}
bit0  base mint  0 = SPL Token, 1 = Token-2022
bit1  quote mint 0 = SPL Token, 1 = Token-2022
```

Field, posisi bit, dan kode yang menulis kedua bit semuanya mendahului rilis ini. Apa yang berubah adalah bit1 sekarang benar-benar bisa `1`, karena quote mint sekarang bisa menjadi Token-2022 mint. Empat nilai adalah:

| Nilai | Base mint  | Quote mint |
| ----- | ---------- | ---------- |
| `0`   | SPL Token  | SPL Token  |
| `1`   | Token-2022 | SPL Token  |
| `2`   | SPL Token  | Token-2022 |
| `3`   | Token-2022 | Token-2022 |

Baca program setiap mint dengan `(token_program_flag >> bit) & 1`. Setiap client yang memperlakukan byte sebagai boolean untuk base mint — `flag === 0 ? Token : Token-2022` — menyelesaikan nilai `2` ke base mint Token-2022 dan akan membangun token account sisi base dan transfer terhadap program yang salah. Tidak ada perubahan ukuran akun atau offset field, jadi indexer tidak memerlukan migrasi storage, hanya perbaikan decode.

## Penggantian nama akun migrasi CPMM

`MigrateToCpswap` sebelumnya mengambil satu token program per mint, dan caller memutuskan mana yang mana. Sekarang mengambil kedua program tanpa syarat dan menurunkan pemetaan dari mint itu sendiri:

| Posisi                | Sebelum                                                         | Sesudah                                           |
| --------------------- | --------------------------------------------------------------- | ------------------------------------------------- |
| token program pertama | `base_token_program` — program mana pun yang memiliki base mint | `token_program` — selalu program SPL Token legacy |
| token program kedua   | `quote_token_program` — selalu program SPL Token legacy         | `token_program_2022` — selalu program Token-2022  |

Dua posisi tidak berubah, jadi ini adalah perubahan nilai, bukan perubahan layout — tetapi nilainya hampir terbalik, dan builder yang terus melewatkan pasangan lamanya akan melewatkan Token-2022 di mana program legacy diperlukan segera setelah salah satu mint adalah Token-2022 mint.

Program legacy masih diperlukan tanpa syarat terlepas dari mint mana pun, karena LP mint CPMM dan NFT Fee Key yang terkunci selalu berada di atasnya. Layout `remaining_accounts` dari [rilis 2026-08-17](/id/reference/changelog/2026-08-17-launchlab-cpmm-only-platform-config) tidak berubah.

## Quote mints diterima atas kebijakan admin saja

Tidak seperti CPMM dan CLMM, LaunchLab menjalankan **tidak ada** extension allow-list terhadap quote mint. `CreateConfig` menerima akun mint apa adanya, jadi satu-satunya gate adalah mint mana yang admin ikat ke `GlobalConfig`. Pemeriksaan `NoSupportExtension` program berlaku hanya pada Token-2022 base mints yang dibuat LaunchLab sendiri, di mana hanya `MetadataPointer` dan `TransferFeeConfig` yang diizinkan.

Perlakukan pengikatan Token-2022 quote mint sebagai tindakan kepercayaan tinggi dengan alasan yang sama seperti whitelist statis CPMM/CLMM di [`reference/token-2022-support`](/id/reference/token-2022-support). Quote mint `TransferHook` atau `PermanentDelegate` akan diterima pada waktu pembuatan config dan kemudian akan berjalan pada, atau dapat menyapu, setiap pool yang dikutip di dalamnya.

## Gate timestamp `amm_creator_fee_on`

`InitializeV2` menghilangkan gate timestamp yang menolak `amm_creator_fee_on` apa pun selain `BothToken` sebelum timestamp upgrade. Gate yang setara masih ada di `InitializeWithToken2022`. Dalam praktik kedua jalur menerima nilai apa pun di mainnet-beta hari ini, karena timestamp itu (`1755522000`, 2025-08-18 13:00 UTC) sudah lama berlalu — ini adalah pembersihan, bukan perubahan perilaku untuk caller saat ini.

## Dampak error dan IDL

Kode `6000`–`6022` tidak berubah, termasuk `6022` `InvalidPlatformAllowConfig`.

| Kode | Nama                | Arti                                                                              |
| ---- | ------------------- | --------------------------------------------------------------------------------- |
| 6023 | `CalculateOverflow` | Perhitungan transfer-fee atau inverse-transfer-fee tidak dapat direpresentasikan. |

Rilis sebelumnya menghentikan `6023` lama dan meninggalkannya kosong; rilis ini menggunakan kembali nomor itu. Jangan decode `6023` dengan IDL dari versi mana pun yang lebih awal.

Refresh IDL LaunchLab sebelum melewatkan Token-2022 quote program, decode bit1 `token_program_flag`, atau membangun daftar akun `MigrateToCpswap` yang diganti nama.

## Dampak SDK

Sisi quote modul launchpad SDK dikode keras ke `TOKEN_PROGRAM_ID` di tempat yang sama program itu. Cabang yang menyertai rilis ini menyelesaikan pemilik quote mint sebagai gantinya, melewatkannya melalui pembuatan token-account, ATA penerima share-fee, dan slot quote-program instruksi, dan menambahkan `transferFeeConfigB` opsional ke empat metode `Curve` sehingga quote mencerminkan formula di atas. Hasil `Curve` mendapat field `transferFeeB`; `amountB` mempertahankan artinya — apa yang dibelanjakan payer atau diterima penjual — jadi quote mint bebas fee menghasilkan angka identik dengan sebelumnya.

Perubahan SDK ini belum dirilis. Pin kanonik pada halaman code-demo dalam set dokumentasi ini tidak berubah; periksa versi yang dipublikasikan sebelum mengandalkan parameter baru.

## Implementasi referensi

Demo baru berlangganan program LaunchLab melalui Yellowstone gRPC dan mencatat, untuk setiap pembaruan `GlobalConfig` dan `PoolState`, apakah setiap mint adalah Token atau Token-2022 mint:

[`raydium-sdk-V2-demo/src/grpc/launchpadPoolInfo.ts`](https://github.com/raydium-io/raydium-sdk-V2-demo/blob/master/src/grpc/launchpadPoolInfo.ts)

Ini adalah referensi ringkas untuk dua hal yang rilis ini buat perlu. Pool diklasifikasikan langsung dari `token_program_flag`, decode kedua bit tanpa fetch mint sama sekali — itu adalah perbaikan untuk breakage bit1 yang dijelaskan di atas. Config tidak dapat diklasifikasikan dengan cara itu, karena `GlobalConfig` hanya menyimpan alamat quote mint-nya dan tidak ada program flag, jadi demo membaca pemilik akun mint sekali dan cache-nya per mint. Melihat kedua jalur berdampingan adalah cara tercepat untuk memeriksa decoder Anda sendiri.

Lihat [`products/launchlab/code-demos`](/id/products/launchlab/code-demos#watch-configs-and-pools-over-grpc) untuk panduan.

## Halaman yang diperbarui

* `products/launchlab/accounts` — token program quote-mint, layout bit `token_program_flag`, dan kepemilikan vault.
* `products/launchlab/instructions` — akun quote-program, semantik slippage swap, dan akun migrasi yang diganti nama.
* `products/launchlab/global-config` — `quote_mint` mungkin Token-2022 mint, dan apa yang melakukan dan tidak melakukan gate-nya.
* `products/launchlab/code-demos` — pemantau config/pool gRPC.
* `reference/token-2022-support` — baris LaunchLab dan bagian quote-mint.
* `reference/error-codes` — `6023` `CalculateOverflow`.
