跳轉到主要內容

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →

什麼是農場

農場是一個獨立的鏈上程式,向質押質押代幣的賬戶分配一個或多個獎勵代幣。質押代幣幾乎總是由 CPMM、AMM v4 或舊版配對池發行的 LP 代幣,但也支持單資產農場(直接質押 SOL、RAY 或項目代幣),少數長期運行的計劃會使用這類農場。 主要特性:
  • 基於發放,而非基於費用。 與 CLMM 的內置獎勵流不同,農場獎勵與交換量或池活動無關。農場的預算由創建者提前存入,並以恆定的每秒速率發放,直到耗盡。
  • 獨立於流動性池。 流動性池不知道農場存在。在錢包之間轉移 LP 不會通知農場;用戶必須先主動從農場提取。同樣,從池中提取不會從農場中提取。
  • 按用戶、按獎勵帳本。 每個質押者在每個農場上都有一個 UserStake(或「帳本」)賬戶,追蹤其質押金額以及農場每個獎勵流的獎勵-份額計數器快照。
  • 多獎勵。 農場 v5 最多支持 2 個獎勵;v6 最多支持 5 個。每個獎勵都有自己的金庫、每秒速率、開始時間和結束時間。

三個現行版本

Raydium 已推出三個農場程式版本。全部處於活躍狀態,每個都有自己的 PDA 方案和指令集。集成商應將它們視為三個不同的程式,共享一個概念模型。
版本程式 ID 位置最多獎勵主要差異
v3參見 reference/program-addresses1最早的架構。最舊的農場(RAY-USDC、SOL-USDC)仍通過此版本運行。
v5參見 reference/program-addresses2添加了第二個獎勵槽位和 AddReward 風格的頂部補充。
v6參見 reference/program-addresses5現行版本。槽位擴展、更清潔的管理、支持通過 v6 特定適配器進行 CLMM 頭寸農場化(實踐中罕見)。
SDK 將 raydium.farm 公開為單一外觀 — 版本從農場賬戶的所有者推斷。在構建鏈上集成時,你必須手動分派。

獎勵-份額記帳

農場計劃使用在 DeFi 收益合約中常見的標準「主廚」模式:
reward_per_share := total_rewards_distributed_by_stream / total_staked
pending(user)    := user.staked × (reward_per_share − user.reward_debt)
  • reward_per_share 在農場賬戶上存儲為定點計數器(v5+ 中為 Q64.64,v3 中為 Q56.8)。它只會增加。
  • user.reward_debt 是用戶上次交互時 reward_per_share 的快照。這不是用戶欠下的債務;這是用於計算未來應計的偏移量。
  • DepositWithdraw 上,農場首先結算待處理獎勵(記入 user.pending_reward 或直接發送到用戶的 ATA,取決於版本),然後將 user.reward_debt 更新為當前計數器。
  • Harvest 上,農場支出 pending_reward 並再次快照 reward_debt
每秒發放速率通過延遲更新進入記帳:
elapsed        := min(now, reward.end_time) − reward.last_update_time
new_emissions  := reward.per_second × elapsed
if total_staked > 0:
    reward_per_share += new_emissions / total_staked
reward.last_update_time := now
延遲:沒有指令每秒發出。計數器在每次任何人觸及農場時刷新(DepositWithdrawHarvest、管理更新)。沒有活動的農場會累積一個不斷增長的間隙,該間隙在下一次交互時關閉。

質押代幣 vs 獎勵代幣

質押代幣由託管保管,不是燃燒。 當用戶質押 100 LP 時,農場將 100 LP 從用戶的 ATA 移動到農場的質押金庫。在 Withdraw 時,農場將 100 LP 移回。農場從不調用池。 獎勵代幣從由創建者預先注資的金庫中支出。 當創建者建立農場時,他們將完整的獎勵預算(例如 1,000,000 RAY + 500,000 USDC)存入兩個獎勵金庫。農場計劃不鑄造新代幣;它只是在流的期間內分配金庫中的內容。如果金庫在 end_time 前耗盡,發放停止。

發放時間表

每個獎勵流有三個時間參數:
  • start_time — 發放開始的 UNIX 時間戳。在此之前,沒有應計。
  • end_time — 發放停止的時間戳。在此之後,reward_per_share 不再從此流增加。
  • per_second — 在 start_time ≤ now < end_time 時的發放速率。
可以通過 v5/v6 上的 AddRewardSetRewards 擴展獎勵(將 end_time 向前推進,頂部補充金庫)。可以通過 RestartRewardsend_time 後重新啟動。在沒有管理員協助的情況下不能縮短。

農場不是什麼

  • 不是費用分配器。 CPMM 和 CLMM 將交易費直接收集到池狀態中。農場不觸及池費。從池費到代幣持有者的唯一路徑是 LP 贖回或 CLMM 的 CollectFee
  • 不是自動的。 LP 必須明確質押以賺取農場獎勵。將代幣留在錢包中的 LP 持有者從農場中獲不到任何收益。
  • 不可互換。 每個 UserStake 賬戶與一個 (farm, user) 對綁定。你不能在不解除質押的情況下將你的質押轉移到另一個錢包。
  • 不直接與 CLMM 頭寸兼容。 農場 v6 引入了 CLMM 適配器,但在實踐中 CLMM 池使用它們自己的內置獎勵流(參見 products/clmm/fees),而不是農場發放。

何時使用農場

當你想要以下情況時使用農場:
  • 用外部代幣(你的項目代幣、合作夥伴的代幣等)激勵你項目 CPMM 或 AMM v4 池之一的 LP。
  • 在單資產代幣上運行質押計劃(經典的「質押 RAY,賺取 RAY」),而無需部署自己的合約。
  • 在現有池之上分層額外獎勵,無需對該池的管理員訪問權限。
當你的池是 CLMM 時,改為使用 CLMM 的內置獎勵流。它們具有相同的經濟學,但參與頭寸的費用增長內部會計(範圍內頭寸按比例賺取,範圍外頭寸不賺取),並且不需要用戶移動其頭寸 NFT。

章節內容

  • accounts — 每個版本的完整鏈上狀態佈局。
  • instructions — 每個農場指令及其賬戶列表和前置/後置條件。
  • code-demos — 用於質押、收割和創建新農場的 TypeScript 示例。

接下來去哪裡

來源: