이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
버전 정보. 모든 예제는 Solana mainnet-beta에서
@raydium-io/raydium-sdk-v2@0.2.64-alpha를 대상으로 하며, 2026-09-09 검증됨 — 아래의 모든 빌더 이름, 파라미터 이름, 파라미터 타입은 해당 릴리스의 src/raydium/farm/과 raydium-sdk-V2-demo/src/farm에 대해 확인되었습니다. SDK는 팜의 프로그램 소유자에 따라 내부적으로 v3 / v5 / v6을 디스패치하며, 아래 예제는 v6 팜을 가정합니다. 세 개의 프로그램 ID는 reference/program-addresses를 참조하세요.팜 모듈의 메서드 이름은 예상과 다릅니다: getFarmById가 없고 setRewards도 없습니다. 페칭은 raydium.api.fetchFarmInfoById를 통해 이루어지며, 보상 편집 빌더는 addNewRewardToken / addNewRewardsToken과 restartReward / restartRewards입니다.설정
여기의 예제는raydium-sdk-V2-demo/src/farm의 파일을 반영합니다. 부트스트랩은 데모 저장소의 config.ts.template을 따릅니다:
ID로 팜 조회
raydium.farm.getFarmById는 없습니다. 모든 팜 예제는 API 모듈에서 시작하며, 이는 deposit / withdraw / harvestAllRewards가 모두 사용하는 정규화된 FormatFarmInfoOut 형태를 반환합니다:
fetchFarmInfoById는 쉼표로 구분된 ID 문자열을 받고 배열을 반환하므로, 한 번의 호출로 전체 포트폴리오를 채울 수 있습니다. 표시 정보가 아닌 원본 계정 키가 필요한 경우, raydium.api.fetchFarmKeysById({ ids })는 볼트와 권한 PDA를 반환합니다. SDK는 아래의 모든 빌더 내에서 내부적으로 이를 호출합니다.
LP 토큰 스테이킹
출처:src/farm/stake.ts
청구만 (수확)
출처:src/farm/harvest.ts
farmInfoList는 배열이 아니라 **팜 ID로 키된 Record**이며, 빌더는 여러 트랜잭션을 반환합니다 — 따라서 execute에 sequentially: true를 전달해야 합니다:
txId가 아닌 txIds를 반환합니다.
단일 팜의 경우, amount: 0 관용구로 수확합니다 — 이는 v6을 포함한 모든 버전에서 src/farm/harvest.ts가 수행하는 작업입니다:
언스테이킹
출처:src/farm/unstake.ts
v6 팜 생성
출처:src/farm/createAmmFarm.ts 및 editAmmFarm.ts
create는 스테이킹되는 LP 민트의 풀에 대한 풀 정보 객체를 받으며 (단순 민트가 아님), rewardInfos의 각 항목은 FarmRewardInfo입니다: { mint: PublicKey, perSecond: string, openTime: number, endTime: number, rewardType: "Standard SPL" | "Option tokens" }. 시간은 평문 초이며, perSecond는 BN이 아닌 문자열입니다. programId는 v6 프로그램으로 기본값이 설정되므로 거의 전달하지 않습니다.
perSecond는 보상 민트의 원시 단위로 초당 배출 속도이며, 십진 문자열로 전달됩니다. SDK는 전송 전에 온체인 고정소수점 표현으로 패킹합니다.- 전체 예산 (
perSecond × (endTime − openTime))은 보상 ATA에 있어야 합니다 —create는 이를 보상 볼트로 원자적으로 이동합니다. - Token-2022 보상 민트는 이 SDK 버전의 SDK 팜 빌더에서 지원되지 않습니다. 보상에 일반 SPL 민트를 사용하세요.
- 한 번의
create호출에서 최대 5개의 보상을 시드할 수 있습니다. 계정 목록은 추가 스트림당(reward_mint, reward_vault, sender_ata, token_program)만큼 증가합니다. 1232바이트 트랜잭션 크기 제한을 인식하세요. 4개 이상의 보상의 경우, 1-2개로 생성하고 후속 트랜잭션에서addNewRewardsToken을 사용하세요.
새로운 보상 스트림 추가
raydium.farm.setRewards는 없습니다. 팜의 보상을 변경하는 두 빌더는 addNewRewardToken / addNewRewardsToken (새로운 민트로 자유 슬롯 점유) 및 restartReward / restartRewards (스트림이 끝난 슬롯 재시작)입니다. 둘 다 create가 사용하는 것과 정확히 같은 형태의 FarmRewardInfo 객체를 받습니다.
perSecond × duration)은 트랜잭션의 일부로 지급자의 ATA에서 인출됩니다. 기본 명령어는 스트림을 단축할 수 없고, 라이브 스트림에서 per_second를 낮출 수 없으며, 슬롯의 보상 민트를 변경할 수 없습니다 — 민트를 교환하려면 end_time을 기다리고 해제된 슬롯에서 addNewRewardsToken을 사용하거나, 새 팜을 생성하세요.
완료된 스트림 재시작
출처:src/farm/editAmmFarm.ts
restartRewards는 newRewardInfos (복수, 배열)를 받습니다. restartReward는 단일 항목 형태이며 newRewardInfo를 받습니다. 민트 필드는 rewardMint가 아닌 mint이며, 팜에 이미 존재하는 슬롯과 일치해야 합니다 — 빌더는 민트로 슬롯을 조회하고 없으면 오류를 발생시킵니다.
restartRewards는 v6 전용입니다 — 빌더는 팜의 프로그램 ID를 읽고 v3 / v5 팜에 대해 오류를 발생시킵니다. 대상 슬롯의 reward_state == 2 (완료)일 때만 유효합니다. 호출자는 슬롯의 reward_sender여야 합니다. openTime >= endTime은 RPC가 수행되기 전에 클라이언트 측에서 거부됩니다.
Rust CPI
Farm v6은 2024-05-13에 마지막으로 배포되었으며 통합자의 관점에서는 Anchor 프로그램이 아닙니다. 자신의 온체인 프로그램에서 이와 구성해야 하는 경우,Instruction을 직접 구성하세요 — 계정 목록과 명령어 판별자를 독립적으로 파생시키고 (SDK의 TypeScript 레이아웃 raydium-sdk-V2/src/raydium/farm/에서 또는 실제 트랜잭션을 디코딩하여), invoke_signed합니다. 해당 절차는 sdk-api/rust-cpi를 참조하세요.
어느 경로를 택하든, remaining_accounts 꼬리는 팜의 활성 보상 슬롯과 1-대-1로 일치해야 합니다 (인덱스 순서의 reward_vault_i, user_reward_ata_i 쌍). 이들을 생략하거나 잘못 정렬하면 자동 회계 오류가 발생합니다 — 프로그램은 잘못된 금액을 전송합니다.
주의사항
- 언스테이킹 전에 청구 잊기. 무해합니다 —
Withdraw는 먼저 보류 중인 보상을 정산합니다. 하지만 UI가 “청구”를 “언스테이킹”과 별도로 표시하면, 사용자는Withdraw후에도 여전히 청구할 것이 있다고 생각할 수 있습니다. 없습니다. 그 시점까지 누적된 모든 것이 지급되었습니다. - 배출 중
total_staked = 0. 아무것도 스테이킹되지 않은 동안 누적된 배출은 몰수됩니다 (reward_per_share업데이트 공식이 0으로 나누고 프로그램이 업데이트를 건너뜁니다). 예정된open_time이 있는 프로그램의 경우, open_time에 “시드 스테이크”를 실행하여 이를 피하세요. - Token-2022 전송 수수료. Token-2022 보상 민트가 있는 v6 팜에서, 전송 수수료는 배출 시 적용됩니다 (볼트 → 사용자). 이를 APR 견적에 포함시키세요.
- v5의 작은
per_second. v5의u64속도는 모든per_second < 1토큰 단위/초 (≥9 소수 자릿수의 민트에서 이는 종종 원하는 속도)를 표현할 수 없음을 의미합니다 — 스트림 속도는 0으로 반올림되고 팜은 아무것도 배출하지 않습니다. v6을 사용하세요.
다음 단계
products/farm-staking/instructions— 기본 명령어 참조.products/clmm/fees— CLMM의 기본 보상 스트림과 비교.user-flows/migrate-amm-v4-to-cpmm— 종종 새로운 CPMM 팜 시작과 함께 진행됩니다.
- Raydium SDK v2
- Farm v6 IDL은
raydium-io/raydium-sdk-V2의src/raydium/farm/에 번들로 제공됩니다.

