> ## 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-31 — LaunchLab: 플랫폼 곡선 규칙이 곡선 매개변수 화이트리스트를 대체합니다

> 런칭 매개변수 제한이 PlatformConfig.curve_params에서 (필드, 연산자, 값) 제약, 값 범위, OR 처리된 체크 그룹, 위임된 관리자 지갑을 포함하는 개별 PlatformCurveRule 계정으로 이동합니다. PlatformConfig는 944바이트 크기를 유지하며, 레거시 필드와 두 개의 명령어가 제거되고 7개의 오류 코드가 추가됩니다.

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

  [영문판 보기 →](/reference/changelog/2026-08-31-launchlab-platform-curve-rules)
</Info>

<Info>
  이 항목은 예정된 LaunchLab 프로그램 업데이트를 다룹니다. 배포 전에 로컬 릴리스 브랜치에 대해 검증되었습니다. 새로운 계정이나 명령어를 사용하기 전에 배포된 프로그램을 확인하세요.
</Info>

플랫폼은 이미 `PlatformConfig.curve_params`를 통해 크리에이터가 선택할 수 있는 런칭 형태를 제한할 수 있었습니다. 그 메커니즘은 **정확한 일치만 테스트했습니다**: 항목이 필드를 한 값으로 고정하거나 센티널로 와일드카드 처리했습니다. 또한 플랫폼이 지원하는 모든 `GlobalConfig`에서 최대 10개 항목만 보유했으며, `PlatformConfig` 계정 자체에 있어서 항목당 491바이트씩 증가시켰습니다.

이 세 가지 특성은 프로토콜이 설정을 추가하면서 충돌했습니다. "50\~200 SOL 사이의 자금 조성 목표"를 표현하려면 허용된 값마다 하나의 항목이 필요했으므로 불가능했습니다. 한편 `GlobalConfig` 자체의 하한선은 넓혀졌습니다 — 1 bps 요율, 99999 공급 한계 — 모든 플랫폼이 그 아래에 맞도록 하기 위해, 이는 플랫폼이 그것들을 좁힐 방법이 없다는 뜻이었습니다.

이 릴리스는 화이트리스트를 **곡선 규칙**으로 대체합니다: (플랫폼, 설정) 쌍당 하나의 `PlatformCurveRule` 계정으로, 최대 10개의 체크 그룹을 보유하며, 각 그룹은 19개의 런칭 매개변수에 대해 최대 25개의 `(필드, 연산자, 값)` 제약을 보유합니다. `Eq`, `Gte`, `Lte`, `Neq` 연산자를 지원합니다. 그룹 내 제약은 AND 처리되고, 그룹은 OR 처리됩니다. 범위는 같은 필드에 대한 `Gte`와 `Lte`입니다.

전체 모델과 9개의 실제 사용 사례는 새 페이지에 있습니다: [`products/launchlab/curve-rules`](/ko/products/launchlab/curve-rules).

## 통합자를 위한 요약

* **`PlatformConfig`는 크기와 모든 기존 필드 오프셋을 유지합니다.** 고정 944바이트입니다. `curve_params`는 제거되었으며, `restrict_curve_param` (`u8`), `curve_rule_manager` (`Pubkey`), 그리고 벡터의 길이 접두사가 차지했던 4바이트가 모두 패딩에서 제거되어 107에서 78로 줄어듭니다.
* **디코더는 후행 벡터를 제거해야 합니다.** 패딩 후 `Vec<PlatformCurveParam>`을 여전히 예상하는 디코더는 두 개의 새 필드를 벡터 바이트로 읽을 것입니다. 패딩 전의 모든 것은 영향을 받지 않으므로, 수수료 지갑과 요율만 읽는 디코더는 변경 없이 계속 작동합니다.
* **런칭 빌더는 플래그가 켜져 있을 때 하나의 추가 계정이 필요합니다.** `restrict_curve_param`이 `1`인 동안, `InitializeV2`와 `InitializeWithToken2022`는 `remaining_accounts`에 규칙 PDA가 필요합니다 — *계정이 존재하지 않을 때도 포함하여*, 이를 생략하면 체크를 건너뛸 수 없도록 합니다. 파생: `[b"platform_curve_rule", platform_config, global_config]`.
* **기본적으로 플랫폼은 제한되지 않습니다.** `restrict_curve_param`은 모든 기존 계정에서 `0`이며, `0`은 프로그램이 규칙을 전혀 읽지 않는다는 의미입니다.
* **두 개의 명령어가 제거됩니다:** `UpdatePlatformCurveParam`과 `RemovePlatformCurveParam`. 4개가 추가됩니다: `CreatePlatformCurveRule`, `UpdatePlatformCurveRule`, `RemovePlatformCurveRule`, `ClosePlatformCurveRule`.
* **`UpdatePlatformConfig`는 두 개의 변형을 얻습니다:** 디스패치 인덱스 13의 `RestrictCurveParam(u64)`와 14의 `CurveRuleManager(Pubkey)`. 기존 인덱스 0–12는 변경되지 않습니다.
* **7개의 오류 코드가 추가됩니다,** `6024`–`6030`. `6020` `CurveParamIsNotExist`는 마지막 호출자가 없어도 플레이스홀더로 유지되므로 그 뒤의 것은 이동하지 않습니다. [`reference/error-codes`](/ko/reference/error-codes)를 참조하세요.
* **IDL 새로고침이 필요합니다.** 새 계정 유형, 4개의 새 명령어, 2개 제거, 2개의 새 디스패치 변형, 7개의 새 오류 코드.
* **규칙을 오프체인에서 확인한 후 전송하세요.** SDK는 `checkLaunchAgainstCurveRule` (런칭 시간 체크를 미러링하며, 실패 폐쇄 동작 포함)과 `checkCurveRuleGroupWritable` (쓰기 시간 검증을 미러링)을 노출합니다. 둘 다 순수 함수입니다. [전송 전 확인](/ko/products/launchlab/curve-rules#check-before-you-send)을 참조하세요.
* **메인넷에서 활성화하기 전에 데브넷에서 리허설하세요.** `restrict_curve_param`을 켜면 크리에이터가 할 수 있는 것이 즉시 변경됩니다. 권장 시퀀스 — 규칙 계정을 정말로 통과하는 빌더를 증명하기 위해 거부되어야 하는 토큰 하나를 런칭하는 것 포함 — 은 [먼저 데브넷에서 테스트](/ko/products/launchlab/curve-rules#test-on-devnet-first)에 있습니다.

## 화이트리스트가 표현할 수 없었던 규칙이 표현할 수 있는 것

| 의도                     | 화이트리스트        | 곡선 규칙                              |
| ---------------------- | ------------- | ---------------------------------- |
| 하나의 정확한 런칭 형태          | 하나의 항목        | `Eq` 제약이 있는 하나의 그룹                 |
| 범위 내의 자금 조성 목표         | 표현 불가능        | 두 개의 제약: `Gte` + `Lte`             |
| 3개의 런칭 계층              | 3개 항목, 정확한 것만 | 3개 그룹                              |
| 공급과 무관한 졸업 평가 범위       | 표현 불가능        | 파생된 `FundRaisingRateB`에 대한 두 개의 제약 |
| 졸업된 풀에 도달하는 것의 하한선     | 표현 불가능        | 파생된 `MigrateRateA`에 대한 하나의 제약      |
| SPL 토큰만 또는 Token-2022만 | 표현 불가능        | `BaseTokenProgram`에 대한 하나의 제약      |
| "전송 수수료가 설정되면 1%로 제한"  | 표현 불가능        | 2개 그룹, `TransferFeeEnabled`로 게이트됨  |
| 날짜에 따라 전환되는 규칙, 무인     | 표현 불가능        | 2개 그룹, `UnixTimestamp`로 게이트됨       |

19개 필드에는 4개의 파생 요율 — `SellRateA`, `LockRate`, `MigrateRateA`, `FundRaisingRateB` — 이 포함되어 있으며, 이것이 규칙을 공급 전체에서 이식 가능하게 만드는 것입니다.

## 위임된 관리

`PlatformConfig.curve_rule_manager`는 이 플랫폼의 규칙 계정을 생성, 업데이트, 제거, 종료할 수 있는 핫 지갑입니다. 규칙 편집은 일상적이며 플랫폼 관리자 키는 보통 멀티시그입니다. 이것이 멀티시그를 루프 밖으로 유지하는 필드입니다. `UpdatePlatformConfig::CurveRuleManager`를 통해 한 번 설정하세요.

플랫폼 관리자는 병렬로 동일한 권한을 유지합니다 — 프로그램은 서명자로부터 `PlatformConfig` PDA를 다시 파생하여 이를 수락합니다 — 따라서 손실된 관리자 키는 필드를 회전하여 복구할 수 있습니다. `Pubkey::default()`는 관리자 전용을 의미합니다.

손상된 관리자 키는 매개변수 규칙을 느슨하게 하거나 삭제하고 규칙 계정의 렌트를 회수할 수 있습니다. 하지만 `restrict_curve_param`을 뒤집거나, 수수료 지갑, 베스팅 필드, CPMM 설정을 건드리거나, `GlobalConfig` 한계를 깨뜨릴 수 없습니다.

## 렌트 및 크기

규칙 계정은 그룹 없이 생성되고 모든 변경 시 크기가 조정되므로, 플랫폼은 실제로 작성한 규칙에 대해서만 비용을 지불하며, 그룹을 제거하면 차이를 서명자에게 환불합니다.

| 규칙 내용            | 크기       | 렌트           |
| ---------------- | -------- | ------------ |
| 비어있음             | 150바이트   | \~0.0019 SOL |
| 1개 그룹, 2개 제약     | 200바이트   | \~0.0023 SOL |
| 3개 그룹, 각 4개 제약   | 408바이트   | \~0.0037 SOL |
| 10개 그룹, 각 25개 제약 | 4,790바이트 | \~0.034 SOL  |

크기가 동적이므로, 디코더는 상수를 가정하지 말고 계정의 실제 길이를 읽어야 합니다.

## 런칭 시 계산 비용

체크는 활성화된 동안 모든 런칭에서 실행됩니다. 종단 간 측정 — PDA 파생, `remaining_accounts` 스캔, 역직렬화, 평가:

| 규칙 내용            | 직접 필드  | 파생 필드  |
| ---------------- | ------ | ------ |
| 활성화됨, 규칙 계정 없음   | 1,936  | —      |
| 1개 그룹, 2개 제약     | 2,576  | 2,926  |
| 3개 그룹, 각 4개 제약   | 3,624  | 5,724  |
| 10개 그룹, 각 25개 제약 | 24,344 | 68,094 |

파생 제약은 직접 필드 읽기의 약 48에 대해 약 223 CU의 비용이 듭니다. 완전히 로드된 규칙도 기본 200,000 CU 명령어당 예산의 3분의 1 이내에 머물러 있습니다. 그룹은 하나가 일치할 때까지 평가되므로, 가장 많이 사용되는 계층이 먼저 와야 합니다.

## 일회성 마이그레이션

화이트리스트를 사용한 플랫폼은 프로토콜에 의해 단일 패스로 마이그레이션되었으며, 플래그를 켤 수 있기 전에 수행되었습니다. 전용 권한이 플랫폼당 하나의 트랜잭션을 실행하여 모든 레거시 항목을 이름이 지정된 설정의 규칙 계정의 체크 그룹으로 변환하고, `PlatformConfig`에서 항목을 지웠으며, 해당 계정을 944바이트로 축소했습니다.

변환은 이전 의미를 정확히 보존했습니다: 각 항목은 하나의 그룹이 되었고, 각 비센티널 필드는 하나의 `Eq` 제약이 되었으며, 모든 센티널 항목 — 모든 런칭과 일치했던 — 은 제약이 없는 그룹이 되었으며, 이것도 모든 런칭과 일치합니다.

마이그레이션은 규칙을 작성했지만 활성화하지 않았습니다. 마이그레이션된 플랫폼은 `restrict_curve_param`을 `1`로 설정할 때까지 제한되지 않은 상태로 유지되었습니다. 마이그레이션 명령어는 이제 패스가 완료되었으므로 프로그램에서 제거되었으며, 이를 읽었던 레거시 필드도 제거되었습니다.

## 변경되지 않은 것

* **`GlobalConfig`.** 동일한 레이아웃, 동일한 한계, 동일한 명령어. 규칙은 이러한 한계를 좁히고 함께 확인됩니다. 절대 하나를 넓힐 수 없습니다.
* **런칭 명령어의 계정 목록과 인수.** `InitializeV2`와 `InitializeWithToken2022`는 동일한 고정 계정과 동일한 인수를 사용합니다. `remaining_accounts`만 항목을 얻으며, 플래그가 켜져 있을 때만입니다.
* **거래, 졸업, 수수료, 베스팅 경로.** 건드리지 않음.
* **`PlatformAllowConfig`.** 변경되지 않았으며 무관합니다: 플랫폼의 런칭이 사용할 수 있는 *어떤 설정*을 결정하는 반면, 규칙은 설정 내의 *어떤 매개변수*를 결정합니다. 두 플래그는 독립적입니다.
* **오류 코드 `6000`–`6023`.** 변경되지 않음, `6020` 포함.
* **`PlatformConfig`의 크기와 사전 패딩 오프셋.** 변경되지 않았으므로 기존 계정은 자체 마이그레이션이 필요하지 않습니다.

## 업데이트된 페이지

* `products/launchlab/curve-rules` — **새 페이지.** 3단계 모델, 19필드 및 4연산자 테이블, 9개의 사용 사례, 곡선 유형 제한, 2개의 오프체인 체크 헬퍼, 데브넷 리허설 시퀀스, 위임된 관리, 렌트, 롤아웃 순서, 계산 비용.
* `products/launchlab/platform-config` — "곡선 매개변수 화이트리스트"가 "런칭 매개변수 규칙"으로 대체됨; `restrict_curve_param`, `curve_rule_manager`, 78바이트 패딩에 대해 레이아웃 업데이트됨; 업데이트 경로 테이블, 읽기 경로 스니펫, 함정 재작성됨.
* `products/launchlab/instructions` — 4개 명령어, 계정, 인수, 오류를 다루는 새로운 "플랫폼 런칭 매개변수 규칙" 섹션; 인벤토리 행 대체됨.
* `products/launchlab/accounts` — `PlatformCurveRule`이 인벤토리에 추가되고 전체 레이아웃 및 가변 크기 경고와 함께 자체 섹션이 제공됨.
* `reference/error-codes` — `6024`–`6030` 문서화됨; `6018` 및 `6020` 주석 처리됨.
