Skip to main content
本頁內容由 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_mintstaking_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_x64UserLedger 扣款的計數器。

FarmState 佈局 — v5

與 v6 的差異:
  • 每個插槽,而非每秒。 v5 的更新循環按插槽而非牆上時鐘運行。SDK 為 UI 將其規範化為「每秒」,但鏈上單位是插槽。
  • 整數發放速率。 reward_per_secondu64。這將最小可表達速率限制為每秒 1 個單位,對於 9 位小數鑄幣的低發放流來說太粗糙。v6 使用 Q64.64 速率解決了這個問題。
  • 沒有 reward_sender。在 v5 上,所有者是隱含的發送方;只有 owner 可以充值。

FarmState 佈局 — v3

單獎勵。基於插槽。最古老的程序版本,為先於 v5 的 RAY-USDC 和 SOL-USDC 農場而保留。

UserLedger (v6) / UserStake (v5/v3)

每個用戶狀態,每個 (farm, user) 對一個帳户。衍生 PDA:
(種子字符串是 SDK 實際使用的值;程序版本在歷史上有所不同。如有任何安全相關的事項,請對照 v6 源代碼驗證。)
每個流的扣款是概覽中描述的帳務抵消:
在每個 DepositWithdrawHarvest 後,扣款會重置為當前的 deposited × reward_per_share_x64[i] / 2^64

授權 PDA

所有三個版本都用單一種子為每個農場衍生農場授權。此 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。計算方法:
消費者通常從 LP 所屬的池中拉取 staking_mint_usd_price(通過 api-v3.raydium.io/pools/info/ids)以及從任何價格預言機拉取 reward_usd_price

下一步

來源: