区块链分片技术相关资料收集html
分片要提升的就是每秒交易量tps
目标是很明确的,比特币的tps是7,以太坊的tps是15,eos如今的tps是三千多,理论上能够达到10k须要不少dapp来实现,但现实生活中visa信用卡的tps是2万,淘宝的tps是20万。程序员
分片的基本思想是,将网络中的节点分红不一样的碎片,各分片能够并行处理不一样交易,这样能够并行处理相互之间未创建链接的交易,以提升网络并发量。分片方案的特色是,随着节点数目的增长,网络吞吐量也随之增长。算法
--------------数据库
被看作公链将来的分片技术,究竟离咱们还有多远?_36氪
https://36kr.com/p/5139981.html
最近V神总说的以太坊分片技术是什么? _凤凰财经
https://finance.ifeng.com/a/20180503/16233643_0.shtml编程
分片技术(sharding)——区块链扩容问题的良方
http://www.cocoachina.com/blockchain/20180326/22770.htmlapi
zilliqa如何用分片技术把7笔/秒的区块链交易提高到2488笔/秒的?区块链大本营
https://mp.weixin.qq.com/s?__biz=MzU2MTE1NDk2Mg==&mid=2247485314&idx=1&sn=607b95ca6d9b9051f3a8d272423a26cd&chksm=fc7c597fcb0bd069c30b248486b9268c149b327a64cf5a34077f06b67b29dfd629622f04d1ea#%23浏览器
======================安全
扩容,本意是能够经过数据库拆开成小段,改变网络内部各步骤之间的验证方式实现分片,增长吞吐量。因而可知,分片是一项复杂的工做,如今不少项目为了实现扩容,采用分片技术。性能优化
分片是一种基于数据库分红若干片断的传统概念扩容技术,它将数据库分割成多个碎片并将这些碎片放置在不一样的服务器上,在底层公有链的系统内,网络上的交易将被分红不一样的碎片,其由网络上的不一样节点组成。所以,只须要处理一小部分输入的交易,而且经过与网络上的其余节点并行处理就能完成大量的验证工做。将网络分割为碎片会使得更多的交易同时被处理和验证,所以,随着网络的增加,区块链处理愈来愈多的交易将成为可能。但这极其具备挑战。服务器
其基本思想是,将网络中的节点分红不一样的碎片,各分片能够并行处理不一样交易,这样能够并行处理相互之间未创建链接的交易,以提升网络并发量。分片方案的特色是,随着节点数目的增长,网络吞吐量也随之增长。
然而,该技术具备必定的复杂性,在具体落地上有诸多问题须要解决,鲜有项目真正将分片方案落地。来自新加坡的公链项目Zilliqa但是说是第一个将分片技术落地的项目,目前项目代码已经开源,他们所以受到了业内的关注。
======================
分片技术(Sharding)是以太坊网络的一种加强自己性能的改进方案,你能够把它理解为比特币中的“扩容”,目的很直接就是提高交易速度,只是二者实现的途径不太相同。
相对来讲,比特币的扩容的逻辑很是直接,你不是交易速度慢吗,那么我直接增大区块容量,让每一个周期(约10分钟)记录到区块的交易记录数量变多,那么交易吞吐量天然就上去了,简单而粗暴。
而Vitalik Buterin认为当前主流区块链网络之因此慢,是由于每个节点(矿工)要处理全网的每一笔交易,这种低效率的方式必然会形成低下的性能。分片技术的构想是,一笔交易没必要发动全网都去处理,只要让网络中的一部分节点(矿工)处理就行了。因而,以太坊网络被划分红不少片,同一时间每一分片均可以处理不一样的交易,这样性能将直线提高。
有一点值得注意的是,区块链技术的重要思想是多中心化,全网都去见证(处理)同一交易,这才具备最高的公信力。而以太坊分片技术,则是牺牲掉必定的多中心化特性来达到高性能的目的。其余主打性能的公有链,好比EOS,本质上都是牺牲必定的多中心化特性。
这下你们明白以太坊分片技术是什么,秉持一种怎么样的逻辑了吧。关于分片技术具体的实现方案,其实截稿时Vitalik Buterin也尚未最终敲定,还处在构想与探讨中。不过度片并非什么新技术,实现并不难,主要是须要肯定一种最合理、最稳妥的方式。Vitalik Buterin在最新的推文中表示以太坊分片技术最重要的原则是“最大限度地接近与单一区块链相同的性质”。
=======================
Zilliqa的白皮书提出:“在以太坊现有的3万名矿工的网络规模中,Zilliqa交易速度有望达到以太坊交易速度的1000倍。”目前在测试链上,Zilliqa的交易速度达到了每秒2488次,拥有6个碎片模块,3600个节点。
Zilliqa是来自新加坡的底层公链项目,能够实现高吞吐量。该项目经过分片技术解决区块链扩展性低的问题,为用户提供平台使用权,用于支付、交易、处理或运行智能合同。
通常来讲,每一个节点和区块链网络都包含区块链的完整副本,分片的概念则涉及将区块链分割成多个以并行方式处理交易的较小部分,从而加快交易吞吐量和容量,下降交易成本。分片技术先于比特币,但一直未被证实在开放式无需受权网络中的可行性。
Zilliqa所采用的分片技术是将区块链工做进行拆解,先造成头部的Boss区块,以后在主链上造成多个依附于Boss区块的分片区块,Boss区块和分片区块各自拥有独立的矿工,能够独立地执行上链消息(交易)的记帐和共识指令。
事实上,以太坊也计划在将来引入分片技术。V神在其twitter里曾说:“分片即将到来。”他认为,分片将大幅度提升以太坊现有的限制,实现扩容。
相比以太坊以前提出的分片扩容方案的设计,Zilliqa加了一个最终区块回传信息的步骤,使得全部的节点也保存其余节点处理的信息。
====================
被看作公链将来的分片技术,究竟离咱们还有多远?_36氪
https://36kr.com/p/5139981.html
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公司。
根据专访内容,咱们以问答形式将内容整理以下:
1、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花费的通信成本。
2、分片技术的难点和落地状况
Odaily星球日报:你认为分片在实践过程当中可能有哪些须要解决的问题,或者难点?
贾瑶琪:分片技术原理听起来很简单,但在实际落地过程当中要注意如下几个关键问题:
一、对女巫攻击的防护。这个问题上边已经提到了,即便用PoW来预防,在这里我就不过多赘述。
二、建立分片、给分片分配节点和任务。如每一个节点如何选择它去哪个分片;过一段时间,整个网络确定也有旧节点要离开,新节点要加入,怎么实现这些新旧节点的动态交换;以及每一个分片里的节点处理交易,还要实现协议控制,这要如何作到高效等。每一个节点分配到哪固然不能由某特定我的或团体控制,由于若是这些人决定做恶,那么他们能够将全部恶意节点集中在一个分片中来损害网络的安全性。正如以前提到的,Zilliqa采用的是随机分片和动态洗牌的方式来保证网络的流动性及安全性。
三、分片大小。分片里的节点数量越少那么达成共识也会也越快,效率也会越高。但同时,若是分片中的节点数目过少,那么攻击者就会更容易控制它。且每过一段时间,若是一个分片里面的节点掉线或长时间联系不上,那么该分片里的总节点数就会进一步减小,那么安全性也得不到保证。正如方才提到,咱们经过论文证实当每一个分片的节点数量不低于600个时,安全性和效率可以获得较好平衡。
四、跨片交易。区块链领域的技术专家和工程师们广泛认为,由于跨片交易须要锁协议,所以其开销成本很高,当跨片交易数量上升时,会影响整个网络的吞吐量和经济效益。
咱们目前主要经过两方面来应对这个问题:一方面,在分片设计之初就尽可能避免跨片交易的产生;另外一方面,咱们在最开始的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生态。
3、国内区块链行业的三大问题
Odaily星球日报:你目前在市场上有比较看好和关注的公链吗?
贾瑶琪:市场上的项目各有亮点和特点,我我的更喜欢的仍是以太坊。
Odaily星球日报:若是不是这么成熟和主流的呢?多是一些创业团队作的。
贾瑶琪:对于项目标准,我我的比较看重创新性和严谨性。严谨性指的就是要有已发表的学术论文验证,在理论上能经过。若是没有严谨的论文来证实,系统最起码要有一千个节点以上的测试网络,代码也是公开的,这样才会比较有说服力。
Odaily星球日报:从总体行业上来讲,你认为目前国内外区块链领域,或说公链项目最大的问题是什么?
贾瑶琪:问题主要有三个:第一大问题是在保证去中心化和安全的状况下实现可扩展性和高吞吐量;第二大问题就是隐私问题;第三大问题就是技术人员尤为是开发者数量太少了。
在第一个问题上,目前业界不少项目都在单纯追求高tps,我认为这违背了区块链的初衷、本质和最大特性,那就是去中心化。一旦网络节点太少,那它就不算区块链了。所以,咱们追求的更应该是如何在保证去中心化和安全的前提下提升吞吐量。
==========================
zilliqa如何用分片技术把7笔/秒的区块链交易提高到2488笔/秒的?区块链大本营
https://mp.weixin.qq.com/s?__biz=MzU2MTE1NDk2Mg==&mid=2247485314&idx=1&sn=607b95ca6d9b9051f3a8d272423a26cd&chksm=fc7c597fcb0bd069c30b248486b9268c149b327a64cf5a34077f06b67b29dfd629622f04d1ea#%23
咱们是如何用分片技术把7笔/秒的区块链交易提高到2488笔/秒的?
原创: 贾瑶琪 区块链大本营 4月12日 Zilliqa技术总监、联合创始人
众所周知,吞吐量一直是区块链的一个痛点。比特币的底层设计仅支持每秒7笔交易,还不及传统支付工具Visa每秒8000笔交易的一个零头,更别说支付宝在去年双十一创造的每秒25.6万笔的记录。这严重制约了去中心化应用的发展。去年以太猫风靡全球,形成了以太坊的大堵塞,以致于人们戏称用是否形成区块链堵塞来评价去中心化应用的热度。
针对如何提升区块链的吞吐量,业界也在不断尝试。为改善比特币网络的吞吐量,去年比特币硬分叉出了比特币现金。
近期,Zilliqa技术总监、联合创始人贾瑶琪谈到了这一问题的解决方案。
贾瑶琪来自Zilliqa团队,以前在新加坡国立大学读博士,博士期间主要研究偏底层的网络协议,以及点对点协议的隐私保护,还有可扩展性问题。2017年,跟师兄还有导师一块儿建立了Zilliqa团队,主要就是用分片技术,来提升整个公有链的可扩展性,以及实现高吞吐量。
说到分片技术,里面包含不少种不一样的技术。好比以太坊的分片技术,还有Zilliqa的分片技术。
公有链的吞吐量问题
你们可能都了解比特币、以太坊,以及其余的公有链。区块链技术为你们提供了不少好的特性,好比去中心化、透明性、以及不可篡改性。但若是你们把区块链做为一个记帐或者账本系统,这其中有一个很大的问题,就是关于吞吐量的问题。
比特币每秒最多只能处理7笔的交易,若是用搭火车的例子来说,比特币就对应着手工检票,每秒只能检7我的。而传统的记账系统,例如信用卡、VISA或者MasterCard,他们平均的处理效率超过每秒8000笔交易,就相似于如今咱们高速公路上使用的ETC,或者检票中刷脸进站的系统,能够迅速地处理大量的交易。
低吞吐量的弊端
因而可知,目前公有链的低吞吐量会带来不少问题,例如你们都会见到的高手续费问题。在去年有一段时间,若是你在比特币上面进行一些交易,好比A转比特币给B,手续费可能就高达50美圆。另外一个方面,像以太坊去年作ICO,或者作这种代币募资,不少人为了抢资格,就会花费很高很高的手续费,来竞争去加入一个代币募集。
其实,虽然你设置了这么高的手续费,有时候也是抢不到这个资格的。高手续费会限制不少功能,从而致使咱们如今没有一个很好的杀手级的应用。你们可能都知道,去年在以太坊上面最火的两个应用,一个就是ICO,另外一个就是风靡全网的以太猫。但以太猫在以太坊上比较火的时候,占据了以太坊上超过30%的流量,致使整个以太坊有不少的拥塞。在那个时候,若是你想作一笔简单的转账,必须支付更高的手续费才能完成这笔交易。
所以,这个低吞吐量致使了目前尚未杀手级应用。咱们能够联想到在互联网初期,你们用的整个底层系统可能尚未搭好,同时网络费用又特别得高,咱们只能浏览一些简单的网页。但随着整个互联网系统生态的发展,你们慢慢也会看到一些很伟大的公司。例如像Google、Facebook、Twitter,以及国内的百度、阿里巴巴、腾讯,他们的崛起就是由于这个底层生态系统建好了。有了这样的高吞吐量,才使得更多的企业以及程序员参与进来,建立许多杀手级的应用。
公有链的可拓展性
那么如何来解决低吞吐量问题,咱们须要公有链有「可扩展性」,但可拓展性其实并不等同于高吞吐量。
不少场景下只须要高吞吐量,不须要可扩展性,因此你只须要一个很强大的服务器来提供一个很高的吞吐量。可是对于可扩展性,就要求你随着节点数的增长,你的吞吐量也得相应地增长(由于可扩展性更多地是指随着节点数目的增长,吞吐量或者性能也增长,因此不少时候你们实际上是要求的高吞吐量而不是可扩展性)。
已有的解决方案
目前来看,比特币处理交易的速度小于每秒10笔,以太坊小于每秒20笔,但传统的记账系统,例如信用卡,交易速度超过每秒8000笔交易。咱们如何去解决这个可扩展性,或者说低吞吐量的问题呢?目前有几种方案。
方案一,增长区块的大小。例如比特币,咱们如今一个区块的大小可能只有1MB的存储空间。若是要进行交易的话,只能把交易加到这1MB里面。若是你们也作比特币交易,可能都知道去年末的SegWit2x,将区块大小从1MB提升到2MB。可是出于对安全性和其余因素的考虑,最终Bitcoin Core取消了这个SegWit2x硬分叉。致使了当时大量的资金都投向了以太坊的ICO项目。
当你把区块大小从1MB升级到2MB,或者10MB,甚至1GB,但这个方案是否能达到提升100倍吞吐量的效果呢?不必定,由于你虽然能够把区块大小升级到1GB,但因为你的计算性能以及带宽的限制,致使整个网络不能正常运行。像比特币或以太坊,都是要经过工做量证实达成共识,工做量证实以后还要在整个网络进行广播,若是是1MB可能还好,若是1GB的话,要进行这个广播,基本上不可能在10分钟之内通知每个矿工。因此这里面有一个很大的限制。
方案二,链下交易。对应比特币的闪电网络(Lightning Network)和以太坊的Raiden Network。他们给出的解决方案大体是这样的,你提早支付一些以太坊或比特币做为押金,以后你能够在链下经过一些手段,来跟其余人进行交易。这就相似于你提早在链上存了一些押金,而后其余的终端用户能够在咖啡店里和你进行交易。交易结束后,你要把这个结算放在区块链上面,这样一个链下的方案。由于你链下处理这些交易的话,能够用一个十分强大的服务器来进行处理。这样就能够大幅度提高系统的吞吐量,能够作到每秒上万,甚至是几十万的交易量,相似于淘宝。
可是你们能够看到,这里有一些问题,就是你一旦用链下的话,虽然可以达到高吞吐量,可是交易失去了开放性、透明性的优点,至关于作了客户端服务器的一个终端。同时因为你用链下交易,就没有那么多节点去进行行为监督,那么也就少了去中心化的优点。
方案三,代理人共识协议解决方案。如何选出这些代理人,你能够用权益证实,也能够经过一些官方的验证。例如我有一个公司,这个公司有相应的资质,那么官方就会给我发一张牌照,我就能够做为一个代理人。
无论是7个代理人仍是21个代理人,甚至多是几十个代理人,你们会造成一个小团体。例如咱们如今这些人,均可以去作一个代理人。以后咱们去运行一些共识协议或者相似功能的协议,来达成一个共识,产生区块,而后再将这个区块广播给整个网络,从而达成整个网络的共识。这样作的好处就是,这个机制能够保证在一个很小的团体内部,很快就达成共识。这样作很简单,只要使用一些已有的共识协议,你就能够很快达成共识。
不过,代理人共识协议也会带来一些问题,咱们刚刚也有提到你们对于去中心化的担心。由于像比特币或以太坊都有成千上万的节点来作共识决策。代理人共识协议目前只有一个小团体的代理人来作共识,不免会被你们质疑你是否去中心化,以及你的安全性。由于这一小部分的节点可能都是一些利益团体选出来的,他们是否能表明绝大多数人的利益呢?这些都是有待考证的。
不过以上这三个解决方案都是很好的解决方案,你们若是从不一样维度,不一样场景出发,这几个方案都是有很大的用处。而今天我要跟你们分享一下,咱们Zilliqa是如何用另一种解决方案,咱们叫作分片技术,来实现这样一个高吞吐量的。咱们的方案跟前面的几个方案不在同一个维度,可是几种方案实际上是能够共生的。
一种新的解决方案
在讲分片技术前,你们能够先看看总体的结果和运行效果。这些数据都是在亚马逊的EC2上面测试获得的,经过搭测1800个节点、2400个节点以及3600个节点运行咱们的算法,获得了下面的数据。直观上看,随着节点数以及分片数的提高,咱们的测试数据,能够从每秒1218笔交易,达到每秒2488笔交易。
这样咱们能够得出一个结论,相对于比特币或以太坊咱们能够得到一个很高的吞吐量。另外一点也颇有意思,从图中咱们能够看到随着节点数目的增长,吞吐量也是在增长的,咱们真的实现了这种可扩展性。
讲了这么多,那么这个技术究竟是怎样的呢?
分片技术概览
网络分片,简而言之就是并行化的分而治之。例如咱们整个网络有1万个节点,咱们能够把1万节点,分红不一样的小组,每个小组,能够有很多于600个节点,这样来叫作一个划分。划分以后,咱们在每个分片里,处理不一样的交易。以后先在每一个分片里面达成共识,而后会有一个单独的分片将共识的结果进行汇总,广播给整个网络。
在这个系统的初始化阶段,咱们会将整个网络划分红不一样的分片,每一个分片很多于600个节点。过了一段时间,可能有一些新的节点想要加入,也可能有一些旧的节点由于自身网络的问题,或者系统的问题,想要离开。这种状况下,咱们该如何将这些新的节点加入网络,将那些旧的节点从网络中剔除。
每过一段时间,咱们都须要作一次工做量证实。工做量证实部分跟以太坊基本上是同样的,这要求你将上一个区块的哈希值、节点的IP地址和你的公钥一块儿进行哈希计算。你们都知道,哈希计算就是工做量证实,最终你要知足哈希值的阈值。对应的难度是相匹配的,例如哈希值的前100位都是0,若是你算出来的哈希值知足这个条件,就说明你完成了工做量证实。
以后你就能够产生这样的一个结果:咱们会得出你的ID,之因此要你的ID就是由于咱们会根据你ID的最后几位,来决定你应该被分到哪个分片上。这样的话,对于一个新的节点来讲,是没法经过本身的意志去加入某一个分片的,只能经过工做量证实,而工做量证实难度较高,所以能够避免出现新节点本身选择分片的状况。所以工做量证实的最后几位,就能够从数学上保证你的随机性是足够的。
若是一个节点想要加入咱们的系统,他加入的方法就是作工做量证实,而后被随机分配到一个分片里面。这样作的好处就是,咱们能够保证一些恶意节点不能直接加入到某一个分片,由于全部的节点都是被随机分配到不一样的分片里面的。
有了这些分片,每一个分片里面都有不少的节点,咱们要怎样进行交易处理呢?咱们在这里也作了一个交易分片,就是用来处理不一样的交易,不一样交易会被分到不一样的片里面。那么每笔交易是根据什么来分到不一样片里面?咱们作了一个简单的分片处理,就是根据发送者的地址分片。那样的话,若是A把钱发给B和C,那么这两个交易应该是在同一个分片里面处理的,这样保证没有双重支付问题。
若是A发给B和C,可是你把A发给C的交易分到另外一个分片里面,这个分片里面的节点,会很容易检测出来,而后把这笔交易拒绝掉。经过这种很简单的方式,咱们达到一个交易分片的效果。所以你在不一样分片里能够处理不一样的交易,以后能够在每一个分片里面,验证你的交易是不是正确的。验证过程很简单,例如A发给B了10块钱,分片会检查A的余额是不是足够的,若是A发给B了10块钱而后A又发给C了10块钱,那么分片就检查有没有双重支付的问题。
在每一个分片内,每一个节点都会进行这样的一个对交易的处理,以后经过运行一个协议达成共识,最终附上本身的签名,生成一个叫作MicroBlock的微小区块,提交给目录委员会,目录委员会会运行另外一个共识协议,从而造成了一个共识。最终生成一个区块,并向不一样的分片进行广播。
在这个过程当中,每个节点均可以收到最终的区块,这个区块的内容是很小的。同时,不一样区块之间也会进行交换数据,从而分享最终区块内的这些交易。整个系统有三层结构:
第一层,是哈希的哈希;
第二层,交易的哈希;
第三层,真正的交易内容。
经过这种三层结构来保证整个系统在每一步进行广播的时候,内容量都是相对比较小的。所以过了一段时间以后,你的不一样分片里面,你们均可以得到这一段时间以来交易处理以后的一个共同状态。
刚刚提到了,在每一个分片里面,咱们都会运行共识协议。那么咱们是如何来保证每一个分片里面,超过100个的节点可以颇有效并且安全地运行共识协议。这里咱们用到了在2000年以前学术界很出名的容错协议,叫作:实用拜占庭容错协议——PBFT。
这样一个容错协议能够保证在一个小范围内,例如几十个节点,或者上百个节点,你们同时运行这个协议,最终造成一个共识。共识就是A发给B了多少钱,C发给D了多少钱,你们有这样一个共识以后,就能够去完成刚刚提到的协议。
咱们还用了一个叫作「集体签名」,或「多重签名」的方案,从而减小拜占庭协议里对不一样节点签名的要求。由于若是有600或者800个节点,都对同一个信息进行签名的话,就会有600、800这么多的签名数据,这个数据是很大的。因此咱们用多重签名来减小集体签名数据量的大小。
最终经过结合PBFT和集体签名,咱们实现了所要求的安全、高效的共识协议。在共识协议部分,若是你们只是把它当作一个黑盒的话,其实咱们还有不少种选择的。
第一种,像比特币或者以太坊里面的共识协议,学术界把它叫作Nakamoto Consensus,用中文讲就是「中本聪协议」。可能有时候你们会把这个协议理解为只能作工做量证实,这种理解实际上是不完整的。比特币的共识协议其实分两部分:第一部分,你们都在作工做量证实,过了十分钟,会有一个成功得到结果的人,他会生成一个新的区块。
这样是不够达成一个共识的,由于你以后还要再继续作工做量证实,在后面,要生成超过6个的确认区块,才能保证你在第一个区块里面那些交易被整个网络接收。因此比特币的共识协议分两部分,第一部分是工做量证实,第二部分还要有超过6个确认区块,才能保证你的共识结果是有效的。
但问题是这样的共识协议消耗的时间是很大的,例如在比特币里面,一个共识中运行一轮工做量证实要花费10分钟,再加上6个确认的区块时间,超过1个小时。那么你总体算下来,有可能会超过一个半小时才能确认你的交易。这样就致使比特币的吞吐量低,同时时间消耗高。
咱们是否有其余选择呢?在学术界,只要使用PBFT或者相似的共识协议就能够相对高效地去实现多个节点之间的共识。举个例子,在一个房间里,A要给B发10块钱,A要给C发20块钱,B要给D发50块钱,那么咱们这个屋子要造成一个共识,最终有哪些交易要加入到区块链里面?可能初期的话,会有一个领导者把你们的建议都收集起来,而后再分发给每个人,说我如今收集到这么多交易,你们就跟随我把这些交易收集起来加入到区块链里面。这样每一个节点都会收到一个请求,对于节点该如何决策呢?我做为一个节点,我怎么肯定其余人也收到一样一个请求,或者一样一个区块呢?
那我就全网广播我收到的信息,广播给全部人,其余人也会广播给我。这样经过预准备,达到了初步共识的效果,即每一个人都肯定我收到这样一个区块,或者对应一系列的交易。最终再经过这样一个广播,来保证我知道超过三分之二的人也收到一样一个区块,或者一样一系列的交易信息。这样才能保证整个网络里面,你们都在同一个状态下面,每一个人都知道,全部人收到了一样一个区块,你们能够继续往下一步走了。
这个共识协议很高效,运行几十个节点达成一个共识,大概只须要几十秒的时间。同时也很节能,不用作工做量证实。你的电脑不用无时无刻都在作哈希运算才能得到最终性。咱们都知道,在下一个区块里面,这些交易是会被加进去的。
可是有一个问题,这中间有好多轮的广播。我收到交易以后,要广播给你们,你们也要广播给我,这样的话,信息的交换量是很大的,致使整个网络的拥塞程度是很高的。若是咱们只用一个简单的数字签名来作,好比你把你的信息发给我,其余人广播也把他们的信息发给我,同时附上他们的签名。这样的话,若是600我的用传统数字签名,可能就会产生600条数字签名信息。这会致使整个网络很是拥塞,网络会很慢。因此咱们以后就采用了多重签名技术。这个技术不算是新的密码学技术。好处就是能够把600个签名压缩成一个签名,你们能够想象,若是以前广播600个签名,如今换成一个签名,整个网络的拥塞程度会减轻不少。经过使用多重签名,整个网络的消息规模会减小,同时沟通成本会下降。
作一个简要的总结,就是每个分片首先收到了多条交易,接着会运行拜占庭容错协议,你们先达成一个共识,有哪些交易要被写到区块里面。以后由于要记录下来,咱们整个屋子N我的都赞成把N个交易写在区块链上,咱们就会采用多重签名,从而减小签名的大小,使得整个协议消耗比较小。
智能合约
当咱们知道了分片技术带来的好处,以及分片技术给整个系统带来的高吞吐量以后,至关于咱们有了一条高速跑道,还应该有一个相对安全,同时能够支撑高速性能的一辆跑车。因此咱们就要开发对应的智能合约。
对于已有的智能合约,你们若是做为开发者可能都知道以太坊上的Solidity,在过去的两年里,以太坊上面的智能合约遇到了不少的漏洞和攻击。例如两年前,其中的The DAO漏洞致使价值6000万美金的以太坊被盗,去年Parity多重签名钱包的漏洞,致使超过3亿美金的账户被冻结。
究其缘由的话,首先是由于智能合约是一个很年轻,同时也是很复杂的编程框架。不少程序员写的一些逻辑,复杂性是很难想象的。咱们知道编程时不少时候咱们都是随着逻辑写代码,可是问题是咱们写出来的代码,可能会有不少的不可预知性,好比那些边边角角的漏洞。还有就是目前的智能合约,没有一个形式化证实。在学术界如今有不少语言,它们都是支持形式化证实。形式化证实的意思很简单,就是我写出来了一系列的代码,我能够保证我写的代码就是我想要的逻辑,没有越出我想要的逻辑的框架。
基于这些缘由,咱们团队设计开发了一个基于自动机的智能合约语言,叫作SCILLA。
对于一个程序,例如开关灯的操做,你能够有不一样的状态,例如关闭、暗光、明亮,同时你也有不少行为来去触发使一个状态跳到另外一个状态。例如短按一下、按一秒、以及长按。若是你在关闭状态,简单地按一下,就会切换到暗光状态,再按一下,切换到明亮状态。在智能合约里面,你能够很清楚地把这些状态互相进行切换的行为定义清楚。
这样咱们就能够提供一个形式化的证实。同时对于程序员来讲,也能够很清晰地得出本身想要执行的逻辑。目前SCILLA是非图灵完备的。之因此我强调非图灵完备,是由于咱们发现像以太坊的Solidity,虽然是图灵完备的,但有时候是不须要的。你若是写以太坊智能合约,应该知道它的燃料限制,所以不少时候智能合约是不须要作无限循环的,同时燃料的限制也支持不了无限循环。虽然支持图灵完备,但更多的时候对于程序来讲,非图灵完备能够保证一个更加安全的逻辑执行,并且非图灵完备其实大多时候也能够实现不少你想要的功能。
上图是一个SCILLA提供的众筹智能合约。你们能够看到,相似于以太坊上智能合约的这些不可变参数,以及可变的状态。不一样于智能合约里面,咱们这里用的是一个状态转换来实现每一个人要贡献多少钱,以及退款是如何进行的。
下图是模拟的一个两年前的攻击,你们能够看到,智能公约要进行一个退款行为。最开始智能合约会检查发起人当时有没有给我打钱。若是给我打钱了,我在退款的时候就会按一样的数目退款给你,最终把智能合约针对投资人部分,设置为0。但问题是在攻击的时候,不是最终直接把这个状态设置为0,而是在最终设置为0。中间的部分,进行了一个跨智能合约的调用。结果是,若是智能合约碰到一个恶意的程序能够退回重来,再执行一遍这部分逻辑。这部分逻辑就会致使这个投资人的钱数,能够循环地进行增长。例如你运行一次代码,能够使得投资人的钱数增长一倍,反过来恶意的程序再运行回来,进行一个回调,又能够使得把投资人的钱数再增长一倍。这样无限地运行下去,致使他损失了超过6000万美圆。
那么咱们如何去作安全补救?很简单,若是程序员当心一点的话,能够去遵循这样一个模式。先去检查这个投资人是否当初投资了我,以后进行执行:若是你投资了我,我先把你这部分的数目在我这里设置为0(反正我后面要转账的),以后再进行交互。交互时把那部分钱转账给以前的投资人。
提及来很简单,但不少时候,做为程序员,咱们可能会忽略掉这些安全检查。在SCILLA这里,咱们能够用本身的编译器,作一个自动的检查。就是你若是在写相似代码的时候,必需要符合安全规范。就像刚才说的,先去检查,而后再去进行交互。若是你不遵循这个规范的话,咱们的编译器是不会经过的,或者会给你提供一些对应的提示。
去中心化应用的落地场景
将来的话,由于咱们有了这样一个相对高吞吐量的区块链平台系统,共享经济,例如OfO、Uber,这样的共享经济公司均可以将主要的业务逻辑放在区块链上,运用智能合约来处理不一样的用户请求。目前你们都是经过一个服务器来进行这种中心化交易,但以后若是用区块链进行去中心化的交易,就能够省去不少中间的费用,以及中间的一些可能比较灰色的花销。固然区块链也能够用做支付网络,支付网络目前的痛点就是手续费很高,可是若是能实现高吞吐量,你们能够用相对低廉的手续费去作一些支付。
另外一个方面,由于有了分片技术,咱们以后能够作一些分片的并行计算,即相似于MapReduce的一些计算。包括深度学习,在不一样分片里面,能够放不一样的神经元(neuron)来进行科学计算。咱们目前仍是在作更多的测试,以及其余功能例如智能合约的开发。在上个月,咱们已经放出了咱们的测试网络,以及数字钱包。
你们能够经过https://explorer.zilliqa.com,去访问Zilliqa的测试网络。目前咱们在其中加入了不少本身的交易,对这个网络进行压力测试。钱包的话,你能够经过https://wallet.zilliqa.com去访问,来生成本身的账户,以后咱们还会将一些测试代币放到你钱包里,你能够在咱们的测试网络中进行一些简单的测试,包括对交易的测试。
====================
分片技术(sharding)——区块链扩容问题的良方
https://www.8btc.com/article/179733
任何一个曾经开发过DApp的程序员都必须考虑到当前公共区块链的局限性,其中区块链局限性的最重要和最明显的问题就是有限的吞吐量,好比,每秒处理的交易量过少。为了运行一个可以处理实际吞吐量需求的DApp,区块链就必须具备可扩展性。
进行区块链扩容的一个答案就是分片技术(Sharding)。分片技术承诺经过改变网络验证的方式来增长吞吐量。分片技术独特于其余解决扩容的链上技术的关键特性,就是它能够进行水平扩容,也就是说,网络的吞吐量随着挖矿网络的扩展而增长。这种特殊的特性可能使它成为推进区块链技术被快速采用的理想技术。
本文将简要地讨论现有区块链平台的扩容问题,由于大多数读者都必需要熟悉这一问题。而后咱们将进一步讨论分片技术和它的不一样形式将如何成为一个有但愿解决扩容问题的方案。这篇文章还将涉及到实现分片技术的一些理论基础和其所面临的实际挑战,以及咱们如何能克服这些挑战。
现有区块链的扩容问题
公共区块链平台今天面临的最大问题之一就是可扩展性。全部主流的平台都在努力提升每秒的交易量。事实上,当今的公共以太坊网络和比特币网络平均每秒能够处理7-10笔交易。这一数字远低于像Visa这样的集中支付处理器,后者平均每秒能处理约8000笔交易。
缓慢的交易处理形成了一个主要问题,由于大量的未完成交易阻塞了网络,使得那些诸如实时支付这样的应用程序很难在区块链上一展身手。随着确认支付的时间拉长,最终就会给用户带来诸多不便;这也是为何像PayPal和Visa这样的信用卡支付方式仍然更具吸引力的主要缘由之一。随着更多更复杂的DApps开始依赖于相同的一个区块链网络,迟缓的交易速度所致使的问题只会变得更加复杂。
从技术角度来看,全部区块链的共识协议都有一个具备挑战性的限制:网络中的每个彻底参与的节点都必需要验证每一笔交易,而且这些节点必须和它的其余节点保持一致,这是区块链技术的组成部分,它经过建立分布式的帐原本保证区块链的安全。
在大多数像比特币和以太坊这样的区块链上,节点都是由公众进行运行的。虽然去中心化的共识机制提供了一些重要的优点,好比容错性、安全性、政治中立和真实性,可是这种验证链的方法是以下降可扩展性为代价的。当这些公共区块链变得更大时,它将须要愈来愈多的处理能力来验证这些公共区块链,这可能会在这些区块链的网络中形成瓶颈,从而减慢那些建立新应用程序的速度。
分片技术:分而治之
分片技术是一种基于数据库分片传统概念的扩容技术,它将数据库分割成多个碎片并将这些碎片放置在不一样的服务器上。在公共区块链的情境中,网络上的交易将被分红不一样的碎片,其由网络上的不一样节点组成。所以,每一个节点只需处理一小部分传入的交易,而且经过与网络上的其余节点并行处理就能完成大量的验证工做。将网络分割为碎片会使得更多的交易同时被处理和验证。所以,随着网络的增加,区块链处理愈来愈多的交易将成为可能。这种属性也称为水平扩容。
咱们能够想象一下,现有的区块链就像一条繁忙的高速公路,这条高速公路的收费站只有一个收费口。这种布局的结果将是致使交通堵塞,由于人们将排着长队等待经过这惟一的收费站。实现一个基于分片技术的区块链就像在高速公路上增长15或20个收费口。它将极大地提升汽车经过收费站的速度。所以,分片技术将带来巨大的差别,并显著提升区块链的交易速度。
基于分片技术的区块链的实现对公共区块链有着不一样的好处。首先,区块链上处理交易的速度变成了每秒上千笔甚至更多,这改变了人们对加密货币做为支付方式效率的见解。改善交易吞吐量将会给去中心化的系统带来使愈来愈多的用户和应用程序,而这将反过来促进区块链的进一步采用,也使挖矿变得更有利可图,同时也能吸引更多加入到公共网络上的节点,从而造成一个良性循环。
此外,分片技术能够帮助下降交易费用,由于验证单笔交易的处理量减小了;节点能够在依然盈利运营的同时收取较小的费用。在现实世界中,咱们将低费用与高交易处理能力结合起来,会使公共链将变得愈来愈有吸引力。这些积极的趋势所持续的时间越长,咱们就会越能看到更多的主流的加密技术和区块链应用程序的出现。
分片技术的策略
这部分主要讲的是相关的基本概念,可是咱们有更细分的方法来实现分片策略,如网络分片和交易分片,以及状态分片等。经过网络和交易分片,区块链节点的网络被分割成不一样的碎片,每一个碎片都能造成独立的处理过程并在不一样的交易子集上达成共识。经过这种方式,咱们能够并行处理相互之间未创建链接的交易子集,经过提升数量级显著提升交易的吞吐量。
另外一方面,在当今的主流公共区块链上,全部公共节点都承担着存储交易、智能合约和各类状态的负担,这可能使其在为了得到更大的存储空间而进行巨大的花费,以维持其在区块链上的正常运转。
为了解决这一问题,有一种可被称为状态分片的可行方法已被提出。这一技术的关键是将整个存储区分开,让不一样的碎片存储不一样的部分;所以,每一个节点只负责托管本身的分片数据,而不是存储完整的区块链状态。
分片技术的复杂性
尽管全部不一样形式的分片技术均可能很是直观,但经过对技术细节的解读,咱们能够看到这一方法的复杂性和潜在的挑战。分片技术的其中一些挑战是很容易克服的,而另外一些则否则。通常来讲,网络和交易分片更容易实现,而状态分片则要复杂得多。下面,对于不一样的分片机制,咱们会明确地讨论它们所面临的一些挑战,以及它们的可行性。
网络分片
分片的第一个也是最重要的挑战是建立碎片。开发者须要开发一种机制来肯定哪些节点能够按照安全的方式保留在哪些碎片中,这样就能避免那些控制大量特定碎片的人所发起的攻击 。
战胜攻击者的最佳方法(至少在大多数状况下)就是创建随机性。经过利用随机性,网络能够随机抽取节点造成碎片。这样一种随机抽样的方式能够防止恶意节点过分填充单个碎片。
可是,咱们如何创建随机性呢?最容易得到公共随机性的来源是区块,例如,交易的Merkle tree root。在区块中所提供的随机性是可被公开验证的,而且能够经过随机提取器中提取统一的随机比特。
然而,简单地使用随机机制将节点分配给碎片还是不够的。咱们还必需要确保网络的一个碎片中不一样成员意见的一致性。这能够经过像工做量证实这样的共识协议来实现。
交易分片
交易分片可听起来那么简单。考虑到在一个相似于比特币的系统中引入交易分片(没有智能合同),系统的状态是用UTXOs来进行定义的。咱们假设网络已经由碎片所组成,用户发送一笔交易,每一笔交易有两个输入和一个输出。那么,该笔交易将如何分配给一个碎片呢?
最直观的方法是根据交易哈希值的最后几位来决定碎片。例如,若是哈希值的最后一个比特是0的话,那么交易将被分配给第一个碎片,不然它被分配给第二个碎片(假设咱们只有两个碎片)。这容许咱们在单个碎片中验证交易。可是,若是用户是恶意的,他可能会建立另外一笔具备两个相同输入但不一样输出的交易——是的,就是一个双花交易。第二笔交易将有一个不一样的哈希值,所以,这两笔交易就可能造成不一样的碎片。而后,每一个碎片将分别验证接收到的交易,同时忽略在另外一个碎片中验证的双花交易。
为了防止双花问题,在验证过程当中,碎片将不得不进行相互通讯。事实上,因为双花交易可能会在任何碎片中出现,所以特定碎片所接收到的交易将不得不与其它的碎片进行通讯。而实际上,这种相互之间的通讯可能会破坏交易分片的整个目的。
另外一方面,当咱们有一个基于帐户的系统(没有智能合约)时,问题就简单得多了。每一笔交易将会有一个发送者的地址,而后系统能够根据发送者的地址分配一个碎片。这确保了两笔双花交易将在相同的碎片中获得验证,所以系统能够很容易地检测到双花交易,而不须要进行任何跨碎片的通讯。
状态分片
状态分片带来了新的挑战。事实上,状态分片是迄今为止最具挑战性的分片技术提案。
继续使用咱们的基于帐户的模型(咱们暂时不在咱们的例子中引入智能合约),在一个状态分片的区块链中,一个特定的碎片只会保留一部分状态。例如,若是咱们有两个碎片和两个用户账户,分别为Alice和Bob,那么每一个碎片将保留一个用户的余额。
假设Alice建立了一笔交易,她将支付Bob一笔钱。这笔交易将由第一个碎片进行处理,一旦该笔交易被验证,关于Bob的新余额的信息就必须与他所在的碎片进行共享。若是两个受欢迎的账户由不一样的碎片进行处理,那么这可能须要进行频繁的跨碎片通讯和状态交换。确保跨碎片通讯不会超过状态分片的性能收益仍然是一个值得公开的研究问题。
减小跨碎片通讯开销的一种可能方法,是限制用户进行跨碎片交易。以咱们上面的例子来讲,这就意味着系统不容许Alice直接与Bob进行交易。若是Alice必须与Bob交易的话,她将不得不在那块碎片中占有一个账户。虽然这确实消除了任何跨碎片通讯,但它可能会限制平台的可用性。
状态分片的第二个挑战是数据的可用性。咱们能够考虑这样一个场景,因为某种缘由,一些特定的碎片遭到了攻击而致使其脱机。因为碎片并无复制系统的所有状态,因此网络不能再验证那些依赖于脱机碎片的交易。所以,在这样的状况下区块链基本上是没法使用的。解决此问题的方法是维护存档或进行节点备份,这样就能帮助系统进行故障修复以及恢复那些不可用的数据。可是,这样就使得节点将不得不存储系统的整个状态,所以这还可能会引起一些中心化的风险。
咱们在任何分片机制(固然不是特定于状态分片)中须要考虑的另外一个要点是,确保碎片在抵御攻击和失败时是具备弹性的; 网络必须接受新的节点并以随机的方式将这些分配给不一样的碎片。换句话说,网络必须在一段时间内进行节点的从新分配。
然而,在状态分片的状况下,从新分配节点是很是棘手的。因为每一个碎片只保留了状态的一部分,因此在一次从新调整网络的过程当中,在同步完成前可能会出现致使使整个系统失效的问题。为了防止系统的中断,咱们必须对网络进行逐步调整,以确保每一个碎片在全部节点被清空前仍有足够多的旧节点。
相似地,一旦一个新节点加入了一个碎片中,系统就必须确保该节点有足够的时间与碎片状态进行同步;不然,传入节点将彻底拒绝每一笔交易。
结论
综上所述,分片技术是区块链的一个使人兴奋的技术,他让咱们看到了但愿,它能够在不影响去中心化和透明度的状况下解决扩容问题。然而,毫无疑问的是,分片技术,尤为是状态分片,在设计层面和实现层面都是很是困难的。
咱们应该当心的处理分片技术。此外,开发者们还须要作更多的研究来肯定状态分片的可行性,由于它可能不是解决存储问题的法宝。研究人员和开发者们正在积极寻找那些可替代的解决方案。也许,答案就在咱们眼前。
===================
TPS 是一种糟糕的评价标准
http://www.meirijinrong.com/wechatarticle-62830.html
在评估整个价值转移系统时,至少要考虑三个重要变量,而交易吞吐量只是其中之一:
交易吞吐量( tps)
通常交易特性(交易大小)
清结算保证
交易吞吐量和平均交易大小共同决定了系统的经济生产力,用于衡量系统在每一个单位时间的流转过的财务流量;清结算保证则告诉咱们该系统属于什么 类型 :包括你可否肯定不会遇到交易失败、诈欺?交易是否如现金交易同样及时结算?仍是像信用卡通常,有 90 天的退款期?
虽说比特币是虚拟的,但它更像是实体的清结算系统,而非如信用卡这类的推迟结算系统。比特币是一种虚拟的价值承载工具:若是你持有未花费输出(UTXO)的私钥,那么你就是这笔钱的全部者,而且有权对其进行任何操做;这种资产也不是某个实体的负债。从这个角度来看,比特币更像实体现金或是黄金。若是你弄丢了比特币或是发送到错误地址,这笔钱也没有讨回来的方法。固然,在某些状况下,系统能追讨回误操做的钱是件好事;而信贷费用之因此存在,正是为了处理这些反悔的交易或是诈欺行为。这些处理信贷诈欺和补救行为带来的成本,最终会以手续费的形式转嫁到终端用户身上,这也是为何一般咱们没法用信用卡支付少于 1 或 2 美圆交易的缘由。
那么,咱们该如何用一致的标准来比较不一样的价值转移系统,如比特币、 Paypal、Visa、SWIFT、和现金?我但愿大家能将注意力扩展到除了交易吞吐量以外的特性,由于这只是构成系统的经济生产力的其中一项因素而已。=======================