主页 > token.im > 分片技术(一):并行计算 | 以太坊知识普及

分片技术(一):并行计算 | 以太坊知识普及

token.im 2023-02-11 07:49:11

对于比特币来说,绝大多数交易只是为了简单的转账。 如果闪电网络能够大规模应用以太坊计算,那么拥堵问题应该可以基本解决。 闪电网络于今年 3 月开始在比特币主网上进行测试。 6月底,锁定的比特币有30多个。 7月21日,首次突破100。 它应该以缓慢的指数方式增长,所以发展得很好。

但是对于以太坊来说,上面有数以万计的智能合约和代币,交易和操作更加多样化。 尽管出块速度远高于比特币,但拥堵问题仍然比比特币严重得多。 单一的状态通道技术(包括雷电网络)不足以完成解决方案。

因此,提出了另一种解决方案:分片。

在以太坊目前的架构中,所有的账户状态构成了以太坊的世界状态,然后将世界状态完整地存储在各个节点中。 唯一可以引起世界状态变化的是交易。 每笔交易都需要所有节点的以太坊虚拟机进行计算。 计算完成后,所有节点更新世界状态。 由此可见,虽然以太坊有数万个节点以太坊计算,但整个以太坊网络的处理能力等于一个节点的处理能力。

以太坊计算_以太经典和以太坊统一_以太坊与以太基金

分片技术将世界状态分成小块,可以根据账户地址的前缀进行分割。 比如以a开头的属于shard 1,以b开头的属于shard 2。同时所有的节点也分为group,一个group负责处理一个shard。 这就相当于原来的以太坊只是一台机器,每笔交易,每条指令,依次处理,这是串行处理,但是分片后的以太坊是一堆机器,这一堆机器可以同时处理不同的指令,从串行处理到并行处理,处理能力大大提高。

以太坊如果分成100个分片,处理能力是原来的100倍,如果分成1000个分片,就是1000倍。 这种提升,相当的恐怖。 因此,Vitalik 将分片作为以太坊的重点工作。

以太经典和以太坊统一_以太坊与以太基金_以太坊计算

分片的想法其实就是这么简单,但是实现起来还是挺复杂的,而且会带来一些新的问题。

首先是安全性的下降。 如果将以太坊分成 100 块,每块的大小只有原来的百分之一。 对于攻击者来说,攻击的成本也大大降低了,因为他只需要攻击一件。 就是这样。 为了安全起见,以太坊节点的分组不是固定的,而是随机的。 也就是说,对于一个分片来说,应该处理哪些节点是经常变化的。 这样对于攻击者来说,即使他有能力攻击一个分片,也可能根本找不到攻击的目标,因为他不知道当前有哪些节点在处理这个分片。

以太坊计算_以太坊与以太基金_以太经典和以太坊统一

另一个问题是,如果两个分片中的账户之间发生了交易怎么办?

说实话,相对于以太坊的账户状态模型和比特币的UTXO模型,并行处理能力被后者碾压。 对于以太坊,一个账户不能同时发起两笔有效交易,但比特币可以。 这是什么意思?

以太经典和以太坊统一_以太坊计算_以太坊与以太基金

让我们举个例子。

假设以太坊账户A有10个以太币,现在他想转2个给B,3个给C,表面上同时转账应该没问题,但实际上是不可能的。 因为以太坊节点无法预知你在第一笔交易后是否还有余额支付另一笔交易,所以在以太坊的账户状态和交易中有一个序号字段,一笔交易的序号和账户状态下的交易是仅当交易中的序列号相同时才有效。 因此,如果一个以太坊账户要发起多笔交易,只能根据流水号逐一进行处理。

以太坊计算_以太坊与以太基金_以太经典和以太坊统一

再看看比特币。 同理,如果比特币账户A有10个比特币,需要转2个给B,3个给C。我们知道,一笔UTXO交易有自己的“输入”,表示比特币的来源。 这一点决定了同一个比特币账户中的多笔交易可以并行处理,前提是不同的交易对应不同的输入。

例如,如果A的10个比特币来自三个不同的输入:输入一(2),输入二(4),输入三(4),那么他可以同时向B和C发起交易。 对于两笔交易,第一笔交易的输入是使用“输入一”的2个比特币,第二笔交易可以使用“输入二”或“输入三”的比特币。

对于比特币节点来说,有可能部分节点先收到发送给B的交易,然后先处理发送给B的交易,另一部分节点先收到发送给C的交易,然后先处理发送给C的交易。 这两笔交易在比特币网络上同时有效,同时被节点处理。

基于此,以太坊在处理跨分片交易时,也引入了更适合并行处理的UTXO模型。 具体原理后面会讲到。