이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
버전 정보. 모든 TypeScript 데모는 Solana mainnet-beta에서
@raydium-io/raydium-sdk-v2@0.2.42-alpha를 대상으로 하며, 2026년 4월에 검증되었습니다. Rust CPI 스켈레톤은 master 브랜치의 raydium-cp-swap을 대상으로 하며, Anchor 0.30.x를 사용합니다. 프로그램 ID는 reference/program-addresses의 상수에서 가져옵니다.사전 요구사항
raydium-sdk-V2-demo/src/cpmm의 파일을 반영하며, 각 섹션 옆에 GitHub 링크가 있습니다. 부트스트랩은 데모 저장소의 config.ts.template (소스)을 따릅니다:
Raydium 인스턴스는 SDK의 파사드이며, 아래의 모든 데모에서 사용합니다. 이는 api-v3.raydium.io에서 토큰 목록과 수수료 설정을 지연 로드합니다. 오프라인 환경에서는 자신의 데이터로 시드할 수 있습니다.
CPMM 풀 생성
소스:src/cpmm/createCpmmPool.ts
- PDA를 도출하기 전에 민트를 token0/token1 순서로 정렬합니다.
- 일회성
create_pool_fee를poolFeeAccount에 지불합니다. - 호출자의 관련 토큰 계정이 없으면 생성합니다.
- 각 측면에 대해 올바른 토큰 프로그램(SPL Token vs Token-2022)을 선택합니다.
스왑 (기본 입력)
소스:src/cpmm/swap.ts
getPoolInfoFromRpc 내에서 RPC에서 풀 상태를 다시 가져옵니다. 서명하려는 트랜잭션에 대해 api-v3.raydium.io에서 견적을 받지 마세요. 한 블록 오래된 견적은 랜드 시간에 ExceededSlippage로 미끄러질 수 있습니다.
스왑 (기본 출력)
소스:src/cpmm/swapBaseOut.ts
유동성 입금
소스:src/cpmm/deposit.ts
lpAmount를 needed_token_0 및 needed_token_1로 변환하고, 명령어의 maximum_* 인수에 대해 각각을 1 + slippage로 증가시키며, 필요한 경우 ATA 생성을 구성합니다.
유동성 출금
소스:src/cpmm/withdraw.ts
프로토콜/펀드/크리에이터 수수료 수집
소스:src/cpmm/collectCreatorFee.ts, src/cpmm/collectAllCreatorFee.ts
프로토콜 및 펀드 수집은 권한 게이트 방식으로 유지됩니다. 크리에이터 수수료에는 두 가지 경로가 있습니다: 기존 크리에이터 서명 CollectCreatorFee와 추가 CollectCreatorFeePermissionless로, 누구나 호출할 수 있지만 크리에이터의 정규 ATA로만 전송할 수 있습니다. 고정된 SDK는 기존 원시 빌더를 노출합니다:
PoolState에서 직접 누적된 수수료를 읽을 수 있습니다:
Rust CPI 스켈레톤
자신의 Anchor 프로그램에서 CPMM을 호출하려면 (예: 예금자를 대신하여 스왑하는 금고), CPI 컨텍스트는 다음과 같습니다. 계정 순서는products/cpmm/instructions를 따릅니다.
CpiContext::new를 CpiContext::new_with_signer로 바꾸고 시드를 전달합니다.
일반적인 함정
지원 티켓을 열기 전의 짧은 체크리스트:- 정렬된 민트. 도출된
poolStatePDA가 온체인 풀과 일치하지 않으면 민트 정렬을 잊었을 가능성이 높습니다. - 오래된 API 견적.
api-v3.raydium.io의 준비금 값을CurveCalculator.swap에 전달하지 마세요. RPC에서 가져오세요. - 잘못된 토큰 프로그램. Token-2022 민트의 금고는 SPL Token이 아닌 Token-2022 프로그램이 소유합니다. 항상 풀의
token_0_program/token_1_program필드를 사용하세요. - 전송 수수료 민트에 대해 과소 표시된 슬리피지. 풀의 어느 쪽이든 Token-2022 전송 수수료 민트인 경우,
minimum_amount_out은 금고가 보내는 것이 아닌 사용자가 실제로 받는 것으로 표시되어야 합니다. - 스왑에서
NotApproved.PoolState.status를 확인하세요. 관리자가 해당 풀에서 스왑을 일시 중지했을 수 있습니다. 상태 비트마스크는products/cpmm/instructions를 참조하세요.
다음 단계
sdk-api/typescript-sdk— 전체 SDK 참조.sdk-api/rest-api— 견적 및 풀 메타데이터 엔드포인트.user-flows/create-cpmm-pool— 동일한 흐름의 비코드 설명.integration-guides/aggregator— 다중 홉 경로의 일부로 CPMM을 라우팅하는 경우.

