이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
CPI(“크로스프로그램 호출”)는 한 솔라나 프로그램이 다른 프로그램을 호출하는 메커니즘입니다. Raydium의 Anchor 프로그램은 호출 지점을 타입화된 함수 호출처럼 보이게 하는 CPI 래퍼 크레이트를 함께 제공합니다. 계정 구조체에는 검증된 필드 이름과
cpi::<ix>() 헬퍼가 포함됩니다. 이 페이지는 일반적인 패턴을 다루고 있으며, 제품별 코드 예제는 각 제품 챕터의 code-demos 페이지를 참조하세요.Cargo 의존성
cpi 기능 플래그를 사용하면 크레이트가 전체 프로그램이 아닌 CPI 표면(계정 구조체 + 호출자)만 컴파일되므로 바이너리 크기를 작게 유지할 수 있습니다.
CPI 계정 구조체를 end-to-end로 연결한 실제 예제는 raydium-io/raydium-cpi-example (AMM v4, CPMM, CLMM 포함)을 참조하세요.
계정 목록 구성
모든 Raydium CPI에는 호출 프로그램에Accounts 구조체가 필요합니다. 필드는 프로그램의 명령어 계정 순서와 1:1로 일치하며, 필드 레벨 검증자를 포함합니다:
UncheckedAccount입니다. 피호출자(Raydium)가 검증을 담당하기 때문입니다. 호출 프로그램은 자신이 소유한 계정만 엄격하게 검증합니다. 사용자 ATA, 자신의 PDA 등이 이에 해당합니다. /// CHECK: 주석은 Anchor의 누락된 검증 경고를 억제합니다.
CPI 호출 구성
Anchor는 명령어당 하나의 헬퍼를 생성합니다:cpi::swap_base_input은 IDL에서 생성되며, 인수 목록은 Anchor 명령어의 인수 목록을 미러링합니다.
서명자 시드 (PDA 서명 CPI)
프로그램이 PDA를 대신하여 CPI에 서명할 때(금고, 에스크로 등에서 일반적),CpiContext::new_with_signer를 사용합니다:
authority(또는 유사한 서명자 역할)로 전달된 계정의 경우, 솔라나 런타임은 PDA가 이 시드를 통해 서명하는지 확인합니다.
남은 계정들
일부 Raydium 명령어는 남은 계정들을 취합니다. 고정 계정 후 추가된 가변 길이 목록입니다. 정확한 예시:- CLMM
SwapV2: 스왑이 통과할 수 있는 틱 배열에 해당하는 1-8개의TickArrayState계정을 추가합니다. - Farm v6
Deposit: 각 활성 보상 스트림에 대해(reward_vault, user_reward_ata)쌍을 추가합니다.
.with_remaining_accounts(...)을 통해 전달합니다:
에러 전파
Raydium의 프로그램은 자신의 에러 열거형을 반환합니다. Anchor는 이를 래핑합니다. 호출 프로그램은Err(ProgramError::Custom(code))로 봅니다. 특정 에러를 처리하려면:
sdk-api/anchor-idl)에 따라 안정적입니다. 숫자 값과 비교하여 특정 코드에 대해 테스트할 수 있습니다.
조합 CPI의 컴퓨트 예산
각 CPI 프레임은 오버헤드가 있으며(호출 자체 약 1,500 CU), 피호출자의 CU 소비가 당신의 것 위에 쌓입니다. 프로그램 내부에서 CPMM 스왑을 호출하는 거래는 다음을 소비합니다:ComputeBudgetProgram::set_compute_unit_limit(...) 명령어를 설정합니다. 기본 200k CU 제한은 조용히 소진됩니다.
AMM v4 — 수동 Instruction 구성
AMM v4에는 Anchor 크레이트가 없습니다.Instruction을 수동으로 빌드합니다:
products/amm-v4/code-demos를 참조하세요.
Farm v6 — 보상 쌍 남은 계정들
Farm v6의Deposit / Withdraw / Harvest는 남은 계정의 (reward_vault_i, user_reward_ata_i) 쌍 패턴을 사용합니다. 정확한 순서:
farm_state.reward_infos[i].reward_state에 따라 디스패치합니다.
CPI 흐름 테스트
로컬 개발에서는 Raydium 프로그램을 테스트 검증자에서 사용할 수 있어야 합니다. 옵션:-
프로그램 복제를 사용한
anchor test—Anchor.toml에서:이는 배포된 바이트코드를 메인넷에서 로컬 검증자로 끌어옵니다. -
Devnet — Raydium은 모든 프로그램을 메인넷과 동일한 프로그램 ID로 devnet에 배포합니다.
anchor test --provider.cluster devnet을 실행하여 라이브 코드를 칩니다. -
로컬 배포 — Raydium 저장소를 복제하고
anchor deploy를 로컬 검증자로 수행합니다. 테스트 주기 오버헤드를 추가하지만 디버깅을 위해 피호출자를 수정할 수 있습니다.
포인터
products/cpmm/code-demos,products/clmm/code-demos,products/amm-v4/code-demos,products/farm-staking/code-demos— 제품별 CPI 예제.sdk-api/anchor-idl— IDL 검색 및 클라이언트 재생성.integration-guides/cpi-integration— 상위 레벨 패턴: 에스크로, 금고, 애그리게이터 구성.

