이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
LaunchLab은 간결한 명령어 집합을 제공합니다: 사용자 대면 호출 6개와 소수의 관리자 기본 명령어. SDK가 모두를 래핑하며, 이 페이지는 애그리게이터, 모니터링 도구, CPI가 필요한 프로그램을 위한 원본 인터페이스를 문서화합니다.
명령어 목록
“ExactIn/ExactOut” 분할은 CPMM의
SwapBaseInput / SwapBaseOutput을 반영합니다 — 온체인에서는 약간 다른 반올림을 가진 별도의 명령어 판별자입니다.
졸업 경로 선택. 모든 새로운 Initialize, InitializeV2, InitializeWithToken2022 호출은 migrate_type = 1 (CPSWAP)을 설정해야 합니다. 새로운 AMM v4 바운드 풀을 초기화하려는 시도는 MigrateTypeNotMatch를 반환합니다. amm_creator_fee_on은 결과 CPMM 생성자 수수료가 견적 토큰에 적용되는지 또는 두 토큰 모두에 적용되는지만 선택합니다; 대상 프로그램을 선택하지 않습니다.
MigrateToAmm은 이 제한 전에 migrate_type = 0으로 초기화된 기존 PoolState에 대해 호출 가능하게 유지됩니다. 이 릴리스는 기존 풀 상태를 다시 쓰거나 레거시 명령어를 제거하지 않습니다.
견적 측 토큰 프로그램. 견적 민트는 SPL Token 프로그램 또는 Token-2022 중 하나가 소유할 수 있습니다. 이를 건드리는 모든 명령어 — CreateConfig, InitializeV2, InitializeWithToken2022, 4개의 거래 명령어, CollectFee, CollectMigrateFee, ClaimCreatorFee, ClaimPlatformFee, ClaimPlatformFeeFromVault — 견적 프로그램 계정 슬롯에서 소유 프로그램을 가져갑니다. 계정 위치는 변경되지 않았습니다; 허용되는 값만 변경되었습니다. 실제로 GlobalConfig.quote_mint를 소유하는 프로그램을 전달하세요. 기존 런칭의 경우 PoolState.token_program_flag bit1에서 읽을 수 있습니다 (accounts 참조) 또는 민트 계정의 소유자에서 읽을 수 있습니다.
더 이상 사용되지 않는 Initialize는 예외입니다: 견적 프로그램 계정은 여전히 SPL Token으로 입력되므로, 견적 민트가 Token-2022인 설정은 InitializeV2 또는 InitializeWithToken2022를 통해 시작해야 합니다.
MigrateToCpswap은 반대 방향의 다른 예외입니다 — 민트당 하나가 아니라 두 프로그램을 무조건 가져갑니다. 아래의 마이그레이션 계정을 참조하세요.
Initialize
새로운 런칭을 생성합니다.
인자
사전 조건
quote_mint ∈ launch_config.allowed_quote_mints.base_supply_graduation ≤ base_supply_max.- 수수료 매개변수가
launch_config.max_*_fee_rate검사를 통과합니다. open_time ≥ now − slop(SDK는≥ now강제; 프로그램은 약간의 역날짜 허용).curve_type이 인식됩니다.
base_mint는supply = base_supply_max, 모두base_vault에 있습니다.base_mint.mint_authority = launch_authority,freeze_authority = None.LaunchState는status = Active,base_sold = 0,quote_reserve_real = 0으로 초기화됩니다.quote_reserve_target은 곡선 매개변수 +base_supply_graduation+buy_numerator에서 계산됩니다 (대략).InitializeWithToken2022의 경우TransferFeeConfig첨부:transfer_fee_config_authority = launch_authority,withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth(해당 필드가 설정된 경우), 그렇지 않으면launch_authority. 인출 측은 플랫폼이 졸업 전에 보류된 수수료를 수거할 수 있도록 민트 생성 시 정확히 작성됩니다.platform-config를 참조하세요.
InvalidQuoteMint, FeeRateTooHigh, InvalidCurveParams, MathOverflow.
Buy (정규 변형: BuyExactIn)
사용자가 고정 quote_in을 제공합니다; 곡선이 base_out을 계산합니다.
인자
사전 조건
launch_state.status == Active.now ≥ open_time.user_quote_ata.balance ≥ quote_in.quote_in > 0.
quote_in을quote_in_after_fee와 수수료 부분으로 분할합니다.- 사후 수수료 견적이 주어진 곡선에 대해 Newton 풀이로
base_out을 계산합니다. require(base_out ≥ minimum_base_out)그렇지 않으면ExceededSlippage되돌립니다.quote_in사용자 → 금고로 이동.base_out금고 → 사용자로 이동.base_sold += base_out,quote_reserve_real += quote_in_after_fee × (lp_share / total_share)업데이트합니다.- 수수료 카운터 (
protocol_fees_quote,creator_fees_quote) 업데이트합니다. state_data.num_buys += 1.- 업데이트 후
quote_reserve_real ≥ quote_reserve_target이면, SDK는 일반적으로 같은 트랜잭션에서Graduateix를 연결합니다. 프로그램은Buy내에서 자동 졸업하지 않습니다 — 후속Graduate가 필요합니다.
BuyExactOut
사용자가 정확한 base_out을 지정합니다; 프로그램이 quote_in을 계산합니다.
인자
BuyExactIn과 동일한 계정. Newton 반복 대신 폐쇄형 이차 적분 (또는 curve_type 1의 경우 CPMM 역함수)을 사용합니다.
Sell / SellExactIn / SellExactOut
Buy의 미러. 사용자가 base_in을 곡선에 반환하고 quote_out을 받습니다. 수수료는 quote_out에서 공제되므로 사용자는 원본 통합 수익보다 적게 받습니다.
사전 조건 —
user_base_ata.balance ≥ base_in.- 매도는
base_sold를 0 아래로 밀 수 없습니다 (위의 것과 중복, 회계가 일관성 있음). - 런칭이
Active입니다.
Buy와 대칭. base_sold 감소, quote_reserve_real 감소. 수수료는 여전히 누적됩니다.
견적 측 이전 수수료
견적 민트가TransferFeeConfig를 가질 때, 금고가 이동하는 금액과 지불자가 청구되거나 신용되는 금액이 다르며, 슬리피지 한계는 지불자 측에 대해 확인됩니다. 확장 없는 견적 민트에서 아래의 모든 경우는 일반 레거시 민트와 동일합니다.
견적에 대한 두 가지 결과:
- 민트가 수수료 없는 것처럼 계산된 한계는 거부됩니다. 수수료 없는 비용을
maximum_amount_in으로 또는 수수료 없는 수익을minimum_amount_out으로 전달하면ExceededSlippage로 되돌립니다. real_quote는 금고에 도달한 것만큼만 진행됩니다. 5% 견적 민트에서amount_in의BuyExactIn은real_quote를amount_in × 0.95로 이동합니다.
10000 기본 포인트)는 반전될 수 없으며 정확한 출력 경로에서 CalculateOverflow로 되돌립니다.
두 거래 측 민트도 일치하는 슬롯에 전달된 프로그램으로 제한되므로, 불일치하는 base_token_program은 이제 무시되는 대신 실패합니다. algorithms/token-2022-transfer-fees에서 기본 수수료 수학을 참조하세요.
MigrateToAmm / MigrateToCpswap
곡선이 total_quote_fund_raising에 도달하면 런칭을 거래 가능한 풀로 졸업합니다. 새 런칭은 CPMM 전용입니다. MigrateToAmm은 저장된 migrate_type이 0인 기존 풀을 위해 유지됩니다.
서명자
MigrateToAmm— 바인딩GlobalConfig에 기록된migrate_to_amm_wallet.MigrateToCpswap— 바인딩GlobalConfig에 기록된migrate_to_cpswap_wallet.
MigrateToAmm은 3개를 가져갑니다 (주로 프로그램이 AMM v4로 전달하는 OpenBook 시장 매개변수):
MigrateToCpswap은 없습니다.
효과 (둘 다 공통)
pool_state.status == Migrate확인 (즉,quote_reserve_target에 도달). 그렇지 않으면PoolMigrated(상태가 이미Migrated) 또는PoolFunding(여전히 자금 조성 중)으로 되돌립니다.pool_state.migrate_type이 명령어와 일치하는지 확인 (AMM의 경우0, CPMM의 경우1). 그렇지 않으면MigrateTypeNotMatch로 되돌립니다.- 졸업 후 준비금 계산:
base_amount_out = base_vault.amount − vesting_schedule.total_locked_amountquote_amount_out = quote_vault.amount − quote_protocol_fee − migrate_fee − platform_fee
- 대상 프로그램 (
AMM v4 Initialize2또는CPMM InitializeWithPermission)으로 CPI하여 해당 준비금으로 졸업 후 풀을 생성합니다. - 2026-08-17 업그레이드 후 실행된 CPMM 마이그레이션의 경우,
platform_scale + creator_scale을 하나의 플랫폼 소유 잠긴 LP 공유로 결합하고 최대 하나의 Fee Key NFT를platform_nft_wallet에 민트합니다.burn_scale나머지를 소각합니다. 업그레이드 전에는creator_scale이 별도로 잠겼고 그 Fee Key는 토큰 생성자에게 갔습니다. 완료된 과거 마이그레이션은 수정되지 않습니다. 레거시 AMM v4 졸업의 경우, LP 처분은 해당 명령어의 기존 흐름을 따릅니다. base_mint.mint_authority취소 (None으로 설정).pool_state.status = Migrated뒤집기,vesting_schedule.start_time = block_time + cliff_period설정.
TransferFeeConfig를 가진 Token-2022 민트 이고 PlatformConfig.transfer_fee_extension_auth가 기본값이 아닐 때, 마이그레이션도 해당 확장의 권한을 플랫폼 키로 재할당합니다:
transfer_fee_config_authority는 항상 재할당됩니다. 런칭authorityPDA는 전체 졸업 전 단계 동안 이를 보유하므로 항상 이동할 것이 있습니다.WithheldWithdraw는authorityPDA가 여전히 이를 보유할 때만 재할당됩니다. 2026-08-27 이후에 생성된 런칭은 이미 민트 생성 시 해당 권한에transfer_fee_extension_auth를 가지고 있으므로 단계를 건너뜁니다. 가드는 마이그레이션이 해당 민트에서 되돌리는 것을 방지합니다 — PDA는 더 이상 보유하지 않는 권한을 포기할 수 없습니다.
transfer_fee_extension_auth가 Pubkey::default()이면, 어느 권한도 이동하지 않으며 둘 다 authority PDA에 영구적으로 유지됩니다. platform-config를 참조하세요.
사후 조건 — BuyExactIn, BuyExactOut, SellExactIn, SellExactOut은 이 시점부터 PoolMigrated로 거부합니다. 결과 AMM 풀은 정규이며 다른 AMM v4 / CPMM 풀처럼 거래합니다.
일반적인 오류 — PoolFunding, PoolMigrated, MigrateTypeNotMatch, InvalidCpSwapConfig, MathOverflow.
CPMM 마이그레이션 남은 계정
MigrateToCpswap을 구축하는 클라이언트는 이 고정 remaining_accounts 인덱스를 사용해야 합니다:
명령어는 업그레이드된 경로에서 최소 10개의 남은 계정이 필요합니다. 지원 민트 계정은 읽기 전용 CPI 입력입니다. 민트가 초기화된 지원 기록이 없을 때도 두 주소를 파생합니다. 여전히 생성자 잠금 계정을 추가하거나 인덱스 8–9를 생략하는 이전 빌더는 업데이트해야 합니다.
CPMM 마이그레이션 토큰 프로그램
MigrateToCpswap은 두 토큰 프로그램을 무조건 가져가며 각 민트를 소유하는 프로그램을 자체적으로 파악합니다. 두 토큰 프로그램 계정의 이름이 그에 따라 변경되었습니다:
이들은 이전의
base_token_program (기본 민트를 소유한 프로그램) 및 quote_token_program (항상 레거시)을 대체합니다. 위치는 변경되지 않으므로 이는 레이아웃 변경이 아닌 값 변경입니다 — 하지만 두 값은 거의 반전되며, 이전 쌍을 계속 전달하는 빌더는 어느 민트든 Token-2022 민트가 되는 즉시 레거시 프로그램이 필요한 곳에 Token-2022를 공급합니다.
레거시 프로그램은 어느 민트도 사용하지 않을 때도 필요합니다. CPMM LP 민트와 잠긴 유동성 Fee Key NFT는 항상 이 프로그램에 있기 때문입니다.
플랫폼 GlobalConfig 허용 목록
PlatformConfig.restrict_global_config는 검사를 제어합니다:
0: 플랫폼은 다른 방식으로 유효한GlobalConfig를 수락합니다; 허용 계정이 필요하지 않습니다.1:Initialize,InitializeV2,InitializeWithToken2022는 일치하는PlatformAllowConfig를remaining_accounts의 어디든 포함해야 합니다.
CreatePlatformAllowConfig와 ClosePlatformAllowConfig로 PDA를 생성하거나 닫습니다. 그 시드는 [b"platform_allow_config", platform_config, global_config]입니다. 이전 관리자 관리 PlatformGlobalAccess 명령어와 PDA는 폐기됩니다.
플랫폼 런칭 매개변수 규칙
4개의 명령어가 하나의PlatformCurveRule 계정을 관리합니다. 4개 모두 PlatformConfig.curve_rule_manager 또는 플랫폼 관리자에 의해 서명됩니다 — 프로그램은 서명자에서 PlatformConfig PDA를 재파생하여 관리자를 수락하므로 별도의 계정이 이를 증명하지 않습니다. 둘 다 아닌 서명자는 InvalidCurveRuleAuthority를 반환합니다.
platform_curve_rule은 [b"platform_curve_rule", platform_config, global_config]의 PDA입니다.
- **
Create**는 그룹이 없는 계정을 할당합니다. 해당 상태는 아무것도 제한하지 않습니다. - **
Update**는 해당group_id를 가진 그룹을 업서트하여, 존재하면 전체적으로 교체합니다. 계정 크기를 조정하므로 서명자는 증가한 렌트를 충전하고 감소한 렌트를 받습니다. 10번째를 넘는 새 그룹은CurveRuleGroupsExceeded를 반환합니다; 25개 이상의 제약, 알 수 없는 필드 또는 연산자, 또는 한 그룹에서 동일한(field, op)쌍이 두 번 나타나면InvalidCurveRuleConstraint를 반환합니다; 비상수 곱 설정에서 4개의TotalSellA파생 필드는CurveRuleFieldNotSupportedByCurve를 반환합니다. - **
Remove**는 id로 하나의 그룹을 삭제하여 계정을 축소하고 차이를 환불합니다. 알 수 없는 id는CurveRuleGroupNotExist를 반환합니다. - **
Close**는 전체 렌트를 서명자에게 반환합니다. 설정은restrict_curve_param이1로 유지되어도 제한되지 않습니다.
UpdatePlatformConfig::RestrictCurveParam(0 | 1)이며, 플랫폼 관리자만 호출할 수 있습니다.
런칭 경로에서. restrict_curve_param이 1인 동안, InitializeV2와 InitializeWithToken2022는 remaining_accounts에 규칙 PDA를 요구합니다 — 존재하지 않을 때도 포함하여, 이를 생략하면 검사를 건너뛸 수 없습니다. 누락된 계정은 NotEnoughRemainingAccounts입니다; 어떤 그룹도 만족하지 않는 런칭은 CurveParamNotMatchPlatformRule입니다. 검사는 GlobalConfig의 자체 제한 전에 실행되며 이를 좁힐 수만 있습니다. 모델 및 플레이북: products/launchlab/curve-rules. 두 오류 모두 클라이언트 측에서 피할 수 있습니다 — SDK는 이 검사를 순수 함수로 미러링합니다. 전송 전 확인을 참조하세요.
CollectFee
단일 런칭에서 프로토콜의 누적된 거래 수수료의 관리자 수거.
인자 — 없음.
계정
효과 —
pool_state.quote_protocol_fee를 quote_vault에서 recipient_token_account로 이전한 후 카운터를 0으로 설정합니다. 첫 번째 매수 후 언제든지 호출 가능합니다.
CollectMigrateFee
졸업 시 누적된 마이그레이션 수수료의 관리자 수거. CollectFee와 동일한 계정 형태이지만 migrate_fee_owner가 서명자 (protocol_fee_owner 대신)이고 pool_state.migrate_fee가 배수된 카운터입니다.
ClaimCreatorFee
생성자가 소유한 모든 런칭에서 동일한 견적 민트를 사용하는 누적된 생성자 수수료의 생성자별 수거. 풀별 수수료 금고가 아닌 생성자별 수수료 금고를 배수합니다.
인자 — 없음.
계정
효과 —
creator_fee_vault의 전체 잔액을 recipient_token_account로 이전합니다. 금고가 비어 있으면 0보다 큼 검사로 되돌립니다.
ClaimPlatformFee
런칭의 견적 금고를 직접 배수하는 플랫폼별 수거. 집계된 플랫폼 금고를 거치지 않고 플랫폼이 특정 런칭에 대한 슬라이스를 청구하려고 할 때 사용합니다.
인자 — 없음.
계정
효과 —
pool_state.platform_fee를 quote_vault에서 recipient_token_account로 이전하고 카운터를 0으로 설정합니다.
ClaimPlatformFeeFromVault
플랫폼별 집계 수거. 플랫폼을 통해 라우팅된 모든 런칭에서 수수료를 누적하는 플랫폼의 견적 민트별 수수료 금고를 배수합니다.
인자 — 없음.
계정
효과 —
platform_fee_vault의 전체 잔액을 recipient_token_account로 이전합니다. 금고가 비어 있으면 되돌립니다.
베스팅 및 플랫폼 설정 명령어
이들은 각각 자체 상태 모델을 가지고 있으므로 전용 페이지에 문서화됩니다:CreateVestingAccount,CreatePlatformVestingAccount,ClaimVestedTokenCreatePlatformConfig,UpdatePlatformConfig,CreatePlatformAllowConfig,ClosePlatformAllowConfigCreatePlatformCurveRule,UpdatePlatformCurveRule,RemovePlatformCurveRule,ClosePlatformCurveRuleCreateConfig,UpdateConfig
상태 변경 매트릭스
다음 단계
products/launchlab/code-demos— 각 명령어에 대한 TypeScript 예제.products/launchlab/accounts— 전체 상태 형태.reference/error-codes— LaunchLab 오류 열거형.
- Raydium SDK v2
LaunchLab모듈 - Raydium LaunchLab 프로그램 소스

