给新来贡献者的以太坊 2.0 Phase0 指南

  • 如果你想跟我一起加入 SigmaPrime 团队的 Lighthouse 客户端开发,可以来这里找我。
  • 区块链的背景介绍:《 300 字秒懂区块链》

介绍

本文旨在帮助那些第一次接触 ETH 2.0 并且想要参与开发工作的人(撰写本文之时处于阶段 0 )。

本文将概述重要内容并介绍关键术语,不会深入探讨开发细节。文末附有更多资源的链接。

如果对当前以太坊区块链(工作量证明)的术语有所了解,对阅读本文会有帮助。

阶段

Justin Drake 很好地总结了以太坊 2.0 的开发阶段:

  • 质押:通过 Eth 1 上部署的智能合约引入验证者
  • 阶段 0 - 系统:信标链,即本文主要介绍的部分
  • 阶段 1 - 数据:并行处理“分片”中的交易
  • 阶段 2 - 状态:EVM 2.0、智能合约

概述

目标:交易排序

以太坊主链(即,以太坊 1.0 主链)创建了一个有效交易的有序列表。有效交易指的是由一组运行以太坊挖矿软件的独立互联计算机(即,“挖矿节点”)达成共识的交易。以太坊 2.0 依旧维持这个目标不变,只是改用 PoS 机制代替 PoW 机制来对交易顺序达成共识。

并行处理

在 PoW 机制下,近期交易的集合会被打包放入区块中。PoW 与 PoS 的区别在于节点如何决定区块的顺序,也就是如何将新挖出的区块链接起来。

此外,以太坊 1.0 主链只是单独一条由区块组成的链,以太坊 2.0 则是由很多分片组成的,会创建出并行的几条区块链(分片数据链),不过这要等到阶段 1 才能实现。为了让这些分片协同工作,会有另一条链来将各个分片的有效区块统一起来。这条专门用于主导系统运行的区块链被称为信标链

以太坊 2.0 阶段 0 的规范聚焦于信标链,完整的解决方案请参见其它资料。

信标链由信标链节点构建

运行以太坊 2.0 客户端信标链节点软件的联网计算机就是以太坊 2.0 网络上的节点。在以太坊 1.0 中,互联的节点会通过分享信息来创建/分享新的区块。因为要等待所有节点都就链上最新挖出的区块达成共识,所以交易确认需要一点时延。

以太坊 2.0 阶段 0 的核心是,信标链节点之间如何对信标链上的出块顺序达成共识。

随机出块

为了不引入中心化金融系统中可能有害的属性,我们需深思熟虑才能设计出良好的去中心化系统(见比特币白皮书)。

一方面是要确保在分布式网络中的一大拨人都有机会 产生/验证 数据,以此来避免 中心化/腐败:

  • 必须保证提议区块的节点是从网络中随机选择出来的
  • 创建有效区块会得到奖励 以及/或者 无效区块会遭受惩罚

工作量证明是利用算力来实现这一点:

  • 区块提议者之间进行周期性(15 秒)的随机出块
  • 创建有效区块需要负担一定的经济成本(从而有机会得到出块奖励)

权益证明是通过质押 ETH(货币)的方式来实现这一点:

  • 每个时隙(6 秒)都会随机分配验证者(即质押了 ETH 的参与者)
  • 如果提议的区块无效会被罚款,提议有效区块会则会得到奖励

虽然我们提到过信标链节点也在生成区块,但是它们实际上不是通过质押来参与以太坊 2.0 网络(成功的参与者会获得奖励)的节点。这是验证者的职责。

验证者

验证者是(通过以太坊 1.0 主链上的智能合约)质押 32 ETH 来参与以太坊 2.0 的个人地址。验证者会被频繁且随机地分配到任务,签署新提议区块中他们认为是有效的区块。

一台运行以太坊 2.0 客户端上验证者客户端软件的联网计算机必须与一个(或多个)信标链节点相连接。这种模式是相信信标链节点会返回正确的数据,而且只有在数据有效的情况下,由验证者客户端管理下的对应验证者才会对这些数据签名。欲知更多详情,请阅读下一部分。

等到以太坊 2.0 汇集了一批验证者之后,会对这些验证者进行伪随机混洗,然后将他们组成一个个委员会。在每个时段内,会有一或多个委员被分配到一个时隙中去参与验证工作。

-验证者、委员会、时隙、时段-

每个时段内,验证者都会被分配去签署新提议的区块、为已经产生的区块投票(或者说提供证明信息(attestation))。一个时段结束之后,验证者们就会经历再度混洗,然后重复这个过程。

信标链节点

除了管理已经质押过 32 ETH 的验证者列表,信标链节点还有以下职责:

  • 保证时隙长度(6 秒)
  • 创造随机性
  • 为每个时隙分配(验证者)委员会
  • 响应与之相连的验证者客户端

硬件/软件

互联计算机

要想具备高可用性并且让区块验证获得足够高的随机性,需要汇集一大批验证者(最少 1 万名)。在理想情况下,这些验证者都分散在多个验证者客户端之间,后者与组成以太坊 2.0 网络的一个或多个信标链节点相连。

-信标链节点之间通过网络连接;验证者客户端和信标链之间通过网络或本地连接(图源: catkuro)-

运行信标链节点的硬件之间会进行通信,分享已签署的区块和证明信息。验证者客户端会连接到它所信任的信标链节点上,以便了解其验证者被分配到了哪个时隙。此外,验证者客户端会为其管理的验证者请求数据(区块/证明信息)。

运行信标链节点的经济激励、能否在同一个机器上运行信标链节点和验证者客户端,以及信标链的信任问题等等都不在本文的探讨范围内。在本文撰写期间,这些问题依然未有定论。

最简单的配置是一个信标链节点,加上一个与之相连的只管理一名验证者的验证者客户端。然而,考虑到运行信标链节点的要求较高,而运行验证者客户端的要求要低得多,验证者客户端在数量上很可能大大超过信标链节点。验证者客户端只需要一台性能较好的家用个人电脑或是一个树莓派就可以搞定,因此一个验证者客户端上可能只有很少几名验证者。

因此,一个信标链节点上可以连接多个验证者客户端,一个验证者客户端也可以选择连接到多个信标链节点上。这是为了预防某个信标链节点掉线,或者(更糟糕的)在错误时隙上提供了数据。如果是前者这种丧失可用性的情况,验证者被罚的钱很少,而在误签的情况下,验证者被罚的钱要多得多。这种削减验证者权益的惩罚在规范中被称为罚没

从软件到数据

如果你将来想协助开发以太坊 2.0 客户端的话,最好了解一下不同软件之间是如何连接并通信的。阶段 0 规范不涉及这一点,主要专注于作为数据的信标链,比 “节点” 概念更高一层。

所有信标链节点都需要就信标链状态达成共识。将最新提议的区块与老状态结合获得新状态,就可以改变信标链节点的状态。

后续。。。

希望这篇文章能够让你更好地理解以太坊 2.0 的规范以及实现。

接下来还有几点需要探究:

  • 验证者的押金如何存入以太坊 1.0 的智能合约内,并让信标链节点发现(诚实的验证者)的。
  • 以太坊 2.0 上的账户是如何创建的,例如,Lighthouse 中的账户管理员。
  • 强荐这个视频(2019.5)。 注:音频已改进。

更多资料

规范

  • 以太坊 2.0 :https://github.com/ethereum/eth2.0-specs#ethereum-20-specifications
  • Lighthouse 实现:https://github.com/sigp/lighthouse/#lighthouse-ethereum-20
  • 图解版:https://github.com/protolambda/eth2-docs#justification-and-finalization

讲解

  • 阶段 0 规范 + 对象:Justin Drake(2019.3):视频
  • 研究和分片:Justin Drake(2018.9): 视频

参考资料

  • 信标链:Vitalik Buterin 和 Justin Drake(2018.7):视频

原文链接: https://medium.com/coinmonks/eth2-0-phase-0-basics-for-new-contributors-8a0a22bc38c7
作者: James Zaki
翻译&校对: 闵敏 & 阿剑

本文由作者授权 EthFans 翻译及再出版。

你可能还会喜欢:

科普 | Eth2.0 节点的网络通信
科普 | 以太坊 2.0 轻节点的数据可用性
干货 | 探究以太坊 2.0 的分叉选择规则

评论