2019 年 6 月 29 日,由 CSDN、灵钛科技主办的「2019 第二届以太坊技术及应用大会」在北京·长城饭店举行。本次大会围绕以太坊生态全景、以太坊未来发展、以太坊开发实战、优质项目案例等多方面展开,邀请以太坊创始人 Vitalik Buterin 及核心技术开发者齐聚于此,共同助力中国以太坊技术深度交流和社区发展。
以太坊创始人 Vitalik Buterin 在上午的演讲中分享了题为《以太坊 2.0 之跨分片交易》的主题演讲。在演讲中, Vitalik Buterin 分别从异步和同步交易,并结合「火车票和酒店」问题这一实例,详细介绍了以太坊 2.0 的分片交易。区块链大本营在不改变演讲内容大意的情况下,做了一些的整理,以下为 Vitalik Buterin 的演讲实录。
原文标题:《独家 | Vitalik Buterin:以太坊 2.0 之跨分片交易》
作者:Vitalik Buterin
来源:区块链大本营
责编:佩奇
以太坊创始人 Vitalik Buterin
中国的朋友们,大家好!现在我们要把以太坊进化到 2.0 版本,有更多分片。现在在研究信标链相关话题,在这方面仍有很多努力要做。这可能对区块链交易非常有用,可以增加它的可扩展性,从每秒 10 个交易,发展到以后可能的每秒 1 万个交易,它会增加信息吞吐量的速度,也能够有更多区块链的应用。
但是开发者也会面临一些挑战,区块链现在的运作方式是每个计算机要验证所有交易,每个节点都要进行验证,这样安全性是好了,但是它难以进行扩展,因为我们交易的数量非常多,因为交易速度是由一个计算机决定的,所以我们想要去改善这个过程,我们要提高它的拓展性。这样每个计算机只需要验证一小部分的交易,这样并不是所有节点都需要进行验证了,每个计算机只需要去处理 1000 个节点当中的千分之一的交易。
当前我们要处理的问题是,如果我们看到现在的应用运作的方式就会发现,在这个理论上建立其他的东西是很容易的,比如智能合约和其他进行交流时,可能需要 5 个应用的参与,所有的帐户、智能合约都储存在一台计算机上,所以它们相互交流非常方便。但是如果我们在更短的一个区块链中就做不到了,因为这个区块链中智能合约、帐户、交流速率非常高,我们很难让一个应用都能够进行对话,难以进行立即的对话和交流。
所以以太坊 2.0 的设计并不是让每个节点都去处理所有的交易和信息,我们有 1024 个分片,每个分片都相当于是一个短的链,每个分片都有自己共识的算法,不同分片中交流进行管理,每个分片会跟其他分片进行交流,有合约进行交流,每 6 分钟会发生一次,所以每 6 分钟每个分片都有机会了解哈希值以及最近发生的事情等等。
另外,之前这个链的可扩展性受到了限制的,所以我们可以选择,要么这个链的交流速度变慢,要么拓展性受到限制,我们还是要二选一。另外,这些基础层主要关注数据和计算力等等,不同的分片交流和沟通的能力、它们是否受限,我们可以创建一个机制让它们的性能更好、使用效率非常高,这样用户不同的智能合约能够相互交流,而且速度非常快。
首先,我们是异步交流的流程,这是我之前设计的,已经有了几年的设计过程,如果读相关文章,比如 2016 年就有文章谈到异步交易。它的理念是,如果我们有几个分片的话,如何去促进这个分片之间的交易。
比如说我有 5 个 coins,然后我想要把这 5 个 coins 转移给 Bob,Bob 有一个帐户,它的帐户在底端,我的 coins 在顶端,首先我要在顶端做一个交易的请求,这个交易会进行第一个分片处理,然后它会有一个哈希值产生,当然,它并不会立即完成,但是之后我们就能够把它放到底部的分片当中,它能够在底部的分片进行验证。验证之后交易就能够进行处理了。
所以有一个信息,是 5 个 coins 去进到 Bob,底部的 Bob 就能够得到 5 个 coins,它不会立即发生,原因是我们要验证,不仅仅接收方需要进行验证,还有其他的哈希值、数据、信标链等等都需要进行验证。我们发现接收方也是分片的一部分,不同的分片交流需要 5 分钟的时间,所以第一步我们就需要发送这个交易,第二步是等几分钟,第三步是要进一步去处理这个交易,然后才能够让底部的 Bob 接收到这个 coin,这样 Bob 帐户就增加了。
现在有各种加密货币,包括比特币等等,对于这些数字资产有不同的平台,我们发现这样一个交易,它其实非常强大的,有很多有趣的理论、复杂的理论都可以来验证这个交易。我们发现,我们理解这些机制,跟客户交流是非常难的,我们还是有很多可以做的,但是会有相关沟通方面的限制。
另外一个是「火车票和酒店」的问题,如果你使用数据库工作就会了解相应的问题,它跟我们非常相似,我们有不同的方式可以解决相关的问题。你想要去一个地方旅游,我们要买火车票,同时也要订酒店,如果订一个不行,要两个一起订,所以我们要确保:要么都不订,要么酒店和火车票一起订。如果仅仅有火车票而没有酒店,或仅仅酒店而没有火车票,这对我来说没有任何意义,是浪费钱。
所以我们想象两个智能合约,一个合约是用来订火车票的,另外一个是用来订酒店的。当前体系解决这个非常简单,首先,我们给卖火车票的地方打电话,比如我们在火车票上订了一个座位,这个合约会回复你成功或失败,然后我们再给订酒店的地方打电话,这个地方也回复你成功或失败,如果其中一个失败了,那在我们交易过程中就无法让这个交易进行下去,整个交易会被撤回。今天我们也是这样做的,不管是订火车票还是订酒店,其中一项失败了,我们就可以把交易撤回。但是在更短的链中,订酒店和订火车票是不同的分链中,确保一致性更难,原因是因为发现在一致的环境中已经订了火车票了,我们就不能再撤消了。
其中的一个解决方案是我们有一个新的机制叫「猛拉」,它看起来是全新的想法,但是有很多类似之处,跟我们之前的数据库很像。所以我们会有非常多样化的做法,并不是用一个合约订酒店,一个合约订火车票,现在我们把它分开,每个火车座位都有一个合约,每个房间都有一个合约,这样每个合约都能够代表我们订座位或者订房间的能力。
现在我们能做什么?在「猛拉」中发一个合约,它的功能是一次用一个合约,我们拿掉这个合约之后就获得一个座位,然后我们再把合约放到另外一个位置上。
如何解决「酒店和火车票」的问题?第一步,猛拉,从酒店分片拉一个合约,从火车票再拉一个合约,两个分片同时预定,现在酒店合约和火车票合约在一个地方,跟之前的交易一样,就可以一起订了,但其中如果任何一个操作失败,我们就什么都不订了。或者其他人想要订火车或订酒店,去之前你去的那个分片,可以用这个合约进行「猛拉」的操作,不会有任何阻碍,两个一起订,它是自动的过程,就是要么两个都订,要么两个都不订。所以在区块链的运用当中有很多都是类似的,包括去中心化资产的交流等例子,对我们来说非常有用,能够提高用户以及区块链应用的操作性。
这是另外一个例子,也是我们可以做的一个应用。现在我们想象一下,我们用一个更短的区块链,比如它需要 5 分钟时间让一个分片知道另外一个分片的数据或者哈希值,但是我们希望这个应用变得更加快捷,所以我们的做法是在上面分片有一个 coin,然后我们想把这个 coin 转移到下面,我希望 coin 可以在底部立马进行应用,那我们就不用等了。
具体怎么操作呢?看起来是挺难的,我们是这样做的。比如说,就像我们之前的程序一样,首先,我想给 Bob 发 5 个 coin,就必须在上面的分片进行交易,然后上面就会给我个这样的证明,它还包含一个区域性的分片,然后我再把它放到下面的分片中,下面的分片就会记录这个交易。而且它已经了解上面分片当中的根值了,所以下面的分片根本不知道上面跟它是否合法,但是不管怎样,它把相关数据融到自己的数据包中了。如果记录另外一个信息,也可能没办法让下面的分片知道。
我们这里想陈述的是,最开始 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,他会做什么?把 22 个 coins 发给 Charlie 会是什么?现在这种情况下,你只能把两个情况进行评估和对比,这种情况下 Alice 还是有 10 个 coins,如果合法的话,Bob 之前有 25 个 coins,现在 25 减 22,它只剩 3 个币了,如果不算根是不够的,所以 Bob 还是有 200 个。C 如果根是对的,就会从 30 多上升到 52。
这个交易结束后,上面的分片和下面的分片信息可以连接,下面的分片可以记录上面分片的信息了,我们就不用去思考到底 R 是真实的还是假的,我们知道 R 一定是真实的 Charlie 现在有 52 个 coins 了。这个逻辑是在后台进行的,逻辑效应是通过 Bob、Charlie 的钱包分析,我们至少先知道发生了这样的交易。非常有意思的一点是,对于这个技术,你可以用通信的方式在跨区块链中进行交易,还可以让它创造应用程序,让不同的区块链进行跨链的交易。
比如我们假想有这样一种应用,上面的分片是以太坊区块链,下面的分片是另外一种区块链,它们两个如果是相碰撞、相冲突的话,我们会用同样的机制保证它们交易,让它们进行及时的通讯、及时的去中心化的交易。这在以太坊和跨以太坊的区块链交易中是非常重要的,可以让跨链的通讯变得更加方便。
我们还可以实现其他的目标,比如我们目前已经做了一些工作,比如通过 Plasma 方法做同步的交易,我们的目的是首先 Plasma 已经建立了,希望 data 把这些数据公布到分片上,所有这些数据并不一定都能够公布到区块链上,但是最终发生的一件事情是,我们还是会用类似 Plasma 的方法去实现同样的目的,我们不会马上去数状态的总数是多少。我们至少要知道现在以太币的所有者的目的是什么,是在任何分片发交易,还是要等一段时间才能出资产。所以如果发生冲突的话,他有可能想上传证据,还有所有者可以对 coin 进行再构造。
通过这个方法可以保证如果我们收到了 coin,从来没有进行非法支付的话,我们的交易就会同步到整个区块链上进行广播。这些交易出现了,我们有两个资产,X 和 Y,另外一个交易是 X,是 A 到 C,我们的分片有自己的轻重缓急,可能先进行某一次交易再进行下一次交易,还有 B 到 G、F 到 M 等等交易。之后还有很多交易,有些是合法的,有些是不合法的,M 到 M 是不合法的,因为时间上它是不能实现的。
如果我们参加交易过程当中,自己有了资产的话,而且你也希望发送交易信息,就可以把它公布到任何分片上。如果你是某个资产的所有者,你可以仅仅分析这些分片,就可以评估这些交易的历史记录是怎样的,某些资产并不属于这样交易过程的,我们也可以做类似的结论总结。
在区块链中,我们做的工作量还会少一些,比如用户钱包可以做更多事情,而且它还可以帮助我们考虑什么样的交易方式是合理的,就是谁更关注每一个分片,然后每一个分片对应的资产又是怎样的,这是特别棒的一个想法。
为了减少复杂性,让更多用户用钱包,我们就把区块链便捷性、性能、应用效率大大提升,希望通过用这个方式把中心化更复杂的交易变得便捷和简单,这个基本的战略可以让我们进行更快的交易。不需要之前去中心化的共识层,我们希望通过这些用户钱包了解目前我们的钱包里是有多少币的。
这样一种设计最近被我们叫「积极虚拟机(OVM)」它的结论是你所有权的资产并没有立即转移,我们开始一个流程,不需要把这个钱取出来,可能一整周时间才可以真正到帐,但是如果你是用户,你可以知道为什么不能马上取出某个资产,而且你有一种感觉,就是这个交易是可以真正到帐的。
我们需要做什么?10 秒钟才可以进行跨分片交易,比如有 20 个分片参与交易,提高交易速度会不会提高区块速度?我们需要去研究区块时间,比如最上面分片可能需要 10 秒,那么下面的分片再往右移,就是 0.5,然后 10.25,然后 11.1,然后 21.5 等等,逐渐的向右移。
这个基本原则是在某个时间点上一定有某个分片去到某个固定的位置,首先我们首先要知道需要在哪个区块中公开这个分片。这样做的好处是,如果我们这么做,就会获得一种公开交易的能力,而且还可以得到及时确认,可能 0.5 秒的时间就可以立即确认,得到区块,然后可以进行证明。如果做得很成功的话,用户体验会非常好,类似之前中心化服务器提供的这种体验一样,如果我们用第二层方法,从不同的分片进行数据的公布,逻辑会非常复杂,智能合约也会变得很复杂,用户钱包会进行很高速、很大量的计算,有多少 coins 到哪个用户手上就需要更长时间进行计算,这是我们更需要研究的一点了。
这里我得出的结论是什么?如果我们想要做出一个通用型的区块链,就首先要有一个比较通用的基础设施,能够让我们把数据放在这个链上,还可以在这个链上做更快的计算。我们利用工具进行应用的过程比较复杂,不同的用户有不同的实施方式。所以区块链要求我们有一个全球的共识,就是怎样进行储存、怎样对于某个用户具体所有的 coins 的数量进行准确了解,这些都需要我们通过更进一步的应用来实现的;而且我们需要保证整个流程的简便性,防止这个流程变得复杂;需要对于共识机制进行不断的提升,创造出有不同应用的底层协议。
这已经成为一个非常活跃的研究,我们正在研究怎样设计刚才所说的这些机制,让我们创造出扩展区块链以上的不同应用,它拥有很强的性能,可以进行非常快速的交易,甚至是异步的、同步的交易都可以实现,而且还可以实现跨分片的交易,当然,还有其他很多很好的性能,比如其他的加密方式进行进一步扩展。
因此,Layer2 的这个机制是和以太坊 2.0 密切相关的,它可以把区块链更上一层楼。
来源链接:mp.weixin.qq.com