以太坊分片思路其基本思想是,将网络中的节点分成不同的碎片,各分片可以并行处理不同交易,这样可以并行处理相互之间未建立连接的交易,以提高网络并发量。分片方案的特点是,随着节点数目的增加,网络吞吐量也随之增加。

Vitalik Buterin 在最新的推文中表示以太坊分片技术最重要的原则是「最大限度地接近与单一区块链相同的性质」。

二次方分片的目的,就是通过一种双层的设计来增加交易容量。第一层不需要硬分叉,主链就保持原样。不过,一个叫做 校验器管理合约 (validator manager contract,VMC)的合约需要被发布到主链上,它用来维持分片系统。这个合约中会存在 O(c) 个 分片 (目前为 100),每个分片都像是个独立的「银河」:它具有自己的账户空间,交易需要指定它们自己应该被发布到哪个分片中,并且分片间的通信是受限的。

分片系统中的大多数用户都会运行两部分程序。(i) 一个在主链上的全节点(需要 O(c) 资源)或轻量节点(需要 O(log(c)) 资源)。 (ii) 一个通过 RPC 与主链交互的「分片客户端」。

子链、侧链、状态通道

它们都属于链下扩容。

链下交易,对应比特币的闪电网络(Lightning Network)和以太坊的雷电网络 (Raiden Network)。 提前支付一些以太坊或比特币作为押金,之后你可以在链下通过一些手段,来跟其他人进行交易。交易结束后把这个结算放在区块链上面。需要主流交易所、钱包这种大节点参与才比较有效。

核心思路是每个链可以独立自主地处理交易或者事物,相互之间不需要交流,最终把结算信息放在主链上。

跟分片最本质的区别是,分片是链上扩容,是对整个区块链网络的一个重构,节点也是相互关联的。

代理人共识协议

典型代表 EOS,TRX。如何选出这些代理人,可以用权益证明,也可以通过一些官方的验证。

不管是 7 个代理人还是 21 个代理人,甚至可能是几十个代理人,大家会形成一个小团体。这个机制的好处是可以保证在一个很小的团体内部,很快就达成共识。

Zilliqa 分片

开源地址:https://github.com/Zilliqa/Zilliqa

C++实现的

在亚马逊的 EC2 上面测试得到用 3600 节点实现了每秒 2488 笔交易

特点:分片技术、PoW+PBFT 混合共识机制

测试网络:https://explorer.zilliqa.com

Zilliqa 的设计构思 第 1 部分:网络分片
https://my.oschina.net/zilliqa/blog/2962501

Zilliqa 的设计构思 第 2 部分:共识协议
https://my.oschina.net/zilliqa/blog/2962504

Zilliqa 的设计构思 第 3 部分:使共识更有效
https://my.oschina.net/zilliqa/blog/2962511

Zilliqa 官方挖矿指南中文版
https://www.huoxing24.com/newsdetail/20181206173835283794.html

网络分片

假设我们有一个包含 1000 个节点的网络,将自动地把该网络分成 10 个、每个包含 100 个节点的分片,且所有分片可并行地处理交易。

由于分片架构能平行地处理交易,因此吞吐量可随着网络规模增加而线性增长。

每个分片现在都能独立处理交易并因此产生高吞吐量。

需要解决的关键问题

  • 对女巫攻击的防御(Sybil Resistance)
  • 创建分片、给分片分配节点和任务
  • 分片大小
  • 跨片交易

zilliqa 解决方法

1、防控女巫节点

使用 PoW。每个希望加入 Zilliqa 网络的新节点都必须先执行 PoW,网络中的现有节点验证新节点的 PoW 并授权其加入网络。

POW 工作量证明部分跟以太坊基本上是一样的,这要求你将上一个区块的哈希值、节点的 IP 地址和你的公钥一起进行哈希计算。

对应的难度是相匹配的,例如哈希值的前 100 位都是 0,如果你算出来的哈希值满足这个条件,就说明你完成了工作量证明。

根据工作量证明节点 ID 的最后几位,来决定分到哪一个分片上。对于一个新的节点来说,是无法通过自己的意志去加入某一个分片的,只能通过工作量证明,而工作量证明难度较高,因此可以避免出现新节点自己选择分片的情况。因此工作量证明的最后几位,就可以从数学上保证你的随机性是足够的。可以保证一些恶意节点不能直接加入到某一个分片。

2、自动创建分片

有一个单独的分片即 DS 委员会去整合每个分片的结果,收集不同分片里面交易哈希,进行一个共识协议,形成哈希的哈希,然后广播,其他节点验证签名。

在每个 DS Epoch 开始时,所有候选人都将运行工作证明(Ethash 算法)过程 300 秒窗口,以便竞争加入 Zilliqa 网络。

每个 DS Epoch (约 1.5 小时)内总共有 100 个 TX 时期(每个~1 分钟)。第 100 个 TX 时期被称为 Vacuous 时期。空白时期会处理 coinbase 交易(奖励机制)、升级机制(因为 pBFT 中没有分支)和持久状态存储(写入节点的 DB 而不是仅存储在内存中)。在这个时期,网络不会处理任何常规交易。

基于 POW 选举出 DS 委员会,使用先进先出策略定期移出一名 DS 委员会老成员、增加一名新成员,新进入委员会的节点是最快解决 PoW 的节点,任何时候 DS 委员会的大小都是固定的。DS 委员会一旦当选,便启动分片程序,网络中的所有其他节点立即执行另一个 PoW,其 PoW 由 DS 委员会验证,每个节点根据提交情况和随机性,被分配到特定的分片。PoW 提交的最后几位二进制数字决定了节点将被分配到哪个分片。

3、选择合适的尺寸

选择合适的分片大小对系统的安全至关重要。使用 PoW 创建分片相当于随机无差别地抽样一个节点集。

从 600 个节点开始,其包含三分之一的恶意节点的概率降至百万分之一。出于这个原因,Zilliqa 认为最小分片大小为 600。

4、避免跨片交易

  • 因为跨片交易需要锁协议,因此其开销成本很高,在分片设计之初就尽量避免跨片交易的产生
  • 原子提交协议技术方案

5、交易分片

每当交易到达网络时,它就被分配到一个特定的分片上。分配是由交易发送地址的前几位二进制数字决定的,这就叫做交易分片。

交易首先由分片打包,生成微块,然后上传给 DS 委员会,如果幸运,能被 DS 节点确认并签名,生成最终块。

每一个节点都可以收到最终的区块,这个区块的内容是很小的。同时,不同区块之间也会进行交换数据,从而分享最终区块内的这些交易。

整个系统有三层结构:第一层,是哈希的哈希;第二层,交易的哈希;第三层,真正的交易内容。通过这种三层结构来保证整个系统在每一步进行广播的时候,内容量都是相对比较小的。因此过了一段时间之后,你的不同分片里面,大家都可以获得这一段时间以来交易处理之后的一个共同状态。

交易分片按照交易发送者的账号地址来划分,来自同一发送者的所有交易都将在同一个分片中处理,允许每个分片成员检测其是否双花。通过每个交易中存在的随机数 nonce,可以轻松检测双重花费(或重放攻击)。

6、计算分片

分片还使计算执行和智能合约运行十分高效。例如,一部分分片可以充当映射器(mapper),其他部分分片可以充当归约器(reducer),并非常有效地执行映射-归约任务(map-reduce task),这也被称为计算分片。

共识协议

计算密集型的 PoW 需要大量的时间进行计算并且可能减慢共识协议,且它与网络中的节点数量无关,而是取决于网络的集体计算能力。不能很好地利用分片小的优势。

实用拜占庭容错协议(Practical Byzantine Fault Tolerance, 简称为 PBFT)

Zilliqa 采用 PBFT 在每个分片中达成共识。该协议是由卡斯特罗和利斯科夫(Castro and
Liskov)在 1999 年提出的。它是在这样的假设下运行的:在执行协议之前,假设每个分片中最多有 1/3 的节点是恶意的。

在 PBFT 中,一个共识组中(即一个分片中)的所有节点按顺序排列,它有一个主节点(领导者),其他节点被称为备份节点。每轮 PBFT 都有三个阶段:预备、准备、提交。

PBFT 与 Nakamoto 共识协议相比其他优点

1、交易最终性

一旦交易被提交到区块链,那么它就是最终的了且不会有临时分叉,因此不需要确认。

2、低能耗

Zilliqa 只使用 PoW 来防止女巫节点攻击、确认节点身份并进行分片,而不用于达成共识。现实中,每确认大约 100 个区块才需要做一次 PoW。

3、报酬差异小

Zilliqa 中参与共识协议的每个矿工都可以获得对应的奖励

PBFT 的挑战

一个主要缺点:只有当分片规模很小时(即小于 50)才高效。但是,正如我们前面的文章中所讨论的,出于安全原因,Zilliqa 的分片大小必须不少于 600 个节点。

PBFT 对于大型网络而言效率低下的主要原因是它有一个潜在的通信成本,即 分片中的每个节点都必须与所有其他节点通信,这就是通信成本二次方的原因。

使用数字签名而不是 MAC 将发送消息的数量从二次方数量级减少到线性,当 n 很大时这种减少会产生重要影响。以 600 个节点为例,其中传播的消息数量可以从 17.97 万减少到 599。

使用多重签名的方法来降低通信成本,减少每个消息的大小。

目前一种比较流行的多重签名方案是基于 Schnorr 数字签名技术。

Zilliqa 使用了近期一些学术论文中的技术来提高经典 pBFT 协议的效率。

附:思维导图

一文读懂区块链公链分片技术方案