前沿技术第一讲:分片技术的先行者——ZILLIQA协议

区块链技术迭代太快,让你“赶不上趟”?众享比特重磅推出区块链前沿技术栏目,与技术爱好者一起分享探讨区块链前沿技术。

该栏目的系列文章都是对当下最热最新的区块链技术的详细讲解,由北京众享比特科技有限公司诚意出品,众享比特技术团队亲自操刀制作。我们站在领跑者的高度,将对行业前沿技术的研究分享给关注、认可我们的朋友,愿都能有所获,都能有所长。

前沿技术第一讲

分片技术的先行者——ZILLIQA协议

ZILLIQA网络的目的就是要建立一个全新的区块链协议,用这种协议可以在不破坏区块链安全的前提下大大提高其扩展性。随着节点的增加,可以有更多的分片,吞吐量持续增加。

概述

现有区块链的瓶颈

扩展性是当前区块链所面临的一个大问题,已经成为制约区块链进一步发展的严重障碍。比如TPS的性能,在网络节点增加的情况下得不到提升。我们知道比特币网络的TPS是7,以太坊的TPS达到了10,但是中心化的VISA的TPS是大约4000。区块链的TPS与中心化系统的TPS基本不在一个量级上。那是否能设计一种区块链网络,使其TPS随着网络节点数的增加而不断变大呢?

图1

概述

分片

ZILLIQA小组在2015年的时候发表了关于分片理论的论文,在以后的几年时间里,不断对分片理论进行再调研、精炼、实践,已经总结出了一套独特的分片技术,并将其用于ZILLIQA网络。

通过分片技术的实施,随着ZILLIQA节点个数增多,网络的TPS将会不断地增加。理论上,当节点数量超过10000时,ZILLIQA的TPS将能达到VISA或MasterCard的TPS,是不是觉得很神奇?这就是分片技术带来的好处。

概述

Data-flow智能合约

智能合约已在各个区块链系统中广泛应用,但是面临的问题是同样的,这些合约的运行都是基于各类虚拟机的,在各个不同节点上都要独立运行虚拟机来执行相同的任务,资源浪费仍然很严重。

基于此,ZILLIQA提出了自己的智能合约语言,这种语言实现的合约不是完全计算型的,但是非常好扩展,对于自动拍卖、共享经济、财政模型等各类应用都有很好的适用性。

ZILLIQA的合约是data-flow类型的,程序将会被看作是一个有向图,在这个图中,各个节点用来计算,节点与节点之间的连线被当作输入与输出,这种编程在内部都是并发进行的,因此效率会提高很多。

在ZILLIQA最初内部测试时,采用了2400个节点进行测试,TPS达到了1389,这个TPS现在已经得到了进一步的完善提高。ZILLIQA的目标是让TPS能达到VISA这样的中心化系统的处理能力,可谓是目标远大。

图2

二、核心

前面我们提到过,ZILLIQA是通过分片技术来使自己的TPS提升的,这个是ZILLIQA网络的核心技术。分片在ZILLIQA中有三种体现形式:

1>网络分片

2>交易分片

3>计算分片

在这几种体现形式中,网络分片是最重要的,是交易分片与计算分片的基础。

我们可以这样想象一下,如果网络有1000个节点,ZILLIQA会将其自动拆分成10个网络片区,每个分片包含100个节点。如果这些分片能并行地处理交易,那网络整体对交易的处理能力就会有一个突破性的提升。如果每个分片每秒能处理10个交易,那10个分片每秒就可以处理100个交易,随着节点的增加,分片的增多,那网络的吞吐量就会线性地得到提高。

图3

分片技术其实不是一个新的技术,早些年就已经被用于提升数据库的性能、可扩展性、I/O带宽,但ZILLIQA第一次将其引入了区块链的世界,提出了用分片技术解决区块链网络扩展性的问题。

道理听上去很简单,但是面临的问题也不少,并不是说用分片就能解决所有问题,我们都知道新技术是不能解决所有区块链的问题的。因此,在使用分片技术之前,我们要解决以下问题。

核心

如何阻止Sybil攻击

ZILLIQA是一个开放的网络,任何人都可以自由加入这个网络,为了提升网络的吞吐量,ZILLIQA也欢迎大家加入网络。但这样一来,别有用心的人可能就会破坏网络。原来没有破坏整体网络的能力,现在可以破坏某个片区,改变某个片区已经达成的交易,这个是分片面临的第一个要解决的问题。

解决这个问题的办法有多种,比如让节点加入网络的时候进行抵押,比如让节点加入的时候进行一个数学算法的运算。ZILLIQA采用了后者,在网络准入时采用了POW的算法,一个节点只有进行了工作量证明,才会被网络中已有节点授权成为网络的一员。POW是节点加入ZILLIQA的门票,是通行证。

核心

如何分片

谁来决定矿工是隶属于哪个片区的,这个不能是一个中心化的机构,就算是ZILLIQA自己也不行,在分布式的世界里,我们是不能相信任何人或者任何组织的,我们只相信代码与算法。

ZILLIQA会先在网络中生成一个DSC, 即Directory Service Committee,这个委员会的成员是定期更新的,经过一个固定的区块周期(DS-epoch)后,就会选入一名新节点,清除掉一个老节点,采用的是FIFO原则。我们应该明白,DSC的大小是不会改变的,只是成员会定期更新。入选DSC也是采用POW的机制,谁快谁有资格,非常简单。

一旦DSC被选出来,DSC将会给加入网络的节点分配片区,决定其应该在哪个片区。凭据的原则是POW的结果,再加上一定的随机算法,POW结果的最后几位将会决定这个节点被分配到哪个片区。

核心

片区的大小

每个片区的大小应该是多少才最合适呢?大的话肯定是不利于共识的达成。也不是说越小越好,片区太小的话,很容易就被破坏节点控制。

还用上文讲到的1000个节点做例子,假如有250个坏节点。ZILLIQA测试了在不同的分片大小情况下,一个分片内有害节点超过1/3的可能性。从图4中我们能看到,当分片大小为100的时候,这个可能性是4%,但是当分片大小为600时,这个可能性就降低到了百万分之一。基于以上事实,ZILLIQA的分片大小是600,每个分片的大小不能低于600。

图4

核心

其他

有了网络分片的基础,交易分片就很简单了,ZILLIQA根据发送交易账户地址的前几位来决定将其分配到哪个片区去进行共识,对于合约调用操作来讲,发送地址与合约地址共同决定哪个片区来执行这个交易。

计算分片的概念在高效地执行计算任务与智能合约,可以让一些片区来进行任务分配,另外一些片区执行分配好的具体任务等。

三、共识与签名算法

在各个片区及DSC内部都采用了PBFT算法,这个算法想必大家已经很熟悉了,我们在这里就不再过多闸述。但在签名时,ZILLIQA却采用了Schnorr签名算法。

算法的第一步,每一个节点要把自己的公钥都发给一个整合节点,整合节点会把这个公钥组合成一个公钥,组织的方法可以是简单的加和,即aggregated public key = public key_1 + public key_2+……+public key_n,这个整合出来的公钥是可以对最终的整合出来的私钥进行验证的。

算法的第二步,整合器要与各个节点进行以下的交互:

1>commit phase,每个节点生产一些随机数,并提交给整合节点。

2>challenge phase,整合节点先整合第一步各个节点提交的东西,生成一个的commitment,接着会用aggregated commitment与aggregated publick key消息,生成一个challenge,challenge的作用在于:确认每个node真正对消息进行了签名。接下来整合节点会将这个challenge发给其它每个节点。

3>response phase,每个节点对第二个步骤中给的challenge作出回应,整合节点再对这些回应进行整合。

最终的签名表现形式为:(challenge,aggregated response),这个签名能被aggregated publick key成功验证。

图5

蓝色节点是整合节点。

H是生成challenge的方程,所用参数为aggregated public key ,message, response。

签名的最终表现形式为(C,S)。

C的大小是固定的,S的大小也是固定的。

产生一个response的前提条件:有challenge中所使用公钥对应的私钥。

在消息确认环节中,并不确认每个节点是否真正遵循协议本身,而只是确认是否各节点共同遵守协议,确认各节点是否拥有对应的私钥。

以上就是ZILLIQA的基本知识介绍,我们在这里分析了ZILLIQA提出自己系统架构的原因、分片的基本实现原则,同时还介绍了其所用的签名算法。

总体上来讲,ZILLIQA使用的分片技术给区块链领域带来了新的活力,使得区块链系统的吞吐量的提高在分布式的前提下成为可能。ZILLIQA测试网络已于11月底上线测试,大家可以积极参与到其公测中去,正式网络上线定在2019年的一季度,值得期待。后续我们也将会持续关注。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190103A105TB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券