이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
버전 정보
- SDK:
@raydium-io/raydium-sdk-v2@0.2.64-alpha - 클러스터: Solana
mainnet-beta - 프로그램 ID:
reference/program-addresses참조 - 마지막 검증: 2026-09-09 SDK
0.2.64-alpha소스,raydium-sdk-V2-demo/src/launchpad,raydium-launch프로그램 소스 기준
package.json에서 SDK 버전을 고정하세요. 본딩 곡선 인터페이스는 마이너 릴리스 간에 변경되었습니다.설정
여기의 데모는raydium-sdk-V2-demo/src/launchpad의 파일을 반영합니다. 부트스트랩은 데모 저장소의 config.ts.template을 따릅니다:
런칭 생성
소스:src/launchpad/createMint.ts (Bonk 변형의 경우 createBonkMintApi.ts)
런칭의 대부분의 경제학은 인수가 아닙니다 — configId를 통해 바인딩하는 GlobalConfig에서 나오며, SDK는 나머지를 API의 기본 매개변수에서 채웁니다. 민트의 신원, 바인딩할 설정, 그리고 (선택적으로) 첫 번째 매매를 전달합니다:
curveType,graduationFractionBps,initialK,quoteMint,openTime,fees또는postGraduationLpPolicy인수는 없습니다. 곡선 형태와 quote 민트는 바인딩하는GlobalConfig의 속성입니다; 수수료율은GlobalConfig와PlatformConfig에 있습니다; 졸업 시 LP 처리는PlatformConfig설정입니다.products/launchlab/instructions에서InitializeV2가 정확히 무엇을 수용하는지 확인하세요.- 10자를 초과하는
symbol과 빈uri는 모두 RPC 전에 클라이언트 측에서 거부됩니다. transferFeeExtensionParams를 전달하면 빌더가InitializeWithToken2022로 전환되고migrateType을"cpmm"으로 강제합니다.- 빌더는
transactions배열을 반환합니다;createOnly: false는 첫 번째 매매 트랜잭션을 추가합니다. 항상execute({ sequentially: true })를 사용하세요 — 민트가 존재해야 매매가 진행됩니다.
런칭 상태 조회
소스:src/launchpad/poolInfo.ts
getLaunchById는 없습니다. 풀 ID는 (programId, mintA, mintB)의 PDA이며, getRpcPoolInfo는 바인딩된 configInfo가 첨부된 디코딩된 PoolState를 반환합니다:
getRpcPoolsInfo({ poolIdList })는 배치 형식이며 풀 ID로 키가 지정된 poolInfoMap을 반환합니다 — 루프 대신 포트폴리오 보기에 사용하세요. 원시 계정을 직접 디코딩하려면 LaunchpadPool.decode와 LaunchpadConfig.decode가 내보내집니다.
매매 — 정확한 quote 입력
소스:src/launchpad/buy.ts
오프체인 견적 도우미는 **Curve.buyExactIn**입니다. 내보낸 Curve 클래스의 정적 메서드입니다 — raydium.launchpad의 메서드가 아닙니다. 트랜잭션 빌더는 **buyToken**입니다. 둘 다 플랫폼의 수수료율이 필요하며, 이는 별도의 PlatformConfig 계정에 있습니다:
slippage 대신 minMintAAmount를 명시적으로 전달할 수 있습니다; 둘 다 생략하면 SDK는 라이브 RPC 데이터에서 바운드를 계산합니다. shareFeeRate는 poolInfo.configInfo.maxShareFeeRate를 초과할 수 없으며, shareFeeReceiver도 전달할 때만 적용됩니다.
매매 — 정확한 기본 출력
빌더는 **buyTokenExactOut**이며, 금액 인수는 outAmount (원하는 기본)과 maxBuyAmount (최대 지출할 quote)입니다. Curve.buyExactOut({ poolInfo, amountA, ... })는 일치하는 오프체인 미리보기입니다.
outAmount를 클라이언트 측에서 거부하며, 곡선이 충분히 이동하여 quote 요구사항이 maxBuyAmount를 초과하면 프로그램이 되돌립니다.
판매
소스:src/launchpad/sell.ts
빌더는 **sellToken**입니다 (정확한 quote 출력 변형의 경우 sellTokenExactOut), sellAmount와 선택적 minAmountB가 있습니다. Curve.sellExactIn({ poolInfo, amountA, ... })는 이를 미리봅니다.
real_a를 sellAmount로 줄이면 quote_out은 real_a − sellAmount와 real_a 사이의 곡선 아래 적분 영역에서 판매 수수료를 뺀 값과 같습니다. sellAmount는 0보다 커야 합니다 — 빌더는 RPC 전에 0을 거부합니다.
졸업
이러한 지갑은 Raydium의 졸업 크랭크에 의해 운영되므로, 실제로는 누가 최종 매매를 했든 임계값을 넘은 후 몇 초 내에 마이그레이션이 진행됩니다. 통합자 측에서 할 수 있는 유일한 것은 상태 전환을 빠른 이벤트로 취급하는 것입니다:getRpcPoolInfo를 폴링하고 (또는 아래 gRPC를 통해 구독), status가 변경될 때 UI를 곡선에서 결과 CPMM 풀로 전환합니다.
계정 목록, 마이그레이션 수수료, 졸업 시 LP 분할 방법은 products/launchlab/instructions을 참조하세요.
크리에이터 수수료 수집
소스:src/launchpad/claimCreatorFee.ts (단일 민트) 및 collectAllCreatorFees.ts (배치)
메서드는 **claimCreatorFee**입니다 (배치 형식의 경우 claimMultipleCreatorFee). quote 민트로 키가 지정되며, 런칭이 아닙니다 — 한 번의 호출로 서명자의 해당 민트에서 런칭 전체에 걸쳐 누적된 크리에이터 수수료를 쓸어냅니다:
claimPlatformFee / claimAllPlatformFee / claimVaultPlatformFee 빌더를 가지고 있습니다.
런칭을 생명주기를 통해 추적
모두 합치면, 모니터링 스크립트는 다음과 같을 수 있습니다:getRpcPoolInfo를 폴링하는 것은 단일 런칭에 적합합니다. 인덱서의 경우 대신 아래 gRPC 구독을 사용하세요 — getRpcPoolsInfo({ poolIdList })는 배치하지만, 수백 개의 풀을 폴링하는 것은 여전히 이점 없이 RPC 크레딧을 소모합니다.
gRPC를 통해 설정 및 풀 감시
소스:src/grpc/launchpadPoolInfo.ts
Yellowstone gRPC를 통해 LaunchLab 프로그램을 구독하고 각 민트의 토큰 프로그램과 함께 모든 GlobalConfig 및 PoolState 업데이트를 기록합니다. 한 accounts 구독에 두 개의 datasize 필터가 두 계정 유형을 분리하므로, 단일 스트림이 둘 다를 포함합니다.
데모는 런칭의 민트를 분류하기 위한 가장 짧은 올바른 참조이며, Token-2022 quote-mint 릴리스는 이를 필요하게 합니다:
- 풀은
PoolState.token_program_flag에서 직접 분류되며, 민트 조회 없이 기본 민트에 대해 bit0을, quote 민트에 대해 bit1을 디코딩합니다. 전체 바이트를0에 대해 테스트하는 것 — quote 민트가 레거시 전용이었을 때 충분했던 — quote 민트가 Token-2022일 때마다 레거시 기본 민트를 Token-2022로 잘못 읽습니다. - 설정은 그런 식으로 분류될 수 없습니다:
GlobalConfig는 quote 민트의 주소를 저장하고 프로그램 플래그는 없으므로, 데모는 민트 계정의 소유자를 한 번 읽고 민트당 캐시합니다.
create 대 update는 데모의 자체 캐시에서 추론되며, 시작 시 getProgramAccounts에서 시드됩니다; 시드가 비활성화되면 “create”를 “이 스트림에서 처음 본” 것으로 읽으세요.
gRPC 액세스는 공개 RPC 표면의 일부가 아닙니다 — 데모 저장소의 src/grpc/README.md를 참조하세요.
Rust CPI
자신의 Anchor 프로그램에서 LaunchLab을 호출하는 것은 드뭅니다 (대부분의 런칭 통합은 TS 측만입니다). 그렇다면:- 크레이트는 **
raydium-launchpad**입니다 (lib 이름raydium_launchpad), 버전0.2.0,cpi기능을 노출합니다.raydium_launchlab은 없습니다. - crates.io에 게시되지 않습니다 — 다른 Raydium 프로그램 크레이트와 동일한 방식으로 git 리비전으로 의존합니다.
- CPI 진입점은 SDK의 TypeScript 메서드가 아닌 온체인 명령어 이름을 따릅니다:
buy_exact_in,buy_exact_out,sell_exact_in,sell_exact_out,claim_creator_fee,create_vesting_account,claim_vested_token.migrate_to_amm/migrate_to_cpswap은GlobalConfig마이그레이션 지갑에 서명자 게이트되며 통합자 프로그램에서 호출할 수 없습니다.
sdk-api/rust-cpi를 참조하세요 — 특히 Anchor 버전 분할은 한 크레이트가 LaunchLab과 CLMM 모두에 CPI할 수 있는지 결정합니다.
함정
- 온체인 명령어 이름과 SDK 메서드 이름을 혼동합니다. 프로그램은
buy_exact_in/sell_exact_in을 가지고 있습니다; SDK는buyToken/sellToken을 가지고 있습니다.buyExactIn과sellExactIn은Curve의 정적 메서드로만 존재하며, 견적을 계산합니다 — 트랜잭션을 빌드하지 않습니다. extraSigners잊기.createLaunchpad는 생성하는 키페어에서 기본 민트를 생성하므로, 해당 키페어가 서명해야 합니다.extraSigners: [pair]를 생략하면 트랜잭션이 서명 검증에 실패합니다.- quote 민트를 선택하지 않습니다. 하나를 전달하지 않습니다. quote 민트는
configId를 통해 바인딩하는GlobalConfig의 속성입니다 —getPdaLaunchpadConfigId(programId, quoteMint, curveType, index). 다른 quote 민트에 대해 런칭하려면 다른 설정을 바인딩하세요;raydium.api.fetchLaunchConfigs()는 기본 매개변수와 함께 사용 가능한 것들을 나열합니다. - 메타데이터 크기. 긴
uri문자열은 Metaplex CPI를 예산 초과로 밀어냅니다.uri를 ~200자 이하로 유지하세요 — 대부분의 CDN 호스팅 JSON 메타데이터는 쉽게 맞습니다.symbol은 10자로 하드 캡됩니다. - 졸업을 경쟁할 수 있는 경쟁으로 취급합니다. 그렇지 않습니다 — 위의 경고를 참조하세요. UI는 여전히
status전환을 빠른 이벤트로 취급해야 합니다. Raydium의 크랭크는 임계값을 넘은 후 몇 초 내에 마이그레이션을 진행하기 때문입니다.
다음 단계
products/launchlab/bonding-curve— 곡선 수학.products/cpmm/code-demos— 결과 풀로 할 일.user-flows/launch-token-launchlab— 오프체인 단계를 포함한 엔드-투-엔드 토큰 런칭 가이드.
- Raydium SDK v2
- Raydium LaunchLab 프로그램 소스

