干货 | 比特币就是时钟(上)

时间是一条因果链

极端一点,整个世界无非就是一张关系网而已。——Tim Berners-Lee,《编织万维网》(1999)

伪造日期是一个普遍问题,并不仅仅存在于数字世界。例如,在绑架案中,绑匪就需要一种办法来证实绑票发生的时间。

- 时间证明 -

这个方法之所以可行,是因为报纸很难伪造,而且易于验证。由于报纸头版报道的都是前一天的事件,绑匪是不可能提前预知头版新闻、并提前几周就伪造好人质照片的。因此,照片中人质手持的报纸的发行日期就是人质在世的证明。

这个方法凸显了一个重要概念:因果关系。时间箭头反映了事件的因果关系。没有因果关系,就无所谓时间。在赛博世界,哈希函数对于解决时间戳问题来说至关重要,因为它引入了因果关系。如果没有某份文档,我们就无法生成对应的密码学哈希值,因此文档和哈希值之间存在因果关系:先要有数据,而后才能生成(该数据对应的)哈希值。换言之,如果没有单向函数的计算不可逆性,赛博世界中就不会存在因果关系。

- 先有 A,才有 B -

有了因果关系,我们就可以创建出一连串环环相扣的事件。因此,安全的数字时间戳方案得以为原本不存在时间的数字世界谱写历史。

因果关系决定了事件的时间顺序。如果一个事件由之前的某些事件引发,并且引发了之后的某些事件,则该事件在历史上的位置得以确定,不会再更改。——Bayer,Haber,Stornetta (1992)

毋庸置疑的是,因果关系对于经济计算而言至关重要。鉴于账本其实是多个合作方之间经济计算的具象化,因果关系对于每个账本而言同样至关重要。

我们需要一个能让所有参与者就唯一历史记录达成共识的系统 …… 我们提出的解决方案基于时间戳服务器。—— 中本聪(2009)

有趣的是,让比特币得以运作的所有组件其实早已存在。早在 1991 年,Haber 和 Stornetta 就介绍了两种 “可以有效防止时间戳造假” 的方案。一个是依赖于可信第三方的方案,另一个是更为复杂的 “分布式信任” 方案,无需依赖于可信第三方。两位作者甚至发现了信任事件因果链背后的固有问题,以及重写历史所需的条件。换言之,“有可能成功做恶的唯一方法是,准备好一条足够长的时间戳链,长到连最疑心最重的挑战者都怀疑不了的地步。”如今,比特币也存在一个类似的攻击向量,即 51% 攻击(详见下一节)。

一年后,Bayer、Haber 和 Stornetta 在之前的研究基础上提出使用 “默克尔树”,而非简单的链表将所有事件连接起来。默克尔树是一种简单高效的数据结构,可以根据多个哈希值计算出一个确定的哈希值。从时间戳的角度来看,这意味着一单位时间可以容纳多个事件。另外,这三位作者还提议对他们在 1991 年提出的分布式信任模型进行改进,即,不断举办 “世界冠军锦标赛” 来决定唯一的 “获胜者”,由获胜者在(类似报纸这样)公开的地方发布计算出的哈希值。听起来是不是很熟悉?

我们可以看出,报纸是一个绝佳的例子,能让我们更好地思考时间的第二个特性:不可预测性。

因果关系和不可预测性

时间不是现实(hupostasis),而是一种概念(noêma)或计量单位(metron)……—— 智者安提丰,《论真理》(公元三世纪)

因果关系虽然很重要,但是远远不够。时间流逝还离不开不可预测性。在物理世界,我们通过观察自然过程来描述时间的流逝。我们观察到熵是在不断增加的,并称之为时间箭头。尽管在大多数情况下,自然规律看似与时间箭头无关,但是某些事情实际上是无法撤销的。俗话说得好,破镜难圆。

同样地,数字世界也需要增熵函数来创建时间箭头。SHA256 哈希值和密码学签名并非绝对不可破解,但就像破镜几乎不可能重圆,SHA256 和密码学签名也几乎不可破解。

如果没有熵增,我们就可以任意更改时间戳。例如,斐波纳契数字的顺序具备因果关系,但不具有熵增特质。在斐波纳契数列中,每个数字都是由前两个数字相加得到的。因此,斐波纳契数列是一条因果链。但是,斐波纳契数列无法用来报时,因为它是完全可预测的。这就好比说,绑匪不能用人质和日历的合影来证明人质还活着。我们不能使用可预测的东西作为时间证明,只能使用无法提前预测的事物,如,当日报纸的头版。

比特币的不可预测性是通过交易和工作量证明实现的。就像没人能预测明天的报纸会刊登什么内容,也没人能预测下一个比特币区块长什么样。你无法预测区块中会打包哪些交易,因为你无法预测未来将有哪些交易被广播 。更重要的是,你无法预测谁会解开当前的工作量证明难题,以及得出的解是什么。

不同于报纸,工作量证明直接 与已经发生的事件联系起来。工作量证明不仅仅是事件的记录,而且是事件本身。正是这种基于概率的直接联系免去了工作量证明的信任需求。找到有效工作量证明的唯一方法是做出大量猜测,每次猜测都要花费少量时间。每找到一个解所需要的猜测次数是概率性的,从而构成比特币的时间链。

利用哈希链的因果顺序和工作量证明的不可预测性,比特币网络提供了一种机制,可以创建无争议的事件历史。如果没有因果关系,我们就无法区分事件先后。如果没有不可预测性,因果顺序就毫无意义。

关于上文提到的绑匪的做法,其实 Bayer、Haber 和 Stornetta 早在 1992 年就给出了明确解释:“如果要确定某个文档是在某个时间之后创建的,该文档必须记录已经发生但无法提前预料的事件。”

- 出版证明 -

正是因果关系和不可预测性的结合,我们才能在原本没有时间概念的数字世界中人为定义 “现在”。正如 Bayer、Haber 和 Stornetta 在 1991 年的论文中指出:“请求时间戳的客户端的顺序以及它们所提交的哈希值是无法预知的。因此,如果我们在签名证书中包含之前客户端请求序列的比特,就知道证书的时间戳晚于这些请求……证书中必须包括之前文档的比特这一要求也可以从另一个方向指明时间的先后,因为时间戳机构无法预先发行证书,除非它拥有此时此刻的请求。”

所有组件都在这里了。中本聪的高明之处在于将这些组件全都组合到了一起,从而免去对时间戳机构的需求。

时间证明

原因虽被深藏,结果却已知晓。—— 奥维德,《变形记》(公元 8 年)

让我们来概括一下:要想在数字世界花钱,我们必须依靠账本。要想账本变得可靠,我们必须明确交易顺序。要想明确顺序,我们必须使用时间戳。因此,如果我们想要在数字世界创造出免信任货币,我们必须移除任何创建并管理时间戳的实体,以及负责计时的单一实体。

天才如中本聪找到了解决方案:“为了实现点对点的分布式时间戳服务器,我们需要使用工作量证明系统,类似于 Adam Back 提出的哈希现金(Hashcash)。”

我们之所以需要使用工作量证明系统,是因为我们需要数字世界原生的东西。一旦你了解数字世界的本质是信息化的,那么显而易见的是,计算就是我们拥有的一切。如果你的世界是由数据组成的,就会存在数据操纵。

工作量证明是一种点对点机制,因为它无需信任。工作量证明之所以具备免信任性,是因为它与所有外部输入(如,时钟或报纸)隔绝。它只依赖于一样东西:计算离不开工作量的投入。在我们的世界里,产生工作量需要投入能源和时间。

通往时间的桥梁

我知道我已着魔。我们跑过桥 —— 熊熊燃烧的桥 ——火焰在身后肆虐,我们站在死亡边缘,亲爱的,你我正与世界为敌。—— Kate Bush,《燃烧的桥》(1985)

如果没有工作量证明,我们必然会遇到信息输入机制问题,因为物理世界和信息世界永远有隔阂。牧羊人数羊时在列表上做的标记并不是真正的羊,地图不能与真正的领土相提并论,报纸上的新闻也不一定是真实发生的事件。同理,即使你使用现实世界的时钟来创建时间戳,也并不代表实际时间就是如此。

坦白来说,我们无法相信数据代表了现实,除非是数据本身所固有的现实。比特币的难度可调节型工作量证明的高明之处在于,它创造了自己的现实,以及空间和时间。

工作量证明能够将数字世界和物理世界直接联系起来。只有这种连接是以免信任方式建立的。其它一切都依赖于外部输入。

比特币的出块难度是会调整的,从而维持比特币时间与人类时间之间的联系。就像发条一样,每挖出 2016 个区块,比特币系统就会重新调整挖矿难度。难度调整旨在将平均出块时间控制在 10 分钟,从而在物理世界和信息世界之间建立稳定的联系。因此,比特币时钟的走时需要根据人类的时间感知重新调整。纯粹基于时钟的难度调整是不可行的,因为这会将比特币与人类世界完全割裂。难度调整的目的就是防止人们的出块速度太快(或太慢)。

正如爱因斯坦告诉我们的那样,时间不是绝对的。没有什么所谓的宇宙时间。时间是相对的,同时性并不存在。仅凭这一事实,所有时间戳(尤其是跨越了遥远空间的)本质上都是不可靠的,即使参与者之间不存在对立也是如此。(顺带一提,这就是为什么 GPS 卫星的时间戳必须不断调整。)

对于比特币来说,人类时间戳并不精确这一事实不是很重要。一开始就没有绝对的参考系也不重要。时间戳的精确程度只需让以 2016 个区块为基数计算得出的出块时间足够可靠,即可。为了保证这一点,只有在满足以下两个标准的情况下,一个区块的 “物理世界” 时间戳才会被接受:

该时间戳必须大于之前 11 个区块的时间戳中位数。该时间戳必须小于网络调整时间加两小时。(“网络调整时间” 就是与你连接的所有节点返回的时间戳的中位数。)

换言之,难度调整就是保持时间恒定,而非 安全性、难度或能源消耗量恒定。该设计颇具独创性,因为良币 必须 具备很高的时间成本,而非能源成本。如果货币只与能源关联,并不足以产生绝对的稀缺性,因为一旦能源生产技术有了改进,我们就能创造出更多货币。时间是唯一一个无法再生的东西。正如 Julian Simon 所言,时间是终极资源。正因如此,比特币成了货币的终极形态,因为比特币的发行量与宇宙的终极资源(时间)直接相关。

难度调整至关重要。如果没有难度调整,随着越来越多矿工加入网络,或矿机效率提高,比特币的内部时钟就会越走越快。我们很快就会遇到协调问题。一旦出块时间降到某个阈值(如 50 毫秒)以下,系统就无法对某个共享状态达成共识,即使在理论上也是如此。光从地球的一侧到达另一侧需要大约 66 毫秒。因此,即使我们的电脑和路由器是完美的,我们也会束手无策:面对两个事件,将无法断言其先后顺序。如果我们不对比特币的出块时间进行周期性调整,就会陷入绝境 —— 必须以超越光速的速度解决协调问题。时间也是导致密码学不稳定性问题的根源(详见第一章)。密码学之所以能发挥作用,是因为利用了时间的不对称性:建起一道密码学墙壁只需要一瞬间,打破它却需要很久,除非你有密钥。

因此,从某种意义上来说,工作量证明以及难度调整都是在人为放慢时间,至少从比特币网络的角度来看是这样。换言之,比特币是在强行控制内部节奏,通过低频率为对等节点之间的通信延迟提供充足的缓冲空间。每挖出 2016 个区块,比特币的内部时钟都会重新调整。因此,平均每 10 分钟只会挖出一个有效区块。

从外部角度来看,比特币就是将在全球广播的异步消息集中到一个平行宇宙中。这个平行宇宙有自己的规则,以及时空观。从比特币网络的角度来看,交易池中的交易是没有时间属性的。只有被打包进有效区块的交易才会被赋予时间:该交易所在区块的编号。

- BitCoin v0.01 ALPHA (2009) -

这个解决方案之精妙已经无以言表。一旦你能够自行定义时间,就可以轻松辨别事件的先后顺序。因此,人们也可以轻而易举地在发生了什么、按照什么顺序,以及谁欠谁什么等问题上达成共识。

难度调整可以确保比特币的内部节拍器打出的拍子是恒定的。它是比特币这支乐团的指挥,可以让音乐永葆鲜活。

但是,凭什么认为,“工作量” 是一个最终值得依赖的东西呢?答案有三重。首先,因为计算需要投入工作量;产生工作量需要花费时间;而在我们这里,工作 —— 猜测随机数 —— 是无法取巧的。

基于概率的时间

时间无休止地生出岔路,通往无数个未来。——博尔赫斯,《小径分叉的花园》(1958)

为比特币区块找到有效的 nonce 就是一场猜谜游戏,类似于掷骰子、抛硬币或轮盘赌。本质上,你是在寻找一个天文数字。每一次猜测都不会让你更接近答案。要么猜中,要么重来。

每次你抛硬币,抛中正反面的概率都是 50% —— 哪怕你之前抛了 20 次,次次都是正面朝上。同样地,在比特币挖矿过程中,每一秒出现一个有效区块的概率都是 0.16% 左右。上个区块是什么时候找到的并不重要。找到下个区块之前需要等待的时间永远都一样:10 分钟左右。

因此,比特币时钟的每一次 “嘀嗒” 都是不可预测的。相比我们人类使用的时钟,比特币时钟似乎是粗糙且不准确的。正如 Gregory Trubet­skoy 所言:“这个时钟是否准确并不重要。重要的是,每个人的时钟都相同,并且整条链的状态与时钟的走时明确关联。”虽然比特币的时钟是基于概率的,但它不是一种幻觉。

时间是一种幻觉。午餐时间尤其如此。—— 道格拉斯•亚当斯,《银河系漫游指南》(1979)

然而,在比特币系统中,“现在” 绝对是一种幻觉。由于网络中没有中央机构,可能会有奇怪的情况出现。虽然不太可能,但是万一有两个人同时找到有效区块呢?(再次向所有物理学家致歉。)也就是说,两个不同位置的时钟同时嘀嗒了一声。这两个区块的内容很可能不同。它们虽包含不同的历史,但都同样有效。

这就是所谓的链分裂(chain split),是中本聪共识在运行中自然而然会出现的一种情形。就像迁徙中的鸟群,时而分成两列,时而合在一起。经过一段时间之后,比特币网络中的节点最终会形成一个共享的历史,这得益于猜测所带来的概率性。

中本聪共识只是简单地要求,正确的历史在最重的链(即,包含最多工作量证明的链)上。因此,如果我们有 A 和 B 两个历史,有些矿工会在 A 上续写历史,有些矿工会在 B 上续写历史。一旦某一方的矿工找到了下一个有效区块,另一方的矿工就会接受自己是在错误的历史上挖矿,并转向最重的链(根据定义,就是代表实际发生的事件的链)。在比特币中,历史是由胜利者书写的。

收款人需要有证据能够证明,每笔交易发生时,绝大多数节点认同它们最先收到了该交易……当同一笔交易存在多个支付对象时,只有一个是有效的。收款人必须等待一小时左右,然后才能相信这个交易是有效的。届时,网络就能解决一切有可能发生的多重花费竞赛。—— 中本聪(2009)

上面段话揭开了分布式协调问题的秘密。中本聪就是通过这种方式解决了上文提到的 “同时付款” 问题,而且是一劳永逸地。让相对论见鬼去吧!

由于比特币时钟具有概率性,“现在”(我们称之为链顶端)永远是不确定的。过去(链顶端以下的区块)永远是确定的。

若想理解得更深入,我们必须追溯到更早的时间。——Gordon Clark,《从基督教的角度理解人与物》(1951)

因此,对于某些对等节点来说,比特币时钟有时会倒退一两下。如果你的链顶端(现在)恰好输给了另一个链顶端,你的时钟就会先倒退再前进,覆盖你原先以为正确的历史。如果你的时钟具有概率性,你对历史的记忆也不得不如此。

嘀嗒嘀嗒 —— 几点了?嘀嗒嘀嗒…… 停在了c619。真是这样吗?会不会慢了?管它准不准:8 在 9 前不会错。这个钟不准,有时倒着走。准时才有鬼,中心化要不得!这个钟在嘀嗒,嘀嗒复嘀嗒,使坏也没好处,嘀嗒到下个区块。——一首关于比特币和时间的小诗(2020)

总结

时间依然是物理学最大的谜题之一,甚至引起了人们对物理学本身定义的质疑。——Jorge Cham 和 Daniel Whiteson,《我们一无所知:通往未知宇宙的指南》(2017)

追踪信息世界的事物就意味着追踪一系列事件,因此需要追踪时间。追踪时间需要就 “现在(永远连接过去和将来的时间点)” 达成共识。在比特币系统中,“现在” 是最重工作量证明链的端点。

对于时间结构来说,最重要的两个组成部分是:因果关系和不可预测事件。因果关系用来定义过去,不可预测事件用来构建未来。如果事件顺序是可预测的,就有可能跳过。如果每个事件之间没有联系,要改变过去就很容易。由于比特币系统定义了内部时间,作假难度极高。如果有人想作假,必须改写过去或预见未来。比特币的时间链可以有效防止这两点。

如果从时间角度来看待比特币,我们就应该清楚,“区块链(通过因果关系将多个事件连接起来的数据结构)”并非主要创新,甚至不是什么新想法。只要研究过前人关于时间戳的文献,我们就能发现这点。

区块链,就只是数据块组成的链条而已。—— Peter Todd

中本聪的创新之处在于,各方如何在没有中心化协调的情况下独立就事件历史达成共识。中本聪找到了一种实现去中心化时间戳机制的方法。该机制 (a)不依赖于时间戳机构或服务器,(b)不需要报纸或其它任何物理媒介作为证据,(c)可以确保走时节奏基本不变,即使是在 CPU 时钟时间更快的环境中运行也是如此。

计时需要 因果关系、不可预测性 和协调性。在比特币中,因果关系由单向函数提供,即,位于比特币协议核心的密码学哈希函数和数字签名。不可预测性是通过工作量证明难题和节点交互实现的:你无法提前预知其它节点在干什么,你也无法提前预知工作量证明难题的解。协调性是通过难度调整实现的,秘诀就是将比特币时间与人类时间联系起来。只有将物理世界和信息世界连接起来,我们才能只依赖于数据在时间上达成共识。

比特币是时间不只体现在一方面。比特币的最小单位 satoshi 是时间,因为它是货币;比特币的网络也是时间,因为它是一个去中心化时钟。正是因为比特币时钟孜孜不倦地转动,比特币才能具备这些神奇的特性。否则,整个比特币系统就会分崩离析。也正因如此,这一鬼斧神工般的互联网货币才能惠及所有人。

(完)

原文链接:

https://www.swanbitcoin.com/bitcoin-is-time/

作者:  Gigi

翻译&校对: 

闵敏 & 阿剑