跳转到主要内容

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 不会通知农场;用户必须先主动从农场中提取。同样,从池中提取不会从农场中提取。
  • 按用户、按奖励的账本。 每个质押者在每个农场上都有一个用户质押(或”账本”)账户,追踪他们质押的金额以及他们对农场每个奖励流的奖励-每份额计数器的快照。
  • 多奖励。 农场 v5 支持最多 2 个奖励;v6 支持最多 5 个。每个奖励都有自己的金库、每秒速率、开始时间和结束时间。

三个活跃版本

Raydium 已发布三个农场程序版本。所有版本都在运行中,每个版本都有自己的 PDA 方案和指令集。集成者应将它们视为三个共享概念模型的不同程序。
版本程序 ID 位置最大奖励数显著差异
v3reference/program-addresses1最早的架构。最古老的农场(RAY-USDC、SOL-USDC)仍通过此版本路由。
v5reference/program-addresses2添加了第二个奖励槽和AddReward风格的充值。
v6reference/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 快照。它不是用户欠的债务;它是用于计算未来应计的偏移量。
  • 存入提取时,农场首先结算待定奖励(记入user.pending_reward或直接发送到用户的 ATA,取决于版本),然后将user.reward_debt更新为当前计数器。
  • 收获时,农场支付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
懒惰:没有指令每秒发出。计数器在每次有人接触农场时刷新(存入提取收获、管理员更新)。没有活动的农场会积累越来越大的间隙,该间隙在下一次交互时关闭。

质押代币 vs 奖励代币

质押代币被托管,而不是被销毁。 当用户质押 100 LP 时,农场将 100 LP 从用户的 ATA 移动到农场的质押金库。在提取时,农场将 100 LP 移回。农场永远不会调用池。 奖励代币从创建者预存的金库中支付。 当创建者启动一个农场时,他们将全部奖励预算(比如 1,000,000 RAY + 500,000 USDC)存入两个奖励金库。农场程序不会铸造新代币;它只是在流的持续时间内分配金库中的内容。如果金库在end_time之前耗尽,发放将停止。

发放时间表

每个奖励流有三个时间参数:
  • start_time — 发放开始的 UNIX 时间戳。在此之前,没有应计。
  • end_time — 发放停止的时间戳。之后,此流的reward_per_share不再增长。
  • per_secondstart_time ≤ now < end_time 时的发放速率。
可以通过 v5 / v6 上的AddReward / SetRewards扩展奖励(向前推动end_time、充值金库)。可以通过RestartRewardsend_time之后重新启动。在没有管理员配合的情况下无法缩短。

农场不是什么

  • 不是费用分配器。 CPMM 和 CLMM 直接将交易费收集到池状态中。农场不会接触池费用。从池费用到代币持有者的唯一路径是 LP 赎回或 CLMM 的CollectFee
  • 不是自动的。 LP 必须显式质押才能获得农场奖励。将代币留在钱包中的 LP 持有者从农场中获不到任何东西。
  • 不可互换。 每个用户质押账户都绑定到一个(农场,用户)对。在不先取消质押的情况下,你无法将你的质押转移到另一个钱包。
  • 与 CLMM 头寸不直接兼容。 农场 v6 引入了一个 CLMM 适配器,但在实践中 CLMM 池使用他们自己的内置奖励流(见products/clmm/fees)而不是农场发放。

何时农场是正确的工具

当你想要以下情况时,使用农场:
  • 用外部代币(你的项目代币、合作伙伴的代币等)为你的项目的 CPMM 或 AMM v4 池之一的 LP 提供激励。
  • 在单资产代币上运行质押程序(经典的”质押 RAY,赚取 RAY”)而无需部署自己的合约。
  • 在现有池之上分层额外奖励,无需访问该池的管理员。
当你的池是 CLMM 时,改用 CLMM 的内置奖励流。它们具有相同的经济学,但参与头寸的费用-增长-内部计账(在范围内的头寸按比例赚取,超出范围的头寸不赚取),不需要用户移动他们的头寸 NFT。

章节内容

  • accounts — 每个版本的完整链上状态布局。
  • instructions — 每条农场指令及其账户列表和前/后置条件。
  • code-demos — 用于质押、收获和创建新农场的 TypeScript 示例。

下一步去哪里

来源: