本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
版本說明。 所有示例針對
@raydium-io/raydium-sdk-v2@0.2.42-alpha 運行於 Solana mainnet-beta,已於 2026 年 4 月驗證。SDK 會根據農場的程式所有者內部分配 v3 / v5 / v6;下述示例假設為 v6 農場。請參見 reference/program-addresses 以取得三個程式 ID。設定
此處的示例鏡像raydium-sdk-V2-demo/src/farm 中的檔案。初始化按照示例存儲庫的 config.ts.template 進行:
按 ID 取得農場
getFarmById 從鏈外取得 FarmState,根據程式版本解碼,並將固定點發行率規範化為每秒的純 Decimal 值。
質押 LP 代幣
來源:src/farm/stake.ts
僅領取(收穫)
來源:src/farm/harvest.ts
harvestAllRewards 接受列表 — 對於顯示投資組合視圖的 UI,批量調用。每個農場在一個交易中以單獨的指令領取(受 1232 字節大小限制;對於 >~6 個農場,分成多個交易)。
對於 v6 上的單個農場,你也可以使用顯式的 Harvest 路徑:
amount: 0 習慣用法是必需的;SDK 會正確分配它。
取消質押
來源:src/farm/unstake.ts
建立 v6 農場
來源:src/farm/createAmmFarm.ts 和 editAmmFarm.ts
perSecond是每秒的整數發行率。SDK 在發送前將其打包為 Q64.64。對於分數率,縮放並調整時間。- 完整預算(
perSecond × duration)必須存在於你的獎勵 ATA 中 —create會原子性地將其移入獎勵金庫。 - 你可以在一個
create調用中設置最多 5 個獎勵。帳戶列表每增加一個獎勵流會增長(reward_mint, reward_vault, sender_ata, token_program);注意 1232 字節交易大小限制。對於 4+ 個獎勵,先用 1-2 個創建,然後在後續交易中使用AddReward。
補充現有獎勵流
setRewards 延長 end_time 並轉移差額預算。該指令無法縮短流、無法降低活躍流的 per_second,也無法變更獎勵代幣。若要交換代幣,請等待 end_time 並在釋放的插槽(如有)上使用 AddReward,或建立新農場。
重啟已結束的流
reward_state == 2(已結束)時有效。呼叫者必須是該插槽的 reward_sender(v6)或農場所有者(v5)。
Rust CPI
與 AMM v4 不同,v6 農場程式隨附一個 Anchor crate(raydium_farm_v6),與前端和 SDK 源一起發佈。最小 Deposit 草圖:
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/中。

