本文详细介绍了Lido协议的双重治理机制,包括其基本定义、状态转换及其对DAO决策和质押者的影响。文中涵盖了治理状态的各种子状态,如正常状态、否决信号状态、否决冷却状态以及愤怒退出状态,并提出了一系列治理改进建议,旨在确保协议的安全性和透明度。
2024-02-09 版本。请在此处查看当前版本。
WIP 由 sam、pshe、kadmil、sacha、Hasu、Izzy 和 Vasiliy 提供。
当前,Lido 协议的治理由 Lido DAO 组成,该 DAO 使用 LDO 投票来批准 DAO 提案,同时还包括一个名为 Easy Tracks 的乐观投票子系统,用于低影响参数的常规更改,并在 LDO 持有者有任何异议的情况下回退到 LDO 投票。
此外,还有一个 Gate Seal 应急委员会,允许暂停某些协议功能(例如提取)一段预配置的时间,以便 DAO 投票并执行提案。Gate Seal 委员会只能在丧失权力之前实施一次暂停(在那之后必须由 DAO 重新选举)。
双治理机制是协议治理的一个迭代,允许质押者发声,通过允许他们阻止 DAO 决策并提供一个质押者与 DAO 之间的谈判手段。
另一种看待双治理的方法是,它实现了 1) 对 DAO 决策的动态用户可扩展时间锁定和 2) 考虑到以太坊提取具体情况的质押者的愤怒退出机制。
该机制可以被描述为一个状态机,每个状态对 DAO 和质押者可以执行的操作施加不同的限制。
正常状态是治理所设计的长时间停留的状态。DAO 可以发布提案,投票并在标准的 ProposalExecutionMinTimelock
天的时间锁后执行决策。
在任何时刻,质押者可以通过将其 stETH、wstETH 和未领取的提取 NFT 转移到一个名为 veto signalling escrow 的专用智能合约中,表明他们反对 DAO,也可以将其从该保管中移出。这为测量质押者与 DAO 决策不一致提供了一个链上预言机。
在任何时刻,否决权
P 的一个地址
a 是定义为:
P(a)=1Sst(st(a)+Rwststwst(a)+∑Ni∈WR(a)amt(Ni))
其中
Sst 是当前 stETH 的总供应量,
st(a) 是地址
a 当前在 veto escrow 中的 stETH 余额,
Rwstst 是当前从 wstETH 到 stETH 的转换率(stETH.getPooledEthByShares(10**18) / 10**18
调用的结果),
wst(a) 是地址
a 当前在 veto escrow 中的 wstETH 余额,
WR(a) 是地址
a 目前在 veto escrow 中未领取的提取 NFT 的集合,
amt(Ni) 是提取 NFT
Ni 的基础 stETH 数量。
一个地址还可以将其在 veto signalling escrow 中持有的 stETH 或 wstETH 转换成提取 NFT,通过常规提取队列机制发送 (w)stETH 提取,并将提取 NFT 保留在 veto signalling escrow 中。这个行为不会改变该地址的否决权。
veto signalling escrow 中的 总否决权 是所有地址否决权的总和。
当否决权总和在信号保管中超过当前 stETH 总供应量的 VetoFirstSealThreshold
百分比时,治理将转移到否决信号状态。
建议的值,待建模和完善:
VetoFirstSealThreshold = 1%
否决信号状态有两个目的:
在这种状态下,DAO 可以对新提案进行投票,但不能执行决策,包括在治理进入该状态之前待处理的决策。
质押者可以自由地将 stETH、wstETH 和提取 NFT 进出否决信号保管。每当这种情况发生,以及每当 stETH 总供应量发生变化时,否决信号保管中的总否决权和状态的目标持续时间会重新评估:当总否决权等于 VetoFirstSealThreshold
时从 VetoSignallingMinDuration
开始,到总否决权至少为 VetoSecondSealThreshold
的时候达到 VetoSignallingMaxDuration
。如果总否决权小于 VetoFirstSealThreshold
,则目标持续时间设为
0。
给定在 veto signalling escrow 中的当前总否决权
p 的目标否决信号状态持续时间
Ttarget(p) 计算如下:
Ttarget(p)={0,if p<PminT(p),if Pmin≤p≤PmaxTmax,if p>Pmax
T(p)=Tmin+(p−Pmin)Pmax−Pmin(Tmax−Tmin)
其中
Pmin 是 VetoFirstSealThreshold
,
Pmax 是 VetoSecondSealThreshold
,
Tmin 是 VetoSignallingMinDuration
,
Tmax 是 VetoSignallingMaxDuration
。
如果,由于这一重新评估的结果或由于时间的推移,状态的当前持续时间超过目标时间,则会发生以下任一情况:
VetoSecondSealThreshold
,VetoSignallingMaxDuration
)。有一种特殊类型的提案,DAO 可以进行投票和执行:
KillAllPendingProposals。如果该提案在治理仍处于否决信号状态时通过并执行,则在治理离开否决信号状态时所有未执行的提案将永远变得无法执行(被杀死)。该机制为 DAO 与质押者提供了一种谈判和降级的方式,以便达成共识。
建议的值,待建模和完善:
VetoSignallingMinDuration = 5 days
VetoSignallingMaxDuration = 45 days
VetoSecondSealThreshold = 10%
该状态的目的是允许所有质押者观察到否决信号被去激活,并在未被杀死的提案能够被执行之前相应反应。
在这个子状态中,DAO 不能提交和执行提案,但可以投票已经提交的未决提案,使其变为已决。
如果,由于质押者将其 (w)stETH 或提取 NFT 移动到否决信号保管中,或者 stETH 总供应量发生变化,导致时间的目标持续期超过其当前持续期,则退出去激活子状态(以便只剩下主否决信号状态)。
如果,由于质押者将其 (w)stETH 或提取 NFT 移动到否决信号保管中,或因为 stETH 总供应量的变化,保管中的总否决权超过 VetoSecondSealThreshold
且当前持续时长超过 VetoSignallingMaxDuration
,去激活子状态及其父母否决信号状态将被退出,且治理会转移到愤怒退出状态。
如果此子状态未能在自进入后经过 VetoSignallingDeactivationDuration
天就退出,则治理会转移到否决冷却状态。VetoSignallingDeactivationDuration
的值应超过 DAO 投票持续时间,以确保在激活否决冷却时没有未决的 DAO 提案。
建议的值,待建模和完善:
VetoSignallingDeactivationDuration = 3 days
否决冷却状态持续 VetoCooldownDuration
天。在此状态中,DAO 不能提交新提案,但可以执行非被杀死的决策。它的存在是为了确保没有质押者拥有 VetoFirstSealThreshold
stETH 能够无限期地封锁治理,而不进行愤怒退出协议。
如果到 VetoCooldownDuration
天结束时,信号保管中的总否决权超过 VetoFirstSealThreshold
,治理将转移到否决信号状态。否则,治理将转移到正常状态。
建议的值,待建模和完善:
VetoCooldownDuration = 1 days
愤怒退出状态允许所有选择通过愤怒退出离开协议的质押者完全提取他们的 ETH,而不受任何新的或待决 DAO 决策的影响。进入此状态意味着质押者和 DAO 没能解决争议,因此 DAO 与部分质押者严重不一致。
进入怨怒退出状态时,会发生两件事情:
在此状态中,DAO 可以提交并投票提案,但不能执行结果决策。质押者不允许将 (w)stETH 或提取 NFT 锁定到愤怒退出保管中。但是,他们可以将不属于进行中的愤怒退出过程的 (w)stETH 和提取 NFT 移动到否决信号保管。
该状态持续到上面第 2) 步中开始的提取完成,即与此提取相关的所有提取 NFT 被满足并请求,以及经过 RageQuitExtraTimelock
天。额外的时间锁定部分是为了让将提取 NFT 锁定在否决信号保管中的质押者(与质押 (w)stETH 相对)在 DAO 执行解锁之前有时间要求他们锁定在愤怒退出保管中的 NFT 转回 ETH(同样锁定在保管中)。
当提取完成并经过额外的时间锁定后,同时会发生以下两件事:
W(i) 天的时间锁定,期间已提取的 ETH 被保存在愤怒退出保管中。时间锁定结束后,参与愤怒退出的质押者可以从愤怒退出保管中获取他们的 ETH。
下一状态取决于否决信号保管中的总否决权:如果超过 VetoFirstSealThreshold
,治理将转移到否决信号状态;否则,转移到正常状态。
已提取 ETH 的后提取时间锁定的持续时间
W(i) 是一个非线性函数,取决于愤怒退出的序列号
i(见下文):
W(i)=Wmin+{0,if i<imingW(i−imin),otherwise
其中
Wmin 是 RageQuitMinEthClaimTimelock
,
imin 是 RageQuitEthClaimTimelockGrowthStartSeqNumber
,而
gW(x) 是具有系数 RageQuitEthClaimTimelockGrowthCoeffs
(长度为 3 的列表)的二次多项式函数。
愤怒退出序列号计算如下:每次进入正常状态,序列号被设置为 0;每次进入愤怒退出状态,序列号增加 1。
建议的值,待建模和完善:
RageQuitExtraTimelock = 7 days
RageQuitEscrowEthClaimTimelock = 60 days
RageQuitEthClaimTimelockGrowthStartSeqNumber = 2
RageQuitEthClaimTimelockGrowthCoeffs: (0, TODO, TODO)
如果 Gate Seal 应急委员会在 DAO 被双治理机制阻止执行决策时暂停任何协议功能,或者如果 DAO 执行在 Gate Seal 触发的暂停仍处于活动状态被持续阻止,则暂停将持续到 DAO 的执行被解锁(与 DAO 正常功能时的固定暂停时间不同)。
如果在治理处于愤怒退出状态时暂停 stETH 提取,或者如果 DAO 执行被持续阻止超过 TieBreakerActivationTimeout
,平局破裂委员会 获得通过委员会的超多数票执行任何 DAO 决策的权力。
平局破裂委员会应该由以下子委员会组成,每个子委员会代表以太坊社区中的一个不同利益团体:
在愤怒退出治理状态中执行 DAO 决策必须获得至少四个子委员会中的三个的批准。每个子委员会的批准必须至少获得其成员的多数支持。每个子委员会的成员应少于
1/4 的成员也是 Gate Seal 委员会的成员。
子委员会的成员应通过 DAO 投票选举(受双治理约束)并审查至少每年一次。
建议的值,待建模和完善:
TieBreakerActivationTimeout = 1 year
状态 | DAO:提交提案 | DAO:杀死提案 | DAO:执行提案 | 质押者:加入/离开信号保管 | 质押者:加入愤怒退出保管 |
---|---|---|---|---|---|
正常 | ✓ | ✓ | ✓ | ✓ | |
否决信号 | ✓ | ✓ | ✓ | ||
否决信号:去激活 | ✓ | ✓ | |||
否决冷却 | ✓ | ✓ | ✓ | ||
愤怒退出 | ✓ | ✓ | ✓ |
Lido 协议使用基于角色的访问模型。当前,所有允许修改协议参数的角色均分配给 DAO 投票合约或 Easy Track 合约,而所有允许升级协议代码或管理其他角色的角色仅分配给 DAO 投票合约。
我们建议将双治理实现为在 DAO 投票/Easy Track 合约和协议合约之间的代理(调用转发器)。仅在根据治理状态允许此执行的情况下,代理将转发因执行特定 DAO 决策而产生的调用。
然后,DAO 可以逐步将协议合约的角色(连同其管理权)重新分配给双治理合约,从而使 DAO 在执行需要重新分配角色的决策时无法绕过双治理。
双治理应覆盖任何可能影响协议用户的 DAO 决策,包括:
重要的是,任何对双治理合约参数的更改也应在双治理范围内。
双治理不应覆盖:
将否决权赋予节点运营者和/或客户端团队。例如,拥有否决激活扩展时间锁和愤怒退出同等权力的节点运营者超多数,超过 N% 的 stETH(例如,10%,以便仅用 5% 的 stETH 就足以触发愤怒退出)。
当前,所有 DAO 决策都有同样的静态时间锁定。
根据对质押者和网络潜在影响的分组,将所有决策类型分为 2-3 组,并为每组分配不同的静态时间锁值,除了双治理用户激活的动态时间锁定。
将协议代码模块化,以便 stETH 发行、转移和提取以足够与代码的其他部分分离,进行固化或其升级受到严格限制。
分离提取流可能显著改善愤怒退出状态,仅阻止影响提取处理的代码部分的升级。如果这些部分在字节码级别上经过正规验证,这可能能够废止平局破裂委员会,并实现更好的治理自治。
在字节码级别验证一组与 stETH 发行和转移相关的不变式(与当前验证的高级代码相比),确保铸造无支持的 stETH 是可以验证的不可能的,或每个铸造的 stETH 无支持的比例是可验证地严格限制的。
这影响 DG,允许不考虑过去的 stETH 余额而参与否决。
将协议治理拆分为子类别,例如安全参数的更改、验证者集合组成规则的更改、关键代码的升级等。对于所有或某些类别,从无法轻易购买的特征中导出投票权,并增加影响参与者 1) 有能力评估此子类别中变更的 2) 与协议和网络用户一致的概率。
当前,参与该协议的验证者状态(总余额、验证者状态等)通过一个由 DAO 选举产生的预言机委员会提供。
如果该委员会成为恶意或功能失常,则可能会影响提取的方式,甚至在最坏的情况下使得治理在愤怒退出状态下僵持,需要平局破裂委员会的介入。
用基于 ZK 的无信任预言机替代该委员会,以验证共识层存储证明,并将相应的变化应用于执行层状态。
需要在执行层中提供信标链状态根(例如,在 EIP-4788 中提出的方案)。无信任 ZK 预言机的第一个组件已开始实施:1、2、3。
使批准 LDO 投票通过所需的相对支持依赖于总参与度。只有在参与的投票权足够显著时(例如,大于 30%),提案才能以参与 LDO 投票权的简单多数票获批;否则,需要超多数的参与 LDO 投票权。
这降低了少数 LDO 投票者批准争议 DAO 提案的可能性,并增加了对 DAO 攻击的潜在成本。
实现一个不可更改的智能合约,允许任何人无信任地证明任何关键协议不变式会因状态转变而违反,例如:
提供错误状态转变的证明会将协议转移到紧急模式,禁用或限制受影响的功能,并可能改变治理运行模式。
允许分离协议的一部分验证者,以便其提取凭证的智能合约以及任何辅助代码(例如提取队列)不再由 DAO 管理:要么固化 WC,要么将管理权传递给新的 DAO。
提取机制分离和固化将允许在没有延长和外部依赖治理锁定的情况下执行愤怒退出。分离后再传递管理权也可能最终作为适当的完整协议迁移机制的组成部分(尽管协调整个质押者和节点运营者并不简单)。
任何形式的 WC 迁移都很可能需要共识层支持 WC 类型之间的轮换。
如果 DAO 的一个决策受到质押者的反对,触发了双治理的否决信号状态,要求 DAO 参与者提供相应于质押者反对意见的 LDO 绑定,以便在反对意见没有导致愤怒退出且 DAO 没有杀死该决策的情况下,决策仍然可以执行。然后,如果依然发生了愤怒退出或决策被杀死,则绑定的 LDO 要么被销毁,要么被监禁,允许 DAO 通过超多数投票之后决定其命运。
升级游戏大致如下:
一种变体:要求 DAO 成员还在 LDO 绑定之外提供 ETH 或 stETH 绑定。
该机制通过在游戏中引入额外的利益,使 DAO 投票贿赂攻击的成本更高:攻击者现在必须提供足够大的贿赂,以克服不仅是(基于概率的)价格贬值风险,同时还要考虑到在投票成功的情况下,所有或部分代币的损失风险。
对 DG 机制进行大修改(之前的版本 这里)。
KillAllPendingProposals DAO 决策。
- 原文链接: hackmd.io/@skozin/SyAR-P...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!