本文为万向区块链蜂巢学院第十三期,Parity亚洲区技术总监、区块链和信息安全技术专家贾瑶琪博士的演讲内容(整理自现场速记)。贾博士在演讲中介绍了Web3.0的定义和应用,并分享了实现Web3.0的技术和手段。web
此外,咱们也为对攻克和推进Web3.0、跨链/平行链等技术发展感兴趣的创业团队,提供了多种福利。2月12日,万向区块链实验室、新链空间、Parity、Web3.0基金会正式宣布联合推出“Web3.0 Bootcamp”。Web3.0 Bootcamp是一个以区块链创新为主的创业训练营和孵化营,旨在经过资源对接和技术支持,帮助优秀的区块链项目快速成长和发展。Web3.0 Bootcamp将在全球范围内挑选12支团队,进行为期6个月的扶持和帮助,团队招募现已启动,将于2020年3月15日截止。参加Web3.0 Bootcamp无需费用,点击 https://bootcamp.parity.io/zh-cn便可报名。算法
你们好!我是贾瑶琪,Parity亚洲区工程总监,主要负责技术研发和Substrate开发者生态建设。今天我将和你们分享区块链里难度比较大但颇有意思的两个话题,一个是可扩展性,另外一个是互操做性。今天讲的内容更偏技术一些,我会举一些例子帮助你们去理解里面的技术细节。编程
Web3.0是目前一个比较热门的概念,许多从事区块链行业的人也会认为本身开发的应用是面向Web3.0的。究竟什么是Web3.0呢?Web3.0有不少不一样的定义,上图采纳了其中的一个。Web1.0时代,网页是只读的,用户只能搜集信息,浏览信息。Web2.0时代是社交网络的时代,像脸书、推特、人人、新浪、微信,以及最新的快手、抖音等等。做为用户的咱们不只能够浏览,还能够本身建立内容并上传到网上。Web3.0更往前一步,除了能够发布内容,将来能够去作更多去中介化的事情。这样就不得不提到其中须要的一些方法,包括一些理念。浏览器
Web2.0时代数据被大公司控制,像谷歌、脸书以及亚马逊。当你使用他们的服务的时候,协议中写明能够免责使用你的数据。虽然谷歌早期的slogan是don’t do evil, 可是有时候却把本身的数据提供给第三方。在Web 3.0的时代,咱们不须要他们保证don’t do evil,而是经过代码使他们can’t do evil。安全
Web3.0时代,为了实现愿景,须要什么样的技术呢?区块链是一个基础。区块链能够提供的特性,一是不可篡改,二是公开透明,三是点对点的网络。服务器
再具体到一些细节如Web3.0技术栈,简单的能够划分为这几层,最上层是客户端,好比去中心化的浏览器。在这之下包含了一些协议支持的开发工具,对应API和特定编程语言。脸书的Libra有本身的编程语言Move,以太坊也有本身的编程语言Solidity。再下一层是Layer2的协议,好比说Governance、State channels等。一个区块链应用不能随意获取互联网上的信息,好比说想看天气预报,区块链不能直接提供这样的数据,这里咱们就须要Layer2协议栈中预言机协议,经过协议自己预言机机制获取互联网上的信息放在区块链上。Layer1协议,就是广为人知的区块链底层协议,比特币、以太坊等各类各样的公链,联盟链都采用了相似的底层协议,它提供了支撑整个Web3.0愿景的基础。再往下是网络层,如P2P网络传输。微信
有了这样的技术栈,才使得web3.0之路变得更加现实。在众多的Layer1协议中,Polkadot的跨链协议拥有不少优点,好比共享安全、互操做性等。Polkadot自己是基于Parity开源的Substrate开发的。Substrate做为一个通用的区块链开发框架,既能够用来开发Layer1协议如跨链操做,也能够用来实现Layer2协议如预言机。网络
基于以上介绍的技术栈实现的早期应用有哪些呢?上图列出了一些典型的的Web3.0应用。除了你们熟悉的公链系统外,还有一些网络协议层的项目,更多的位于应用层,例如去中心的金融服务如借贷。但对于非区块链领域的用户,有没有真正的主流应用呢?目前其实没有。是什么致使如今没有主流的应用呢?在这里举几个例子进行解释。数据结构
案例一,以过小怪兽。这是一两年前在以太坊上特别流行的游戏应用。它的方法跟电子怪兽同样,你去购买这样一个怪兽去跟其它的怪兽进行打斗,若是赢的话能够升级。游戏在初期很火爆,可是后来发现这个游戏太花钱了。若是把一个小怪兽升到四级要花15美金的交易费,一直支撑他打怪兽或者进行训练。架构
案例二,以太猫。一两年前比较火爆,你们能够购买各类各样的加密猫,两个加密猫能够再生成一个新的加密猫。最火爆的时候,有的加密猫价值十万美金。可是也有问题。玩儿的人越多,手续费增长越高,由于以太坊的吞吐量只有这么多,若是你们想玩,须要用更高的手续费买到这样一个加密猫,同时出生费也相应增长。如今加密猫应用已经淡出人们的视线。
总结出来的一个结论是,目前对于区块链行业,因为低吞吐量带来的高手续费,给开发DApp带来不少功能限制。
不管是学术界仍是产业界都致力于解决区块链低吞吐量的问题。其中一个方法是增长区块大小。若是把区块大小增长,吞吐量会有一个提高。可是因为带宽限制,这不是个提高吞吐量的高效(100倍)解决方案。
方案二,经过链下交易。链下处理全部交易,将结算部分上链。由于可使用中心化的服务器处理交易,那么能够轻松实现每秒上千/万笔交易。经过这样的方式能够有效提升吞吐量。可是也有劣势,由于不是全部交易都在链上完成,那么中心化的服务器自己会不会进行一些做弊?透明度是个问题。
方案三,咱们再也不采用链式的数据结构,而是采用图结构,不一样的节点能够生产不一样的区块进行广播。当一个节点想打包区块的时候,能够基于过去的区块,创建一个有向无环图,再打包分发给其它节点。好处是能够包含多种交易,同时提升吞吐量。在图结构里面可能不少交易是有冲突的,对于最终要执行的智能合约是有分歧的,这就是图结构所遇到的难题。
方案四,代理人机制。参与共识协议的节点越少,跑起来越快,吞吐量越高。只有少许的超级节点参与共识协议能够达到一个高吞吐量,可是容易被你们垢病的是少许的代理节点可否表明整个社区。若是节点越少,这些节点不太喜欢某一些交易或者某一些应用,其实能够拒绝这个应用提交的交易。这就回到了中心化的弊端。
还有,就是分片以及多链。这个解决方案表明了一个趋势,在不损失不少去中心化特性的同时,能够达到比较好的吞吐量。你们看到最新的以太坊2.0和新的分片项目,还有一些跨链项目,你们会发现这中间的区别已经变得很模糊,不少时候能够把一个分片当作一个同构的链。在处理多链跨链交易的原子性协议和分片协议里面提到的原子性协议区别不大,有的采用一样的技术。只不过多链技术以及分片技术,有的时候会有一个中继链或者中继分片来协调不一样的分片或者不一样的链。可是归根到底,技术自己其实有不少类似的地方,这里统一块儿来进行讲解。
分片就是将交易分而治之,从而提升吞吐量。举个例子,有一千道问题,同时有一百我的解决问题。如今能够分组,一百我的分红十个小组,将一千道问题分给十个小组,每一个小组十我的处理一百道问题,根据绝大多数人的答案造成一个共识,那么咱们其实能够保证每一个小组正确的解决一百道问题,这样整个解决时间就从一千减少到一百。将来若是有更多的听众,例如一千个,咱们能够把一千人分红一百个小组,一百小组解决一千个问题,一个小组只解决十个问题,最终只用解决十个问题的时间把一千个问题都解决了。然而可能会出现一些攻击情形,假如若是有十个攻击者,他们合谋分到第一个小组,达成共识的时候不遵循一些原则,例如把一分钱掰成一万块人民币来进行双花攻击。若是攻击者能控制一个分片,产生的攻击在一些协议里面其它分片是不能进行阻止的。
如何避免这样的攻击呢?
首先,要设立很高的门槛,让攻击者不容易加入到网络中,防止女巫攻击。一个方法就是工做量证实,须要使用特定的矿机作足够时间的计算,才能做为节点提交区块。第二个方法,权益证实。
一旦有了一百个听众(或节点),进行随机分组能够保证听众分到不一样的小组。咱们须要根据一个什么样的随机数进行分组呢?一种方法是用上一个工做量证实的结果做为随机数将你们分到不一样的小组。另一个方法,在权益证实中,使用随机数生成协议(如VRF),让你们分到不一样的分片里面。
若是已经有了比较合理的分组,且每一个分组能保证正常节点占绝大多数,那么以后就是如何将上面提到的一千个问题分给不一样组。为了保证不一样的分片或者整个系统的数据一致性及有效性,咱们须要一个方法来防止同一个交易被不一样分片处理屡次或者同一个数据被改变屡次。经常使用解决方案是用两段式提交协议保证数据一致性。
刚刚讲到网络分片,节点能够安全的分到不一样的分片或者链里面,以后的交易也能够分到不一样的分片里,而后来进行交易处理,同时保证数据的有效性及一致性。若是作状态分片例如ETH2.0,每一个分片有本身的数据存储,不一样的分片存储不一样的数据,这样会有单个分片数据丢失的风险。
比较直观的解决方法,首先就是经过一些权益奖励,鼓励节点长期在线,并且要作大量交易验证和共识协议来保证不会受到惩罚。若是长期掉线会被移出分片,并且抵押的权益会被系统拿走。当咱们有了健壮的分片系统,那么咱们能够整合多个分片或者链的吞吐量,从而极大地提高整个系统的吞吐量。
有了分片和多链的方法以后,咱们更多想的是对于单链有哪些方法能够进一步提升它的吞吐量呢?更快的解决方法就是经过更改共识协议。目前比特币或者以太坊使用中本聪共识协议,节点经过工做量证实,每过一段时间生成一个区块,并将区块广播给其它节点,其它节点看到这个区块的时候,会选择拥有最长链的区块来进行确认。中本聪共识协议的优势是去中心化和异步。即便有上万个节点在网络里面,并且有不一样的网络延迟,中本聪共识协议仍是能够很好的在全网达成共识。固然缺点就是吞吐量过低。
拜占廷共识协议(BFT),是学术界产业界经常使用的共识协议。简单来说,好比如今我要去买一张票,我要保证现场一百我的中的绝大多数都知道我要买票,你们都赞成我买票。个人作法是广播给全部人,我要去买票的信息。其余人收到这样一个消息以后,赞成这个信息,再把这个信息广播出去。当每一个人收到2/3节点的确认信息以后,再广播一个本身收到绝大都数人确认的确认信息。当每一个人收到2/3节点的最终确认信息以后,就肯定了全网已经赞成并确认买票的这个消息。
拜占庭共识协议的优点是速度快,若是去实现这样一个BFT控制协议很容易达到超过1000TPS,并且有绝对的最终性,一旦协议跑完,交易立刻能够确认最终性。
缺点是传统拜占庭共识协议只能用于不到一百个节点,超过一百个节点,信息交换量太过庞大使得网络拥塞不能提高吞吐量。与此同时,它不是彻底异步的。每一个阶段都有一个等待时间,例如中间能够等十秒,若是没到就进行下一个阶段。若是长时间协议没有向前推动,就会进行视图转换,切换指挥者从新运行协议。
Polkadot整合和改进了中本聪共识协议和拜占庭共识协议。它采用了一个混合式的算法, GRANDPA协议和BABE协议。BABE协议是负责区块生成,GRANDPA协议是提供最终性的。BABE协议和传统的比特币、以太坊的协议同样。每过几秒钟选择一个节点进行出块,节点出块之后,进行一个广播,再过几秒选第二个节点进行一个出块,不一样的节点也是根据最长链原则选择区块进行确认。
GRANDPA算法,它是根据BFT进行改进的版本,是非异步的共识协议。BABE协议生成的区块,GRANDPA协议最终会作一个敲定。BABE协议生成不一样长度的链,GRANDPA协议会选择这里面包含最多投票的有效链进行确认。以往的区块链里面,若是进行共识协议,一般是一个块一个块进行敲定,可是Polkadot是根据不一样的链进行敲定。好比每过一段时间,生成十个区块或者二十个区块,那么运行GRANDPA协议,将二十个区块直接一次性的确认。这样GRANDPA能够在有限的时间里确认更多的区块。
经过以上讲解,咱们能够看到想要吞吐量高的区块链解决方案,同时拥有比较好的去中心化特性,最好的方法就是选择高吞吐量的单链解决方案加上安全高效的分片或者跨链解决方案。
除了从可扩展性的角度出发,咱们也须要从实际角度出发思考,为何须要互操做性,或者为何须要跨链。传统来说,区块链能够解决信任的问题,若是可拓展性能够被解决,那么性能的问题也将被解决。互操做性实际上是在上面两个问题被解决的状况下,能够解决更普遍的信任问题。
目前不一样的应用场景有不一样的联盟链和公有链。有了这些链以后,咱们须要用互通性才能将有用的数据沟通起来。这里会涉及到跨链或者互操做性的不一样方法。将来会看到一个界限极其模糊的区块链系统,就是私有链、联盟链、公链经过某种方式来进行互联。
区块链领域的互操做性,为何在传统的互联网应用里不明确提这样的要求呢?由于如今的互联网基础设施已经把这些功能都提供好了,例如各类各样的SDK和API。你若是作一个应用想调用微信上面的数据,那么能够经过微信上面的SDK和接口把数据拿下来。若是想作支付,支付宝也有对应的支付通道,写代码的时候能够把API调用一下就能够作支付了。目前在区块链上没法作到的缘由,是因为各类区块链不一样的共识协和区块结构致使了咱们的数据目前仍是属于孤岛状态。为了让不一样的孤岛上面的数据进行沟通,咱们必须经过互操做性以及跨链的系统将不一样的区块链连通起来。
互操做性以及跨链协议有哪些具体的方式呢?第一种方式就是公证人模式,不一样链之间有一个公证人。相对比较去中心化的第二种方式就是侧链模式。经过侧链的方式,在链B上面能够验证链A上哪些交易被写到区块里,那么链B就能够验证A上面的操做并在B上面进行对应操做例如转帐。第三种方式是哈希时间锁,这是相对一个比较复杂的协议,它是一个集去中心化以及透明交易的资产转换为一体的跨链操做。简单来说,若是我作比特币兑换以太坊的交易,我在比特币这边放一个锁,同时对方也要在以太坊放一个锁。我把密钥给他,一样的密钥我能够得到对应的以太坊,同时他能够根据密钥得到对应的比特币。还有一个时间锁,保证双方只能在限定时间内去解锁以太坊和比特币,不然协议会自动终止,双方都没有得到对方的资产。
刚刚提到的方法都是很好的数字资产跨链的解决方案,不管是从效率仍是去中心化的角度。若是想作到数据以及逻辑层面上的跨链,咱们就须要更复杂的系统,例如多链系统里面的中继链。具体到Polkadot上,系统使用中继链来协调不一样平行链的跨链操做。根据不一样的商业环境,开发者可使用Substrate开发和搭建不一样的平行链。中继链的验证节点用于验证平行链区块的正确性从而保证每条平行链具备相同的的安全性,与此同时协调不一样平行链之间的通讯。一些已有的区块链,例如以太坊、比特币,暂时没有基于Substrate的平行链版本。目前的方法是使用桥,将它们桥接到平行链当中,再经过中继链与其它链进行沟通。
在这样的框架结构中,最中心的是中继链,它链接不一样的平行链。刚刚提到桥接链,桥接链不是直接连到中继链上,而是经过一个桥,先链接到平行链,以后经过中继链跟其它链进行通讯。
每一个平行链都有中继链的轻节点,用来接收和验证中继链的消息。同时平行链有本身的校对节点称为collator。校对节点搜集对应平行链上的数据,将这些数据传递给中继链。中继链会分派不一样的验证节点,去验证平行链上的区块是不是正确的,是否有双花的攻击,若是一些区块有问题,中继链会根据协议没收对应平行链插槽,或者对一些节点进行惩罚。
上图来自Polkadot的白皮书,将不一样的角色都包含在里面,包括不一样的平行链以及平行链里面是怎么运做的,如处理交易、广播交易以及最终交易写成区块,区块最后要写入到中继链里面等。
若是中继链想要支撑成千上万个平行链,那么咱们如何实现更高的横向扩展呢?方法就是将二级中继链做为一个平行连接入到中继链里面,构建出一个更加分散的链接中继链的跨链平台。
目前Parity正在开发三个相当重要的功能。第一个是Cumulus。平行链须要一个链接器链接到中继链,这个链接器就是Cumulus。如今用Substrate开发出来的代码,将来只须要不多的改动,就可使用Cumulus链接到中继链,前提是拿到对应的插槽。
第二个是XCMP跨链信息交互协议,不一样的平行链若是想调用或者发送消息给其它的平行链,就须要经过这样一个协议去传输。
第三个是SPREE。讲到跨链,你们一般默认是资产跨链,资产A放在链B上面,作好一点能够作成去中心化的。再好一点就是如今提到的不一样的链能够经过中继链或者其它的方法将信息发送过去,对方链能够执行对应的交易,或者智能合约。但前提是,不一样的平行链他们是相对比较同态的架构。同构就是不一样的平行链执行处理交易的逻辑是大体同样的。链A是用EVM处理智能合约,链B也是用EVM处理交易,那么链A发送交易给链B,链B是能够处理的。若是链A是EVM,链B是WASM,那么链B收到A的交易也不知道怎么处理。SPREE能够支持跨链执行代码的交互。就是链A将本身的执行逻辑进行打包,打包之后生成一个可执行的runtime经过一些渠道发送给链B,链B收到后能够去执行链A的交易。即便链A和B的处理交易的方式不一样,由于B收到了A的代码和数据,那么B就能够处理A上的交易了。这三个功能都在紧锣密鼓的进行研发。以后有了这三个协议,咱们进行任何的跨链交易和数据的处理操做。
在过去两年间,Substrate已经有超过20万行代码,还有不少的社区贡献者。在第一季度Substrate会从1.0升级到2.0版本,会有更好的性能以及更稳定的组件。同时,目前已经有超过80个团队基于Substrate/Polkadot进行开发。欢迎你们共同在Substrate/Polkadot上构建有意思的联盟链和平行链。
今天的分享就到这里,谢谢你们!