> ## 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은 이제 설정, 풀 생성, 스왑, 수수료 청구, CPMM 마이그레이션 전반에서 Token-2022 quote mints를 지원합니다. 스왑 슬리피지 한계는 이제 quote 측 전송 수수료를 반영하고, PoolState.token_program_flag bit1이 의미를 갖게 되며, MigrateToCpswap이 두 개의 토큰 프로그램 계정을 이름 변경합니다.

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

  [영문판 보기 →](/reference/changelog/2026-08-24-launchlab-token2022-quote-mint)
</Info>

<Info>
  이 항목은 예정된 LaunchLab 프로그램 업데이트를 다룹니다. 배포 전에 로컬 릴리스 브랜치에 대해 검증되었습니다. 프로덕션에서 새로운 경로를 활성화하기 전에 배포된 프로그램과 게시된 IDL을 확인하세요.
</Info>

이 릴리스를 통해 런칭이 Token-2022 mint로 인용될 수 있습니다. 지금까지 quote 측은 레거시 SPL Token 프로그램으로 고정되어 있었으므로 base mint만 Token-2022일 수 있었습니다. quote mint가 접촉되는 모든 곳 — `GlobalConfig` 생성, 풀 초기화, 4개의 스왑 명령어, 모든 수수료 청구, CPMM 마이그레이션 — 이제 두 토큰 프로그램을 모두 수용하며, 스왑 명령어는 quote mint의 전송 수수료를 고려합니다.

## 통합자를 위한 요약

* **Quote mints는 Token-2022일 수 있습니다.** `CreateConfig`는 Token-2022 `quote_token_mint`를 수용하고, `InitializeV2` / `InitializeWithToken2022`는 quote-program 슬롯에서 두 토큰 프로그램을 모두 수용합니다. 계정 순서는 변경되지 않습니다 — 해당 슬롯에 전달하는 값만 변경됩니다.
* **더 이상 사용되지 않는 `Initialize`는 여전히 레거시 전용입니다.** 해당 quote-program 계정은 여전히 SPL Token으로 입력되므로, quote mint가 Token-2022인 설정은 `InitializeV2` 또는 `InitializeWithToken2022`를 통해서만 시작할 수 있습니다.
* **슬리피지 한계는 지불자가 실제로 지불하고 받는 금액으로 이동합니다.** `minimum_amount_out`과 `maximum_amount_in`은 이제 vault가 이동한 금액이 아닌 quote mint의 전송 수수료를 차감한 순 금액과 비교됩니다. 수수료 부담 quote mint에서 기존 견적 로직은 비용을 과소 견적하고 수익을 과다 견적합니다.
* **`PoolState.token_program_flag` bit1이 의미를 갖습니다.** quote mints가 레거시 전용일 때는 항상 `0`이었습니다. 전체 바이트를 `0`과 비교하는 클라이언트는 quote mint가 Token-2022일 때마다 레거시 base mint를 Token-2022로 읽을 것입니다. 이것이 이 릴리스에서 가장 가능성 높은 무음 중단입니다.
* **`MigrateToCpswap`이 두 개의 토큰 프로그램 계정을 이름 변경합니다.** `base_token_program` / `quote_token_program`은 `token_program` / `token_program_2022`가 됩니다. 둘 다 항상 필요하며, 프로그램은 mint당 올바른 것을 선택합니다.
* **Mint/프로그램 쌍이 이제 검증됩니다.** 두 스왑 mint 모두 `mint::token_program` 제약을 얻었으며, `ClaimPlatformFee`의 quote mint도 마찬가지이므로, 일치하지 않는 쌍은 무시되는 대신 되돌려집니다.
* **새로운 오류 `6023` `CalculateOverflow`.** 코드 `6000`–`6022`는 변경되지 않습니다. `6023`은 이전 릴리스에서 비워졌으며 이제 재사용됩니다.
* **수수료 vault는 quote mint를 따릅니다.** 생성자 및 플랫폼 수수료 vault, 그리고 공유 수수료 수신자의 토큰 계정은 quote mint를 소유한 프로그램에 있습니다.

## 어떤 계정이 타입을 변경했는가

이들 중 어느 것도 계정 목록의 위치를 변경하지 않습니다. 허용되는 값만 변경됩니다.

| 명령어                                                                  | 계정                    | 이전             | 이후             |
| -------------------------------------------------------------------- | --------------------- | -------------- | -------------- |
| `CreateConfig`                                                       | `quote_token_mint`    | SPL Token mint | 어느 프로그램의 mint든 |
| `InitializeV2`                                                       | `quote_token_program` | SPL Token      | 어느 프로그램든       |
| `InitializeWithToken2022`                                            | `quote_token_program` | SPL Token      | 어느 프로그램든       |
| `BuyExactIn` / `BuyExactOut` / `SellExactIn` / `SellExactOut`        | `quote_token_program` | SPL Token      | 어느 프로그램든       |
| `CollectFee` / `CollectMigrateFee`                                   | `token_program`       | SPL Token      | 어느 프로그램든       |
| `ClaimCreatorFee` / `ClaimPlatformFee` / `ClaimPlatformFeeFromVault` | `token_program`       | SPL Token      | 어느 프로그램든       |

`Initialize` (더 이상 사용되지 않는 V1 경로)는 의도적으로 이 표에 없습니다. 해당 quote-program 계정은 SPL Token으로 입력된 상태로 유지됩니다.

이들 중 여러 개는 또한 mint 제약을 강화했으므로, 일치하지 않는 mint/프로그램 쌍은 이전에 수용되거나 확인되지 않은 곳에서 이제 되돌려집니다:

* 4개의 스왑 명령어는 `base_token_mint`와 `quote_token_mint` 모두를 일치하는 슬롯에 전달된 프로그램으로 제약합니다. 이전에는 어느 것도 해당 제약을 수행하지 않았으므로, 잘못된 base 프로그램은 무음으로 수용되었습니다.
* `ClaimPlatformFee`는 `quote_mint`에 동일한 제약을 추가합니다.
* `ClaimPlatformFeeFromVault`는 mint 계정인 것에 대한 제약을 토큰 계정 형식에서 mint 형식으로 수정합니다.

## Quote 측 전송 수수료 회계

이것은 계정 목록이 아닌 숫자를 변경하는 부분입니다. `TransferFeeConfig`가 없는 quote mint에서 아래의 모든 공식은 이전 동작으로 축소되므로, 레거시 풀과 수수료 없는 Token-2022 풀은 비트 단위로 변경되지 않습니다.

| 명령어            | 인수가 이제 의미하는 것                                                                                                                                                                      |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BuyExactIn`   | `amount_in`은 총 차변입니다. 곡선은 `amount_in − transfer_fee(amount_in)`으로 가격이 책정되며, 이것이 vault에 도착하는 것입니다. 완전 채우기에서 지불자는 정확히 `amount_in`으로 청구됩니다. 부분 채우기에서 청구는 소비된 vault 금액을 다시 총액으로 계산합니다. |
| `BuyExactOut`  | `maximum_amount_in`은 vault 금액 **더하기** 역 전송 수수료 — 실제 차변 — 과 비교되며, vault 금액만이 아닙니다.                                                                                                  |
| `SellExactIn`  | `minimum_amount_out`은 vault에서 해제된 총액이 아닌 mint가 수수료를 보류한 후 판매자가 남긴 것과 비교됩니다.                                                                                                        |
| `SellExactOut` | `amount_out`은 판매자가 최종적으로 받는 것입니다. 곡선은 `amount_out` 더하기 역 전송 수수료를 목표로 하므로, 요청된 금액이 정확히 도착합니다.                                                                                       |

명확히 명시할 가치가 있는 두 가지 결과:

* 동등한 수수료 없는 풀에서 계산된 한계는 더 이상 허용되지 않습니다. 수수료 없는 비용을 `maximum_amount_in`으로 하는 `BuyExactOut`은 이제 `ExceededSlippage`로 되돌려지며, 수수료 없는 수익을 `minimum_amount_out`으로 하는 `SellExactIn`도 마찬가지입니다. 이것이 의도된 동작입니다 — 이전 비교는 지불자가 이미 동의한 한계 위에 전송 수수료로 청구되도록 했습니다.
* 풀은 vault에 도착한 것만 기록합니다. 5% quote mint에서 `amount_in`의 `BuyExactIn` 후, `real_quote`는 `amount_in`이 아닌 `amount_in × 0.95`만큼 증가합니다.

`get_transfer_inverse_fee`는 또한 100% 수수료 mint에 대한 특수 사례를 제거했습니다: `maximum_fee`로 폴백하는 대신, 역 수수료를 계산할 수 없을 때 새로운 `CalculateOverflow` 오류를 반환합니다. `10000` 기본점의 quote mint는 따라서 수수료 상한에서 무음으로 거래하는 대신 정확한 출력 경로에 실패합니다.

## `token_program_flag` bit1

`PoolState.token_program_flag`는 비트필드이며 항상 그래왔습니다:

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

필드, 비트 위치, 두 비트를 모두 쓰는 코드는 모두 이 릴리스보다 앞서갑니다. 변경되는 것은 quote mint가 이제 Token-2022 mint일 수 있으므로 bit1이 실제로 `1`일 수 있다는 것입니다. 4개의 값은:

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

`(token_program_flag >> bit) & 1`로 각 mint의 프로그램을 읽습니다. base mint에 대해 바이트를 부울로 취급하는 모든 클라이언트 — `flag === 0 ? Token : Token-2022` — 값 `2`를 Token-2022 base mint로 해석하고 base 측 토큰 계정과 전송을 잘못된 프로그램에 대해 구축할 것입니다. 계정 크기나 필드 오프셋 변경이 없으므로, 인덱서는 저장소 마이그레이션이 필요하지 않으며, 디코드 수정만 필요합니다.

## CPMM 마이그레이션 계정 이름 변경

`MigrateToCpswap`은 이전에 mint당 하나의 토큰 프로그램을 가져갔으며, 호출자가 어느 것이 어느 것인지 결정했습니다. 이제 두 프로그램을 무조건 가져가고 mint 자체에서 매핑을 파생합니다:

| 위치           | 이전                                            | 이후                                        |
| ------------ | --------------------------------------------- | ----------------------------------------- |
| 첫 번째 토큰 프로그램 | `base_token_program` — base mint를 소유한 프로그램    | `token_program` — 항상 레거시 SPL Token 프로그램   |
| 두 번째 토큰 프로그램 | `quote_token_program` — 항상 레거시 SPL Token 프로그램 | `token_program_2022` — 항상 Token-2022 프로그램 |

두 위치는 변경되지 않으므로 이것은 레이아웃 변경이 아닌 값 변경입니다 — 하지만 값은 거의 반전되며, 이전 쌍을 계속 전달하는 빌더는 어느 mint든 Token-2022 mint가 되는 즉시 레거시 프로그램이 필요한 곳에 Token-2022를 전달할 것입니다.

레거시 프로그램은 CPMM LP mint와 잠금 유동성 Fee Key NFT가 항상 그것에 있기 때문에 어느 mint든 무조건 필요합니다. [2026-08-17 릴리스](/ko/reference/changelog/2026-08-17-launchlab-cpmm-only-platform-config)의 `remaining_accounts` 레이아웃은 변경되지 않습니다.

## Quote mints는 관리자 재량으로만 허용됩니다

CPMM 및 CLMM과 달리, LaunchLab은 quote mint에 대해 **어떤** 확장 허용 목록도 실행하지 않습니다. `CreateConfig`는 mint 계정을 그대로 수용하므로, 유일한 게이트는 관리자가 `GlobalConfig`에 바인딩하는 mint입니다. 프로그램의 `NoSupportExtension` 확인은 LaunchLab이 자체적으로 생성하는 Token-2022 base mints에만 적용되며, `MetadataPointer`와 `TransferFeeConfig`만 허용됩니다.

Token-2022 quote mint를 바인딩하는 것을 [`reference/token-2022-support`](/ko/reference/token-2022-support)의 CPMM/CLMM 정적 화이트리스트와 동일한 추론으로 높은 신뢰 작업으로 취급합니다. `TransferHook` 또는 `PermanentDelegate` quote mint는 설정 생성 시 허용되며, 그 후 그것에서 인용된 모든 풀에서 실행되거나 스윕할 수 있을 것입니다.

## `amm_creator_fee_on` 타임스탬프 게이트

`InitializeV2`는 업그레이드 타임스탬프 전에 `BothToken` 이외의 `amm_creator_fee_on`을 거부한 타임스탬프 게이트를 제거합니다. 동등한 게이트는 여전히 `InitializeWithToken2022`에 있습니다. 실제로 두 경로 모두 오늘 mainnet-beta에서 어느 값이든 수용합니다. 왜냐하면 해당 타임스탬프 (`1755522000`, 2025-08-18 13:00 UTC)는 오래 지났기 때문입니다 — 이것은 현재 호출자에 대한 동작 변경이 아닌 정리입니다.

## 오류 및 IDL 영향

코드 `6000`–`6022`는 `6022` `InvalidPlatformAllowConfig`를 포함하여 변경되지 않습니다.

| 코드   | 이름                  | 의미                                 |
| ---- | ------------------- | ---------------------------------- |
| 6023 | `CalculateOverflow` | 전송 수수료 또는 역 전송 수수료 계산을 표현할 수 없습니다. |

이전 릴리스는 이전 `6023`을 폐기하고 비워두었습니다. 이 릴리스는 번호를 재사용합니다. 이전 두 버전의 IDL로 `6023`을 디코드하지 마세요.

Token-2022 quote 프로그램을 전달하기 전에, `token_program_flag` bit1을 디코드하기 전에, 또는 이름이 변경된 `MigrateToCpswap` 계정 목록을 구축하기 전에 LaunchLab IDL을 새로고침합니다.

## SDK 영향

SDK의 launchpad 모듈의 quote 측은 프로그램이 있던 동일한 장소에서 `TOKEN_PROGRAM_ID`로 하드코딩되었습니다. 이 릴리스를 수반하는 브랜치는 대신 quote mint의 소유자를 해석하고, 토큰 계정 생성, 공유 수수료 수신자의 ATA, 명령어의 quote-program 슬롯을 통해 스레드하며, 4개의 `Curve` 메서드에 선택적 `transferFeeConfigB`를 추가하므로 견적은 위의 공식을 반영합니다. `Curve` 결과는 `transferFeeB` 필드를 얻습니다. `amountB`는 의미를 유지합니다 — 지불자가 지출하거나 판매자가 받는 것 — 따라서 수수료 없는 quote mint는 이전과 동일한 숫자를 생성합니다.

이 SDK 변경은 미발표입니다. 이 설명서 세트의 코드 데모 페이지의 정규 핀은 변경되지 않습니다. 새로운 매개변수에 의존하기 전에 게시된 버전을 확인합니다.

## 참조 구현

새로운 데모는 Yellowstone gRPC를 통해 LaunchLab 프로그램을 구독하고, 모든 `GlobalConfig` 및 `PoolState` 업데이트에 대해 각 mint가 Token 또는 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)

이것은 이 릴리스가 필요하게 하는 두 가지에 대한 간단한 참조입니다. 풀은 `token_program_flag`에서 직접 분류되며, mint 페치 없이 두 비트를 모두 디코드합니다 — 이것이 위에서 설명한 bit1 중단에 대한 수정입니다. 설정은 `GlobalConfig`가 quote mint의 주소만 저장하고 프로그램 플래그는 저장하지 않기 때문에 그런 식으로 분류될 수 없으므로, 데모는 mint 계정의 소유자를 한 번 읽고 mint당 캐시합니다. 두 경로를 나란히 보는 것이 자신의 디코더를 확인하는 가장 빠른 방법입니다.

[`products/launchlab/code-demos`](/ko/products/launchlab/code-demos#watch-configs-and-pools-over-grpc)의 연습을 참조합니다.

## 업데이트된 페이지

* `products/launchlab/accounts` — quote-mint 토큰 프로그램, `token_program_flag` 비트 레이아웃, vault 소유권.
* `products/launchlab/instructions` — quote-program 계정, 스왑 슬리피지 의미론, 이름이 변경된 마이그레이션 계정.
* `products/launchlab/global-config` — `quote_mint`는 Token-2022 mint일 수 있으며, 무엇이 그것을 게이트하고 무엇이 게이트하지 않는지.
* `products/launchlab/code-demos` — gRPC 설정/풀 감시자.
* `reference/token-2022-support` — LaunchLab 행 및 quote-mint 섹션.
* `reference/error-codes` — `6023` `CalculateOverflow`.
