Skip to main content
이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
버전 배너. 모든 TypeScript 데모는 @raydium-io/raydium-sdk-v2@0.2.64-alpha를 대상으로 하며, 0.2.42-alpha(2026-04)에 대해 마지막으로 실행되었고 2026-09-09에 Solana mainnet-beta에 대해 0.2.64-alpha 소스에 대해 호출 서명을 다시 확인했습니다. Rust CPI 스켈레톤은 chore/upgrade-anchor 브랜치의 raydium-cp-swap, Anchor 1.0.2를 대상으로 합니다 — master는 여전히 0.32.1을 고정합니다. 프로그램 ID는 reference/program-addresses의 상수에서 가져옵니다.

사전 요구사항

이 페이지의 모든 데모는 raydium-sdk-V2-demo/src/cpmm의 파일을 반영합니다. 각 섹션 옆에 GitHub 링크가 있습니다. 부트스트랩은 데모 저장소의 config.ts.template을 따릅니다 (소스):
Raydium 인스턴스는 SDK의 파사드입니다 — 아래의 모든 데모가 이를 사용합니다. Raydium.load는 기본적으로 토큰 목록을 로드하기 때문에 비동기입니다. 해당 페치를 건너뛰려면 disableLoadToken: true를 전달하세요. 가용성 기능 확인은 disableFeatureCheck: false를 전달하지 않는 한 이미 건너뜁니다. 수수료 구성은 raydium.api.getCpmmConfigs()를 통해 첫 사용 시 지연 로드됩니다.

CPMM 풀 생성

소스: src/cpmm/createCpmmPool.ts
SDK가 조용히 처리하는 몇 가지 사항:
  • PDA를 도출하기 전에 민트를 token0/token1 순서로 정렬합니다.
  • 일회성 create_pool_fee를 poolFeeAccount에 지불합니다.
  • 호출자의 관련 토큰 계정이 누락된 경우 생성합니다.
  • 각 측면에 대해 올바른 토큰 프로그램(SPL Token vs Token-2022)을 선택합니다.
확인 후 다음을 사용하여 라이브 풀 상태를 가져올 수 있습니다:

스왑 (기본 입력)

소스: src/cpmm/swap.ts
참고: SDK는 항상 getPoolInfoFromRpc 내에서 RPC에서 풀 상태를 다시 가져옵니다. 서명하려는 트랜잭션에 대해 api-v3.raydium.io에서 견적을 받지 마세요 — 한 블록 오래된 견적은 랜드 시간에 ExceededSlippage로 미끄러질 수 있습니다.

스왑 (기본 출력)

소스: src/cpmm/swapBaseOut.ts

유동성 입금

소스: src/cpmm/deposit.ts
SDK는 풀의 현재 준비금에서 쌍을 이루는 금액을 도출하고, 명령어의 maximum_* 인수에 대해 각 측을 슬리피지로 부풀리고, 필요한 경우 ATA 생성을 구성합니다. raydium.cpmm.computePairAmount({ ... })는 UI 미리보기를 원하는 경우 동일한 숫자를 반환합니다.

유동성 출금

소스: src/cpmm/withdraw.ts

프로토콜/펀드/크리에이터 수수료 수집

소스: src/cpmm/collectCreatorFee.ts, src/cpmm/collectAllCreatorFee.ts 프로토콜 및 펀드 수집은 권한 게이트 상태로 유지됩니다. 크리에이터 수수료에는 두 가지 경로가 있습니다: 크리에이터 서명 CollectCreatorFee와 추가 CollectCreatorFeePermissionless로, 모든 지불자가 호출할 수 있지만 크리에이터의 정규 ATA로만 전송할 수 있습니다. 0.2.64-alpha는 두 크리에이터 경로에 대한 모듈 수준 빌더를 제공합니다:
두 크리에이터 명령어 모두 2026-09-19 프로그램 업그레이드에서 계정 목록을 변경했습니다. 각각은 이제 ["creator_fee_share", creator, ammConfig]에서 creator_fee_share PDA를 사용하며, 권한 없는 명령어는 amm_config도 사용합니다 — 둘 다 system_program 뒤에 추가되므로 이미 있던 계정은 위치를 유지합니다. 업그레이드 전 SDK 릴리스에 고정된 빌더는 더 짧은 목록을 내보내고 트랜잭션은 누락된 계정으로 거부됩니다. 업그레이드된 프로그램에 대해 이러한 헬퍼를 사용하기 전에 설치한 버전이 새 계정을 전달하는지 확인하고, 이로부터 클라이언트를 생성하는 경우 IDL을 새로 고칩니다.PDA를 전달하는 것은 생성된 적이 없는 경우에도 필수입니다 — 도출하고 전달하세요. 프로그램은 계정이 비어 있을 때 AmmConfig.creator_fee_share_rate로 폴백합니다.
두 크리에이터 명령어는 다른 판별자 및 계정 레이아웃을 가집니다 — 권한 없는 명령어는 크리에이터 서명자를 별도의 payer와 서명하지 않는 creator로 바꿉니다. 다른 명령어의 계정을 손으로 바꾸는 대신 일치하는 빌더를 사용하세요.SDK에는 프로토콜 또는 펀드 수수료 빌더가 없습니다 (makeCollectProtocolFeeInstruction 및 makeCollectFundFeeInstruction은 어떤 이름으로도 존재하지 않습니다) — 이들은 관리자 경로이며, CreateCreatorFeeShare / CloseCreatorFeeShare도 마찬가지로 빌더가 없습니다. 존재하는 저수준 명령어 빌더는 collectCpFeeInstruction, makeCollectCreatorFeeInstruction 및 collectCreatorFeePermissionlessInInstruction입니다.
오프체인에서 PoolState에서 직접 발생한 수수료를 읽을 수 있습니다:

Rust CPI 스켈레톤

자신의 Anchor 프로그램에서 CPMM을 호출하려면 — 예를 들어, 예금자를 대신하여 스왑하는 금고 — CPI 컨텍스트는 다음과 같습니다. 계정 순서는 products/cpmm/instructions를 따릅니다.
CPI가 PDA로 서명하는 경우 (예: 예금자를 대신하여 금고를 관리), CpiContext::new를 CpiContext::new_with_signer로 바꾸고 시드를 전달하세요.

일반적인 함정

지원 티켓을 열기 전의 짧은 체크리스트:
  • 정렬된 민트. 도출된 poolState PDA가 온체인 풀과 일치하지 않으면 민트 정렬을 잊었을 가능성이 높습니다.
  • 오래된 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를 참조하세요.

다음 단계

소스: