Skip to main content
이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
버전 정보
  • SDK: @raydium-io/raydium-sdk-v2@0.2.42-alpha
  • 클러스터: Solana mainnet-beta
  • 프로그램 ID: reference/program-addresses 참조
  • 마지막 검증: 2026-04
package.json에서 SDK 버전을 고정하세요. 본딩 곡선 인터페이스는 마이너 릴리스 간에 변경되었습니다.

설정

여기의 데모는 raydium-sdk-V2-demo/src/launchpad의 파일을 반영합니다. 부트스트랩은 데모 저장소의 config.ts.template을 따릅니다:

런칭 생성

소스: src/launchpad/createMint.ts (그리고 API 기반 Bonk 변형을 위한 createBonkMintApi.ts)
참고:
  • initialK는 이차 곡선의 스케일 팩터입니다. 졸업 시 특정 오프닝 CPMM 가격을 목표로 조정하세요. 유도는 products/launchlab/bonding-curve를 참조하세요.
  • SDK는 베이스 민트, 메타데이터 PDA, 그리고 두 개의 볼트를 단일 트랜잭션으로 생성합니다. 메타데이터 URI가 길면 1232바이트를 초과할 수 있으며, 이 경우 SDK는 두 개의 트랜잭션으로 분할합니다.
  • Initialize 후, 런칭은 openTime까지 거래할 수 없습니다. openTime을 1~2분 앞으로 설정하여 프론트러너가 첫 매수를 잡을 기회를 줄이세요.

런칭 상태 조회

getLaunchById는 디코딩된 LaunchState와 계산된 “졸업 진행도” 분수를 Decimal로 반환합니다.

매수 — 정확한 인용 입력

소스: src/launchpad/buy.ts
computeBuyBase는 온체인 Newton 솔버(이차 곡선) 또는 폐쇄형 CPMM 역함수(curve_type 1)를 반영합니다. “수신할 금액” UI 필드를 채우는 데 사용하세요.

매수 — 정확한 베이스 출력

“정확히 X 토큰 매수” UI에 유용합니다. 곡선이 충분히 움직여서 인용 요구사항이 이제 maximumQuoteIn을 초과하면 ExceededSlippage로 거부합니다.

매도

소스: src/launchpad/sell.ts
곡선의 매도 경로는 매수 경로와 대칭입니다: base_soldbaseIn만큼 줄이면 quote_outbase_sold − baseInbase_sold 사이의 곡선 아래 적분 영역에서 매도 수수료를 뺀 값과 같습니다.

임계값 교차 매수에서 자동 졸업

SDK는 사후 매수 상태가 임계값을 교차할 것으로 감지하면 buy* 트랜잭션 내에 Graduate 명령을 연결합니다:
Graduate는 권한이 없으므로 누구든지(MEV 봇 포함) 임계값 교차 후 첫 Graduate를 착지하려고 경쟁할 수 있습니다 — 일반적으로 분 단위가 아닌 초 단위입니다. 첫 착지자는 CPMM 풀 계정의 임차료만 지불합니다. 다른 이점은 없습니다.

수동 Graduate

autoGraduate가 꺼져 있거나 임계값 교차 트랜잭션이 실패한 경우, 졸업을 별도로 실행할 수 있습니다:
제출 시 quote_reserve_real < quote_reserve_target이면 NotAtThreshold로 되돌립니다. 재시도 안전 — 성공 후 두 번째 Graduate 시도는 NotActive로 되돌립니다.

크리에이터 수수료 수집

소스: src/launchpad/claimCreatorFee.ts (단일 민트) 및 collectAllCreatorFees.ts (배치)
누적된 크리에이터 수수료 카운터 인용 금액을 크리에이터의 인용 민트 ATA로 전송합니다. 졸업 전후에 호출 가능합니다. 거대한 잔액이 축적될 때까지 기다리지 말고 주기적으로 사용하세요.

런칭의 생명주기 추적

모두 함께 모니터링 스크립트는 다음과 같을 수 있습니다:

gRPC를 통해 구성 및 풀 감시

소스: src/grpc/launchpadPoolInfo.ts Yellowstone gRPC를 통해 LaunchLab 프로그램을 구독하고 각 민트의 토큰 프로그램과 함께 모든 GlobalConfigPoolState 업데이트를 기록합니다. 하나의 accounts 구독에 두 개의 datasize 필터가 두 계정 유형을 분리하므로, 단일 스트림이 둘 다를 포함합니다. 데모는 런칭의 민트를 분류하기 위한 가장 짧은 올바른 참조이며, Token-2022 인용 민트 릴리스가 필요하게 합니다:
  • PoolState.token_program_flag에서 직접 분류되며, 민트 페치 없이 베이스 민트에 대해 bit0을, 인용 민트에 대해 bit1을 디코딩합니다. 전체 바이트를 0에 대해 테스트하는 것 — 인용 민트가 레거시 전용이었을 때 충분했던 — 인용 민트가 Token-2022일 때마다 레거시 베이스 민트를 Token-2022로 잘못 읽습니다.
  • 구성은 그런 식으로 분류할 수 없습니다: GlobalConfig는 인용 민트의 주소를 저장하고 프로그램 플래그는 없으므로, 데모는 민트 계정의 소유자를 한 번 읽고 민트당 캐시합니다.
또한 둘을 서로 교차 검사하며, 이는 자신의 인덱서에 유지할 유용한 어설션입니다. createupdate는 데모 자신의 캐시에서 추론되며, 시작 시 getProgramAccounts에서 시드됩니다. 시드가 비활성화되면 “create”를 “이 스트림에서 처음 본” 것으로 읽으세요. gRPC 액세스는 공개 RPC 표면의 일부가 아닙니다 — 데모 저장소의 src/grpc/README.md를 참조하세요.

Rust CPI

자신의 Anchor 프로그램에서 LaunchLab을 호출하는 것은 드뭅니다(대부분의 런칭 통합은 TS 측만). 그렇다면, 프로그램은 cpi::accounts::Buy, cpi::accounts::Sell 등이 있는 Anchor 크레이트 raydium_launchlab을 제공합니다 — 패턴은 CPMM / CLMM CPI 예제를 반영합니다. 이 사이트가 채워지면 sdk-api/rust-cpi를 일반화된 템플릿으로 참조하세요.

함정

  • 수수료 분할 산술 오프바이원. total_share가 정확히 lp_share + creator_share + protocol_share가 아니면, InitializeInvalidFeeShares로 되돌립니다. totalShare를 합계와 같게 설정하세요.
  • 허용되지 않은 인용 민트 사용. launch_config.allowed_quote_mints는 고정 목록입니다. 다른 민트를 전달하면 되돌립니다. 먼저 raydium.launchpad.getConfig()로 확인하세요.
  • 메타데이터 크기.uri 문자열은 Metaplex CPI를 예산 초과로 밀어냅니다. uri를 ~200자 이하로 유지하세요 — 대부분의 CDN 호스팅 JSON 메타데이터는 쉽게 맞습니다.
  • 졸업 경쟁. 자동화된 봇은 quote_reserve_real을 모니터링하고 임계값 교차 후 슬롯 또는 두 개 내에 Graduate를 프론트런합니다. 이는 무해합니다 — 임차료만 비용입니다 — 하지만 UI가 status 전환을 빠른 이벤트로 취급해야 함을 의미합니다.

다음 단계

소스: