> ## 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-27 — LaunchLab: 플랫폼이 민트 생성 시 withdraw-withheld 권한 보유

> InitializeWithToken2022는 이제 PlatformConfig.transfer_fee_extension_auth를 launch authority PDA 대신 새 base 민트의 withdraw_withheld_authority에 기록하며, MigrateToCpswap은 PDA가 여전히 권한을 보유할 때만 그 권한을 재할당합니다. 계정 레이아웃, 명령어, 또는 오류 변경 없음.

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

  [영문판 보기 →](/reference/changelog/2026-08-27-launchlab-token2022-withheld-authority)
</Info>

<Info>
  이 항목은 예정된 LaunchLab 프로그램 업데이트를 다룹니다. 배포 전 로컬 릴리스 브랜치에 대해 검증되었습니다. 졸업 전 withheld 수수료 인출에 의존하기 전에 배포된 프로그램을 확인하세요.
</Info>

`InitializeWithToken2022`로 생성된 Token-2022 base 민트는 `TransferFeeConfig` 확장을 가질 수 있습니다. 이 확장에는 두 가지 권한이 있습니다: 수수료율과 최대 수수료를 변경하는 `transfer_fee_config_authority`, 그리고 Token-2022가 토큰 계정에서 보유하는 수수료를 인출하는 `withdraw_withheld_authority`.

이 릴리스 이전에는 프로그램이 민트 생성 시 두 권한 모두에 launch `authority` PDA를 배치하고 졸업 시 둘 다 `PlatformConfig.transfer_fee_extension_auth`에 넘겼습니다. 런치패드 프로그램에는 withdraw-withheld 또는 harvest 명령어가 없으므로, 전체 보닝 곡선 단계 동안 아무도 withheld 잔액을 인출할 수 없었습니다. 인출할 수 있는 유일한 키는 서명할 명령어가 없는 PDA였습니다.

이 릴리스는 민트 생성 시 `transfer_fee_extension_auth`를 `withdraw_withheld_authority`에 직접 기록하므로, 플랫폼은 첫 거래부터 withheld 수수료를 회수할 수 있습니다. `MigrateToCpswap`은 PDA가 여전히 권한을 보유할 때만 그 권한을 재할당하는 가드를 추가하여, 두 세대의 민트 모두에서 졸업이 작동하도록 유지합니다.

다른 것은 변경되지 않았습니다. 계정이 커지거나 줄어들지 않았고, 명령어가 계정을 얻거나 잃지 않았으며, 인수가 변경되지 않았고, 오류 코드가 이동하지 않았습니다.

## 통합자를 위한 요약

* **Withheld 전송 수수료는 런칭 중에 인출 가능합니다.** `transfer_fee_extension_auth`가 설정된 플랫폼의 새로운 Token-2022 런칭에서, 그 키는 생성 시점부터 민트의 `withdraw_withheld_authority`입니다. Token-2022의 `WithdrawWithheldTokensFromAccounts` / `WithdrawWithheldTokensFromMint`를 직접 호출하세요. LaunchLab에는 이를 위한 명령어가 없으며 처음부터 없었습니다.
* **`transfer_fee_config_authority` 타이밍은 변경되지 않았습니다.** 졸업까지 여전히 launch `authority` PDA이며, `MigrateToCpswap`에서 여전히 `transfer_fee_extension_auth`로 이동합니다. 런칭 중에는 수수료율을 변경할 수 없습니다.
* **런칭 전에 `transfer_fee_extension_auth`를 설정하세요.** 민트 생성 시 `Pubkey::default()`일 때, withdraw 권한은 `authority` PDA로 폴백됩니다 — 이전 동작입니다. 나중에 필드를 설정하면 졸업 시 권한을 복구할 수 있지만, withheld 잔액은 그때까지 고립됩니다.
* **런칭 중에 필드를 회전하지 마세요.** 두 권한은 두 가지 다른 시점에 읽혀지므로, 그 사이에 변경되는 값은 다른 키에 남겨집니다. 자세한 내용은 [회전이 두 권한을 분리합니다](#회전이-두-권한을-분리합니다)를 참조하세요.
* **호출자에게 `MigrateToCpswap`은 변경되지 않았습니다.** 동일한 계정, 동일한 인수, 동일한 오류입니다. 새로운 가드는 내부적입니다. 없으면 새 세대 민트의 마이그레이션이 Token-2022 내부에서 되돌려질 것입니다. PDA가 더 이상 보유하지 않는 권한을 서명할 수 없기 때문입니다.
* **기존 런칭은 영향을 받지 않습니다.** 이미 온체인에 있는 민트는 두 권한 모두에 PDA를 유지하고 졸업 시 둘 다 넘겨받습니다.
* **IDL 새로고침이 필요하지 않습니다.** 레이아웃, 계정, 인수, 또는 오류 코드가 변경되지 않았습니다.

## 누가 무엇을 보유하고 언제인가

| 권한                              | 민트 생성 시 보유자                                                                 | `MigrateToCpswap` 후 보유자                        |
| ------------------------------- | --------------------------------------------------------------------------- | ---------------------------------------------- |
| `withdraw_withheld_authority`   | `transfer_fee_extension_auth`; 그 필드가 `Pubkey::default()`일 때 `authority` PDA | 이미 플랫폼 키일 때 변경 없음. PDA가 여전히 보유할 때만 재할당.        |
| `transfer_fee_config_authority` | `authority` PDA, 항상                                                         | `transfer_fee_extension_auth`, 그 필드가 기본값이 아닐 때 |

두 인수 모두 여전히 항상 그랬던 동일한 외부 조건 뒤에 있습니다: base 민트는 `TransferFeeConfig`를 **그리고** `transfer_fee_extension_auth`는 기본값이 아니어야 합니다. 필드를 설정하지 않는 플랫폼은 두 권한을 `authority` PDA에 영구적으로 유지합니다 — 수수료율을 변경할 수 없고 withheld 잔액을 인출할 수 없습니다.

## 회전이 두 권한을 분리합니다

`transfer_fee_extension_auth`는 런칭당 두 번, 며칠 떨어진 두 시점에 읽혀집니다:

1. `InitializeWithToken2022`에서, `withdraw_withheld_authority`를 위해.
2. `MigrateToCpswap`에서, `transfer_fee_config_authority`를 위해 — 그리고 PDA가 여전히 보유할 때만 `withdraw_withheld_authority`를 위해.

그 사이에 `UpdatePlatformConfig`를 통해 필드를 회전하면 두 권한이 다른 키에 착지합니다: withdraw 측은 생성 시 구성된 키를 유지합니다. PDA가 더 이상 보유하지 않고 마이그레이션이 그 인수를 건너뛰기 때문입니다. 반면 수수료 구성 측은 새 키로 이동합니다. 어느 호출도 실패하지 않습니다. 분리는 조용합니다. 런칭 사이에 회전하거나, 나중에 Token-2022를 통해 직접 이전 키로 서명하여 키를 조정하세요.

## 가드가 필요한 이유, 단순히 방어적이지 않은 이유

Token-2022의 `SetAuthority`는 *현재* 권한이 서명해야 합니다. 새로운 생성 규칙에서 launch `authority` PDA는 새 민트의 withdraw-withheld 권한이 아니므로, 프로그램이 만들던 무조건적 CPI는 실패할 것입니다 — 그리고 `MigrateToCpswap` 내부에 있기 때문에, 그 실패는 전송 수수료가 있는 모든 Token-2022 런칭의 졸업을 차단했을 것입니다. 필드를 구성한 플랫폼에서. 두 변경은 쌍으로만 작동합니다.

## 변경되지 않은 것

* **전송 수수료 수학 및 회계.** `MAX_TRANSFER_FEE_RATE`는 여전히 `500` (5%, 분모 `10_000`), 수수료는 여전히 곡선에 동일한 방식으로 가격이 책정되며, withheld 잔액은 여전히 Token-2022가 배치하는 토큰 계정에 누적됩니다.
* **`MigrateToCpswap`의 인터페이스.** 동일한 계정 목록, 동일한 `remaining_accounts` 인덱스, 동일한 두 토큰 프로그램, 인수 없음.
* **`InitializeWithToken2022`의 인터페이스.** 동일한 계정, 동일한 `TransferFeeExtensionParams`, `MetadataPointer`와 `TransferFeeConfig` 외의 모든 것에 대한 동일한 `NoSupportExtension` 거부.
* **Quote 측 Token-2022 처리.** [2026-08-24](/ko/reference/changelog/2026-08-24-launchlab-token2022-quote-mint)에서 변경되지 않음.
* **오류 코드.** `6000`–`6023`은 변경되지 않았습니다. 이 릴리스는 추가하지 않습니다.
* **계정 레이아웃 및 IDL.** 변경되지 않음. `PlatformConfig.transfer_fee_extension_auth`는 오프셋과 타입을 유지합니다. 프로그램이 읽는 방식만 변경되었습니다.

## 업데이트된 페이지

* `products/launchlab/platform-config` — 두 권한, 두 인수 지점, 회전 함정을 다루는 새로운 "Token-2022 전송 수수료 권한" 섹션; 레이아웃 주석 및 함정 목록 수정.
* `products/launchlab/instructions` — `MigrateToCpswap`은 "Token-2022 전송 수수료 권한 인수" 블록을 추가합니다. `Initialize` 사후 조건은 새 민트 생성 권한을 기록합니다.
* `products/launchlab/accounts` — authority-PDA 역할 목록 및 base-mint 섹션은 PDA가 실제로 보유하는 전송 수수료 권한을 기록합니다.
* `reference/token-2022-support` — LaunchLab base-mint 항목은 전송 수수료 권한을 보유하는 사람과 시기를 명시합니다.
