被看做公链未来的分片技术,究竟离我们还有多远?

Odaily星球日报·2018-06-22 19:00
分片技术需要解决的四大关键问题。

编者按:本文来自36氪战略合作区块链媒体“Odaily星球日报”(公众号ID:o-daily,APP下载

公链已成兵家必争之地。

交易所、钱包等送水行业格局初现,机会难觅。公链则非也。曾经有无数人说过,今天的区块链领域,就像90年代的互联网,所有人都想做协议和操作系统。

PC时代,微软成为行业霸主。移动互联网时代,谷歌稳居市值首位。也许我们无法预测未来哪些场景搬上链会有未来,甚至无法预测区块链是否有未来。但我们可以肯定的是,如果区块链真的能带来价值互联网,必然需要能承载如此使命的公链。

然而现实是,这样的一条公链仍未出现。

EOS被寄予厚望,但现在主网刚上线,判断格局言之过早。从目前来看,可扩展性、安全性、去中心化这区块链的“不可能三角”,依然没有得到完美的解决。大致来说,目前常见的方法有如下几种:一是改变共识机制,比如Hyperledger的PBFT、EOS的DPoS,这也往往也牺牲了部分去中心化;二是改变了网络结构,比如IOTA、byteball就使用了不同于区块链的DAG(有向无环图)的数据结构;三是直接利用链外方式解决,比如链下的子链/侧链、状态通道,甚至是跨链中间件等;第四种,则是分片。

V神最近来中国演讲,讲的就是分片。作为以太坊采取的未来扩容方案的一部分,分片可谓万众期待。

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

然而,该技术具有一定的复杂性,在具体落地上有诸多问题需要解决,鲜有项目真正将分片方案落地。来自新加坡的公链项目Zilliqa可是说是第一个将分片技术落地的项目,目前项目代码已经开源,他们因此受到了业内的关注。其市值一度涨至加密货币21位

最近,Odaily星球日报采访了Zilliqa的联合创始人兼技术总监贾瑶琪,后者分享了Zilliqa的进展、未来的规划,对各种区块链扩容方案的优劣,以及对行业的看法。

分片技术最早被用于数据库中,它将数据库分割成多个片并将这些片放置在不同的存储设备(分区)中,这样每个分区的数据量相对就会小很多,从而满足系统的性能需求。业内人士认为,分片增强了系统性能和可扩展性(Scalability),但与此同时也使系统的开发变得更为复杂。例如,有两条记录分别处在不同的服务器上,若需要建立关联,那么很可能表示“关联”的记录就必须在两个分区内各放一条。此外,一旦某事务需要跨数据分区处理,将大大降低性能。了解这个之后,我们也许就更能理解分片落地到区块链领域需要解决的问题。

Zilliqa对区块链分片的研究始于2015年,当时新加坡国立大学师生Prateek Saxena和Loi Luu在国际顶级安全会议CCS上发表了关于分片的论文A Secure Sharding Protocol For Open Blockchains(公有区块链的安全分片协议),这也是有人在区块链领域首次提出使用分片技术。此后,Prateek参与创立的新加坡Anquan Capital公司开始了区块链分片技术研究。经过两年的研发,团队于2017年7月成立了Zilliqa公司。

根据专访内容,我们以问答形式将内容整理如下:

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

Odaily星球日报:Zilliqa使用的分片策略是什么?分片技术落地情况如何? 

贾瑶琪:Zilliqa的分片技术可以这样简单地去理解:假设我们有一个包含1000个节点的网络, Zilliqa将自动地把该网络分成10个、每个包含100个节点的分片,且所有分片可并行地处理交易。如果每个分片每秒能处理n个不同交易,则所有分片每秒可一并处理10n个交易。这是一种水平的扩容方式,即网络吞吐量随着节点数量增加而呈线性增长,这是其他扩容方式所不具备的特点。

我们目前在做的分片包括网络分片(network sharding)、交易分片(transaction sharding)和智能合约分片或计算分片(computational sharding)。

其中最重要的是网络分片,因为其他分片机制都建立在网络分片之上。简单来理解,网络分片就是将整个网络分组,每个小组叫做一个分片(shard),所有分片同时处理不同的交易。在这个过程中,我们通过不断刷新网络和分片来保证安全性。与此同时,根据我们发表在CCS安全会议上的论文,当每个分片的节点数量不低于600个时,其中三分之一的节点是恶意的概率为百万分之一。

每当一笔交易进入网络时,我们会根据交易发送者的地址,进行一定的运算,随机分配到不同的分片中,这一过程被称为交易分片。值得注意的是,这些交易是无法自主选择进入某个分片,因为每个分片里面的节点会拒绝执行不属于自己分片的交易,这样也保证了处理交易的安全性。

目前,我们已成功落地了网络分片和交易分片,将于本月底发布2.0版公测网,这一版本的公测网将允许普通用户作为节点加入网络成为矿工。

Odaily星球日报:我们知道,单纯的分片技术本身是无法保证交易的高吞吐量的,因为吞吐量也取决于每个分片的单次时间以及出块速度。Zilliqa使用的共识机制是什么?

贾瑶琪:Zilliqa采用的是PoW+PBFT混合机制。

在公有链中,恶意节点可能会试图通过操纵多个节点来破坏系统,并影响任何基于多数节点的决策过程。这就是通常所说的女巫攻击(Sybil Attacks)。有几种可能的方式可使女巫攻击代价高昂或难以进行。例如,通过要求节点存入相当多的金钱(或代币)作为抵押,或要求他们执行一些计算密集型任务如PoW。

为了保证Zilliqa网络的安全性,我们要求所有加入Zilliqa的节点都必须做PoW。与此同时,我们也知道,计算密集型的PoW需要大量的时间进行计算并且可能减慢共识协议,而且消耗能源较高。所以,在Zilliqa上,PoW是在更大的间隔上运行的,即所有节点在加入网络以及每隔一段时间做一次PoW。在其余时间,为了达成共识,Zilliqa用的是pBFT公式机制。

Odaily星球日报:大家常说,PBFT共识协议一般在更小的共识组中实现,比如少于50个节点时,所以它更适用于联盟链。Zilliqa怎么觉得这个问题?

贾瑶琪:我们刚刚提到,Zilliqa通过分片技术和PoW保证了网络的安全性。但是PoW耗时长、确认慢、耗能大等弱点。所以,Zilliqa选择了pBFT来做共识,主要考虑是:1.它不是计算资源密集型的,比PoW耗能少;2.效率更高,因为它可以利用一个小的共识组;3.它不需要反复确认,赋予了交易最终性。换句话说,不像基于PoW的中本聪共识机制,通常需要多个确认区块如比特币需要至少6个确认,pBFT由于它的共识协议确保不会发生临时分叉,所以不需要确认。

在很多人的观念中,pBFT主要用于联盟链的一个很大原因是,pBFT共识中节点之间通讯成本高昂。比如,在n个节点的网络中,使用pBFT达成共识需要的总通讯次数为n(n-1)/2,即n的二次方级,当节点数量超过50的时候这就是一个很大的数字了,且n越大通讯成本上升速度越快。为了解决这个问题,Zilliqa采用了多重签名算法和一些其他性能优化方法,减少pBFT花费的通讯成本。

二、分片技术的难点和落地情况

Odaily星球日报:你认为分片在实践过程中可能有哪些需要解决的问题,或者难点?

贾瑶琪:分片技术原理听起来很简单,但在实际落地过程中要注意以下几个关键问题:

1、对女巫攻击的防御。这个问题上边已经提到了,即使用PoW来预防,在这里我就不过多赘述。

2、创建分片、给分片分配节点和任务。如每个节点如何选择它去哪一个分片;过一段时间,整个网络肯定也有旧节点要离开,新节点要加入,怎么实现这些新旧节点的动态交换;以及每个分片里的节点处理交易,还要实现协议控制,这要如何做到高效等。每个节点分配到哪当然不能由某特定个人或团体控制,因为如果这些人决定作恶,那么他们可以将所有恶意节点集中在一个分片中来损害网络的安全性。正如之前提到的,Zilliqa采用的是随机分片和动态洗牌的方式来保证网络的流动性及安全性。

3、分片大小。分片里的节点数量越少那么达成共识也会也越快,效率也会越高。但同时,如果分片中的节点数目过少,那么攻击者就会更容易控制它。且每过一段时间,如果一个分片里面的节点掉线或长时间联系不上,那么该分片里的总节点数就会进一步减少,那么安全性也得不到保证。正如方才提到,我们通过论文证明当每个分片的节点数量不低于600个时,安全性和效率能够得到较好平衡。

4、跨片交易。区块链领域的技术专家和工程师们普遍认为,因为跨片交易需要锁协议,因此其开销成本很高,当跨片交易数量上升时,会影响整个网络的吞吐量和经济效益。

我们目前主要通过两方面来应对这个问题:一方面,在分片设计之初就尽量避免跨片交易的产生;另一方面,我们在最开始的Zilliqa分片论文中也提到了atomic commit protocol技术方案,这也是我们这几年来在研究的方向之一。除此之外我们还在研究了多个其他备选方案,我们将在实现相对优秀的方案以后,将细节分享给大家。

Odaily星球日报:目前有不少区块链项目也在考虑使用分片技术,你认为分片技术在行业内的落地情况如何?

贾瑶琪:如今分片技术“遍地开花”,这显示出分片技术已经越来越成为解决区块链扩容的一种主流技术。另一方面,随着分片技术声音的不断提高,越来越多的社区成员也开始关注和支持分片技术。

不得不说的是,分片技术确实是一项非常难的技术,这也是为什么目前市场上宣称做分片的项目多,但真正做出来的少的根本原因。究其原因,就是分片技术对安全性要求极高。我认为目前这个市场上还是有一定乱象:

一是陷入TPS竞争陷阱,忽视了最重要的安全性。大家都知道,去年淘宝双十一交易的TPS峰值是25.6万/秒,这是发展了这么多年的中心化系统的处理速度。区块链是一个新兴技术,发展程度远不如中心化系统成熟先进,目前熟知的比特和以太的TPS都不超过30。因此很多项目在现阶段宣称链上数十万、百万甚至千万TPS,主要是为了吸引了大众眼球,但却忽视了去中心化和安全性这些根本要素。

二是没有数学运算或发表的论文支撑,前提和论断草率不严谨。分片又被称为“分而治之”,其重点不仅在于“分”,更在于“治”,即在切分的同时保证安全性。分片技术在传统领域由来已久,但在区块链中却是新兴技术,两者在概念上有些相似,但在操作上却截然不同。因此,如果对区块链的分片技术想当然,认为在每个分片里放置几个节点就算处理完成,那么在实际上却会导致恶意节点轻易地通过双花交易等恶意操作而带来一系列漏洞,而系统后期很难验证或者回滚来减少这些恶意交易带来的问题。

三是在没有经过大规模测试的情况下就轻易下结论,不够专业。当计算机带宽不是限制条件时,以太坊使用一个节点或很少的节点也能跑出成千上万甚至百万 TPS,但以太坊并在现实生活并没有达到如此高的TPS,其原因就是现实网络不是由几十个或者数百个节点组成,而是数万个。仅用数十个或者一两百个节点测试,跑出任何数据都是可能的,但这样的数据是没有说服力的。

四是一些方式可能不算真正的分片。目前,分片确实是一个非常热点的话题,我个人认为一些项目真正在做的更像是子链、状态通道、或者分层而不是分片。

如果没有经过科学的数学计算或者已发表的论文支撑,想当然地处理分片,并错误地把在理想状态下少量节点跑出的数据当做主网实现的数据,可能会带来一些严重的安全后果。相对较轻的情况是,网络多次硬分叉,严重则会给投资者带来巨大损失,这对投资者个人还是区块链自身的发展都是十分不幸的。

Odaily星球日报:目前声称自己使用了分片的项目不少,你认为刚刚提到的子链、侧链以及状态通道的解决方案,跟分片有什么不同?

贾瑶琪:子链、侧链以及状态通道都属于链下扩容,我认为其核心思路是相似的,即每个链可以独立自主地处理交易或者事物,相互之间不需要交流,最终把结算信息放在主链上。打个简单的比方,在这些链中A链可以做广告、B链做游戏、C链做交易等。他们跟分片最本质的区别是,分片是链上扩容,是对整个区块链网络的一个重构,节点也是相互关联的。

我认为链下扩容和链上扩容是互不冲突的,反而是相互补充的,未来可以相互结合的,因为相互之间的应用范围和侧重点不同,都为区块链扩展提供了重要技术支撑。

Odaily星球日报:换言之,分片必须是对同一主链中的节点或交易做分片。既然是在同一主链,必然当中的节点都参与共识或者验证全网交易。那么,Zilliqa如何保证所有节点在参与自身分片共识的同时,也参与确认或验证全网的交易记录?

贾瑶琪:我们有一个单独的分片即DS委员会去整合每个分片的结果,收集不同分片里面交易哈希,进行一个共识协议,形成哈希的哈希,然后广播,其他节点验证签名。我们的交易确认是分几个阶段的,如果你的交易在单独一个分片里面进行确认,那么你的交易就有很高的概率被写入区块链,这样的话我们之后会做一个提示,告知交易已经初步确认,如果最终确认下来的话会再给你发一个通知,就是最终确认了。

另外,我想要提及的是,因为我们目前做的不是状态分片,所以有些人可能会产生Zilliqa网络中每个节点都是全节点的误解,误以为这会导致过一段时间信息存储会爆炸。但实际上,Zilliqa网络中每个节点要保存的是全网的最新状态,而不是所有交易的历史。当然,节点也可以自发去作为一个全节点,存储所有的这样一个历史。这样的全节点有一个好处,就是可以去做自己的服务,例如像EtherScan,提供一个区块浏览器,通过广告来赚钱。况且,即便未来把状态切成装在不同的分片,那么也是常量级别存储量减少,其实差别没那么大。与此同时,我们已经和Bluzelle、Genaro两个做去中心化存储的企业和项目合作,来支持智能合约去中心化的存储。

Odaily星球日报:每一个节点它都要同步最新的状态,未来随着节点数量增加,这会影响整个网络的确认速度吗?

贾瑶琪:在理论上,Zilliqa吞吐量随着节点数量增加而增加。但在实际上,节点数量存在一个最佳点,规模增大到这个点之前,吞吐量都是线性增长的。

举个例子,如果两万个节点就带来了带宽限制,从而导致了系统吞吐量已经无法再增加,那么整个网络可能就会限制在两万个节点这样的情况。根据最新公布的数据,以太坊目前有16000个节点,而我们仍然在通过实验获知这个最佳点。

Odaily星球日报:Zilliqa最新测试网络的TPS是多少? 

贾瑶琪:我们这个数据在不断更新。在已公布出的数据中,我们使用1400个节点、6个分片,跑出了大约2800TPS的数据。理想状态下每个分片是600个节点,我们目前选择用每个分片200个节点做测试主要是考虑到成本,因为我们目前租用的节点是AWS、EC2,每年需要上百万美元的费用做测试。

Odaily星球日报:Zilliqa在智能合约方面有什么规划,主网上线时会有智能合约系统吗?另外有观点认为,Zilliqa的智能合约语言Scilla不是图灵完备的,为什么?

贾瑶琪:就像我们路线规划那样,目前已发布的1.0版公测网是不带智能合约层的;本月底将上线2.0版公测网,从这个版本起,Zilliqa会支持部分智能合约了;第三季度上线主网;第四季度将上线一些实用的去中心化应用。

Zilliqa除了做安全分片外,还设计了新的智能合约语言Scilla,也发表了论文来论证。Scilla是一种携带证明的、中间的智能合约语言,其基础计算模型基于通信自动机。我们希望通过使用Scilla,在区块链平台上编写智能合约更加便捷简单、安全可靠、拥有更高性能。

这几年的DAO攻击和Parity漏洞等都造成了数额巨大的资金被盗和冻结,一个很重要的原因就是Solidity没有形式化验证,在沟通和计算上划分不够清晰。而Scilla为智能合约的通信和操作提供了多种分离层,是支持形式化验证的,通过使用COQ等证明助理,可以使开发者写的代码符合其想要的逻辑。

Scilla非图灵完备更多的考虑是智能合约的安全性。以太坊的智能合约语言Solidity虽然图灵完备,但是因为燃料费的存在,实际部署的智能合约是无法无限循环的,所以也做不到图灵完备。我们发现以太坊上的智能合约有成千上万个的漏洞。Scilla就是为了避免已有的智能合约中的漏洞,所以去掉了一些比较危险的API接口和功能;而且我们发现目前所有智能合约不太需要图灵完备。

我们目前正在开发Scilla语言的编译器,目的是使未来所有用Solidity编写的合约都可以通过编译器轻松转移到Scilla上。与此同时,我们也发布了Zilliqa生态构建资助计划,花费500万美元,资助为Zilliqa搭建工具和应用的优秀项目、团队和个人,也建设Zilliqa生态。

三、国内区块链行业的三大问题

Odaily星球日报:你目前在市场上有比较看好和关注的公链吗?

贾瑶琪:市场上的项目各有亮点和特色,我个人更喜欢的还是以太坊。

Odaily星球日报:如果不是这么成熟和主流的呢?可能是一些创业团队做的。

贾瑶琪:对于项目标准,我个人比较看重创新性和严谨性。严谨性指的就是要有已发表的学术论文验证,在理论上能通过。如果没有严谨的论文来证明,系统最起码要有一千个节点以上的测试网络,代码也是公开的,这样才会比较有说服力。

Odaily星球日报:从整体行业上来说,你认为目前国内外区块链领域,或说公链项目最大的问题是什么?

贾瑶琪:问题主要有三个:第一大问题是在保证去中心化和安全的情况下实现可扩展性和高吞吐量;第二大问题就是隐私问题;第三大问题就是技术人员尤其是开发者数量太少了。

在第一个问题上,目前业界很多项目都在单纯追求高tps,我认为这违背了区块链的初衷、本质和最大特性,那就是去中心化。一旦网络节点太少,那它就不算区块链了。因此,我们追求的更应该是如何在保证去中心化和安全的前提下提高吞吐量。

(我是Odaily星球日报编辑卢晓明,探索真实区块链,爆料、交流请加微信lohiuming,烦请备注姓名、单位、职务和事由。)

+1
4

好文章,需要你的鼓励

参与评论
评论千万条,友善第一条
后参与讨论
提交评论0/1000

下一篇

以及,为拿下 Flipkart,沃尔玛将发行160亿美元债券;韩国互联网巨头 Naver 要当红杉和软银的LP。

2018-06-22

36氪APP让一部分人先看到未来
36氪
鲸准
氪空间

推送和解读前沿、有料的科技创投资讯

一级市场金融信息和系统服务提供商

聚焦全球优秀创业者,项目融资率接近97%,领跑行业