双重治理机制设计概述 (2024-02-09)

  • skozin
  • 发布于 2024-04-09 14:31
  • 阅读 13

本文详细介绍了Lido协议的双重治理机制,包括其基本定义、状态转换及其对DAO决策和质押者的影响。文中涵盖了治理状态的各种子状态,如正常状态、否决信号状态、否决冷却状态以及愤怒退出状态,并提出了一系列治理改进建议,旨在确保协议的安全性和透明度。

2024-02-09 版本。请在此处查看当前版本。


WIP 由 sampshekadmilsachaHasuIzzyVasiliy 提供。

当前,Lido 协议的治理由 Lido DAO 组成,该 DAO 使用 LDO 投票来批准 DAO 提案,同时还包括一个名为 Easy Tracks 的乐观投票子系统,用于低影响参数的常规更改,并在 LDO 持有者有任何异议的情况下回退到 LDO 投票。

此外,还有一个 Gate Seal 应急委员会,允许暂停某些协议功能(例如提取)一段预配置的时间,以便 DAO 投票并执行提案。Gate Seal 委员会只能在丧失权力之前实施一次暂停(在那之后必须由 DAO 重新选举)。

双治理机制是协议治理的一个迭代,允许质押者发声,通过允许他们阻止 DAO 决策并提供一个质押者与 DAO 之间的谈判手段。

另一种看待双治理的方法是,它实现了 1) 对 DAO 决策的动态用户可扩展时间锁定和 2) 考虑到以太坊提取具体情况的质押者的愤怒退出机制。

定义

  • Lido 协议: 部署在以太坊区块链上的代码,实施:
    1. 一个中间件,让希望将 ETH 委托用于验证以太坊区块链以换取质押奖励的各方(质押者),与希望运行以太坊验证者以换取来自质押奖励的费用的各方(节点运营者)进行连接;
    2. 一个可互换性层,在节点运营者之间分配 ETH,并向质押者发放可互换的存款收据代币(stETH)。
  • 协议治理: 允许更改 Lido 协议参数和升级非固化(可变)协议代码的机制。
  • LDO: Lido DAO 的可互换治理代币。
  • Lido DAO: 部署在以太坊区块链上的代码,实现一个 DAO,从质押奖励中收取的费用进入其国库,并允许 LDO 持有者共同对国库支出、Lido 协议参数更改和 Lido 协议代码的非固化部分进行投票。本文档中简称为 DAO
  • DAO 提案: 由 LDO 持有者提出的 Lido 协议或 Lido DAO 的链上状态的特定更改。提案必须通过 LDO 持有者之间的链上投票才能执行。
  • DAO 决策: 通过 LDO 持有者的链上投票批准的 DAO 提案。
  • stETH: Lido 协议的可互换存款收据代币。允许持有人提取存入的 ETH 及其所有累积奖励(扣除费用)和处罚。奖励/处罚的累积通过代币余额的定期重置表达。
  • wstETH: 对 stETH 的不可重置、不可变和无信任的封装,作为 Lido 协议的组成部分部署。在任何时刻,wstETH/stETH 的比率是固定的,用于封装和解封装。该比率在每次 stETH 重置时更改。
  • 提取 NFT: 由 Lido 提取队列合约铸造的非可互换代币,是 (w)stETH 提取到 ETH 的一部分,以基础 (w)stETH 数量和队列中的位置参数化。使持有人在提取完成后有权要求相应的 ETH 数量。此代币不赋予持有人获取质押奖励的权利。
  • 质押者: 持有 stETH、wstETH 代币和提取 NFT 的 EOA 和智能合约钱包,或将其存入各种 DeFi 协议和 CeFi 平台:DEX、CEX、借贷和稳定币协议、保管等。
  • 节点运营者: 注册于 Lido 协议的各方,愿意使用委托的 ETH 运行以太坊验证者,并以此换取来自质押奖励的费用。节点运营者生成验证者密钥,并在任何时候保留其唯一持有权,完全控制以太坊验证者。节点运营者必须将其验证者的提取凭证设置为指向特定的 Lido 协议智能合约。

高级描述

该机制可以被描述为一个状态机,每个状态对 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%

否决信号状态

否决信号状态有两个目的:

  1. 通过允许一小部分活跃的质押者阻止实施具争议的 DAO 决策,减少信息不对称,直到较少活跃的绝大多数质押者能够检视并采取行动。
  2. 在质押者与 DAO 之间提供谈判的平台。

在这种状态下,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

如果,由于这一重新评估的结果或由于时间的推移,状态的当前持续时间超过目标时间,则会发生以下任一情况:

  1. 进入否决信号状态的去激活子状态,如果信号保管中的总否决权低于 VetoSecondSealThreshold
  2. 否则,退出否决信号状态,治理转移到愤怒退出状态(在治理已在此状态下共花费 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 与部分质押者严重不一致。

进入怨怒退出状态时,会发生两件事情:

  1. 否决信号保管被不可逆转地转变为 愤怒退出保管,这是一个不可更改的智能合约,用于保存所有参与愤怒退出提取过程中代币,即 stETH、wstETH、提取 NFT 和已提取的 ETH,允许质押者在提取过程完成后按照规定的时间锁定条件要求提取已提取的 ETH(时间锁定可在愤怒退出状态进入时定义)。
  2. 所有愤怒退出保管中持有的 stETH 和 wstETH 将通过常规 Lido 提取队列机制发送进行提取,生成一组提取 NFT。
  3. 部署一个新的否决信号保管智能合约的实例。这样,在任何时刻,只会有一个否决信号保管,但可能有多个来自以前愤怒退出的愤怒退出保管。

在此状态中,DAO 可以提交并投票提案,但不能执行结果决策。质押者不允许将 (w)stETH 或提取 NFT 锁定到愤怒退出保管中。但是,他们可以将不属于进行中的愤怒退出过程的 (w)stETH 和提取 NFT 移动到否决信号保管。

该状态持续到上面第 2) 步中开始的提取完成,即与此提取相关的所有提取 NFT 被满足并请求,以及经过 RageQuitExtraTimelock 天。额外的时间锁定部分是为了让将提取 NFT 锁定在否决信号保管中的质押者(与质押 (w)stETH 相对)在 DAO 执行解锁之前有时间要求他们锁定在愤怒退出保管中的 NFT 转回 ETH(同样锁定在保管中)。

当提取完成并经过额外的时间锁定后,同时会发生以下两件事:

  1. 开启一个持续

W(i) 天的时间锁定,期间已提取的 ETH 被保存在愤怒退出保管中。时间锁定结束后,参与愤怒退出的质押者可以从愤怒退出保管中获取他们的 ETH。

  1. 治理退出愤怒退出状态。

下一状态取决于否决信号保管中的总否决权:如果超过 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 行为和平局破裂委员会

如果 Gate Seal 应急委员会在 DAO 被双治理机制阻止执行决策时暂停任何协议功能,或者如果 DAO 执行在 Gate Seal 触发的暂停仍处于活动状态被持续阻止,则暂停将持续到 DAO 的执行被解锁(与 DAO 正常功能时的固定暂停时间不同)。

如果在治理处于愤怒退出状态时暂停 stETH 提取,或者如果 DAO 执行被持续阻止超过 TieBreakerActivationTimeout平局破裂委员会 获得通过委员会的超多数票执行任何 DAO 决策的权力。

平局破裂委员会应该由以下子委员会组成,每个子委员会代表以太坊社区中的一个不同利益团体:

  • 客户端团队。
  • 以太坊基金会。
  • Lido 节点运营者。
  • 最大的协议 DAO(按 TVL 排序)。

在愤怒退出治理状态中执行 DAO 决策必须获得至少四个子委员会中的三个的批准。每个子委员会的批准必须至少获得其成员的多数支持。每个子委员会的成员应少于

1/4 的成员也是 Gate Seal 委员会的成员。

子委员会的成员应通过 DAO 投票选举(受双治理约束)并审查至少每年一次。

建议的值,待建模和完善:TieBreakerActivationTimeout = 1 year

治理状态概述

状态 DAO:提交提案 DAO:杀死提案 DAO:执行提案 质押者:加入/离开信号保管 质押者:加入愤怒退出保管
正常
否决信号
否决信号:去激活
否决冷却
愤怒退出

关于实施

Lido 协议使用基于角色的访问模型。当前,所有允许修改协议参数的角色均分配给 DAO 投票合约或 Easy Track 合约,而所有允许升级协议代码或管理其他角色的角色仅分配给 DAO 投票合约。

我们建议将双治理实现为在 DAO 投票/Easy Track 合约和协议合约之间的代理(调用转发器)。仅在根据治理状态允许此执行的情况下,代理将转发因执行特定 DAO 决策而产生的调用。

然后,DAO 可以逐步将协议合约的角色(连同其管理权)重新分配给双治理合约,从而使 DAO 在执行需要重新分配角色的决策时无法绕过双治理。

双治理范围

双治理应覆盖任何可能影响协议用户的 DAO 决策,包括:

  • 升级、添加和删除任何协议代码。
  • 更改全局协议参数和安全限制。
  • 更改以下参数:
    • 提取队列。
    • 质押路由,包括添加和删除质押模块。
    • 质押模块,包括在编制的质押模块内添加和删除节点运营者。
  • 添加、移除和更换预言机委员会成员。
  • 添加、移除和更换存款安全委员会成员。

重要的是,任何对双治理合约参数的更改也应在双治理范围内。

双治理不应覆盖:

  • 由断路器多签和合约触发的紧急操作。这些操作应有限制范围和时间,并且不应更改任何协议代码。
  • 与花费和管理 DAO 国库相关的 DAO 决策。

残留问题

  1. 我们能否不使用平局破裂委员会来防止攻击者利用愤怒退出来利用 SC 漏洞,同时封锁 DAO 的代码可升级性?
  2. 与1相关:在 DAO 被锁定时,质押者针对提案的执行进行投票是否优于外部委员会?允许与质押者协作推动修复,但使对 DAO 的攻击更容易:你只需贿赂/购买足够的质押来超过活跃诚实质押者。是否可以通过额外要求 NO 的超多数支持此投票?成功投票也可以将执行权委托给应急委员会,而不是仅仅执行,从而进一步限制委员会的权力与建议设计相比。

潜在的治理和风险最小化的下一个迭代

更多激活否决权的方式

将否决权赋予节点运营者和/或客户端团队。例如,拥有否决激活扩展时间锁和愤怒退出同等权力的节点运营者超多数,超过 N% 的 stETH(例如,10%,以便仅用 5% 的 stETH 就足以触发愤怒退出)。

对关键 DAO 决策的扩展时间锁

当前,所有 DAO 决策都有同样的静态时间锁定。

根据对质押者和网络潜在影响的分组,将所有决策类型分为 2-3 组,并为每组分配不同的静态时间锁值,除了双治理用户激活的动态时间锁定。

模块化固化

将协议代码模块化,以便 stETH 发行、转移和提取以足够与代码的其他部分分离,进行固化或其升级受到严格限制。

分离提取流可能显著改善愤怒退出状态,仅阻止影响提取处理的代码部分的升级。如果这些部分在字节码级别上经过正规验证,这可能能够废止平局破裂委员会,并实现更好的治理自治。

字节码级别的正式验证

在字节码级别验证一组与 stETH 发行和转移相关的不变式(与当前验证的高级代码相比),确保铸造无支持的 stETH 是可以验证的不可能的,或每个铸造的 stETH 无支持的比例是可验证地严格限制的。

这影响 DG,允许不考虑过去的 stETH 余额而参与否决。

非代币投票

将协议治理拆分为子类别,例如安全参数的更改、验证者集合组成规则的更改、关键代码的升级等。对于所有或某些类别,从无法轻易购买的特征中导出投票权,并增加影响参与者 1) 有能力评估此子类别中变更的 2) 与协议和网络用户一致的概率。

无信任 ZK 预言机

当前,参与该协议的验证者状态(总余额、验证者状态等)通过一个由 DAO 选举产生的预言机委员会提供。

如果该委员会成为恶意或功能失常,则可能会影响提取的方式,甚至在最坏的情况下使得治理在愤怒退出状态下僵持,需要平局破裂委员会的介入。

用基于 ZK 的无信任预言机替代该委员会,以验证共识层存储证明,并将相应的变化应用于执行层状态。

需要在执行层中提供信标链状态根(例如,在 EIP-4788 中提出的方案)。无信任 ZK 预言机的第一个组件已开始实施:123

自适应法定阈值偏差

使批准 LDO 投票通过所需的相对支持依赖于总参与度。只有在参与的投票权足够显著时(例如,大于 30%),提案才能以参与 LDO 投票权的简单多数票获批;否则,需要超多数的参与 LDO 投票权。

这降低了少数 LDO 投票者批准争议 DAO 提案的可能性,并增加了对 DAO 攻击的潜在成本。

基于不变式的断路器

实现一个不可更改的智能合约,允许任何人无信任地证明任何关键协议不变式会因状态转变而违反,例如:

  • stETH 在未提供相应 ETH 数量的情况下被铸造;
  • 在未燃烧相应的 stETH 数量的情况下提取 ETH;
  • stETH 总股份数量在未铸造/燃烧的情况下发生变化;
  • 等等。

提供错误状态转变的证明会将协议转移到紧急模式,禁用或限制受影响的功能,并可能改变治理运行模式。

WC 和 LST 迁移

允许分离协议的一部分验证者,以便其提取凭证的智能合约以及任何辅助代码(例如提取队列)不再由 DAO 管理:要么固化 WC,要么将管理权传递给新的 DAO。

提取机制分离和固化将允许在没有延长和外部依赖治理锁定的情况下执行愤怒退出。分离后再传递管理权也可能最终作为适当的完整协议迁移机制的组成部分(尽管协调整个质押者和节点运营者并不简单)。

任何形式的 WC 迁移都很可能需要共识层支持 WC 类型之间的轮换。

DAO 投票者绑定

如果 DAO 的一个决策受到质押者的反对,触发了双治理的否决信号状态,要求 DAO 参与者提供相应于质押者反对意见的 LDO 绑定,以便在反对意见没有导致愤怒退出且 DAO 没有杀死该决策的情况下,决策仍然可以执行。然后,如果依然发生了愤怒退出或决策被杀死,则绑定的 LDO 要么被销毁,要么被监禁,允许 DAO 通过超多数投票之后决定其命运。

升级游戏大致如下:

  • DAO 批准一项决策,时间锁开始。
  • 有足够的质押者反对该决策以触发否决信号(延长时间锁)。
  • 在时间锁期间,任何 LDO 持有者可以为特定决策支付一些 LDO 作为担保。越多的 stETH 供应加入反对,所需的整体担保越大。最小的整体担保应该超过法定值。
  • 在否决信号结束时,是否有 LDO 持有者提出足够大的担保以克服反对?
    • 没有 ⇒
    • 无论反对的强度如何,该决策将在否决信号结束后自动被杀死。
    • 是 ⇒
    • DAO 是否杀死该决策 在否决信号结束时反对达到愤怒退出水平?
      • 没有 ⇒
      • 释放 LDO 担保。
      • 可以在否决冷却中执行决策。
      • 有 ⇒
      • 销毁/监禁 LDO 担保。
      • 如果未杀死,该决策将被杀死。
      • 开始愤怒退出。

一种变体:要求 DAO 成员还在 LDO 绑定之外提供 ETH 或 stETH 绑定。

该机制通过在游戏中引入额外的利益,使 DAO 投票贿赂攻击的成本更高:攻击者现在必须提供足够大的贿赂,以克服不仅是(基于概率的)价格贬值风险,同时还要考虑到在投票成功的情况下,所有或部分代币的损失风险。

情景分析(TODO)

  • 流氓或失调的 DAO 少数
  • 完全的 DAO 捕获
  • 节点运营者之间的共谋
  • stETH 发行漏洞利用
  • stETH 冻结 DAO
  • stETH 冻结 DAO 以利用 SC 漏洞
  • 社会契约的缓慢退化

更新日志

2024-02-09(本文件)

  • 移除了愤怒退出累积状态,因为它允许复杂行为者绕过锁定 (w)stETH 的保管,同时仍然阻止 DAO 执行(这反过来显着降低了对治理的“常量否决”拒绝服务攻击的成本)。
  • 添加了关于否决信号和愤怒退出保管的细节。
  • 将愤怒退出后的 ETH 提取时间锁定改为动态而非静态,以进一步增加对“常量否决”拒绝服务攻击的成本,同时保持默认时间锁定的合理性。

2023-12-05

  • 移除了 stETH 余额快照机制,因为平局破裂委员会已经允许从无限制的 stETH 铸造漏洞中恢复。
  • 添加了在否决保管中使用提取 NFT 的支持。

2023-10-23

对 DG 机制进行大修改(之前的版本 这里)。

  • 用愤怒退出机制替代了全局结算机制(即局部结算,从协议中受保护的退出)。移除状态:全局结算;新增状态:愤怒退出累积,愤怒退出。
  • 移除了否决解除投票机制。
  • 重新设计了 DG 启动和谈判机制,用否决信号状态替代了否决投票和否决谈判状态。
  • 添加了否决冷却状态。
  • 添加了

KillAllPendingProposals DAO 决策。

  • 添加了 stETH 余额快照机制。
  • 指定了 Gate Seal 机制与 DG 之间的相互作用。
  • 添加了平局破裂委员会。
  • 原文链接: hackmd.io/@skozin/SyAR-P...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
skozin
skozin
江湖只有他的大名,没有他的介绍。