本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
三個程序,三種協議。 農場 v3、v5 和 v6 是獨立的程序,擁有獨立的狀態佈局。本頁將各版本並排說明。實務上,大多數新的整合都以 v6 為目標;v3 和 v5 對大多數整合者來說是唯讀的(質押早已發生,這些池正處於退場階段)。
帳户清單(每個農場,任何版本)
SDK 在
raydium.farm.getFarmById 上返回完整集合。對於任意第三方農場,API 端點 GET https://api-v3.raydium.io/main/farms/info?ids=<FARM_ID> 也會返回這些帳户。
FarmState 佈局 — v6
v6 是當前版本,其帳户結構最通用。
staking_mint、staking_vault— 什麼被質押以及它位於何處。total_staked— 當前總額。計算 APR 所需:reward_per_second × 86400 / total_staked。reward_infos[i].emission_per_second_x64— Q64.64 速率。除以2^64得到真正的每秒代幣數。reward_infos[i].open_time/end_time— 用於 UI 的「剩餘 X 天」顯示。reward_infos[i].reward_per_share_x64—UserLedger扣款的計數器。
FarmState 佈局 — v5
- 每個插槽,而非每秒。 v5 的更新循環按插槽而非牆上時鐘運行。SDK 為 UI 將其規範化為「每秒」,但鏈上單位是插槽。
- 整數發放速率。
reward_per_second是u64。這將最小可表達速率限制為每秒 1 個單位,對於 9 位小數鑄幣的低發放流來說太粗糙。v6 使用 Q64.64 速率解決了這個問題。 - 沒有
reward_sender。在 v5 上,所有者是隱含的發送方;只有owner可以充值。
FarmState 佈局 — v3
UserLedger (v6) / UserStake (v5/v3)
每個用戶狀態,每個 (farm, user) 對一個帳户。衍生 PDA:
Deposit、Withdraw 或 Harvest 後,扣款會重置為當前的 deposited × reward_per_share_x64[i] / 2^64。
授權 PDA
金庫
質押和獎勵金庫是標準 SPL Token 帳户,其owner 是農場授權 PDA。地址存儲在 FarmState 上 — 不要重新衍生;從狀態讀取。質押鑄幣上的凍結授權必須在 v5/v6 上禁用(程序會檢查)。
Token-2022 注意事項:
- v3:僅 SPL Token。
- v5:僅 SPL Token。
- v6:在質押和獎勵鑄幣上都支持 Token-2022,由
staking_token_program/reward_token_program欄位控制。Token-2022 獎勵鑄幣上的轉帳費在發放時收取(金庫 → 用戶)。
觀察和 APR
農場不在鏈上存儲 APR。計算方法:staking_mint_usd_price(通過 api-v3.raydium.io/pools/info/ids)以及從任何價格預言機拉取 reward_usd_price。
下一步
products/farm-staking/instructions— 每個版本的指令參考。products/farm-staking/code-demos— 通過 SDK 進行質押、收穫和創建農場。reference/program-addresses— 所有三個程序 ID。
- Raydium SDK v2
Farm模塊 - 農場 v6 程序源代碼目前未作為獨立存儲庫發佈;IDL 捆綁在
raydium-io/raydium-sdk-V2的 SDK 中的src/raydium/farm/下。

