4、激励分配算法:按时间加权分配、按交易量加权分配、按锁仓时长加权分配
做流动性激励,说白了就是怎么分钱。
钱分得公平,大家愿意来。分得不公平,池子很快就干了。
我个人习惯把激励分配算法分成三类:时间加权、交易量加权、锁仓时长加权。这三种思路,几乎覆盖了市面上所有主流 DeFi 项目的激励逻辑。
4.1 按时间加权分配
这是最朴素的做法。你提供流动性多久,就拿多少奖励。
公式很简单:
用户奖励 = 总奖励 * (用户提供流动性的时长 / 所有用户提供流动性的总时长)
嗯,这里要注意一个坑。我遇到过不少项目方,直接用「区块高度差」来算时长。结果呢?
以太坊出块时间不稳定,有时候 12 秒,有时候 20 秒。用区块高度算出来的时长,跟实际时间差很多。我建议用 block.timestamp 来算,虽然也有微小偏差,但比区块高度靠谱多了。
适用场景:
- 稳定币池(价格波动小,用户更看重时间)
- 早期项目冷启动(简单粗暴,用户容易理解)
避坑指南:
我曾经在 Curve 的某个分叉项目里看到,他们直接用区块高度差来分配奖励。结果以太坊一次重组,回滚了十几个区块,用户的奖励全乱了。后来他们紧急升级,改成了用时间戳。
所以,永远不要依赖区块高度来算时间。
4.2 按交易量加权分配
这个思路更「DeFi」一些。谁贡献的交易量多,谁拿的奖励就多。
公式:
用户奖励 = 总奖励 * (用户贡献的交易量 / 所有用户贡献的总交易量)
你想想看,这其实是在鼓励「做市商」行为。交易量大的用户,通常都是专业的做市团队或者高频交易者。他们能带来真实的交易深度和手续费收入。
但这里有个经典问题——刷量。
我记得 2021 年有个 DEX,搞了个交易量挖矿。结果一群机器人进来,左手倒右手,一天刷了几千万美元的交易量,把奖励全薅走了。真实用户一分钱没拿到。
我的建议:
如果要用交易量加权,一定要加一个最小持仓时间的约束。比如,用户必须至少持有 LP Token 24 小时,才能参与交易量统计。这样能有效防止「闪电刷量」。
另外,交易量的统计口径也要注意。是用「名义交易量」还是「调整后交易量」?
我个人习惯用调整后交易量。比如,把稳定币之间的交易打个折扣,因为那些交易对流动性的贡献其实不大。而像 ETH/USDC 这种核心交易对,可以给更高的权重。
4.3 按锁仓时长加权分配
这个算法,说白了就是「越忠诚,拿越多」。
用户锁仓的时间越长,每个单位时间的奖励权重就越高。通常用指数函数或者阶梯函数来实现。
举个例子:
权重 = 锁仓天数 ^ 0.5
用户奖励 = 总奖励 * (用户权重 / 所有用户权重之和)
为什么用开方?因为线性增长太猛了,锁 100 天的用户权重是锁 1 天的 100 倍,这会让新用户完全没动力。开方之后,100 天的权重是 10,1 天的权重是 1,差距没那么夸张。
实际案例:
我参与过的一个项目,用的是分段线性函数:
- 锁仓 0-30 天:权重 = 1
- 锁仓 30-90 天:权重 = 1.5
- 锁仓 90-180 天:权重 = 2
- 锁仓 180 天以上:权重 = 3
这样设计的好处是,用户能清晰看到「再锁 10 天就能升级到下一档」,心理上更有动力。
注意:
锁仓时长加权有一个副作用——流动性僵化。用户为了拿高权重,不愿意撤出流动性。一旦市场出现剧烈波动,池子里的资金可能无法及时流出,导致严重的无常损失。
我曾经在 Curve 的某个池子里看到,锁仓 1 年的用户占了 70% 的权重。结果 UST 脱锚那天,这些用户想撤都撤不了,因为锁仓合约还没到期。最后只能眼睁睁看着资产归零。
所以,我建议一定要设置紧急退出机制。比如,允许用户提前退出,但会扣除一部分奖励作为惩罚。这样既保护了用户,也维护了池子的健康。
4.4 三种算法的对比
| 算法 | 核心逻辑 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 时间加权 | 按提供流动性的时长分配 | 简单、公平、易理解 | 容易被「躺平」用户薅羊毛 | 稳定币池、早期项目 |
| 交易量加权 | 按贡献的交易量分配 | 激励真实做市行为 | 容易被刷量攻击 | 高流动性池、专业做市商 |
| 锁仓时长加权 | 按锁仓时间长短分配 | 培养忠诚用户 | 流动性僵化、紧急情况难退出 | 长期激励、治理代币 |
4.5 实际项目中的组合策略
说实话,很少有项目只用一种算法。我见过的大多数项目,都是把三种算法组合起来用。
比如 Uniswap V3 的流动性激励,其实就是「时间加权 + 交易量加权」的混合体。用户提供流动性的时间越长,同时交易量越大,拿到的奖励就越多。
再比如 Curve 的 veCRV 模型,本质上是「锁仓时长加权」的变种。用户锁 CRV 的时间越长,投票权越大,能获得的奖励也越多。
我个人比较推荐的一种组合是:
- 基础奖励:按时间加权分配(保证基本公平)
- 额外奖励:按交易量加权分配(激励活跃用户)
- 忠诚奖励:按锁仓时长加权分配(培养长期用户)
这样三层结构,既能防止刷量,又能留住核心用户,还能让新用户有参与感。
一个小技巧:
在智能合约里实现这些算法时,我建议用 accumulator 模式。不要每次分配都遍历所有用户,那样 gas 费会爆炸。而是每个用户维护一个「已领取」的累计值,每次领取时再计算增量。
具体实现可以参考 Synthetix 的 StakingRewards 合约,那是业界标准。
4.6 本章知识体系
下面这张图,是我自己画的三种算法的核心逻辑对比。你可以看到,它们其实是在「公平」和「效率」之间做权衡。
好了,这一章的内容就到这里。三种算法各有优劣,关键是要根据你的项目阶段和用户群体来选。没有银弹,只有最适合的。