时间对于分布式账本技术的意义不言而喻,任何账本都需要达到「有序」,而在时间和状态分离的时钟体系中,时间和状态并非耦合绑定,链上交易的时间戳将会被编码,交易像水一样在网络间流动。
Solana 将基于哈希的时间链与状态更新进行分离,首先为其智能合约平台提供一个免许可、全局可用、信任最小化时钟体系,并在达成共识前优化网络运行,Solana 把这个核心创新称之为「历史证明机制」(Proof of History, POH)。
撰文:小毛哥 Mao 特别感谢 RockX 联合创始人董心书博士的审读及建议
「今天是 2019 年 8 月 16 日,起迟了,今天又是平淡的一天。」
几年几月几日、早与迟、今天和明天,都是我们对时间的概念,时间可以来源于 iPhone 手机、玩具手表、最精确的原子钟等任何可信赖的第三方,重要的是,我们所说的「时间」好像是一个人类社会赋予的概念。爱因斯坦的广义相对论尝试从更科学的角度探索时间的真正定义,当然,人们还是以自己感觉最直观的定义理解着自己的时间。
反直觉的是,在完全开放的分布式系统中,因为失去了可以完全信赖的第三方,我们很难依赖几年几月、早与迟这些习以为常的时间概念来确定事件的顺序。在分布式系统中,我们所需要的「时间」不是我们习惯的时间粒度,而是需要的是一种机制,通过该机制我们可以验证一个事件发生在另一个事件之前、之后或者同时发生。
假设《纽约时报》信息是正确无误的情况下,因为这个巧合,即使多年之后,虽然你忘记了被拍下照片的日期,但通过这份情报,你也可以准确地判定照片拍摄的日期:在 2014 年 10 月 12 日至 2014 年 10 月 14 日之间。
这个巧合实际构造出一种时间机制,我们建立了两个可信的时间点,而案例中《纽约时报》提供的信息就是这个机制里的时间戳。
正如上文我们所提到的,要确定事件的前后关系问题,需要的不是可信的物理时钟,而是去建立拥有可信时间点的时间机制。根据爱因斯坦的相对论中观点,全宇宙中位于不同空间的时间不是一致同步的。比特币通过创建自己的时间概念来解决这个问题,证明实现分布式账本技术是可行的。
时间对于分布式账本技术的意义不言而喻,任何账本都需要达到「有序」,人们不能花没有收到的钱,也不能花已经花了的钱。区块链技术本身必须在无需第三方的情况下,明确地对账本进行排序。虽然区块链中还有许多其他技术细节,但时间是至关重要的,没有时间与顺序,就没有区块链。
美国计算机科学家 Leslie Lamport 在 1978 年发布的论文 《Time, Clocks, and the Ordering of Events in a Distributed System》首次将分布式系统中的时序与相对论中的时间概念进行对比,并提出一种可用于「同步逻辑时钟的系统,以对事件进行全局排序」的分布式算法。他在 1982 年发表一篇关于可容错的计算机系统的经典论文《The Byzantine Generals Problem》,也就是著名的拜占庭将军问题的来源。
拜占庭将军问题是分布式系统发展中的殿堂级问题,而对于该类问题解决方案,背后的概念基本上是将可能引发不一致的并行操作进行串行化的排序。2008 年 11 月 13 日,中本聪在一份解释比特币的早期邮件开头写道,工作量证明机制是拜占庭将军问题的解决方案之一。
如何确定事件的时间和顺序,是分布式系统的基本问题。引入全局时钟是实现拜占庭将军问题中线性一致性(Linearizability Consistency)的方法之一。全局时钟可以让让许多互不信任的节点有全局同步的时间来源,再加上时间戳,就可能实现全局一致的有序交易。为了分布式系统达到强弱不等的一致性结果,许多建立在此思路上的区块链共识作为解决方案应运而生。
全局一致的时钟 + 时间戳 = 有序的交易
理解时间和状态 —— 解构区块链时钟
时间价值
时间对于工作量证明机制的意义在于通过持续消耗的动能来保护网络的安全。我们可以使用「存量和流量」(stock & flow)描述基于时间的能量及价值累计现象,使用以下三个公式简要概括 PoW 时钟体系的时间价值:
时间流量 / 存量 = 已经消耗 / 将要消耗的动能 时间存量价值(过去) = 挖矿已经消耗的动能(总账本) + 挖矿硬件的库存价值 时间流量价值(未来)= 挖矿将消耗的动能(预期账本) + 挖矿硬件的潜在盈利
状态更新
状态更新实际上是由出块决定,每个新出的区块反映出一个新的状态。这一时间链结构被设计为平均每隔十分钟出块一次, 即 PoW 时钟大约每 10 分钟指针滴答转动一次。同时,每一次指针转动都意味着该时钟完成一个不可回溯、无记忆性的全局状态更新。
指针转动,滴答一次 = 有序出块,状态更新 滴答时间 = 出块时间 (平均约 10 分钟) 转速调整 = 挖矿难度调整 最终状态更新 = 最长链原则
时间与状态:紧耦合
在工作量证明机制中,一个区块产生之后,整条链会锁定,此时没有任何状态更新,直到产生或接收到下一个有效的新区块。每个新的区块都包含前一个区块的哈希,作为在该区块有效的证据。总之,在 PoW 时间体系中,时间和状态是耦合在一起的,总是相互绑定、一致行进。没有状态更新,时间就无法推进。
PoW 时钟体系特点
PoW 时钟体系是对解决分布式系统中时间和状态问题的开创性的解决方案,PoW 体系是一个安全、成熟、无许可的、全球共享的网络设施,值得注意的是,PoW 时钟体系成本透明公开,但时钟性能、可拓展性不足,仍有改进空间。
时间价值
时间对于权益证明机制的意义是围绕着 PoS 机制的核心行为 staking (质押)产生的, 我们可以将理解 PoW 时间价值体系的方式引申至该 PoS 时钟体系。
时间的流量 / 存量 = 已经质押 / 即将质押的资金成本 时间存量价值(过去) = 已参与质押资金的机会成本 + 质押累计收益 时间流量价值(未来)= 长期持币者的预期质押量 + 预期质押收益
状态更新
PoS 时钟体系状态与 PoW 时钟体系相似,
指针转动,滴答一次 = 有序出块,状态更新 滴答时间 = 出块时间 (Tendermint 约 6 秒)
时间与状态:松耦合
在权益证明机制中,时间和状态依然是耦合绑定的。因此,该分布式系统性能的改良思路依然是在时间和状态之间做取舍,要么增加区块大小,要么减少区块时间,以增加时钟的性能,即系统的吞吐量(TPS),用公式来表示:
吞吐量 (TPS])= 区块大小(每区块的 txs)/ 区块时间 (区块间隔时间)
如果 Tendermint 网络达到 5 秒的出块时间,5MB 的区块大小,理论上可以达到 4000 TPS 的吞吐量。
PoS 时钟体系特点
PoS 时钟体系在解构分布式系统时间和状态的尝试中迈出了重要的一步,在系统的吞吐量上获得了巨大的提升,但同时也付出了巨大的成本,比如围绕 staking 的质押时间的长短含有影响 PoS 体系安全性的不确定因素。
时间价值
分片时钟体系扩展了单一区块链的时间存量及流量,从而量化扩展了时间价值
状态更新
信标链可以提供分片架构的全局时钟,但每个分片仅是周期性地将其各自的独立时钟体系与信标链的时钟体系同步,分片交互时需要状态的周期性更新,更新所需的时间可能会带来延迟。
时间与状态:将耦合的时间和状态同时分割
状态分片架构将整个时钟体系分割为一堆单独的时钟体系,将全局状态分割为一堆较小的单独分片,每个分片有自己的独立时钟体系,相互独立但共同推进。
分片时钟体系的特点
在理想状态下,若分片之间跨分片交互最小,每个分片的性能维持不变,所有分片的累计吞吐量将会随着分片数量的增加而线性增加。分片概念的设想显著提升了系统性能,但可以预见是,由于每个单独分片的时间和状态依然是耦合的,同时还存在着分片安全、跨分片交易、网络通信等技术问题,分片时钟体系的现实情况依然会受到基础区块链,包括信标链及主链自身扩展性的限制。
值得注意的是,所有这些时钟体系依然是建立在时间和状态耦合的框架内,也必然会受到限制。看起来每一个时钟体系都有独到之处,但都不完美。让我们继续思考继续优化区块链时钟体系的方法:
基于该思路,Solana 将基于哈希的时间链与状态更新进行分离,首先为其智能合约平台提供一个免许可、全局可用、信任最小化时钟体系,并在达成共识前优化网络运行。
Solana 把这个核心创新称之为「历史证明机制」(Proof of History, POH),PoH 历史证明机制是在达到成共识前在网络运行的优化解决方案,提供了一种全新的时钟概念。POH 在达成共识之前充当一种特殊的时钟,使得优化数据传播到内存池管理等的各种独特的时序假设在上层设计上产生。
这一核心创新打开了全面提升的设计空间。除了提供「编码时间」的时间戳的时钟之外,PoH 还使得 Solana 能够优化网络上可用的区块时间(800 ms)、区块传播(log200(n))、吞吐量(50K-80KTPS)和分类帐存储(petabytes)。
PoH 历史证明机制中提供了一种全新的时间概念,同为时钟体系提供了一个特殊时间来源,起到了时钟体系「计时」和「定序」的作用,使得系统时间不再受限于状态。
状态更新:
PoH 历史证明时钟体系将时间和状态分离,状态更新不限于每次时针转动。也就是说,该时钟体系分离了时钟转动一次(时间)和滴答一次(状态更新)。
时针转动 ∈ 状态更新 滴答时间 = 区块时间 ( Solana 测试网为 800 微秒)
时间与状态:解耦 / 分离
时间维度:基于可验证延迟函数 (VDF) 编码时间戳 可验证延迟函数 (VDF) 是一类数学函数,能够使得该函数的计算需要至少一段已知的时间。其他区块链要求验证人相互通信、同步信息以确认时间已经过去,可以进行下一步行动,而每个 Solana 验证人可以通过将标准时间戳编码为一个 SHA-256 序列哈希的可验证延迟函数 (VDF) 进入区块链中。Solana 使用 VDF 并不是为了随机性,而是为了维护该时钟体系的方法之一。
Solana 如何将标准时间戳编码至区块链中
状态维度:先选择领导者(Leader),后进行完整的纪元(epoch) 因为每个验证人都需要维护自己的时钟,所以选择领导者 (leader)在先,进行一个完整的纪元(epoch)在后。如同 Tendermint 机制,一个纪元的时间表可以持续数千个区块。然而,与 Tendermint 不同的是,Solana 网络从不等待验证失败的节点。每个验证人运行 VDF 以证明它已经获得了传输区块和验证人的区块时段 (Slot),同时可获得奖励。
PoH 时钟体系的特点
1. 缩短节点通信间隔时间 其他区块链要求验证人相互通信、同步信息以确认时间已过去、状态可更新,而 Solana 的节点在持续不断接收最新交易时,每个交易都有发送者附加的已签名 PoH 时间戳哈希,并将其转发给其他节点,节点可以立即通过 PoH 时间戳哈希对直接对交易进行排序,而缩短了等待对应节点确认的通信时间。
2. 无需等待领导者(Leader)的轮换 在 POH 历史证明机制下,领导者(Leader)的轮换不会影响网络状况。网络可以在没有任何验证人相互通信的情况下决定领导(Leader)的轮换,网络会作为一个整体,持续不断地处理交易,领导者的轮换决策是异步调用的。
3. 新节点只需要数据结构便可验证区块链完整性 PoS 机制受到常见的批评之一在于其不是完全客观的,而是弱主观的。但由于 POH 对 Solana 的改进,Solana 变得客观。因为随着时间的推移,时间也被编码到区块本身中。同时由于验证人通过并行验证 POH 的速度可以比 POH 的初始速度快 1000 倍,所以一个新的节点可以在没有外在信息的情况下,只需要账本的数据结构即可验证区块链从创世到当前的完整性。
一群拜占庭将军围攻一座城市,他们必须达成同时进攻或同时撤退的共识,且各将军只能透过信使将自己的决定通知其他人。然而,这群将军中有叛徒,发出相反的讯息,或者只通知一部分的将军。在已知有叛徒存在的情况下,该如何达成正确可用的共识?
在分布式系统中,我们可以将:
PBFT 实用拜占庭容错是一个基于选出领导者、基于通讯、倾向于一致性的共识解决方案,由于 PBFT 含有验证者需要把其投票广播给其他验证人的通讯机制,大大增加了通信复杂度和通讯量,导致难以扩展的瓶颈。
与 PBFT 不同的是,Tower Consensus 倾向于活跃性而非一致性。与 PBFT 相同的是,节点会成倍增加超时时间(Time-outs)以达成协议,但由于该时钟体系的账本结构本身也是一个免信任的时间源,节点可以观察和检查网络中所有其他验证人的超时时间。我们可以通过一个例子让方便大家更好地理解这一点:
想象你置身在一个孤岛上,一个瓶子漂了过来,里头装着一个 U 盘。在 U 盘里存着一个 Solana 账本。如果你只查看账本本身,你将看到每个节点都可以计算当前验证人的数量、每个验证人的状态 —— 以及最为重要的一点,每个验证人向网络中的任何区块提交的超时时间。仅仅是根据数据结构,不需要任何点对点的对等信息,验证人就可以做出投票决定,网络可以达成共识。
Solana 利用两种类型的节点分工生成轻量级证明,使其有 PoS 网络更有效地运行。
Solana 的复制器节点不需要参与共识并存储整个数据历史,而是利用多个复制器节点分别储存数据历史的小片段,以生成轻量级证明并执行纠删码功能,从而将整个状态历史被分割成许多部分。每隔一段时间,网络就会要求复制器证明它们正在存储其应该存储的数据。
Solana 使用的复制证明 (PoRep)理念主要借鉴自 Filecoin,并利用 PoH 共识提供的时序来源优化复制证明(PoRep)的创建方式。复制器节点将在不参与共识的情况下,使用 PoH 历史证明生成轻量级的证明,这种证明可以复制账本的各个部分,而且允许验证人能够跨 GPU 批量验证。
当前 Solana 在 5 个大洲的 200 个验证者构成的测试网络上,吞吐量超过 50000 TPS,平均 TTF 为 1.5 秒。这基本上可以媲美目前最好的全球分布式的数据库 Spanner,但 Solana 更有实质意义的去中心化。
同时,逻辑简单、信任最小化的可拓展 Layer 1 底层网络实际上在逻辑上抽象了复杂性,使得往后的开发人员能将精力集中在应用程序逻辑上。将期待留给 Layer 2 的可拓展解决方案和优化应用场景,实际上增加了用户、开发人员和服务商的复杂性和摩擦。
Vitalik 于 2014 年 1 月在向世人揭开以太坊的面纱时,他所强调的正是这一点:世界计算机的意义在于抽象所有不特定于应用程序的东西。随着时间的推移,在 2019 年 8 月 21 日,Vitalik 又在推特上发文称,对于 layer 2 链下扩容方案感到悲观,因为对于激励要做很多应用层处理,并且很难大规模应用。
对于绝大多数用例,构建在 Solana 区块链之上的开发人员根本不需要考虑可拓展性,因为 Solana layer 1 的意义就在于抽象复杂性,在此基础优化上层 layer 2 的设计,笔者会再下一篇文章详细论述这层逻辑。
参考文章
Blockchain Proof-of-Work Is a Decentralized Clock Work is Timeless, Stake is Not Bitcoin, Stock & Flow 若想搞懂區塊鏈就不能忽視的經典:PBFT It’s the settlement assurances, stupid Vitalik Buterin reveals Ethereum at Bitcoin Miami 2014 引介 | 以太坊 2.0:信标链 Bandwidth and the Blockchain 重塑区块链的可扩展性:状态和时间的分离 一文搞懂可验证延迟函数 VDF 若想搞懂區塊鏈就不能忽視的經典:PBFT Cryptography Mailing List Bitcoin P2P e-cash paper
声明:本内容为作者独立观点,不代表 CoinVoice 立场,且不构成投资建议,请谨慎对待,如需报道或加入交流群,请联系微信:VOICE-V。
简介:前沿金融科技精英读物
评论0条