新加坡国立大学贾瑶琪博士:分片技术是即将到来的扩容良方 | 星球日报 P.O.D大会

Odaily星球日报·2018-09-10 10:48
"当前提高公链吞吐量以及可扩展性的解决方案如增加区块大小、代理人共识机制、链下解决方案等,都不是一个完美的解决方案。"

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

区块链这三个字近年经历了几番跌宕,从前沿的技术概念、风口上的热词,到被过度消费的符号。很多人相信,区块链是解决许多行业痛点的工具,有潜力成为下一个世代“超级商业载体”诞生的催化剂。

然而,传说中的史诗级变革还未来临,它就已被置于聚光灯之下。有心者从中渔利,趋利者盲目买单。而过早陷入舆论漩涡,对成长期的技术是伤害,也是试炼。  

今天的实际情况是,落地应用寥寥无几,技术和产业连接尚有距离,投机者的噪音盖过了真正关注技术与行业的“中坚声音”。Odaily星球日报联合顶级新商业媒体36Kr、顶尖技术领袖和学界菁英,共同探讨如何拥抱监管,推动行业去粗取精,将流量与话语权交给认真做事的人,用实力让区块链落地。

在区块链的发展中,去中心化、安全、性能的不可能三角是被探讨最多的议题,如何在保障前两者的情况下,提升区块链的性能,使其具备商用可能?9 月 5 日,在由 Odaily星球日报主办、36Kr 集团战略协办的 P.O.D 大会上, Zilliqa 联合创始人兼技术总监、新加坡国立大学的贾瑶琪博士在会场演讲中给出他的答案。

贾瑶琪表示,当前提高公链吞吐量以及可扩展性的解决方案如增加区块大小、代理人共识机制、链下解决方案等,都不是一个完美的解决方案。首先,受计算机存储容量以及计算能力的限制,导致区块大小不可能提高至 100 倍;另外,代理人共识机制虽提高了交易速度,但相对小的共识团体也意味着更容易受到攻击,以及中心化色彩浓厚;而链下解决方案与侧链则一定程度上丧失了区块链本身去中心化,以及公开透明的特性。

对此,分片技术通过把整个网络进行一个切割,切成不同的小组,进行不同的交易,使得整个网络在不同的分片里面处理不同的交易成为可能,最终达到共同计算以及共同解决交易的效果,从而达到一个很高的吞吐量。

作为一项新兴技术,分片技术同样存在痛点与挑战。针对女巫攻击(恶意攻击者创建不同的恶意节点,可能被分配到不同分片里面,促成更多恶意交易的行为)。贾瑶琪提出,可以使用工作量证明让节点确定身份,同时每隔一段时间进行网络洗牌将节点随机地分配到不同的分片,当每个分片节点数不少于 600 个时,每个分片三分之一节点是恶意的概率为百万分之一以下。另外针对不同分片并行计算导致的双花攻击风险,贾瑶琪称其团队已研发出新的智能合约分片机制,通过确定性分配,保证不同智能合约可以在多个分片里面同时进行运算。

最后贾瑶琪表示,当前分片技术已经稳步的进入到公链的开发当中,“在今年年底,或者明年年初当 Zilliq 主网上线时,大家应该可以看到,分片技术真正带来的对吞吐量公有链提升这样一个极大的改善。”    

以下为贾瑶琪演讲实录:

非常感谢 Mandy 和 Odaily星球日报邀请,今天我来为大家介绍一下,Zilliqa 在过去的三年中,针对区块链特别是公有链扩容的一些方法的研究,特别是作为区块链分片技术的一个先行研究团队,在这方面的一些最新进展。

大家对于区块链以及公有链的了解,可能更多的是通过它已有的一些特性,例如它的去中心化,不可篡改性,以及它的公开透明性。与此同时,区块链特别是公有链,它本身也有一些瓶颈,例如像现在大家知道的低吞吐量。在这里用通勤列车来作一个举例以及类比。例如,像已有的公有链它可以实现每秒 10-20 个交易,这就是类似于一个通勤列车,每一列只能容纳 10 个人,其他人都要进行排队。

而对比传统的支付系统,例如各种各样的信用卡,它们可以达到 8000tps,就是每一班列车可以容纳 8000 个人,这样排队的人就会变得很少。目前的公有链系统,它的低吞吐量导致的一些问题就是,交通拥塞。例如我们现在有上百个人,上百万个人想去乘这样一个列车,然而每一趟列车只能容纳十个人,能做的有哪些呢?首先把票价提升,例如从最初的 10 块钱,现在我们提高到 1000 块钱,竞价最高的 10 个人,他们就可以搭上最新的这样一趟列车。

与此同时,对于通勤列车系统来说,这样会造成一个很大的拥塞。即使每辆列车可以容纳 10 个人,但是后面排队的还有成千上万个人,最终它的吞吐量还是会造成这样一个很大的问题。我们目前可以看到,有很多项目以及团队,大家都在探索怎样才可以达到一个高吞吐量,以及可扩展性这样一个公有链平台。

目前已有的一些解决方案中,首先就是增加区块大小。已有这些比较流行的区块链,它们中有的区块是 2MB。如果简单把区块大小提升两倍甚至十倍,对应的吞吐量可以相应的提高两到十倍。然而这个系统更像我们搭的一个巴士,你可以把它做成一个双层的,甚至上面可以摞十层,但是由于各种限高限制,你是不可以把一个巴士上面搭 100 层的。

这样类比到区块链里面,因为目前网络有带宽限制,包括每台计算机有存储容量,以及它的计算能力的限制,导致增加区块大小,不是一个 100 倍的解决方案。

与此同时,一些团队和学者提出了代理人共识机制。目前已有的公有链有一万或者两万个节点来运行整个系统的共识协议,处理交易和产生新的区块。那么我们是否可以将两万人的这样一个节点减少到例如一千,甚至 50,或者 21 个人来进行投票形成共识呢?答案是可以的,我们可以把这样一个共识协议,缩小到只有 50 个人处理交易达成共识,生成区块。

从计算机技术角度来看,运行共识协议的节点数目越少,形成共识的速度就会越快。当拥有一个比较小的节点群体的时候,出块速度以及共识协议的速度,可以达到每秒成千上万个交易。然而更多的时候我们是通过资本的数目挑选一个代理人组织,这样就会导致选出来的小团体,很可能不是代表广大公众的利益。与此同时,由于代理人组织目标相对小,更加容易受到攻击,而且一旦部分代理人受到攻击,整个区块链系统都会受到影响。

还有一种比较流行的扩容方案就是侧链和链下解决方案。目前使用链下交易最多的场景就是小额交易。比如买咖啡,用户可以在直接链上押押金,之后在咖啡店每个月买几十次咖啡,咖啡店店主每个月进行一次链上结算,这样大量的交易可以在链下完成,减少将交易放在链上的需求,从而减少对链本身的依赖。然而这样一个解决方案也失去了公有链本身的去中心化,以及公开透明性。

与此同时,今年早些时候,Vitalik 在他推特上发布了一篇帖子,分片即将到来。作为最早对分片技术进行研究的这样一个团队,我们团队 2015 年开始进行分片研究,2016 年在计算机安全顶级会议 CCS 上面发表了相关的论文,这也是学术界第一篇将分片技术用在公有链吞吐量提升的学术文章。

大家可以看到,这个是我们团队初步做的一些实验。在 3600 节点时,我们的系统可以实现超过两千个交易每秒。分片技术其实用简单话来说,就是把整个网络进行一个分割,例如整个网络有一万节点,我们可以分成不同的小组,每个小组处理不同的交易。整个网络在不同的分片里面处理不同的交易,最终达到并行处理交易的效果,从而实现一个很高的吞吐量。

分片技术也面临许多挑战以及问题,例如如何保证很好的安全性,还有不妥协去中心化的特性,以及高效地执行智能合约。

接下来我简单为大家分享一下我们如何解决这些挑战和问题的。第一个挑战就是如何将不同的节点划分到不同的分片里面。这里面有很多学问,一个恶意攻击者可以创建不同的恶意节点,放到同一个分片里面,从而促成更多的恶意交易。

我们怎样解决这样一个问题呢?首先我刚刚提到这样一个攻击,在学术上面叫做女巫攻击,就是攻击者可以创造大量这样一些恶意节点,从而去攻占你的网络。为防止这样女巫攻击,我们的系统要求每个节点都要做工作量证明。每个节点每隔一段时间,比如两个小时,就要进行工作量证明,来声明自己的有效身份。之后,系统会将节点随机分布到不同的分片,每个分片超过 600 个节点。通过计算,我们可以证明出,每个分片三分之一节点是恶意的概率为百万分之一。

当系统处理好安全分片之后,如何将不同的交易放在不同的分片里面是下一个问题。比如 Alice 是一个攻击者,他可以创建两个交易到不同的分片,一个交易是转账 5 块钱给 Bob,另一个交易是把这 5 块钱转给自己。两个分片处理不同的交易,但是 Alice 将自己的 5 块钱花了两次,这就是我们所说的经典双花攻击。

对于刚刚提到的双花攻击,我们可以通过将不同的转账交易按照发送者的地址分片来防止攻击的产生。然而目前公有链上面存在着大量的智能合约交易,这些交易给分片带来了更多的挑战。还是刚刚的例子,Alice 和 Bob,他们都使用一个卖电影票的智能合约,Alice 在一个分片里面从这个智能合约里面买最后一张电影票,Bob 也在另一个分片里面买到了最后一张电影票。最终他们都使用自己的余额购买到这个电影票,但是因为不同分片之间没有沟通,所以最后一张电影票到底属于 Alice 还是 Bob 呢?这是一个数据不一致性导致的很严重的问题。

对于普通的转账交易,只有发送者会导致发送者和接受者的状态改变。然而在智能合约里面,不同的发送者都可以导致智能合约状态的改变,同时,智能合约也可以导致不同用户的状态改变。

为解决智能合约分片的状态不一致性问题,我们可以使用两阶段提交协议,锁住在不同分片里面相关的智能合约的状态。Alice、Bob 在不同分片里面买最后一张电影票,我们可以让 Alice 的交易先运行同时锁住 Bob 所在分片的智能合约的状态。然而锁协议会导致智能合约不能在多个分片里面同时运行。为了解决这样的一个并行运算的问题,我们团队研发出了另一种方法,就是通过确定性分配,来解决刚刚提到的智能合约冲突问题。

我们首先通过研究大量的智能合约,然后对这些智能合约的交易进行分类:

    1、普通的转账交易。

    2、简单的调用智能合约。

    3、比较复杂,用户可以调用智能合约,智能合约再次调用智能合约。

之后我们将这三类交易分配到不同的分片。对于普通的转账交易,我们可以直接根据发送者的地址确定它是属于哪个分片进行处理的。第二类的话,可以根据发送者以及智能合约的地址来决定它是属于哪个分片。第三类以及第二类的特殊交易我们就交给特殊分片进行处理。经过理论分析验证之后,我们可以很好的通过我们的算法将这三类交易放在不同的分片里面进行并行处理,同时防止双花攻击和刚刚提到的数据不一致性问题。

在解决智能合约分片的问题的同事,我们也发现智能合约本身也有很多问题。例如前两年大家看到的智能合约由于各种漏洞,款项被冻结。究其原因,是因为智能合约本身它比较复杂,以及有比较多的不可预知性。我们团队根据自己已有的研究,开发了自己的智能合约语言 Scilla,可以提供更好的安全性和便于形式化验证。目前已经有一些比较大的广告公司和软件公司已经跟我们合作使用 Scilla 进行智能合约开发。

在今年年底,或者明年年初 Zilliqa 主网上线时大家应该可以看到,分片技术对公有链吞吐量带来极大的改善。

这些就是我的分享,谢谢大家!

+1
0

好文章,需要你的鼓励

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

下一篇

去年年底,超过83%的留学生已经返回中国,大多数是在2012年起的五年内回国的。

2018-09-10

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

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

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

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