重塑区块链的可扩展性:状态和时间的分离

转载
1947 天前
12608
蓝狐笔记

来源:蓝狐笔记   作者:Ryan Gentry


本文作者Ryan Gentry,由“蓝狐笔记”的“SIEN”翻译。

未来的一两年,会有很多智能合约平台面市(ETH2.0、波卡、Dfinity、Near、Algrorand、Kadena、Spacemesh、Solana)每个团队都在寻求与众不同的扩展性策略。(蓝狐笔记译注:同时已发布也不少,比如Harmony、EOS等)。

不过,这些方法中的大多数都没有解决拜占庭环境中分布式计算系统的一个基本问题:时钟问题。为了取得共识,网络中至少51%的机器必须以相同的时间和相同顺序执行同一交易。为实现这一点,机器需要就全局一致的时钟达成一致。

让许多互不信任的机器在拜占庭环境下就全局时钟达成一致,“时钟问题”是面临挑战的。一旦所有人就全局时钟达成一致,交易排序就会变得简单很多,因为每个交易都使用相同的全局时钟加上时间戳。

在现代加密时代之前,在其他大规模网络中,时钟问题已经凸显出来,尤其是在无线通信领域。手机信号塔必须同时支持数以万计的手机。这导致没有足够的带宽来让每部手机都按自己的无线电频率进行传输。因此,电信公司需要“多重接入技术”,以在同一频率上可以拨打多个电话。

二战时期发明了码分多址的技术,也就是CDMA。为了解决时钟问题,CDMA要求每部电话用唯一密钥对其数据进行加密,并与其他电话同时在几个频率上传输数据,依靠发射塔将组合信号分为单独的呼叫。这种模式效率的优化与加密模式的复杂性同步。对于要实现大规模采用的网络来说,它必须支持廉价低端设备,而这种优化的速度显得缓慢而稳定。

从2G网络诞生以来,通过实施时分多址(TDMA)技术,电信公司已经实现更快的效率提升,TDMA已经成为处理时钟问题的标准解决方案。TDMA指定这些发射塔,将每个无线电频率划分为时间段,并把这些时间段分配给每个电话呼叫。

以此,发射塔为网络提供全局可用的时钟。通过让每个频率支持多个同时进行的数据信道,并减少同一时间在相同频率上多个电话广播的干扰,这在有限的带宽上大规模提升了可扩展性。

在这篇文章中,我将探索不同区块链在拜占庭环境下如何应对时钟问题。最后,我将论证,构建出最有效时钟的区块链将能成功分离时间和状态,并能在安全和去中心化的方式下实现扩展,以支持数百万计用户。

有时钟的去中心化共识

Google的Spanner数据库是全世界性能最好的全球分布式数据库之一,有18个实例,其所有交易处理都同步。它支持50,000+TPS,最终性在1秒以内。Spanner利用了Paxos共识算法,该算法首次发布于1989年。Spanner是一个需要许可的可信数据库。Paxos允许Spanner在面临停电、服务器故障、恶意错误以及无数其他故障时,依然可以运行。

当如今吞吐量最高的区块链仅有21个实例,还在挣扎着实现5,000+TPS时,Paxos是如何实现这样的性能的?Google有全职的工程师维护,定期到每个数据中心同步原子时钟,达到很高的精度。

提供全局可用的可信时钟允许对交易加上时间戳,这样,每个实例可以不用按顺序接收交易,但却能以正确的顺序来处理它们。这就是对时间和状态进行了分离。因为每个实例都会更新状态,而无须检查其对等节点以确保它们以相同的顺序处理相同的操作。

可以从Spanner中学到什么?如果在非拜占庭环境下有全局可用的时钟,那么达成共识是很容易的。

不幸地是,当今的智能合约平台还有两个额外的限制是Spanner所没有的:

1.为保证平台有抗审查能力,成为验证者是无须许可的

2.即使多达1/3的节点是恶意的,区块链也必须保证用户的资金安全

如果任何人都可以在全球的任何地方启动验证者实例,那么,共识算法的设计必须能够包容不同的硬件和网络配置,以及必须管理恶意节点。此外,为了真正具有抗审查能力,不能信任带外信息(也就是Oracle问题)。

在Paxos发明20年之后,有人想出了在无须许可的计算网络中如何就规范的交易顺序达成共识。这个人就是中本聪,而解决的方案就是PoW共识。

PoW+时间链=时钟

值得注意的是,中本聪的预发布比特币代码实际上将大家熟悉的区块链数据结构称为“时间链”。这一时间链设计为平均每10分钟滴答一次(通过巧妙地将PoW、难度调整和最长链规则结合在一起),其中每次滴答都以更新全局状态的交易区块的形式出现。

在节点执行一个交易区块之后,它会锁定,不做任何状态更新,直到它产生自己的有效新区块,或接收到来自网络的有效新区块。在PoW中,时间和状态耦合在一起,总是一致行进。没有状态更新,时间就无法推进。

关于什么让区块“有效”是一个争论激烈的话题。交易格式和区块大小在需要考虑的多个方面中只是其中的二个而已。然而,一个方面没有争议,有效区块必须包含前一个区块的哈希,便于网络知道将它放在时间链中的前一个区块之后。


(区块链中的每个区块都包含前一个区块的哈希,作为在它之后的证据)

时间链的目的是解决上面提到的要求:成为验证者是无须许可的。验证比特币网络当前状态是否有效的唯一方法是从创世区块的状态开始,执行从创世区块到当前状态的每个交易。时间链为新验证者提供审计轨迹,它是通过证明区块高度12中的交易发生并必须在区块高度11的区块交易之后执行来提供的。

因为区块12必须包含区块11的哈希,区块12只能在区块11之后才能被创建。哈希的时间链产生逻辑的、单调的、虽然不规则且不是非常精细的时钟,网络中的任何验证者都可以独立地验证而无须任何带外信息。

在开放、无须许可的环境中,生产这种全局可用且可信的时钟,是中本聪最伟大的创新。因为全局状态被锁定,直到全局时钟滴答一下,产生新块。因此,可扩展性的数学很简单:

吞吐量 [TPS] = 区块大小[每区块的txs ] / 区块时间 [每区块秒]

为了提高吞吐量,协议要么增加区块大小,要么减少区块时间。增加区块大小不利于区块生产者的去中心化,减少区块时间会增加链分叉概率。

这是因为时间和状态是耦合的,所以没有办法解决这个问题。

回到无线通信的例子,可以将这个问题跟CDMA进行比较。CDMA中,无线电塔有可以监听的固定频率带宽,这类似于区块生产者具有能处理的固定的区块大小。

增加CDMA的可扩展性意味着创建更多复杂的编码方案,以在有限的带宽内容纳更多的电话呼叫。这类似于Segwit隔离验证,闪电网络,Schnorr签名,它们是更复杂的编码方案,可以提高性能。

比特币有1MB的区块,区块时间为600秒,最小的交易大小为250B,理论上最大的吞吐量为7TPS。(蓝狐笔记注:1024*1024/250/600=6.99,约等于7)

与Spanner相比,这意味着,比特币的吞吐量降低了7000多倍,比TTF慢了3600多倍(因为它需要花费6个区块的时间来达成概率上不可逆转的最终性)。

显然,比特币还有改进空间。

PoS+时间链=更快的时钟

比特币的增长带来了共识算法研究的复兴。CAP定理告诉我们,在网络分区的情况下,分布式数据库系统必须在一致性(网络停止)或可用性(网络分叉)之间做选择。中本聪的算法是第一个无须许可、BFT共识算法,所有这些算法选择可用性优先于一致性。在中本聪家族中有很多共识算法。

Leslie Lamport的Paxos算法是经典共识算法家族的第一个,它更青睐一致性而不是可用性。

在Paxos和来自经典共识算法家族的很多其他算法中,参与共识的每个节点必须与网络中的每个其他验证节点就每个状态更新同步沟通。这使得通信复杂度为O(n^2)(其中n是验证者数),这意味着每个状态更新之间所需的时间会随着验证者的增加而呈指数级增长。

Jae Kwon和Ethan Buchman是最早从事20年经典共识研究的人,并将它跟加密经济激励结构结合,称之为Bonded Proof of Stake,以安全地限制验证者数。他们的工作成果是经典共识家族中第一个高性能、无须许可的BFT共识算法:Tendermint。

Tendermint跟中本聪共识一样,它捆绑了时间和状态更新,因此,要么增加区块大小,要么减少区块时间,吞吐量才会增加。比特币在2009年诞生时,大约10分钟的区块时间是合理的。不过,从那时到现在,带宽已经实现指数级增长,这让Tendermint可以实现将区块时间缩短到几秒钟。

由于Tendermint更青睐一致性,分叉是不可能的。区块时间可以减少,直到某个给定验证者数的网络吞吐量达到系统性能瓶颈的极限。如今,Tendermint允许网络安全地将其验证者数限制为100,这样就可以过滤掉那些带宽差的节点,并允许有更大的区块。

Tendermint正在运行中。Cosmos Hub是第一个上线的Tendermint实例,它的区块时间为6秒,区块大小为150kb,允许最大的吞吐量为100TPS(假定单个交易250字节)。然而,它才几个月的历史,它会迅速走向成熟。

一个Tendermint网络,如果5秒的出块时间,5MB的区块大小,它理论上可以达到4,000TPS(蓝狐笔记注:(5*1024*1024)/250/5=4194.4,大约在4,000TPS),同时跟比特币比较,在抗审查和无须许可方面牺牲最小,尤其是考虑到它有570倍的吞吐量增长,和720倍TTF的减少。

不幸的是,由于经典共识算法的同步属性,匹配的Spanner会对系统的抗审查属性和无须许可属性产生不利的影响。更大的区块将不可避免地花费更长的时间在网络内进行传播,并且验证者也需要更长时间来进行验证,这样一来,出块时间就设定了一个下限。

为提高时钟速度,验证者数量需要大幅减少,并且它们都需要直接连接到同一光纤网络。这将增加验证者共谋的可能性,也增加了新验证者的进入门槛,并使得光纤网络的运营商成为一个中心点。

区块链共识的下一代演化为时间和状态的解藕迈出了重要的一步,在吞吐量上获得了巨大的提升,但同时也付出了巨大的成本。

分片+时间链=独立时钟

有了BPoS,Tendermint将抗审查性和验证者数进行了解绑,这允许网络时钟滴答一次的时间从600秒变为5秒,从而大大提升了性能。不过,在时钟滴答之间,整个全局状仍然是锁定的,以维持全局一致的状态。

缓解此问题的一种方法是将全局状态分为一堆较小的片段,每个片段有自己的独立时钟,可以相互独立推进交易。(蓝狐笔记注:也就是分片)只要这些分片不需要彼此之间进行交互,每个分片的性能维持不变,并且所有分片的累计吞吐量会随着分片数量的增加而线性增加。

Cosmos设想并行存在很多独立的区块链网络,它们之间能相互传递价值,但大多数交易在自己系统内进行。如果每个网络可以处理4,000TPS,有13个独立的网络,系统整体就可以超越Spanner的性能,达到52,000TPS。然而,这种方式存在两个问题:

1.PoS区块链的安全性是通过获得33%的质押代币和批准无效交易的成本来衡量的。如果不是单个代币供应,有13个单独的网络,那么获取给定网络的33%质押代币的成本将大大降低。这不仅远算不上安全,而且还严重损害了区块链的价值主张,其中安全性是网络价值的属性。

2.与网络内传输相比,用于网络间传输的TTF增加至少4倍。网络必须来回通信以同步它们的时钟,并且保证如果Alice在给Bob发送代币,那么,Alice的代币在她的网络上被烧毁之前,Bob成功地在他的网络中收到价值。

虽然Cosmos构想了一个有很多独立网络的世界,这些网络管理自身安全,但,以太坊2.0、波卡、Algorand等正在构建系统以解决上面提到的共享安全问题。(蓝狐笔记注:Harmony的分片也在解决分片的安全问题,有自己独有方案,具体可以参考:《Harmony区块链的分片扩展之路》)

每个团队的解决方案都存在细微差异,但基本架构涉及单个信标链,它为网络的其余部分提供时钟,同时,在跨分片间安全地对验证者进行重新洗牌,由此,它们可以共享一个共同的安全池。跟Cosmos类似,增加吞吐量很容易:只需要增加更多分片。


(以太坊2.0的单链和分片状态)

不幸的是,第二个问题,也就是网络间传输的高TTF问题,仍然存在。即使信标链可以提供全局时钟,每个分片仅是周期性地将本地时钟与信标链同步。为了让Alice从分片A发送代币给分片B的Bob,分片A的验证者必须证明,在分片B中的验证者挖出同等数量的代币给到Bob之前,他们已经烧毁了Alice发给Bob的代币。按照以太坊2.0的当前设计,该过程将花费6分钟,是跨分片区块时间的60倍。

虽然分片能有所帮助,但基本的扩展性限制依然是可预见的,因为每个分片的时间和状态更新是耦合的。考虑到区块大小和区块时间,每个分片依然受制于Tendermint所面临的相同的限制。

分片类似于TDMA的某些元素;状态被划分进入有自己独立时钟的单独分片,其方式跟发射塔将其带宽划分为独立无线电频率和时间段的方式相当。这种做法好处明显,但并没有充分利用,比如跨分片存在延迟也能证明这一点。

但是,如果在一个无须许可的环境中将时间和状态更新完全解藕呢?

将时间和状态分离

迄今为止,我们讨论了中本聪如何创建时间链数据结构,为比特币网络提供一个去信任(trustless)的时钟;讨论了Kwon和Buchman如何将BPoS应用到Paxos共识算法,以安全地减少验证者数并加速Tendermint的网络时钟;也讨论了将网络划分为多个具有独立时钟的分片,这可以极大提高吞吐量(只要跨分片交易最小化)。

然而,这些进展的每一个,它们的状态更新和时间仍然是耦合的,状态更新仅与其网络时钟的滴答一起发生,并且这对如下方面产生了根本限制:吞吐量、用于抗审查的最终性时间、无须许可的计算网络。

将时间和状态分离需要全局可用的时钟,它要快速、精确以及信任最小化。有了这样的全局时钟,状态更新可以持续且异步进行,正如在Spanner做的那样。只要每个人都同意全局时钟,并且交易加上时间戳,交易就可以在网络间持续流动。

Solana通过将基于哈希的时间链与状态更新进行分离,为其智能合约平台构建信任最小化时钟。它不是将每个区块的哈希链接在一起,而是其网络中的验证者持续在区块内对这些哈希本身进行哈希。这种机制,称为PoH(Proof of History),它为网络中的所有节点产生全局可用、信任最小化的时间链。


(PoH如何将标准化的时间戳编织到区块链中)

独立时间链的存在允许领导者在收到时间戳交易时尽快地广播给委员会。时间戳提供规范顺序,而不是由区块生产者任意确定的顺序。双花问题现在很容易解决,因为整个网络能够就交易先后顺序达成一致。

这改变了一切。

为验证时间推移,不是强迫验证者每6-600秒达成共识,Solana中的验证者能够实时向它们的对等节点持续发送状态更新。

不是需要等待收听来自其他每个节点的确认(其他的区块链都是如此),Solana可以使用新型的扇出(fan-out)机制来保持通信的复杂度为O(log(n)) 而不是O(n^2),它被称为Turbine,也是受BitTorrent的启发。这使得Solana能够在单一全局状态下处理超过50,000TPS,同时具有快速的最终性,还也无须分片。

这意味着,验证者池大小跟Tendermint相当,数量级为100-1000个,但是允许链分叉。需要积极的分叉管理政策,以确保只要链分叉出现系统就会快速合并到单一链上,这是异步进程和持续可用性的必要权衡。

将无线通信类比为完整的循环,PoH对于区块链的意义,就好比TDMA对蜂窝网络的意义。将Solana的1000个验证者看作为无线电发射塔,利用它们的同步时钟来将其带宽细分为各个时间段。

他们持续不断地收到最新的交易,每个交易都有发送者附加的签名过的PoH哈希,并将其转发给邻居节点,它们可以立即使用这些PoH哈希对这些交易进行排序。

由于领导者的轮换是基于全局时钟的,每个领导者选择一组有序的交易来执行,并将“entry条目”八卦给网络。验证者返回他们对每个“条目”的投票,当他们看到2/3的多数验证者赞同时,确认交易的最终性。

网络作为一个整体,持续不断地处理交易,且以很高的容量处理相同顺序的交易。但是,每个验证者都是独立处理的。相比于其他区块链,这是一个微妙而深刻的改变。在Solana,验证者永远不会停止处理交易,且不管其网络条件和共识如何。

还有其他不是很重要的相关问题,例如快速链增长、新的编程模型、时间链的不偏性、并行性等,这个新设计还有很多超出本文范围的问题,这些在Solana文档中都有解答。当前Solana在5个大洲的200个验证者构成的测试网络上,处理交易超过50,000TPS,平均TTF为1.5秒。这基本上可以媲美Spanner,不过,它更有实质意义的去中心化。

在一个信任最小化、无须许可的世界计算机中达到这种水平的性能是可能的,这是因为Solana将时间和状态分离。Solana网络的全局可用时钟允许每个节点更新状态时无须跟其他任何节点通信,就像Spanner一样。

重塑可扩展性

尽管加密社区写了不少关于可扩展性和共识模型的内容,但还没有人专门探讨分布式时钟问题。经过多年的PoS研究,最终将Tendermint+BPoS作为最佳成果,并且很多分片方案基本上围绕信标链+状态分片架构,而允许异步状态更新的有颗粒度的时间链将为非分片系统提供最好的性能,相对于一致性,这些系统更青睐可用性。

提供全局可用时钟允许Solana团队能够利用40多年的分布式系统研究,否则这些研究将无法应用。像OCC(Optimistic Concurrency Control,乐观并发控制。蓝狐笔记注:又名乐观锁)这样的概念,是在1981年发明的,多年来一直应用于大型计算项目,但当时间和状态必须同时推进时它就无法被应用。

从1995年以来,用GPU的并行处理一直存在。但直到Nvidia于2007年发布CUDA开发环境之前,它基本上仅限于显卡。然而,无法被区块链系统充分利用,区块链系统悲观地锁定所有状态,只有正在处理交易的账户除外。

理解时间的流逝对于理解许可的和无须许可环境下的分布式系统的性能至关重要。时间就是一切,通过PoH(Proof of History)的形式来编码时间流逝的新方法,无须许可的系统能够媲美经过验证的中心化的云计算提供的性能。