Skip to main content
이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
이 항목은 예정된 LaunchLab 프로그램 업데이트를 다룹니다. 배포 전에 로컬 릴리스 브랜치에 대해 검증되었습니다. 새 명령어나 변경된 MigrateToAmm 레이아웃을 사용하기 전에 배포된 프로그램을 확인하세요.
LaunchLab이 전환 스캐폴딩을 제거하는 릴리스입니다. 이전 업그레이드를 부드럽게 적용하기 위해 세 가지 메커니즘이 존재했습니다: get_upgrade_timestamp는 여러 검사가 클록과 비교하는 하드코딩된 전환 날짜였고, 더 이상 사용되지 않는 Initialize는 해당 날짜 이후 3일 동안 계속 작동했으며, MigrateToAmm의 OpenBook 배관은 AMM v4가 7월에 자체 OpenBook 의존성을 제거한 후 통신할 대상이 없었습니다. 세 가지 모두 사라졌습니다. 메인넷에서 전환은 몇 개월 전이므로 동작상 영향은 없습니다. 하지만 실패 모드가 변경되었고 하나의 계정 목록이 크게 변경되었습니다. 프레임워크도 동시에 이동했습니다: Anchor 0.32.1에서 =1.0.2로, Agave 2.3.0에서 3.1.10으로. 그리고 AMM v4 및 CPMM과 마찬가지로 렌트를 회수하기 위한 새로운 admin 명령어가 있습니다. 거래, 수수료, 베스팅, 곡선 규칙 및 플랫폼 구성은 변경되지 않았습니다.

통합자를 위한 TL;DR

  • 거래 명령어는 계정, 인수 또는 수학을 변경하지 않았습니다. BuyExactIn, BuyExactOut, SellExactIn, SellExactOut은 바이트 동일합니다. 계정 레이아웃이 변경되지 않았습니다.
  • Initialize (더 이상 사용되지 않는 것)는 이제 항상 NotApproved (6000)로 실패하며, 계정을 읽기 전에 실패합니다. InitializeV2를 사용하세요. 이미 생성된 런칭은 정상적으로 거래하고 졸업합니다.
  • MigrateToAmm은 마이그레이션 지갑에 대해 하드 브레이킹입니다. 세 개의 인수(base_lot_size, quote_lot_size, market_vault_signer_nonce)와 아홉 개의 계정을 잃었습니다. 아래를 참조하세요.
  • 세 개의 거래 remaining_accounts는 이제 무조건 필수이며, system_program 슬롯이 검증됩니다. 이를 생략하는 빌더는 이제 전환 후에만이 아니라 항상 NotEnoughRemainingAccounts (6018)로 실패합니다.
  • 하나의 명령어가 추가됩니다: CollectExcessLamports. Admin 전용입니다. products/launchlab/instructions를 참조하세요.
  • 하나의 에러 코드가 추가됩니다: 6031 LamportsCalculateError. 코드 60006030은 변경되지 않았습니다.
  • 세 개의 MigrateToCpswap 주소 제약이 명령어 본문으로 이동했으며, 에러가 ConstraintAddress (2012)에서 RequireKeysEqViolated (2502)로 변경됩니다.
  • IDL 새로고침이 필요합니다. 하나의 새 명령어, 하나의 제거된 인수 집합, 아홉 개의 제거된 계정, 하나의 새 에러 변형.

MigrateToAmm이 OpenBook 절반을 잃었습니다

이것이 무언가를 깨뜨릴 가능성이 가장 높은 변경입니다. 이전 명령어 데이터는 판별자 이후 17바이트의 인수를 전달했습니다. 새 데이터는 맨 판별자입니다. 이전 계정 목록은 더 이상 구조체에 존재하지 않는 아홉 개의 계정을 전달했으므로 첫 번째 제거 이후의 모든 것이 정렬되지 않습니다. 제거된 인수: base_lot_size: u64, quote_lot_size: u64, market_vault_signer_nonce: u8. 세 가지 모두 프로그램이 CPI를 통해 초기화하는 데 사용한 OpenBook 마켓을 구성하기 위해서만 존재했습니다. 해당 CPI — initialize_openbook_market — 및 nonce를 검증한 gen_vault_signer_key 검사는 사라졌습니다. 제거된 계정: openbook_program, request_queue, event_queue, bids, asks, market_vault_signer, market_base_vault, market_quote_vault, 및 amm_open_orders. 마지막 계정은 AMM v4의 Initialize2가 더 이상 이를 사용하지 않기 때문에 제거되었습니다. market 계정은 원래 위치에 유지됩니다. AMM v4는 여전히 마켓을 AmmInfo의 참조 필드로 기록하므로 LaunchLab은 여전히 이를 전달합니다. 이에 대해 두 가지가 변경되었습니다: 프로그램은 더 이상 이를 초기화하지 않으며, 이제 완전히 검증되지 않습니다 — 선언은 소유자, 주소 또는 시드 제약이 없는 맨 #[account(mut)]입니다. owner = openbook_program.key()openbook_program 계정과 함께 제거되었고 아무것도 이를 대체하지 않았기 때문입니다. 마이그레이션 지갑이 해당 필드에 전달하는 모든 것은 AMM v4의 Initialize2 CPI로 직접 전달되고 새 풀에 기록됩니다. 해당 필드 뒤에 진정한 초기화된 마켓을 원하는 호출자는 미리 생성해야 하며, 프로그램은 그렇지 않으면 알려주지 않습니다. 결과 23개 계정 목록은 products/launchlab/instructions에 완전히 문서화되어 있습니다. MigrateToCpswap은 영향을 받지 않습니다 — 인수가 없었고 계정 목록은 변경되지 않았습니다.

더 이상 사용되지 않는 Initialize는 항상 실패합니다

initialize는 이전에 소프트 폐기를 실행했습니다: get_upgrade_timestamp() + 3 days까지 작동한 후 NotApproved를 반환했습니다. 타임스탬프 헬퍼가 삭제되면서 실패는 무조건적입니다 — 핸들러는 이제 msg!err!(NotApproved)일 뿐입니다. 로그를 읽는 경우 한 가지 세부 사항: Accounts 구조체는 변경되지 않았으며 여전히 네 개의 init 제약을 전달하므로 Anchor의 생성된 계정 검증 프롤로그는 핸들러가 반환되기 전에 실행됩니다 — 그리고 해당 계정을 생성합니다. 어느 쪽이든 트랜잭션이 되돌려지므로 실제로 생성되는 것은 없지만 실패는 계정 검증 전이 아니라 후에 표시됩니다. 명령어는 판별자가 점유된 상태로 유지되고 IDL이 안정적인 형태를 유지하도록 제거되지 않고 유지됩니다. 인수 및 계정 정의는 여전히 역사적 트랜잭션을 디코딩하기 위해 문서화할 가치가 있으며 페이지는 경고 뒤에 이를 유지합니다.

get_upgrade_timestamp 게이트가 사라졌습니다

헬퍼는 localdevnet 기능에서 0을 반환했고 그 외에는 하드코딩된 메인넷 타임스탬프 1755522000 (2025-08-18 13:00 UTC)를 반환했습니다. 네 개의 명령어가 소스의 다섯 개 참조에 걸쳐 클록과 비교했습니다. 각각은 무조건적으로 전환 후 분기가 됩니다: 메인넷 타임스탐프는 1년 이상 지났으므로 올바르고 최신 빌더는 동작 변경을 보지 않습니다. 변경된 것은 오래된 빌더가 이제 devnet 빌드에 대해 작동하는 것처럼 보이는 대신 결정론적으로 실패한다는 것입니다. 새로운 system_program 검증은 진정으로 새로운 것입니다: 해당 슬롯은 이전에 모든 계정을 수락했습니다.

CollectExcessLamports

SIMD-0437의 1단계는 2026년 9월 3일 메인넷에 도착했으며, 렌트 면제 최소값을 9% 줄였고 4단계가 더 있습니다. 단계 이전에 생성된 모든 LaunchLab 풀 금고, 수수료 금고 및 프로그램 소유 PDA는 이제 과잉 자금입니다. 명령어는 네 개의 고정 계정 — 서명자/대상 지갑, 하나의 금고 권한 PDA, 그리고 두 토큰 프로그램 — 을 취한 후 remaining_accounts의 임의 개수의 소스 계정을 취합니다. authority 슬롯은 주의 깊게 읽을 가치가 있는 부분입니다. LaunchLab은 세 개의 금고 권한 PDA (vault_auth_seed, platform_fee_vault_auth_seed, creator_fee_vault_auth_seed)를 가지고 있으며, 명령어는 전달한 것을 세 개 모두 다시 파생하고 일치시켜 해결합니다. 어느 것과도 일치하지 않는 키는 InvalidOwner (6001)로 실패합니다. 하나의 호출이 하나의 권한을 전달하고 토큰 프로그램은 각 계정의 실제 소유자가 서명하도록 요구하기 때문에, 소스 계정은 권한별로 그룹화되어야 합니다 — 풀 금고, 플랫폼 수수료 금고 및 크리에이터 수수료 금고는 별도의 트랜잭션에서 정리됩니다. 프로그램 소유 PDA는 직접 차감되며 모든 권한과 함께 탈 수 있습니다. 래핑된 SOL은 CPMM 및 AMM v4가 사용하는 동일한 SyncNative → 델타 크기 UnwrapLamports → 변경 없음 어설션 시퀀스를 따르며, 왕복이 0으로 순 계산되지 않으면 LamportsCalculateError (6031)입니다. SOL 인용 런칭은 전체 인용 준비금을 유지합니다. 기본 민트는 정리할 수 없습니다. InitializeV2InitializeWithToken2022는 공급을 민트하는 동일한 명령어에서 MintTokens를 취소하므로 기본 민트에 대해 WithdrawExcessLamports에 서명할 수 있는 키가 없습니다. 렌트는 설계상 고립됩니다. 서명자는 공유 프로그램 admin 또는 전용 수집-lamports 지갑일 수 있습니다. 주소는 reference/program-addresses에 있습니다.

MigrateToCpswap 제약 재배치

세 개의 계정 제약이 Accounts 구조체에서 명령어 본문으로 이동했습니다:
요구 사항은 동일합니다 — 세 개 모두 여전히 PoolState에 저장된 값과 일치해야 합니다. 에러 표면만 다릅니다: Anchor의 일반 RequireKeysEqViolated (2502), 계정 이름 없이 보고되며, 오류 계정을 명명하는 ConstraintAddress (2012) 대신입니다. 이 세 계정에 대해 2012와 일치하는 에러 처리를 업데이트하세요.

도구 체인 및 의존성 변경

Anchor 1.0의 두 호출 사이트 변경도 여기에 적용됩니다: Context는 네 개의 수명 매개변수에서 하나로 축소되고, CpiContext::new는 프로그램의 AccountInfo 대신 Pubkey를 취합니다. sdk-api/rust-cpi를 참조하세요. 온체인 영향이 없는 두 가지 빌드 시스템 세부 사항: local 기능은 localnet으로 대체되었으며, 이는 LAUNCHPAD_LOCALNET_ADMIN 환경 변수에서 admin으로 로컬 지갑을 컴파일합니다 (yarn test:local-admin이 이를 연결합니다). 그리고 programs/launchpad/Cargo.toml의 중복 [profile.release] 블록이 삭제되었습니다 — Cargo는 워크스페이스 루트 외부의 [profile]을 무시하므로 루트 블록이 이미 적용 중인 것이었습니다. 프로그램 수준 블록의 panic = "abort"가 적용되지 않았다는 사실을 포함합니다.

변경되지 않은 것

  • 모든 계정 레이아웃. PoolState, GlobalConfig, PlatformConfig, PlatformCurveRule, PlatformAllowConfig, 베스팅 기록 — 동일한 크기, 동일한 오프셋.
  • 에러 코드 60006030, 의도적으로 유지된 6020 포함.
  • 곡선 수학, 수수료율, 수수료 발생, 베스팅 일정 및 졸업 LP 분할.
  • 플랫폼 곡선 규칙 및 GlobalConfig 허용 목록. 동일한 명령어, 동일한 계정, 동일한 의미; 곡선 규칙 검사 주변의 클록 게이트만 사라졌습니다.
  • MigrateToCpswap의 계정 목록 및 remaining_accounts 인덱스.
  • 졸업 시 Token-2022 전송 수수료 권한 인수.
  • 프로그램 ID. 변경되지 않음.

업데이트된 페이지

  • products/launchlab/instructionsCollectExcessLamports가 계정 목록, 권한 해결 테이블 및 그룹화 경고와 함께 추가됨; MigrateToAmm의 인수 및 계정 제거가 전체 새 목록과 함께 문서화됨; Initialize가 항상 실패 경고로 앞에 붙음; 이제 무조건적인 세 계정 및 system_program 검사를 다루는 새로운 “거래 남은 계정” 섹션; 인벤토리 및 상태 변경 매트릭스 행.
  • products/launchlab/overview — 릴리스 배너; “CPMM 전용” 및 기본 민트 불변식이 수정됨.
  • products/launchlab/accounts — 민트 권한 취소 타이밍이 런칭 생성으로 수정됨 (졸업에서 문서화됨); CollectExcessLamports 행 추가.
  • reference/error-codes6031 문서화됨.
  • reference/program-addresses — 새로운 “초과 lamports 수집 지갑” 섹션.
  • solana-fundamentals/rent-and-reclaimable-rent — 새로운 “Raydium 프로그램이 자체 측에서 정리하는 것” 섹션.
  • sdk-api/rust-cpi, solana-fundamentals/toolchain — Anchor 1.0 핀 및 CPI 마이그레이션 노트.