· Curve 机制 · 第 2 / 2 讲

1 · Vote-Escrowed(veCRV)

Curve 治理的投票权从哪里来:锁仓、线性衰减、bias/slope 模型与按周对齐的 checkpoint 设计。

1. 概述

参与 Curve DAO 治理需要通过 VotingEscrow 合约锁定 CRV 获得 veCRV。

约束

2. 锁仓与 veCRV 计算

2.1 线性计算公式

veCRV=CRVlocked×remaining_lock_timeMAX_LOCK_TIMEveCRV = CRV_{locked} \times \frac{remaining\_lock\_time}{MAX\_LOCK\_TIME}

2.2 示例(按 1 CRV 计)

锁仓期限初始 veCRV权重占比
4 years1.00100%
3 years0.7575%
2 years0.5050%
1 year0.2525%

3. 数学建模(bias / slope)

3.1 用户投票权

wi(t)=max(0,bisi×Δti)w_i(t) = \max(0, b_i - s_i \times \Delta t_i)

3.2 全局总投票权

W(t)=max(0,BS×Δt0)W(t) = \max(0, B - S \times \Delta t_0)

3.3 关系与定义

3.4 时间差定义

3.5 参数含义

4. Checkpoint 更新流程

一次 checkpoint 的更新可分为三步:

  1. 时间推进(将全局状态衰减到当前时刻)
  1. 叠加用户差量(将用户状态变化合并到全局)
  1. 更新到期调度(slopeChanges)

5. 按周对齐与 Gas 成本

5.1 按周分桶(week rounding)

为避免为每个“精确到秒”的到期时刻维护状态,VotingEscrow 通常将 unlock_time 向下对齐到整周(例如 tk=t/WEEK×WEEKt_k = \lfloor t / WEEK \rfloor \times WEEK )。

对齐后的效果是:到期事件只会发生在离散的周边界 tkt_k 上。

全局状态不会随时间自动更新。仅当发生交互(例如创建锁仓、增加锁仓、延长锁仓、提取到期锁仓)时,合约才会把全局从上次 checkpoint 的时间推进到当前时间。

推进时按周循环:每跨过一周 tkt_k ,就应用该周桶的到期调度,使全局斜率发生跳变。

其中, Bk,SkB_k^-, S_k^- 表示“应用 slopeChanges[tk]slopeChanges[t_k] 之前”的中间量, Bk,SkB_k, S_k 表示“应用之后”的全局量。

5.3 Gas 复杂度直觉

5.4 工程含义(为何这样设计)