VE锁仓模型:从投票权48倍差距到代币经济设计实战
发布时间:2026/9/7 12:48:01 作者:尧图编辑部 阅读量:1,286

锁住 10000 个代币锁 1 个月和锁 4 年投票权差多少按 Curve 最早使用的 VE 模型来算答案大约是 48 倍。这个 48 倍不是产品经理拍脑袋想出来的背后是一套叫 Vote Escrow投票托管的机制用户把基础代币锁定一段时间换回一种只能用于投票和获取收益的 veToken而 veToken 的余额会随着锁仓到期时间逐步衰减。谁剩下的等待时间越长谁在协议里的话语权就越大。对 Web3 开发者来说VE 锁仓不是某个项目的专属玩法而是一套可复用的代币经济学设计模板。Curve 靠着这套模板把单纯发币激励变成了治理权和收益权的分层后来 Balancer、Frax、Solidly 以及 ve(3,3) 模型都在这套模板上做变体。如果你正在设计新的代币经济或者准备开发一个带锁仓、质押、投票功能的合约理解 VE 的设计逻辑是关键的一步。这篇文章会从一条公式讲起用 Python 代码把锁仓收益算清楚再落到合约接口、经济参数扫描和常见坑上。读完后你能回答三个问题锁 1 个月和锁 4 年的真实差距有多大VE 模型为什么能抑制“挖提卖”照搬 VE 模型后项目失效问题通常出在哪个环节1. 锁 1 个月 vs 锁 4 年先把这个倍数算清楚Curve 的 veCRV 采用线性锁仓公式veToken 数量 锁仓数量 × 剩余锁定期限 / 最大锁定期限最大锁定期限是 4 年也就是 1460 天。假设你有 10000 个基础代币锁 1 个月30 天时获得的 veToken 是10000 × 30 / 1460 ≈ 205.48锁满 4 年时获得的 veToken 是10000 × 1460 / 1460 10000两者相差约 48.67 倍。按月份数去理解更直观锁 4 年有 48 个月锁 1 个月只有 1 个月投票权差了 48 倍。下面是完整可运行的 Python 演示脚本# 文件路径ve_ratio_demo.py MAX_LOCK_DAYS 4 * 365 def calc_ve(amount, remaining_days): if remaining_days 0 or remaining_days MAX_LOCK_DAYS: return 0 return amount * remaining_days / MAX_LOCK_DAYS amount 10000 ve_1m calc_ve(amount, 30) ve_4y calc_ve(amount, MAX_LOCK_DAYS) print(f锁1个月veToken {ve_1m:.2f}) print(f锁4年veToken {ve_4y:.2f}) print(f倍数{ve_4y / ve_1m:.2f} 倍) # 模拟时间衰减 remaining_days [1460, 1000, 730, 365, 30, 0] for rd in remaining_days: print(f剩余 {rd} 天veToken {calc_ve(amount, rd):.2f}) # 手续费分成示意假设两个用户分别锁1个月和锁4年 total_ve ve_1m ve_4y daily_fee 10000 fee_1m daily_fee * ve_1m / total_ve fee_4y daily_fee * ve_4y / total_ve print(f假设单日手续费收入 {daily_fee} 单位) print(f锁1个月用户分成{fee_1m:.2f}) print(f锁4年用户分成{fee_4y:.2f})运行结果如下锁1个月veToken 205.48 锁4年veToken 10000.00 倍数48.67 倍 剩余 1460 天veToken 10000.00 剩余 1000 天veToken 6849.32 剩余 730 天veToken 5000.00 剩余 365 天veToken 2500.00 剩余 30 天veToken 205.48 剩余 0 天veToken 0.00 假设单日手续费收入 10000 单位 锁1个月用户分成201.39 锁4年用户分成9798.61这里有一点需要特别注意VE 模型中的 veToken 是随时间衰减的。即使你一开始锁了 4 年当剩余时间只剩下 1 年时你的 veToken 余额会降到原来的 25%剩余 30 天时基本接近零。这意味着锁仓权益本质上是“剩余承诺”的函数而不是一次锁仓终身有效。锁定时间10000 个基础代币得到的 veToken相对锁 4 年的权重30 天205.482.05%90 天616.446.16%365 天250025%730 天500050%1460 天10000100%所以VE 机制真正惩罚的是“快到期的人”。用户如果不续锁话语权会不断缩水这就倒逼长期参与者持续关注协议、持续维护自己的锁仓头寸。2. 为什么要设计 VE从“挖提卖”说起很多 DeFi 项目发币后都会遇到一个典型的死亡螺旋。项目方为了激励流动性把治理代币按日释放给流动性提供者。流动性提供者领到代币后并不一定会继续留在池子里很多人在市场上一卖掉代币价格就会持续承压。价格下跌之后新的流动性提供者不愿入场旧的 LP 继续砸盘协议总流动性不断下滑最终陷入“奖励越多、币价越低、流动性越少”的负循环。社区把这种状态叫“挖提卖”。要解决挖提卖最直接的办法是让用户把代币锁定起来。但只锁仓不够还需要回答三个问题锁多久才算合理锁仓之后给什么回报谁有权决定代币奖励的流向VE 模型的答案非常明确锁定期从最短到最长锁得越久治理权重越大同时能分享协议真实收入。Curve 把它落地成 veCRV 后效果不只是锁住了流通量更重要的是治理权被交到了愿意长期维护协议的用户手里。当用户决定把代币锁 4 年时他已经没有短期的“砸盘自由”利益和协议的长期健康绑定在了一起。VE 机制上线之后DeFi 世界里还衍生出一个现象叫“Curve War”。不少协议为了争夺 Curve 的流动性分配权开始大量收购并长期锁定 CRV再通过 veCRV 投票把 Curve 的奖励引向自己的资金池。这件事说明veToken 的投票权一旦和真实收益挂钩就会变成战略资产而不只是社区礼貌性的投票工具。对于 Web3 开发者这个视角很重要经济模型的设计会直接影响链上资产的控制权分布没有哪一行奖励参数是真正中立的。3. 基础概念Token、veToken 与 Vote Escrow在继续深入之前先把几个容易混淆的术语理清。术语定义主要特征Token基础代币项目发行的可交易代币可转让、可在交易所或 DEX 中流通Vote Escrow投票托管把基础代币锁定一段时间的智能合约机制锁定期内所有权受限veToken锁仓权益凭证锁仓后获得的治理权益代币通常不可直接转让余额随时间衰减剩余锁仓时间从当前时间到解锁时间的剩余天数计算 veToken 余额的核心变量收益权按 veToken 份额获得手续费、奖励或投票议价收入是用户愿意锁仓的经济基础通俗理解veToken 像一张会随时间缩水的“会员卡”。你存入的钱越多、承诺继续留在协议里的时间越长卡片级别越高。但卡片每天都会变弱一点到期归零。只有持续投入或反复续锁卡片效力才能维持。这种设计让协议的治理者始终是“现在愿意承担锁仓成本的人”而不是“过去做过贡献后再也不关心协议的人”。新手最容易误解的地方是veToken 到底算不算一个普通 ERC20 代币原生 veToken 通常不支持随意转账余额也不通过标准 ERC20 的 balanceOf 字段存储而是通过函数实时计算。你在 Etherscan 等区块链浏览器里查看一个 veCRV 地址时未必能看到像普通代币那样清晰的余额原因是它的余额本质上是“锁仓数量”和“剩余时间”共同作用的结果。真正可转账的 veCRV 衍生品比如 Convex 生态里的 cvxCRV已经是包装层之后的产物不是 Curve 原生 ve 模型的一部分。4. 治理权与收益权veToken 的价值来源veToken 如果没有真实收益就只是一个投票纪念章。Curve 在设计初期就把治理权和收益权绑定在一起这是整个经济模型能够成立的关键。在 Curve 的模式里veCRV 持有者能做的事主要包括投票决定 CRV 奖励的池子分配方向根据 veCRV 余额获得协议交易手续费分成在同时提供流动性的情况下获得更高的流动性挖矿奖励加成。这种设计把两条线连接了起来用户关心奖励流向因为奖励流向决定自己持有的流动性资产能否获得更多补贴用户也关心协议手续费因为手续费直接回流到自己的 ve 头寸上。后来的项目在此基础上不断扩展权益。有的项目把协议收入的回购代币再分给 ve 锁定者有的项目允许持有人在治理投票中获得额外代币奖励还有项目引入了公开的“投票贿赂”市场项目方为了吸引 ve 大户投票支持自己的池子主动向投票者支付额外代币。这种市场在 DeFi 里是公开透明的机制它把沉默低效的投票权变成了可定价的资产。对于代币经济设计者这既是杠杆也是风险投票权一旦能买卖治理就更像一个资源市场而不只是社区讨论。还有一个反直觉的点值得注意如果 veToken 没有提供“真实收入”只是给张空头表决权用户很快就没动力锁仓。很多新项目复制了 VE 的外壳却没有设计持续的手续费来源。结果用户锁进去就后悔社区治理形同虚设。VE 模型是一种更重的承诺机制使用它的前提是协议本身有稳定现金流比如交易费、稳定币收益、借贷利差等。5. 主流 VE 模型变体Curve、Convex 与 ve(3,3)VE 模型不是一成不变的。经过几次迭代生态里形成了几个典型变体理解它们之间的差异有助于你在自己的代币设计里做选择。协议代表资产最大锁定期投票权特征设计亮点CurveveCRV4 年线性衰减不可转让首次落地 VE 模型绑定手续费分成ConvexcvxCRV非原生锁仓无自身时间衰减把锁仓资产包装成可转让衍生品SolidlyveNFT4 年剩余时间线性衰减融合 (3,3) 博弈锁仓头寸 NFT 化BalancerveBAL1 年线性衰减与 BPT 流动性深度绑定Curve 是原版 VE核心是线性时间折扣。Convex 则是在 Curve 基础之上的“解包层”。因为原生 veCRV 锁定后资金不灵活普通用户参与成本高Convex 提供了一种方案存入 CRV 后获得 cvxCRV相当于把 veCRV 的收益权和治理权包装成可转让资产。这带来一个启示当基础模型门槛太高市场上一定会出现一个套利层。与其抗拒这种衍生品不如在一开始考虑清楚协议需不需要自己的流动性和表达方式。Solidly 系协议把 VE 推向了另一个方向也就是 ve(3,3)。(3,3) 这个说法来自博弈论框架当系统中所有人都选择锁定和质押时所有参与者都受益如果有人选择卖出系统积累的效率就会受损。Solidly 将这种博弈关系引入 VE 模型把每个锁仓头寸铸造成一个 veNFT。veNFT 可以在市场流通也可以合并、拆分继承时间权重和投票权。后来 Velodrome、Aerodrome 等项目又在这个框架上做了调整把代币释放与真实流动性池的匹配度作为投票激励的核心。这些变体的共同点是给“时间投入”定价。区别在于时间曲线是线性还是非线性、锁仓权益能否转让、最高锁定时间有多长。这些参数不同用户行为会完全不同。比如锁仓权益越容易转让投机性越强锁定期越长治理权重越倾向于长期主义者但也会降低代币的市场流动启动速度。6. 如何在 Web3 开发中落地 VE 锁仓模型如果你决定在项目里引入 VE 机制开发路径可以分为四步定义场景、设计合约结构、做经济参数模拟、测试部署。第一步是定义场景。你要先回答这个协议有没有可持续的现金流用户锁仓之后能投票决定什么如果协议没有真正的收入和治理边界VE 就不适合直接套用。第二步是设计合约结构。VE 锁仓的核心数据结构是一个锁定头寸包含谁锁的、锁了多少、锁定起点、锁定到期时间。下面是一个示意性 Solidity 接口实际实现需要结合你的协议修改// 文件路径contracts/IVEVault.sol interface IVEVault { event Locked(address indexed user, uint256 veId, uint256 amount, uint256 duration); event IncreasedAmount(uint256 indexed veId, uint256 amount); event ExtendedDuration(uint256 indexed veId, uint256 newDuration); event Withdrawn(uint256 indexed veId, uint256 amount); function lock(uint256 amount, uint256 duration) external returns (uint256 veId); function increaseAmount(uint256 veId, uint256 amount) external; function increaseDuration(uint256 veId, uint256 newDuration) external; function withdraw(uint256 veId) external; function veBalanceOf(address user) external view returns (uint256); function remainingTime(uint256 veId) external view returns (uint256); function votingPower(uint256 veId) external view returns (uint256); }实现时要注意几个工程细节。veToken 不建议做成标准 ERC20 余额字段而应该通过函数实时计算余额避免被误转账。延长锁定期时只能允许用户向未来延长不允许缩短否则会形成一种异常套利用户先把到期时间拉长获取高票权再马上缩短时间变现。用户提现时必须判断剩余锁定期为 0否则任何人都可以在锁定期内提走资产模型直接崩塌。第三步是做经济参数模拟。这一步很多人会跳过但恰恰是最容易出问题的环节。下面是一个简单的 Python 参数扫描脚本# 文件路径ve_model_scan.py MAX_LOCK_DAYS 4 * 365 def calc_ve(amount, remaining_days): return amount * remaining_days / MAX_LOCK_DAYS def total_ve(market): return sum(calc_ve(amount, days) for amount, days in market) def simulate_user(amount, lock_days, market, daily_distribution): ve calc_ve(amount, lock_days) share ve / total_ve(market) return ve, share, daily_distribution * share # 模拟市场环境鲸鱼、长期参与者和散户 market [ (100000, 1460), # 鲸鱼锁 4 年 (50000, 730), # 中子锁 2 年 (20000, 100), # 散户锁 100 天 ] for name, amount, days in [ (短期党, 10000, 30), (中间派, 10000, 365), (长期锁, 10000, 1460), ]: ve, share, income simulate_user(amount, days, market, 10000) print(f{name}: 锁{days}天 ve{ve:.2f} 投票权占比{share:.2%} 模拟分成{income:.2f})运行结果示例短期党: 锁30天 ve205.48 投票权占比0.16% 模拟分成16.26 中间派: 锁365天 ve2500.00 投票权占比1.98% 模拟分成197.76 长期锁: 锁1460天 ve10000.00 投票权占比7.91% 模拟分成791.26这个模拟只用了简化公式但能帮你回答一个重要问题在不同的人群结构下锁仓者的收益是否足够有吸引力如果模拟结果显示大多数普通用户锁仓后只能分到极小比例那这个模型对散户是无效的必须调整最长锁定期、手续费分配比例或投票权重曲线。第四步是测试部署。VE 合约通常需要长期托管用户资产风险等级较高。建议先在一套测试网跑通最小闭环至少覆盖以下场景用户锁定后veBalance 是否正确延长锁定期后veBalance 是否同步增长提现时剩余时间不为 0 是否被拒绝多个用户并发锁仓ve 总供应是否准确手续费分配函数是否能在极端 Gas 环境下稳定执行。7. 常见误区和排查思路VE 机制涉及的合约逻辑不算复杂但经济层面的坑很多。下面是一张更贴近实际开发场景的排查表。误区 / 现象可能原因排查方式参考做法锁仓后收到一个可转账代币误把 veToken 当成普通 ERC20 实现查询合约是否定义了 transfer原生 veToken 建议不可转让可转让的应是包装层用户剩余 1 个月时投票权骤降时间衰减机制导致 ve 余额缩水调用 veBalanceOf 看剩余时间设计续锁提醒页面提前通知用户延长锁仓手续费分配不活跃协议收入没有进入 ve 分配通道检查收入合约的资金流向把手续费分成纳入智能合约而不是靠人工分配大户锁仓占比过高治理被绑架最大锁定期太长或奖励曲线对长期锁仓过度倾斜用模拟工具扫描不同用户分布调整最大锁定期或改用分段衰减曲线合约升级后锁仓头寸消失storage 布局冲突或迁移方案缺失审查代理合约和锁仓数据目录使用不可变合约加时间锁或做完善的迁移计划这些坑在真实项目里很容易出现。尤其是最后一个很多团队在早期部署了 VE 合约后面发现参数不合理想升级合约却没有处理好锁仓头寸的迁移导致用户锁仓数据丢失或权益受损。任何涉及用户资产的合约升级都必须先制定迁移方案并在测试网完整演练而不是直接在代理合约里改逻辑。另一个容易被忽视的问题是事件日志。VE 合约至少要记录 Locked、IncreasedAmount、ExtendedDuration、Withdrawn 四类事件这对后续接区块链浏览器、数据看板和运维告警很有帮助。如果没有完整的事件日志运营人员很难追踪“谁在锁、锁到什么时候、有没有提前赎回转出”。8. 最佳实践与工程建议关于 VE 锁仓最核心的工程建议可以浓缩成四条。第一条是“参数模拟早于合约开发”。先写 Python 脚本或 Excel 模型把不同锁仓时长、不同用户结构、不同手续费收入场景都跑一遍确认经济模型能自洽后再进入合约开发。这一步能省下大量后期调整成本。第二条是“治理权与收益权必须绑定”。没有收益的 veToken 很难长期吸引锁仓者。收益可以是交易手续费、回购分配、稳定币收益也可以是公开的投票市场激励但必须存在真实价值回流。否则用户在锁仓期满后会选择离开协议治理也会慢慢空心化。第三条是“权限设计要保守”。VE 合约长期托管用户资产项目方手里权限越大风险越高。建议将协议的关键参数变更放进时间锁把管理员角色拆分成多签或者直接使用不可变合约。密码学上安全的合约不等于经济模型上安全但合约安全是底线。第四条是“用区块链浏览器建立监控”。VE 机制上线后不要只看线下数据。区块链浏览器里记录了每笔锁仓、续锁、提现和投票事件。通过链上索引工具可以统计 veToken 总供应、锁仓平均到期时间、大户 ve 占比等核心指标。当某个地址的 ve 占比突然超过阈值或者大量锁仓头寸在同一时间到期都是值得关注的信号。9. 结语回到开头的数字锁 1 个月的投票权约为锁 4 年的四十八分之一。真正重要的并不只是这个倍数而是它背后的设计逻辑把所有权轻、流动性好、容易套现的基础代币转换成一种重承诺、衰减型、强治理的权益资产。如果你正在设计代币经济最稳妥的做法不是直接抄 Curve 的合约而是先想明白你的协议靠什么产生现金流你希望什么样的用户拥有治理权以及锁仓之后他们能获得什么回报。接下来用 Python 把模型跑通再把最小合约部署到测试网验证最后才考虑正式上线。更进一步的学习方向是去看一个已上线项目的 ve 合约源码用区块链浏览器找出几个真实锁仓地址观察他们的剩余时间、续锁记录和投票历史。这种链上观察比任何文章都更能帮助你理解VE 模型在真实博弈中如何演化。