在这份指南中,深入探讨以太坊共识和 Lido 的提款模块的复杂性。了解从信标链到验证者生命周期的关键组件,以及它们如何塑造协议的安全性和功能
在这份指南中,深入探讨以太坊共识和 Lido 的提款模块的复杂性。了解从信标链到验证者生命周期的关键组件,以及它们如何塑造协议的安全性和功能
在本系列的上一篇文章中,我们探讨了 Lido 协议的发展历史,讨论了其架构的组成部分以及它们如何相互作用。
在本文的这一部分中,我们将深入探讨以太坊共识和 Lido 提款模块的结构。我们强烈建议先阅读本系列的第一部分,以捕捉所有细节。
如前所述,要深入了解 Lido 协议中的提款机制,首先需要探索以太坊本身的共识,特别是自从过渡到 2.0 版本以来带来的重大变化。
在深入探讨之前,我们需要先达成一些将在后文中使用的定义。我们的定义将有所概括,以保持一致的上下文。
让我们首先通过共同的概念——网络层,来审视网络操作的核心规则。
首先,让我们确定网络层本质上是一组标准化以太坊网络节点之间通信过程的协议栈。它使它们能够按照适用于所有网络参与者的统一规则进行一对一和一对多通信。每个节点都必须遵守这些规则,以确保其正确发送和接收有关网络状态的数据。
随着升级到版本 2,网络被分成了两个相互支持的链。一个处理交易(执行层——EL),而另一个(共识层——CL)管理以有向无环图形式构建主链,通常与区块链相关。为了保持这一结构的运作,其参与者使用网络客户端,而网络客户端又由验证者客户端和执行客户端组成,每个客户端在各自的层级上运行。
让我们看看下面的图表,以了解 EL(eth1)和 CL(eth2)如何相互作用。
EL 网络客户端通过点对点网络分发交易区块数据,而 CL 网络客户端分发信标区块数据。这种数据分发仅在通过内置机制验证后才会在网络中开始,我们稍后将讨论这些机制。
如图所示,两个层级通过 RPC 请求交换信息。一个称为 Engine-API 的 API 定义了两个客户端之间传递的指令。重要的是要理解,共识客户端和执行客户端形成了一个统一的系统,始终并行运行,只是在每个网络层级执行不同的任务。
让我们退一步。为了验证、达成所有验证者一致并最终确定一个区块,执行层节点会累积来自网络交易的状态更新信息,直到达到区块的 gas 限制,然后将更新状态的信息传输到共识层。本质上,整个算法分为三个主要阶段,我们现在将进行探讨:
[I] 区块创建 [II] 区块见证和分发 [III] 区块最终确定
[I] 区块创建
网络随机选择一个 CL 客户端来处理、验证并在点对点网络中分发一个新区块。只有一个区块提议者,这导致验证者行为的两种可能情况:
[1] 当 CL 客户端是区块提议者时。 [2] 当 CL 客户端不是区块提议者(即是区块见证者)时。
这两种情况各有其任务,我们将从它们开始。首先,让我们考虑情况[1],即 CL 客户端是区块提议者。为了简化理解,让我们看看下面的图表:
你可能会问,“这个图表中到底发生了什么?”。它表示了点对点网络和区块提议者本身之间的交互算法,包括 6 个步骤:
[II] 区块见证和分发
好的,正如我们所见,选定的客户端已经成功地履行了其角色。但在此期间,其他没有成为区块提议者的共识客户端在做什么呢?他们正在重新检查区块提议者的工作,以尽量减少为整个网络批准虚假信息的风险。这个过程被称为区块见证。让我们看看下面的图表来更好地理解这一点。
基于图表,让我们检查一下区块见证者的流程:
如图所示,区块见证者的主要任务是独立重新检查和验证区块提议者的工作,防止恶意节点传播虚假信息(这个概念被称为拜占庭容错 )。
[III] 区块最终确定
区块最终确定是确保区块在任何情况下都不能被更改或从链中移除的过程。这对于经济安全至关重要,使网络参与者能够依赖严格准确的记录数据进行活动。最终确定的区块的确定性只有在超过 33%的总质押 ETH 被销毁的情况下才会被破坏,这种情况是不可能的。
然而,为了完全理解最终确定过程,我们将暂时将注意力从网络和共识层转移到探讨信标链和同步委员会的工作原理。之后,我们将回到区块最终确定的讨论。
现在我们了解了新区块的创建、验证和分发过程,以及每个网络层在这些过程中所扮演的角色,让我们看看作为共识层核心的信标链是如何运作的。
为了防止网络验证者串通并集体将不正确的区块包含在主链中,信标链采用了同步委员会——这是 Altair 硬分叉(于 2021 年 10 月 27 日激活)的“旗舰功能”。为了理解其重要性,让我们首先讨论信标链的架构。该网络的生命周期分为Epoch
,其规则如下。
⌛ 1 Epoch
= 32 Slot
= 32 * 12 sec
= 6.4 min
每个 epoch,RanDAO 机制确保所有活跃的验证者均匀分布在各个 slot 中。
在 slots 内,区块见证者被分配到每个至少有 128 个验证者(最多 512 个)的委员会中。这些委员会被称为同步委员会,它们用于独立验证和确保整个网络状态的变化。使用这些委员会允许轻客户端跟踪信标区块头的链。此外,每个 slot 中的一个验证者被指定为区块提议者,正如我们之前讨论的那样。委员会内的所有验证者对区块进行证明,但严格在其分配的 slot 时间框架内。这个周期在每个 epoch 重复。下面你可以看到这个过程的图示。
好了,我们已经介绍了证明新区块的机制。但它们是如何最终确定的呢?让我们通过下面的图表来理解这一点,该图表说明了最终确定新区块的流程。
如图所示,在正常的网络操作中,每个区块经过三个状态:
一旦区块成功证明并被赋予“最终确定”状态,Gasper 算法就会发挥作用,它是两个组件的组合:
我们已经了解了在整个共识层面上区块的处理、验证和最终确定。我们还了解了验证者之间的相互作用。但单个验证者的行为如何呢?它如何进行存款、激活和停用?如果不理解这些方面,我们就无法理解提款。让我们深入探讨一下。
为了回答关于验证者如何激活以及他们面临的风险的问题,我们需要研究他们的生命周期,并分析其在 Lido 协议背景下与提款的相互关联。让我们仔细看看他们的激活和停用过程。验证者活动的整个过程可以通过下图来说明。它展示了验证者地址(账户 1)的余额变化以及在验证者本地停用期间(账户 2)资金的分配方式。
在执行层面,大多数操作由存款合约管理,该合约是任何想要激活验证者的人的入口。存款合约接收用户资金,并向共识层发送存款收据和激活新验证者的请求。接下来是我们已经讨论过的内容。
在处理验证者的停用请求时,共识层会计算每个验证者的奖励和惩罚,然后将资金转移到指定地址(账户 2)。
如你所见,这个图的大部分内容我们已经很清楚了,只有新验证者从网络的激活和提款过程是盲点。让我们来解决这个问题。
以太坊网络验证者的生命周期分为 6 个主要步骤:
已存款
符合激活条件(待定)
已激活
被削减并退出(已退出)
未削减并退出(已退出)
可提款
为了更直观地表示,我们建议你根据我们的解释研究下图:
在 Lido 协议的背景下,验证者扮演协议的“劳动力”角色,像公司里的普通员工一样产生收入,并在他们离开时,协议接收累积的工作成果,支付验证者的劳动报酬,并将赚取的资金重新分配用于其他目的:在我们的案例中,这包括偿还其他义务和创建新的“劳动力”。
现在,我们已经回顾并重复了深入了解提款过程技术细节所需的一切。
验证者的生命周期总是顺利进行吗?验证者在执行其活动时是否存在任何风险?这些风险是否会以任何方式影响 Lido 协议的运行?事情并不总是那么简单,让我们来探讨一下。
在与信标链交互的过程中,Lido 协议验证者面临某些风险:
双重最终性
最终性延迟
区块重组
Lido 尽可能地解决这些风险,以确保从协议中提款的程序正确进行。但它究竟是如何做到的呢?让我们在下一节中探讨。
几个关键解决方案负责风险管理:退出守护进程、Lido 缓冲区和Oracle 报告延迟。让我们分别检查这些。
使用退出守护进程
使用 Lido 缓冲区
Oracle 报告延迟
beacon balance
和 withdrawals vault balance
的数据,以防止双重记账,因为 beacon balance
的数据无法直接从执行层访问。加速退出(通过协议缓冲区 - protocol buffer)
Lido 协议设计为在缓冲区中积累资金,同时一个链下 Oracle 决定它们在用户提款和创建新验证者过程之间的分配。
在加速退出的情况下,假设缓冲区中有足够的资金,协议可以加快返还存款的过程。
然而,如果缓冲区资金不足,则启动标准退出过程,这涉及从 Beacon Chain 提取验证者以确保有足够的资金。
标准退出(通过网络广播)
为此,协议根据预定顺序确定下一个退出的验证者,并通知相应的节点运营商这一决定。随后,确定验证者从 Beacon Chain 提款所需的时间以及用户在 stETH 代币中的份额将转换回 ETH 的赎回率。在这种情况下,用户面临的时间延迟从 6.5 到 50.5 小时不等,此外还有加速退出的时间。
为了做出这些决定,协议需要来自共识层的信息,这些信息无法直接从执行层获得。当前版本的协议依赖于一个 Oracle 委员会,该委员会为协议在执行层的操作提供这些缺失的信息,尽管这种解决方案存在与 MEV 攻击相关的问题。
实际上,Oracle 委员会的成员还负责信号通知下一个将退出的验证者。每 N 个 epoch,Oracle 参与者分析新出现的提款请求,使用 Lido DAO 批准并在 Oracle 代码中实现的算法计算下一个将被驱逐的验证者列表,并在 Oracle 智能合约中发布该列表。该算法必须处理验证者移除过程中的故障和延迟。
延迟退出(在 bunker 模式下)
在 bunker 模式下,提款请求被暂停,直到负面事件得到解决。
对于导致长时间停机的事件,影响数万到数十万验证者,预期延迟为 1 天,最大延迟为 7 天。
在大规模削减事件中,预期延迟为 18 天,最大延迟为 36 天。
我们还应该提到,stETH 是一种 rebase 代币,这意味着质押奖励会累积(减去 10% 的费用归 Lido),你的 stETH 余额会随着时间增加。
现在,最后一步是将所有三种场景整合成一个全面的图景——研究提款流程。
让我们回顾一下,在本系列的第一篇文章中,我们定义了用户从协议中提款的简化算法。
这是你已经熟悉的描述 Lido 提款过程的图表。现在,我们将通过添加一系列技术细节来扩展对它的理解。
让我们看看从 Lido 提款的高级算法,考虑我们已经研究的材料。但首先,让我们分解一下提款基础设施包括什么。
*提款基础设施* — 在我们的图表中,这是负责正确处理提款请求的链下和链上组件的组合。它包括:*
提款队列
Lido 缓冲区
驱逐守护程序
LidoOracle
合约的事件日志,并在必要时将验证者停用请求的签名发送到共识节点。验证者退出总线
驱逐 Oracle
提款金库
EL 奖励金库
如果协议处于 turbo 模式:
如果协议处于 bunker 模式:
在图表上,你可以看到我们讨论的整个过程,但在合约交互的层面上。箭头上方是调用的方法和输入。
我们将在系列的第 3 部分中更详细地讨论 bunker 模式,在 oracles 的上下文中。然而,目前重要的是要知道 bunker 模式是由于 Lido 验证者中不健康数量的削减而引起的协议状态。bunker 模式由 oracle 委员会批准,并暂时暂停从协议中提款的能力,直到该模式被停用。
在这里,你可以看到包含所有模块和组件的协议完整流程。与我们的图表的主要区别在于,我们将流程分为 3 个大组,以简化对整个图景的理解。
因此,我们已经分部分检查了这个庞大的系统,并将其组装成一个统一的图景。现在让我们得出结论!
我们已经了解了以太坊 2.0 的工作原理,分析了验证者在与其交互时的风险,了解了 Lido 如何处理这些风险,以及从协议中提款的整个过程是如何进行的。
然而,为了有一个完整的图景,我们仍然需要深入了解 Lido 如何获得资金以完成这些请求,以及由链上和链下组件组成的 Oracle 基础设施是如何参与的。
在下一篇文章中,我们将更多地讨论这两个方面:
[1] 存款与质押 [2] Oracle 基础设施
I. 提款
[link] — “以太坊上的 Lido 提款”
[link] — “提款:自动化 Lido 验证者退出”
[link] — “提款:关于验证者退出顺序”
[link] — “Lido 提款设计与 Bunker 模式”
[link] — “启用提款的协议会计”
[link] — “启用提款的 Lido 协议。审计范围”
[link] — “以太坊上的 Lido - 提款 ”
[link] — “使用 Lido 协议的以太坊提款速度有多快”
II. 共识
[link] — “ETH2 之书 - 共识”
[link] — “以太坊信标链解释”
[link] — “Gasper”
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!