(二)——以太坊、Zilliqa分片技术解读

分片技术作为区块链扩容的重要手段之一,现阶段深受区块链行业里的资本、技术和市场等各方的广泛关注。

一、以太坊分片技术

1.1 概述

为了解决以太坊1.0的吞吐量低和可扩展性差的问题,以太坊创始人Vitalik Buterin公布了以太坊2.0路线图:其中分片机制将被作为协议提升的核心。

以太坊2.0的分片网络是什么模样呢?

套用Vitalik的原话,以太坊2.0的分片就像是创建了一种拥有一百个不同宇宙的区块链,每个宇宙拥有不同的账户空间。但是,这些宇宙空间并不是单独的区块链,它们是共享着共识的互联系统。

从技术层面来看,以太坊2.0的分片引入了链上状态分区(on-chain state partition)的概念来获得更高的吞吐量。这里面的状态分区就是上文提到的宇宙空间。

以太坊2.0将以太网络分为两层,上层为现有的以太坊(也叫主链Mainnet chain),基本保持不变;下层为分片链,主要来处理和验证状态分区中的交易。具体结构大致如下图所示:

为了更多的提高每个分片的共识速度,以太坊2.0将会把原有的Pow共识机制升级成为Pow/Pos共识机制,即Casper共识算法(CFFG,Casper the Friendly Finality Gadget),后续可能还会将共识机制转变为完全的Pos机制,即CTFG(Casper the Friendly Ghost)。

1.2 分工明确——二层网络结构

以太坊2.0的分片网络被分为主链和分片链。其中,主链可以理解为现有的Pow共识机制的主网,主要来处理和验证状态分区中的交易。主链和分片子链的职责分别如下:

Distribution of responsibilities 责任的分配

为了更好的实现二层网络,引入了一些新的概念:

可以简单地这么认为,分片中的交易都会被装入校对块。 与侧链类似,校对块只有一小部分会被记录到主链:

1) 分片链上的交易处于自己独立的空间中,分片验证人(shard validator)只需要验证他们所关注的分片。

2) 分片链也通过 POS 机制依附于主链,以获得更高层次的共识(higher level of consensus)。

具体过程就是分片中包含多个节点,即分片验证人,他们可以通过Pos机制在分片中完成交易的验证,验证之后产生一个collation,而这个collation的一头部信息被加入到主链上面,具体的交易并不保存在主链上面。

1.3 分片管理者——验证人管理员合约(VMC,Validator Manager Contract)

为了将分片链加入到主链当中,主链上提供了一种叫做验证人管理员的智能合约,该合约是整个分片机制的核心。该合约提供来许多函数接口,主要功能总结如下:

权益证明系统,伪随机采样,Collation Header验证,跨分片通信,链上治理等。

其中,最主要的两个功能当属Collation Header验证和伪随机采样:

伪随机采样:Casper共识算法的实现主要靠VMC实现,通过伪随机采样对矿工的行为进行监督和约束,保证了共识算法的安全性。这块将在Casper算法一节进行介绍。

Colltion Header验证:VMC提供addHeader函数,该函数将由Collator进行调用,为Collation提供了及时的链上验证,承担了将分片链的信息输送到主链的任务。

下图表示了每个分片所产生的状态信息要经过VMC的审核验证之后,才能添加到主链区块的状态树。一旦验证人被采样为合格的 collator 来提案一个新的collation,collator 必须对最近的 collation 进行验证,并发送一笔交易来调用addHeader函数。

该函数由VMC提供,并对提交的Collation header进行校验,一旦校验通过,分片对应的Collation header信息将被添加到主链的Block当中。

1.4 升级的共识算法——Casper权益证明算法

由于以太坊本身已经运行了好多年的Pow算法,并且其2.0方案将采用二层网络结构,主链为了与之前的共识算法兼容(抑或是处于安全性考虑,或者是平衡矿工的利益),需要维持Pow算法。

但是为了更高效的进行分片,或者说在分片数确定的前提下,为了提升网络的吞吐量,每个分片链的共识算法就必须摒弃无法扩展的Pow共识算法。

Casper共识算法是以太坊2.0将要采用的共识算法,该算法由两个项目构成:一个是由Vitalik带领的Casper FFG,另一个是由Vlad带领的Casper CBC。

Casper FFG共识算法因为具有如下特点而被采用:

- 共识安全性

- 最终确定性

- 减少能源消耗

- 减轻矿霸中心化程度

下面我们着重分析一下共识的安全性,因为它涉及到Casper的核心思想,也是其最重要的优势。

1.4.1 共识安全性

Casper的核心思想就是要Pos挖矿者抵押一部分资产,来对其分片中的交易结果进行押注,如果矿工押对了,则可以拿回抵押资产并获得一定奖励。抵押更多资产的人将会获得更多的投票对赌机会,也更有机会获得更多的验证奖励。具体实现是通过VMC智能合约来完成的:

VMC通过伪随机采样的方式,选出每个分片上合格的Collator。具体地,验证者首先将他们的保障金存入VMC,然后验证代码地址将被记录在VMC内部的全局验证人列表当中。系统会根据验证者存入保障金的多少,按照比例来随机地选择出指定分片内的验证人,这样就使得验证者无法提前预测他们何时会成为哪个分片的验证者,通过增加随机性来提升整个系统的安全性。

另一方面,在正常情况下,Collator都是在确认交易,因此都是朝着收到交易的方向去抵押。但是,如果某些矿工恶意反向对赌,将破坏最终交易结果,这时候VMC的功能就体现出来了,它作为管理者会去甄别矿工的行为,如果发现明显的偏离对赌结果,将完全扣除抵押者的资产。

因此,可以说攻击者要想大概率的发动攻击,就必须抵押更多的资产,而在一轮作恶当中,他的资产将被扣除;在下一轮共识中要想继续作恶,又得抵押大量资产,因此相比于Pow的51%矿霸攻击,想要发动Pos攻击,其攻击成本将大大地提升,这在一定程度上提高了Pos算法的安全性。

二、Zilliqa分片技术

2.1 概述

由于Zilliqa项目发起目的就是要通过分片技术来解决现有区块链技术的可扩展性差的问题,因此Zilliqa的分片很纯粹,整个网络架构设计就是为了分片而设计。其分片的原理非常类似于互联网巨头谷歌提出的Map-reduce编程模型(Map-reduce是一个并行计算与运行框架,整个框架通过Map函数和Reduce函数编程实现基本的并行计算任务)。

Zilliqa的分片技术主要采用了网络分片和交易分片。网络分片提供了将网络中的节点进行分组的方式,从而形成分片。交易分片提供了将交易分配给分片的方式。

Zilliqa采用了Pow和PBFT共识算法,其中,Pow算法严格意义上来看并不作为验证交易的共识算法,而实际验证交易的共识算法是在分片中运行的PBFT算法。

由于原始PBFT共识算法的达成共识的时间复杂度与网络节点的个数成二次方关系,因此,Zilliqa通过改进PBFT算法的验证过程,将时间复杂度缩小为与网络节点个数成正比的程度来加快分片内的共识速度,从而让PBFT得以在节点数大于600的分片中可以快速实现。

2.2 第一步——网络分片

网络分片是所有分片中最为关键的一个过程,因为其他分片机制都建立在网络分片之上。Zilliqa的网络分片过程是整个网络的节点运行Pow共识算法来完成的。

为什么要采用Pow共识算法?

那是因为Pow算法是经过长期验证的最安全的算法,通过POW算法作为节点的入场券,可以提高节点加入网络的成本,这样能够有效的对抗女巫攻击。

具体的网络节点分片过程如下:

- 特殊节点的选举——构成DS委员会

通过运行POW1算法,选举出n个节点,构成DS委员会,用来控制整个分片过程。

- 普通分片节点的选举——构成网络分片

剩余的节点通过运行POW2算法,选举出m * n 个节点,划分到m个分片当中,每个分片n个节点。

另外,在每个分片的节点个数n的选取,也是一个值得讨论的问题,因为合适的分片大小对系统的安全至关重要。下图显示了不同分片大小中至少三分之一的成员是恶意的概率(1/3是PBFT对于拜占庭节点占比最大的可以容忍程度)。

请注意,如果分片大小为100时,此概率大约为0.04。由于Zilliqa团队希望拥有绝对多数的好的节点(用于之后的共识),100作为分片大小显然是不安全的。好消息是随着分片大小的增加,这一概率不断降低。从600个节点开始,概率降至百万分之一。出于这个原因,Zilliqa团队认为最小分片大小为600。

2.3 第二步——交易分片

交易分片主要涉及到如何将网络中的交易合理的分配给不同的分片当中进行处理的问题。

2.3.1 账户系统

在正式讲Zilliqa的交易分片之前,我们需要先介绍一下Zilliqa的账户系统,或者说是状态信息。即整个网络的状态主要涉及到全部账户的状态信息,每个账户的状态信息,是一个以账户地址为key的数据集。该数据集主要包含如下信息:

Zilliqa每个账户的状态信息,可以通过对应账户的地址来唯一进行访问,整个网络的所有账户状态,构成了其账户系统。

2.3.2 防止双花

在Zilliqa的中,交易分片是按照发送者的地址进行分片的。也就是说同一个账户发起的交易将一定会被分配到同一个分片内被处理和验证。而每当一个账户

在发起一笔交易之后,其账户对应的Nonce值将被加1。因此,如果该账户同一时间发起来多笔交易,则在对应分片内,只需要检测每笔交易的Nonce值即可很容易地检测双花的问题。

2.4分片的共识算法——PBFT共识算法

2.4.1 Nakamoto共识算法的弊端

在第一篇文章中提到,分片中的共识算法可以使用Nakamoto(Pow)共识算法。但是,如果使用Nakamoto共识算法,将会带来如下几个问题:

- Pow共识算法的吞吐量没有办法做到很好的提升和优化

- Pow共识算法没有办法做到共识的确定性

- Pow算法会产生过多的能源消耗

2.4.2 实用拜占庭容错算法

鉴于以上原因,Zilliqa最终选择了在分片内部采取实用拜占庭容错(Practical Byzantine Fault Tolerance, 简称为PBFT)算法。

在PBFT中,一个共识组中(即一个分片中)的所有节点按顺序排列,它有一个主节点(又名领导者),其他节点被称为备份节点。共识过程由主节点来主导,备份节点之间相互交互通信,只要整个共识组中有超过2/3的节点达成共识即可以达成最终共识。

2.5PBFT的改进

虽然PBFT可以比Pow算法更加快速的达到共识,但是经典PBFT算法有一个巨大的缺点:在节点为n的网络中,要想达成共识,消息传递的算法复杂度为O(n * n). 随着节点数的大幅度增加,PBFT达成共识的速度将变得很慢。

针对这一缺点,Zilliqa项目组通过使用EC-Schnorr多重签名,使得网络之间的消息传递复杂度降低到O(n)。

这是什么概念呢?对于Zilliqa而言,其每个分片最少的节点数为600,那么如果使用经典PBFT,消息传递数是将是36万次以上,但是如果使用改进的PBFT,则消息传递数只需要600次左右。

因此,正是由于Zilliqa对于经典PBFT的改进,才使得PBFT算法在节点数大于600的分片中得以实际应用。

2.6 其他

Zilliqa的分片没有采取状态分片,这在一定程度上降低了实现分片的复杂度。对于以太坊那种跨分片链交易的问题,Zilliqa可以通过交易分片将同一类型的交易直接映射到同一个分片当中,从而可以通过交易的nonce值避免和检测双花问题。

不过,Zilliqa在处理智能合约的分片的时候,将面临不同调用同一个智能合约的两个用户被分片到两个不同的分片当中,而导致状态不同步的问题出现。Zilliqa项目方还在近期公布了处理智能合约分片的方案。具体措施是:

- 将普通的交易转账按照账户地址进行分片;

- 对于单纯的智能合约调用的执行,按照合约地址进行分片;

- 而对于复合的交易情况,将它拆分为两个步骤来进行分片。

三、总结

我们在上一篇提到,分片技术按照其分片的属性可以分为网络分片、交易分片和状态分片。以太坊2.0网络主要用到了网络分片、交易分片和状态分片,而Zilliqa主要用到了网络分片和交易分片。单从分片模式来讲,网络分片加交易分片可以提高交易处理的并发程度,从而提高了网络的吞吐量和可扩展性;状态分片可以提高整个网络的节点存储的可扩展性。

我们并不能够单纯的说以太坊2.0的分片就一定优于Zilliqa的分片,因为其中还涉及到安全问题,跨分片交易问题等等,而且以太坊分片的策略是在现有网络的基础上进行升级改进,其升级方案一定会受限于当前的架构,从其规划的升级路线就可以看出:整个升级方案需要至少3年时间才能实现第一版本。而Zilliqa项目的整体网络架构就是针对分片技术而设计的,可能其架构更适合做分片。

Zilliqa项目的CEO董心书也曾说过,Zilliqa之所以不进行状态分片,就是为了在开发的初期,把全部精力投入到分片的实现上面,进而可以更早更安全地实现出分片的区块链技术。

目前分片技术仍然是区块链公链扩容技术中最具挑战的技术升级,未来孰优孰劣,我们还得看最终两者的实现效果。

四、参考资料

4.1 以太坊

https://ethfans.org/posts/how-to-scale-ethereum-sharding-explained

https://blog.csdn.net/simple_the_best/article/details/78926638

https://github.com/ethereum/sharding/blob/develop/docs/doc.md

https://medium.com/@jonchoi/ethereum-casper-101-7a851a4f1eb0

https://ethfans.org/ajian1984/articles/32591

https://www.8btc.com/article/146022

4.2Zilliqa

https://www.chainwhy.com/upload/zb_users/upload/2018/05/201805071525660391615010.pdf

https://blog.zilliqa.com/zilliqa-%E7%9A%84%E8%AE%BE%E8%AE%A1%E6%9E%84%E6%80%9D-4ca8a3f61f99

https://blog.zilliqa.com/zilliqa-%E7%9A%84%E8%AE%BE%E8%AE%A1%E6%9E%84%E6%80%9D-e9a340a72bec

往期周报

往期文章

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180831B1BIAA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券