未来一两年间将推出许多智能合约平台(如以太坊2.0、Polkadot、Dfinity、Near Protocol、Algorand、Kadena、Spacemesh和Solana)。每个团队都在追求独特的扩展策略。
然而,大多数这些方法都没有解决拜占庭环境中分布式计算系统的一个基本问题:时钟问题。为了达成共识,网络中至少51%的机器必须在同一时间以相同的顺序执行相同的事务。想要实现这一点,这些机器需要就一个全局时钟达成一致。“时钟问题”指的是让许多不信任的机器在拜占庭式的设置下就全局时钟达成一致所面临的挑战。一旦每个人都同意一个全局时钟,事务排序就会变得简单得多,因为每个事务都使用相同的全局时钟分配时间戳。
在现代加密时代之前,时钟问题已经在其他大规模网络中彰显了出来,尤其是在无线通信领域。手机信号发射塔必须同时支持成千上万的手机。由于没有足够的带宽让每部手机都按自己的无线频率来传输,因此电信行业需要使用“多重接入技术”,好在同一频率上塞进多个电话呼叫。
码分多址(CDMA)是在二战期间发明的。为了解决时钟问题,CDMA要求每台手机用一个唯一的密钥加密数据,并像其他手机一样同时传输多个频率的数据,依靠发射塔将组合的信号划分为各自单独的通话。此模式的效率只会随着加密模式复杂性的提高而同步改进。对于必须支持廉价终端设备的广泛可用网络,这类改进的速度历来缓慢而稳定。
自2G蜂窝网络出现以来,时分多址(TDMA)已成为解决时钟问题的标准解决方案,电信公司藉此获得了更快的效率收益。TDMA指定发射塔将每个无线电频率划分为时间段,并将这些时间段分配给每个电话呼叫。通过这种方式,蜂窝塔为网络提供了一个 全局可用的时钟。这极大地提高了有限带宽的可扩展性,使得每个频率可支持多个同步数据通道,并减少来自多个电话在同一频率上同时广播的干扰。
在本文中,我将探讨不同的区块链如何在拜占庭式的设置下处理时间问题。我的结论是,构建最有效时钟的区块链将成功地分离时间和状态,并能够进行扩展,以安全和去中心化的方式支持数百万用户的吞吐量。
·去中心化共识与时钟
谷歌的Spanner数据库是全局性能最好的分布式数据库之一,拥有18个实例,所有的事务处理都是同步的。它支持每秒50,000+个事务(TPS),最终性时间(TTF)控制在1秒内。Spanner利用了于1989年首次发布的Paxos共识算法。Spanner是一个许可式的可信数据库。而Paxos算法使得Spanner在面对断电、服务器故障、恶意bug等许多其他错误时仍能取得进展。
在当今吞吐量最高的区块链仅用21个实例就难以实现5,000+ TPS时,Paxos是如何实现这种性能的?谷歌会聘请全职工程师来到现场,定期以极高的精度同步每个数据中心的原子钟。提供一个全局可用的可信时钟,可以对事务分配时间戳,以便每个实例接收到无序的事务,但同时又能以正确的顺序处理它们。这就是时间和状态分离,因为每个实例都会更新其状态,而无需与其他实例进行检查,以确保它们以相同的顺序执行相同的操作。
我们能从Spanner中学到什么?如果在非拜占庭式的环境中有一个全局可用的时钟,那么达成共识是小菜一碟。遗憾的是,如今的智能合约平台有两个Spanner没有的额外限制:
成为一个验证器必须是无需许可的,以保持平台的抗审查性 区块链必须保护用户的资金安全,哪怕高达⅓的验证器是有恶意的。
如果任何人都可以在全世界任何地方启动验证器实例,则必须设计共识算法来适应不同的硬件和网络配置,并必须管理恶意验证器。此外,为了真正抵抗审查,不可信任各种带外信息(即预言机问题)。
Paxos共识算法发明20年后,有人想出了一个办法,让一个无需许可的计算机网络就交易的规范顺序达成共识。这个人就是中本聪(Satoshi Nakamoto),解决方案是工作证明(PoW)共识。
·工作证明+时间链=时钟
有意思的是,中本聪提前发布的比特币源代码实际上将人们熟悉的区块链数据结构称为“时间链”(Timechain)。这个时间链的设计是平均每10分钟滴答(tick)一次(通过巧妙地将工作证明、难度调整和最长链规则整合在一起,这超出了本文的范围),其中,每次滴答都以更新全局状态的事务块的形式出现。在节点执行一个事务块之后,它会被锁定,不能进行任何状态更新,直到它自己生成一个有效的新块,或者从网络接收到一个有效的新块。在PoW中,时间和状态是耦合在一起的,总是步调一致地前进。时间无法通过更新到状态进行处理。
什么能令区块“有效”,这个话题一直会引起非常激烈的争论。事务格式和区块大小只是需要考虑的众多特性当中的两个。不过,有效区块的其中一个方面不存在争议,那就是它必须包含前一个块的哈希,好让网络知道将它放在时间链中的前一个块之后。
图说:区块链中的每个块都包含前一个块的哈希,以证明它在后面。