Skip to main content

第三章 以太坊:共识层 (CL)

由于以太坊的去中心化特性,不存在中央机构来决定这个世界计算机,也就是世界状态的当前情况。世界状态记录了用户控制的外部账户(EOAs)和智能合约控制的合约账户的地址。以太坊利用区块链技术来跟踪这一状态,这是一种保障安全、促进不相识或不互信用户间协调的系统。以太坊的区块链称为信标链,它维护着信标状态,也需要经历转变。在没有可信第三方的情况下,区块链依靠共识机制来处理状态转换。共识机制是区块链通过激励协议达成一致状态的方法。在以太坊中,这一机制是权益证明(PoS),也就是质押。简而言之,质押就是验证者锁定32个 ETH 作为参与共识的资格。每隔12秒一位验证者被选出,提出一个包含状态转换的区块。随后一组验证者对区块的合法性进行投票确认,验证者因其质押参与而获得奖励,但任何不当行为都会导致其质押的 ETH 被罚没,这样的机制既激励验证者诚实地维护以太坊网络,又遏制了他们进行不诚实行为的动机。在正常情况下,每个时段都会产生一个区块,记录在区块链的数据结构中。一旦区块确定,它就成为以太坊区块链不可篡改的历史的一部分。

区块与区块链

让我们先从宏观角度理解区块与区块链的概念,再深入探讨以太坊区块链的具体构成。区块作为一种数据结构,承载着区块链的相关信息,每个区块都是以太坊在特定时刻的状态快照,这些区块依次相连形成了我们所知的区块链(参见图3.1)。

图 3.1 区块链

在新区块加入之前,已有前一个区块被确认并成为最新区块。如此回溯,每个区块都曾是最新的,直至以太坊的创世区块——区块0,它诞生于2015年7月30日。所有区块累积起来,构成了以太坊历史的永久记录。区块链被分散存储于所有完整节点中,而非集中于某处。我们没有中央权威来更新这个世界计算机,也就是说没有单一实体有权决定下一个区块的加入。共识机制确保所有完整节点拥有一致的区块链历史,并允许通过新区块的添加来扩展区块链。由于缺乏中央权威,区块链具有抗篡改性,一旦某个状态被确认,便无法更改。我们将探讨人们可能如何攻击并尝试篡改区块链,但在正常运作时,区块链是不可篡改的。此外,区块链的透明度意味着所有在链上发生的活动都是完全公开的,这是去中心化网络的一个特点。每个完整节点都持有区块链的副本,因为我们相互监督,确保每个人都遵守共识机制协议,不滥用系统。

最初这可能难以领会,但全球并无单一的区块链存储实体。实际上,在以太坊网络中,每个独立的全节点都维护着一份区块链的副本。以太坊生态系统中主要有三种节点:全节点、归档节点和轻节点。我们称运行全节点的用户为节点运营商,全节点由执行客户端和共识客户端两部分组成。执行层客户端有多种选择,如 Geth、Nethermind、Besu 和 Erigon。共识层客户端同样多样,包括 Prysm、Teku、Lighthouse、Nimbus 和 Lodestar。这种多样化选择促进了客户端的多样性,确保任一客户端的问题不会波及整个网络。全节点能够独立验证交易、世界状态和区块链数据,这得益于它们拥有区块链的“完整”副本,这里的“完整”打了引号,因为大多数全节点软件会进行区块链修剪,即保留一定深度的区块和历史区块的快照,这些快照在必要时可以重新生成。众多独立的用户、企业和服务商选择运行全节点,以便获取尽可能详尽的区块链信息,而归档节点则是一种包含区块链完整历史且不进行修剪的全节点,它们对存储资源的需求较高,通常只有对数据完整性有极高要求的用户才会部署。在另一端,轻节点(或称轻客户端)依赖全节点提供区块链信息。此外,还有称为验证者的实体,它们通过质押共识机制负责区块链的更新和维护。

权益证明(PoS)或质押

在长达七年的时间里(2015至2022年),以太坊一直采用与比特币相似的工作量证明(PoW)或挖矿共识机制,尽管存在一些差异1。在挖矿过程中,用户通过参与一场激烈的计算竞赛来解决难题,以此竞争区块链的更新权。这种设计意外地引发了一场军备竞赛,使得挖矿变得不再适合普通用户,而是变成了一种需要专业知识甚至工业化的行业。这是因为挖矿依赖于一种名为特定应用集成电路(ASICs)的定制设备,ASICs 对能源的大量需求累积起来,导致比特币在公众眼中成为了环境问题的代表。然而我建议读者自行研究挖矿的实际情况,并形成自己的看法,尤其是考虑到比特币社区已经在努力解决这一问题。无论如何以太坊社区更青睐质押,因为它不仅对环境的影响更小,而且没有专用设备的要求,使得更多人能够轻松参与共识过程。2022年9月,以太坊通过一次名为“合并”的重大事件,从挖矿转向了质押,能源消耗惊人地减少了99.95%,这次合并是一个需要实时从挖矿切换到质押的复杂过程,开发者们的表现值得称赞,整个过程顺利完成,没有任何问题。

验证者

为了深入理解质押,我们将从质押参与者,即质押者的角度进行探讨。在以太坊社区中,像 superphiz.eth 这样的质押者广为人知。质押者通过运行验证者参与共识机制,验证者是存入32 ETH 作为抵押品的账户。要成为验证者,质押者必须首先成为全节点运营商,包括执行客户端和共识客户端,然后通过验证者客户端选择加入质押。存款合约负责记录参与验证者的列表。存在一个验证者队列,以防止网络因过多验证者而超负荷运行。32 ETH 的质押额至关重要,因为它提供了抵抗赛博攻击的能力。在区块链领域,我们不允许恶意实体无代价地创建验证节点,攻击者必须投入真实的 ETH 作为质押,并且可能因为以太坊的自我保护机制而面临损失。

当验证者完成队列等待后,他们便成为验证者集合的成员。在这个集合中,验证者肩负两项主要职责:确定区块链的最新头部以及对区块进行最终确认。首先,他们通过最新信息驱动的贪婪最重观察子树(LMD GHOST)投票机制来决定区块链的头部,这一过程确保了系统的响应性,使得区块能够迅速被添加。其次,他们利用友好最终性装置(Casper the Friendly Finality Gadget,简称 Casper-FFG)投票来对区块进行最终确认。Casper-FFG 投票包含证明和最终确定两个阶段,共同确保了区块链某一历史点的不可逆性。这三大投票——链的头部、证明和最终确定——共同构成了 Gasper 协议,当它们作为一个整体被讨论时,代表了一种结合了活性和最终性的共识机制。

验证者们在划分为 slot 和 epoch 的时间框架内工作,LMD GHOST 投票在特定的 slot 中进行,而 Casper-FFG 投票则在跨越连续 epoch 的过程中进行(参见图3.2)。

图 3.2 Slots 和 epoch

  • Slot:每12秒一个时间段。
  • Epoch:由32个时间段组成,大约持续6.4分钟。

Slots 和 LMD GHOST 算法

首先,让我们聚焦于插槽,插槽是一个12秒的时间窗口,在此期间可以提出一个区块作为区块链的最新头部。在每个插槽中,会随机选择一个区块提议者作为领导者。每个插槽只指定一个验证者作为区块提议者,区块提议者是提前使用称为 RANDAO 的伪随机算法选定的,如果区块提议者没有提出区块(例如,他们处于离线状态),一个插槽可能会是空的,但一般来说大多数插槽都会被填充,被选中提出区块是一件相对不常见的事件。区块提议者的任务有四个方面,首先他们会回顾上一个插槽,并找出获得最多证明的前一个区块,即“最重”的区块。其次,他们会构建一个新的信标区块,包含诸如进出验证者、对行为不端验证者的处罚等上下文信息,这些信息将使以太坊过渡到一个新的信标状态。第三,他们在执行客户端中通过从内存池中收集交易,在 EVM 中执行它们并产生执行负载形成执行区块。第四,他们对区块进行签名,然后将其提交给验证者进行证明。值得注意的是,并非所有验证者都会收到这个区块的呈现。

在我们区块链的每个时间槽(slot)中,虽然只有一个区块提议者负责提出新的区块,但其他验证者也没闲着,他们主要忙于“证明”(attestations)工作。你可以将“证明”理解为在质押背景下的投票,其权重根据验证者的余额来决定(这部分我们稍后详述)。验证者的第一个证明是对区块链顶端最新提出的区块进行的 LMD GHOST 投票,这个投票与验证者被分配到的具体时间槽有关,他们作为委员会的一部分参与其中(委员会成员同样是通过 RANDAO 随机选出的),委员会是由一组验证者组成的,他们的任务是对某个时间槽内提出的区块进行验证,这些委员会的形成基于参与质押合约的验证者集合。以我撰写本文时的数据为例,大约有 703000 名活跃验证者,这些验证者被随机分配到 219146 个时期中的一个,这意味着每个时间槽大约有 22000 名委员会成员。如果我们观察这个时期的一个特定时间槽,比如 7012687 号时间槽,我们会发现有 21908 名验证者参与了证明。这些委员会中的验证者对区块提议者提出的区块进行确认,实质上是在证明所提议的区块转换的有效性,下一个时间槽的区块提议者将会在这个区块的基础上继续构建,因为它获得了最多的证明,如果某个时间槽是空的,可能是因为被分配的区块提议者不在线,那么委员会将投票支持前一个区块,认为它仍然是最新的。此外,还有一个同步委员会,由为轻客户端服务的验证者组成,参与同步委员会的机会相当稀少(见图3.3)。

图 3.3 LMD GHOST

Epochs 和 Casper-FFG

验证者进行的第二次证明,即 Casper-FFG 投票,更为普遍,实际上包含两重投票。在 Casper-FFG 机制下,验证者对两个检查点进行证明。检查点是每个时期开始时最先被填充的插槽,如果这个插槽中没有区块,那么之前的区块就成为检查点。第一个检查点是目标检查点,指的是当前时期开始时的检查点。第二个检查点是源检查点,指的是前一个时期中的检查点。如果目标检查点获得了三分之二以上的绝对多数票,它就会被确认为合理。如果源检查点,即前一时期已被确认为目标检查点的区块,也获得了三分之二以上的绝对多数票,它就会被最终确定。一旦区块被最终确定,它们就被视为以太坊区块链的永久部分,不可逆转。我在关于恶意分叉和攻击的部分详细解释了三分之二绝对多数的重要性,但现在让我们假设大多数验证者是诚实的(见图3.4)。

图 3.4 Casper-FFG

聚合

为了提高证明(attestations)的效率,验证者采用了 Boneh–Lynn–Shacham(BLS)数字签名方案,这与我们之前在外部账户(EOA)中遇到的 ECDSA 签名方案类似。然而 BLS 签名有一个有趣的特性,它们可以几乎像单个签名一样快速地被聚合验证。为了进一步加快速度,随机选定的验证者(committee)被细分为 64 个子网,在每个子网中会选出一个验证者作为聚合器(子网内验证者的签名证明聚合成一个单一的签名),聚合器收集所有关于区块、目标和源达成一致意见的签名证明,并将它们作为一个单一的聚合签名呈现给区块提议者,区块提议者将把来自子网的聚合签名包含在信标区块中。

奖励与惩罚

我们的验证者参与质押会得到什么呢?质押是一项具有激励性的协议,我们期望有尽可能多的人参与到这一过程当中,以确保实现广泛的去中心化。同时,我们也需要一些机制来惩处不良行为,而这是借助奖励与惩罚体系来达成的。

  • 区块提议: 提出一个新的区块,包括优先费用和最大可提取价值(MEV)。
  • 证明: 对区块和检查点进行证明。
  • 同步委员会: 参与同步委员会的工作。
  • 削减奖励: 举报恶意行为。

区块提议之所以有价值,是因为它可能包含优先费用和最大可提取价值(MEV)(我们将在后面讨论这个话题),尽管这种情况并不常见。然而所有的验证者都会在每个时期进行证明,并因此获得较小的证明奖励,那些持续表现良好的验证者会得到额外的小幅奖励,参与轻节点的同步委员会或获得削减奖励的机会相对较少。 现在,让我们来谈谈处罚机制。以下处罚通常是由于您的验证者离线而导致的,如果偶尔发生这种情况,处罚相对较小。

  • 错过提案:无处罚。
  • 错过证明:未能进行证明。
  • 错过委员会:未能参与同步委员会的工作。

除了上述情况,验证者如果表现出恶意行为也会受到惩罚。这种惩罚更为严重,被称为削减(slashing)。削减是对那些参与歧义行为的验证者的处罚,即以相互冲突的方式提出或证明。在 LMD GHOST 机制下,如果区块提议者提议了两个或更多的区块,他们将受到削减处罚。如果验证者对两个区块作为链的头部进行证明,他们也会遭受削减。在 Casper-FFG 机制下,如果验证者对超过一个目标检查点进行证明,他们也会面临削减。一旦发生歧义行为,验证者的 ETH 将立即被削减 1/32(最大处罚为 1 ETH),然后验证者进入为期 36 天的退出期。在退出过程的中途,即第 18 天,会根据网络中被削减 ETH 的数量施加一个相关处罚。如果只有少数验证者被削减,相关处罚会比较小;但如果有大量验证者受到削减,这个处罚可能会很高,甚至可能达到验证者的全部质押金额。

信标区块

您可能不需要知道区块中实际包含的是什么,但我知道你们中的一些人渴望了解更多。以太坊的“主要”区块是信标区块。它包含了与共识机制相关的所有信息,例如当前的插槽、区块提议者是谁、前一个区块是什么、谁被削减了、存款合约中的任何新验证者以及签名等。它还包括了在插槽期间由验证者委员会收集的所有证明。这些证明确认了区块的合法性,下一个区块提议者将把此区块视为“最重”的区块,即拥有最多证明的区块,并在其上扩展自己的新区块。我称信标区块为“主要区块”,是因为它包含了嵌套在内的执行区块作为执行负载。当区块提议者提议一个区块时,他们会将交易发送给执行客户端以产生执行负载,执行负载被格式化成一个执行区块2。然后,执行区块被传输到共识客户端,并被整合到信标区块中(见图3.5)。

图 3.5 信标区块

在区块链中,你会发现区块里有一些特殊的字段叫做“根”(Roots),这些实际上是加密哈希值,它们是通过哈希函数生成的。哈希函数可以处理任何大小的数据,并输出固定长度的结果。借助哈希函数,我们能够为数据无论大小——赋予一个独一无二的标识符,以太坊将这些哈希值命名为“根”(Roots),并用它们来高效且安全地验证大量数据。这些”根“是由它们所代表的状态或列表中的各个子项的哈希值构建而成的。例如,在执行区块中的状态根就是对世界状态中每个子项的总结:包括外部账户、合约账户以及合约账户的存储。每一项都被赋予了一个哈希身份,然后它们被存储在一种叫做默克尔帕特里夏树(Merkle Patricia Tree)的数据结构中。这个根是对所有子项的总结,位于树的顶端,而所有子项都从这个根延伸出去。在信标区块中,我们也可以看到交易、收据和提款等信息被总结成了哈希根。这是因为它们都是大量数据,我们需要能够安全且高效地验证它们。

为什么哈希根(Roots)很有用?当一个区块提议者提出一个新的区块时,我们可以观察到他们会引用前一个区块的“父根”(Parent Root),也就是它的哈希摘要。当验证者们对区块进行证明时,他们期望看到的是与他们自己区块链副本中相同的“父根”。如果出现了不同的“父根”,这立即告诉我们区块中有些东西已经被更改了。对于世界状态的状态根(State Root)来说也是如此。状态根捕捉了在状态转换函数期间发生的对世界状态的所有更改。当区块提议者在他们的执行客户端创建状态根时,他们会将其报告给验证者。验证者重新执行交易,以查看他们是否能得到相同的状态根。换句话说,根是一种高效且安全的技术,用来确认我们正在处理相同的区块/区块链,并识别任何不正当的更改。一般来说,这对区块中的所有信息都是适用的。你不需要理解区块中包含的所有细节,但只需掌握核心概念:区块捕获了所有对于执行层和共识层转换状态相关的信息。随着你对区块链的理解越来越深入,你可能会返回来探究区块结构,或许可以通过检查区块探索器(如 Etherscan)上的真实区块来进行(见图3.6)。

图 3.6 执行区块

高级质押主题

质押池

质押池将小额以太币(ETH)汇聚起来创建共享验证者,质押池并非以太坊协议原生的概念,而是作为一种服务应运而生,旨在满足小额以太币持有者参与质押的需求,质押池主要有两类。中心化质押池由中心化交易所运营,在交易所存有以太币的用户能够将自己的以太币用于质押,之后交易所会汇集这些以太币以创建验证者,并向用户分发奖励。去中心化质押池属于智能合约协议,用户通过存入以太币与质押池的智能合约交互,作为回报会收到流动性质押衍生品(LSD)代币。LSD 代币代表着用户的质押份额以及所有累积的奖励,用户可通过将 LSD 代币换回初始存入的以太币以及所累积的质押奖励来解除质押。质押池是一种有效的工具,能让以太币持有量不足 32 个的用户参与质押,不过也存在一个相关问题。大多数质押池用户往往使用少数几个中心化(如币安)和去中心化(如 Lido、Rocket Pool)的质押池,这使得这些质押池在整体质押分布中占据较大比例。换言之,质押池可能致使质押共识机制趋于中心化。

最大可提取价值(MEV)

最大可提取价值(MEV)是指通过在区块中操作交易的顺序,从而在标准区块奖励和交易费用之外获取额外价值的做法。这种现象之所以存在,是因为交易在被写入区块链之前,会先存储在内存池中。内存池并非集中式的存在,而是分散在众多全节点上。当新交易产生并传播到网络中的各个全节点时,它们会被加入到节点的本地内存池里。这为交易的排序和筛选提供了空间,从而创造了MEV机会。在这个生态系统中,涌现出了一群专业的MEV参与者,包括搜索者、区块构建者和中继者。他们并不是以太坊协议的组成部分,而是在协议周围自发形成的。搜索者会监控内存池,寻找能够转化为MEV机会的交易,通常借助自动化程序来发现这些机会。一个典型的MEV策略是抢先交易,即搜索者发现其他用户有利可图的交易后,通过提高交易费用来插队,以此取代原交易并获得利润。

在最大可提取价值(MEV)领域,随着一种名为 MEV-Boost 的中间件技术的兴起,形成了一个由多方参与者构成的生态系统。尽管区块提议者负责提出区块并有能力构建自己的交易载荷,但通常他们会将这一任务外包给被称为区块构建者的角色。严格来说,以太坊协议自始至终都旨在将区块提议与区块构建的职责分离,但由于在“合并”(The Merge)过程中实现这一点过于复杂,这一目标未能完全实现。尽管如此,提议者-构建者分离(Proposer-Builder Separation, PBS)的概念最终将被正式写入协议。目前,这种分离还只是一种非正式的区分,区块构建者利用内存池来构建执行载荷,并在其中融入了搜索者提供的最优化 MEV 交易,构建完成的区块将包含对区块提议者的支付。此外,还有一类被称为中继者的角色,他们负责将区块构建者构建的区块传递给提议者,而提议者则会从中选择对他们经济上最有利的区块。

当前,有一个关键性的新近事件,它为我们揭示了在矿工可提取价值(MEV)盛行以及必须遵守 OFAC 规定的环境中,区块是如何被构建的。2022年,美国财政部的外国资产控制办公室(OFAC)对一种名为 Tornado Cash 的混合协议及其相关地址进行了制裁。Tornado Cash 是一个提供 ETH 隐私保护的工具,但不幸的是,它也与洗钱活动有了关联。由于以太坊是一个去中心化的网络,不存在可以强制执行 OFAC 合规性的中央机构。这就让网络中的参与者面临一个选择:是否要遵守 OFAC 的规定。特别是,这一决定影响了中继者,因为中继者通常是将区块传递给区块提议者的人。一些中继者选择审查 Tornado Cash,而另一些则没有,这意味着你的交易将被处理但可能会延迟,具体取决于涉及的中继者。

区块链分叉

分叉可以是好事也可以是坏事,这取决于具体情况。正面来看,分叉是向区块链协议引入新升级的方式。负面来看,如果区块链无意中发生了分叉,那么它就是一个问题。

让我们来详细了解一下主要的分叉类型:

临时链分裂:是指在某个时刻,区块链上出现了两个或多个区块同时被视为链的顶端。这种状况一般会迅速得到解决,因为网络中的节点会最终达成一致,选择支持链上的某一特定版本。在以太坊网络中,如果出现了这种两个或多个区块并存的情况,那么将依据最新的“最近证明最多”(LMD GHOST)分叉选择规则,选择获得最多验证的区块作为正式的主链继续延伸。

软分叉:指的是在协议中引入了新的改动,而这些改动能够与旧版本保持兼容。在这种情况下,完整节点可以继续运行旧版本的软件,不必强制更新到包含新改动的版本。在以太坊的发展历程中,这种方法并不常见,而在比特币的生态系统中,软分叉则是一种标准的升级方式。

硬分叉:当协议引入了重大更新,而这些更新并不与旧版本兼容时,就会发生硬分叉。这些更新是如此关键,以至于它们彻底改变了协议的运作机制。因此,旧版的全节点客户端软件无法处理或接受这些新的区块,从而无法继续参与网络活动。以太坊就是这样一个经常进行重大更新的协议,因此硬分叉是其发展过程中的常规操作。你可能会发现比特币社区对此有所顾虑,但在以太坊的生态系统中,这并不被视为一个普遍问题。

争议性硬分叉:在某些情况下,用户可能会选择不采纳硬分叉,而是继续遵循原始区块链路径。这种情况下,支持硬分叉和不支持硬分叉的用户群体将分道扬镳,遵循不同的区块链。2016年,以太坊就经历了这样的分歧,当时一个名为 The DAO 的项目遭遇了重大漏洞,这个问题最终通过执行硬分叉得到了解决。大多数用户选择了继续跟随硬分叉后的链,即现在的以太坊;而一小部分用户则坚持使用旧的、未经硬分叉修改的链,后来这个链被称为以太坊经典(Ethereum Classic)。同样,社区内部对于协议未来发展方向的争议也可能导致硬分叉的发生。为了解决这种争议,某一方可能会通过硬分叉创造出协议的新版本,并从此走上独立的发展道路。2017年,比特币社区中的一个少数派通过硬分叉创建了名为比特币现金(Bitcoin Cash)的新分支,改变了原始比特币的规则。尽管如此,大多数用户还是选择了继续使用未经硬分叉修改的比特币版本。

恶意硬分叉:恶意硬分叉是指某个单一实体或一群相互勾结的参与者获得了对共识机制的控制权。在这种情形下,攻击者必须掌握大量质押的以太币(ETH)。例如,在一种被称为“重新组织”的攻击中,恶意行为者可能通过在一个时段内故意不进行质押,然后在下一个时段内双重质押,以此来取代已经被确认为区块链头部的区块,使得他们所期望的区块因获得最多质押而成为“最重”的区块。实现这一攻击至少需要控制34%的质押ETH。在另一种攻击——终结性延迟攻击中,持有34%质押ETH的恶意攻击者可能在某个时期的第一时段延迟提出区块。这导致其他验证者认为该时段没有区块,于是他们将上一个区块作为目标进行质押。这会造成两个相互矛盾的目标,从而阻碍了区块链的最终确定。尽管如此,这种攻击最终可能会触发不活跃泄漏惩罚,随着时间的流逝,这一机制将重新确立诚实验证者的主导地位。如果在四个时期内未能确定最终性,不活跃泄漏惩罚将被激活。如果1/3的质押ETH由不活跃(如离线)或恶意的验证者控制,他们的质押将被削减,直到诚实的验证者恢复到2/3的绝对多数,从而使得区块链能够继续确定最终性。如果攻击者控制了66%的ETH,他们将实际上控制了共识机制,因为他们构成了2/3的绝对多数。在这种情况下,现有的协议无法提供有效的防御,解决方案可能需要来自以太坊社区的集体行动,通常通过硬分叉来实现。总体而言,由于执行这些攻击需要控制大量的质押ETH,因此这些攻击的风险被大幅降低。截至本文撰写时,已有超过23,487,763 ETH被质押在存款合约中,而你阅读这篇文章时,这个数字很可能已经显著增加。

以太坊究竟是什么? 这一章内容比较复杂,但接下来会简单许多。首先,让我们回顾一下我们对以太坊的基本了解。想象一下以太坊是一台全球通用的计算机,它有一个大脑,也就是以太坊虚拟机(EVM)。每隔12秒,EVM就会更新一次系统状态。这种更新是由用户控制的账户(EOA)发起的交易触发的,比如他们相互转账、创建新合约或执行合约功能。在这个过程中,会有一个区块提议者被选出来,负责提出一个新的区块。这个提议者会构建一个信标区块,它会查看上一个区块,并选择得到最多支持的区块作为前一个区块。这个新的信标区块会包含一些关键信息,比如存款、惩罚和提款等。同时,提议者还要更新系统状态,这就像你电脑上的内存(RAM),记录了所有正在进行的用户活动。提议者在自己的EVM中处理这些交易,生成一个新的系统状态,也就是执行负载。这个执行负载被打包成一个执行区块,并嵌入到信标区块中。然后,这个信息被发送给一组验证者,他们会检查信标区块中的信息是否正确,并重新执行交易来确认新的状态。如果一切无误,他们会对这个区块进行确认。12秒后,这个区块就准备好了,等待下一个提议者将其作为区块链中的下一个区块,也就是最新的区块头部。验证者还会确认目标和源检查点,并最终确定之前的区块,使其成为区块链不可更改的历史的一部分。现在我们可以明白,区块链就像电脑的硬盘,负责长期存储信息。所以,以太坊这台世界计算机由三个部分组成:它的大脑(EVM)、内存(世界状态)和硬盘(区块链)。

备注

Footnotes

  1. 以太坊之前使用的挖矿算法名为 Ethash,其最大的特点是对抗专用集成电路(ASIC)的设计,这使得普通用户能够利用家用的图形处理单元(GPU)进行挖矿。ASIC是定制的挖矿设备,价格不菲。

  2. 这里需要指出的是执行区块中的 Gas Limit。以太坊区块的容量由Gas Limit决定(这与用户对交易设置的 Gas Limit 不同,可能会引起混淆)。以太坊作为一台图灵完备的计算机,允许开发者构建包含循环和条件判断的复杂智能合约。虽然这为开发者提供了极大的灵活性,但也带来了一个问题:停机问题。停机问题是指恶意开发者可能设计出永不停止的智能合约。为了应对这一问题,区块设置了Gas Limit,以限制区块内可以执行的计算量。Gas Limit 是可调整的,目标值大约是1500万 Gas。如果有需求,这个限制可以提高到3000万 Gas,但这种情况下基础费用会上升。这种上升旨在将 Gas Limit 重新调整回目标值1500万 Gas。