编者按:本文来自巴比特,作者:海伦,星球日报经授权发布。2019年6月29日,由CSDN、灵钛科技联合主办的“2019以太坊技术及应用大会”在北京召开。作为国内极具影响力的以太坊技术大会,本届会议围绕以太坊生态全景、以太坊未来发展、以太坊开发实战、优质项目案例等多方面内容,并邀请了以太坊创始人VitalikButerin、核心技术开发者Hsiao-WeiWang、海内外知名项目负责人、行业领军人物及以太坊生态精英专家,共同探讨以太坊生态新进展,分享最新的以太坊开发经验。以太坊创始人VitalikButerin在热烈的掌声中,发表了本次大会的第一个演讲,主题为《以太坊2.0之跨分片交易》。Vitalik向开发者详细介绍了以太坊2.0的构想及推进情况,并且针对开发者所关心的「以太坊性能」话题,向开发者介绍了跨分片交易的原理,并对开发者常见的疑问进行了解答。
现在的链,所有节点下载和验证所有交易,这样虽然很安全,但严重限制了扩展性。因此我们想改善这个情况,未来区块链是分片的,这意味着每个节点只下载和验证一部分的交易。
比如在以太坊上2.0的设计中,有1024个分片,所以每个节点只需验证1/1024的交易,这个变化会提高区块链的性能,可能会让以太坊每秒10笔交易提高为每秒10000笔交易,但这会面临一个新挑战,就是:用户和应用都在不同分片上,要如何“交流”呢?现在,所有帐户、智能合约都储存在一台计算机上,它们相互交流非常方便。但如果未来我们的账户、合约在不同的分片上,就难以进行立即的对话和交流。所以以太坊2.0的设计并不是让每个节点都去处理所有的交易和信息,我们有1024个分片,每个分片都相当于是一个短的链,每个分片都有自己的共识算法。一个分片上发出交易,然后每6分钟,每个分片间进行“交流”,也就是发现其他分片的哈希值。信标链来管理共识算法和跨分片的沟通。
“异步”交易这是我之前设计的。比如我有5个币,然后我想要把它转给Bob,Bob有一个帐户,它的帐户在底端,我的在顶端。首先我要在顶端做一个交易请求,这个交易会进行第一个分片处理,然后产生一个哈希值,但它并不会立即完成,之后我们就可以把它放到底部的分片当中,当它在底部的分片进行验证后,交易就能够处理了。
打个比方,如果你想订火车票和酒店,你当然会希望他们订在一起,如果只有一个而没有另外一个就没有意义,如果订火车和订酒店在不同的分片怎么办?我们想象两个智能合约,一个合约用来订火车票,另外一个是用来订酒店。其中任何一项失败,我们都可以把交易撤回。但由于这两个合约在不同的分链中,确保一致性更难。
其中的一个解决方案是“猛拉”,每张火车票都有一个合约,每个房间都有一个合约,这样每个合约都能够代表我们订座位或者订房间的能力。现在我们能做什么?在“猛拉”中发起一个合约,它的功能就是一次用一个合约。从酒店分片拉一个合约,从火车票再拉一个合约,两个分片同时预定。而如果你放弃订票,而别人还想订,就可以通过“猛拉”拉到他们的合约里。它是一个自动的过程,要么2个都订,要么都不订。
但是想象一下,我们需要花费5分钟时间,让一个分片知道另外一个分片的数据或者哈希值,可我们希望这个应用变得更加快捷。比如,最开始Alice有10个,Bob有20,charlie有52个,我们把这些进行压缩之后进行存储。有两种情况,一种情况是bob有20个coin,还有一种情况是Bob之后有25个coin。如果我们的钱包上面看到上面的根是R,下面的分片就可以做个推测,就是Bob有25个coin,就可以取25个coin给其他人。但在这个过程中,我们的计算并没有最终化,虽然看起来交易已经完成了。那么你可能会问,似乎Bob有了这些coins,但是他还没有花这些coins。我们假设Bob要把25个coins发给Charlie,他会做什么?我们不用去思考到底R是真实的还是假的,因为Charlie现在有52个coins了,所以知道R一定是真实的。这个逻辑是在后台进行的,逻辑效应是通过Bob、Charlie的钱包分析,我们至少先知道发生了这样的交易。非常有意思是,你可以用通信的方式在跨区块链中进行交易,还可以让它创造应用程序,让不同的区块链进行跨链的交易。
我们还可以实现其他目标,比如通过Plasma方法做同步的交易,在任何分片都可以发起交易,资产会存在合约里,但我们不会马上去数状态的总数是多少,取出需要等一周。此时,如果任何人能证明那个状态不是有效的,他们就能取消取款。
通过这个方法可以保证如果我们收到了coin,没有进行非法支付的话,我们的交易就会同步到整个区块链上进行广播。我们有两个资产,X和Y,我们的分片有自己的轻重缓急,可能先进行某一次交易再进行下一次交易。如果我们参加交易过程当中,自己有了资产,而且你也希望发送交易信息,就可以把它公布到任何分片上。如果你是某个资产的所有者,你可以仅仅分析这些分片,评估这些交易的历史记录是怎样的。
这样一种设计我们称为“积极虚拟机”,你所有权的资产并没有立即转移,我们开始一个流程,不需要把钱取出来,可能一整周时间才可以真正到帐,但如果你是用户,你可以知道为什么不能马上取出某个资产,而且你有一种感觉,就是这个交易是可以真正到账的。这样做的好处是,我们会获得公开交易的能力,而且还可以得到及时确认,可能0.5秒的时间就可以立即确认。如果一来,用户体验会非常好,类似中心化服务器提供的这种体验。如果我们从不同的分片进行数据的公布,逻辑会非常复杂,智能合约也会变得很复杂,用户钱包会进行大量的计算,需要更长时间进行计算。
我的结论是什么?如果我们想做出一个通用型的区块链,首先要有一个通用的基础设施,能够让我们把数据放在这个链上,还可以在这个链上做更快的计算。我们利用工具进行应用的过程比较复杂,不同的用户有不同的实施方式。区块链要求我们有一个全节点共识。也就是,怎样进行储存?怎样对用户coin的数量进行准确,这些都需要我们通过更进一步的应用来实现。而且,我们还需要保证整个流程的简便性,需要对共识机制进行不断的提升,创造出不同应用的底层协议。这已经成为一个非常活跃的研究,我们正在研究如何设计这些机制,让我们创造出扩展区块链的不同应用,它拥有很强的性能,可以进行非常快速的交易,甚至是异步的、同步的交易都可以实现,而且还可以实现跨分片的交易。在2.0设计中,提高交易的确认速度不需要提高区块的速度,分片是分配数据和计算的工具,在这个底层上有很多方法实现可扩展的应用环境,通过这些方法可以在分片的区块链上保持速度和有用性。以太坊Layer1作为简单和安全的不用应用的底层协议,然后在Layer2继续研究和改进。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。