主页 > imtoken钱包安卓版手机下载 > 回声 | 工作量证明本质上是一个去中心化的时钟

回声 | 工作量证明本质上是一个去中心化的时钟

编者注:这篇文章的译文发表在 EthFans 网站上,请参阅 。

这篇文章将解释“工作量证明”在比特币区块链上的关键作用。 我们将只关注工作量证明机制最关键的特性之一,并论证其他特性(例如安全性)只是附带的、有用的,但不是必不可少的特性。

本文中的解释基于说明工作量证明在区块链使用中的一些有趣属性。 它们通常不直观,有时甚至违反直觉。 例如,通过工作量证明,一群人可以在不相互交流的情况下共同解决一个问题。

了解了这些有趣的性质后,你大概可以得出一个结论:工作量证明主要是一种实现“分布式和去中心化计时系统”(即时钟)的机制。

请注意,这篇文章不是在讨论工作量证明的原理,而是讨论区块链如何利用工作量证明。 如果你还不知道什么是工作量证明,你可以从这篇文章开始。

去中心化分类账中的时间顺序问题

在查看解决方案之前,让我们仔细看看问题所在。 许多关于工作证明的文章可能难以阅读,因为它们试图跳过问题并直接找到答案。

任何分类帐显然都需要有顺序。 就像一个人不应该花没有到的钱一样,一个人不应该花已经转移给别人的钱。 区块链上的交易必须有清晰的交易顺序,不依赖第三方机构。

即使区块链不做账本,只是某种日志(因为每个节点都有相同的区块链副本),也需要对发生的事情有一个顺序。 顺序不同,结果明显不同; 如果顺序不同,它就变成了另一个区块链。

但是如果交易是由世界各地的匿名用户产生的,并且没有中央机构负责整理它们,我们如何对交易进行排序? 例如,交易(或区块)包含时间戳,但在什么条件下这些时间戳是可信的?

时间只不过是一个人为的概念。 包括原子钟在内,所有时间报告的来源实际上都是“可信的第三方”。 但最重要的是,这些第三方中的大多数都不太正确。 由于网络延迟或相对论的影响,他们的结果会有所不同。 坐在飞机上的人和走在地上的人之间会出现“时间膨胀”的现象。 这个错误会逐渐累积,最终扭曲排名。 因此,在去中心化和地理分散的系统中,依靠时间戳来确定时间顺序是不可能的。

我们这里说的其实不是传统意义上的“时间”概念,不是“年月日”。 我们需要的是一种机制,使我们能够验证一个事件是否先于另一个事件发生。

首先,要使用“之前”、“之后”等描述,首先要确立“时间点”的概念。 乍一看,在时间轴上建立一个特定的点似乎是不可能的,因为目前还没有足够精确的技术来测量普朗克(一个时间单位,约等于 5.391247×10^-44 秒)。 但正如您稍后将看到的,这就是比特币的运作方式——它可以通过创建自己的时间概念来识别时间轴上的特定点。

这个问题在 1978 年 Leslie Lamport 的《Time, Clocks, and the Ordering of Events in a Distributed System》中有详细描述。但实际上比特币最小计量单位,这篇文章除了“适当同步物理时钟”之外,并没有提出任何激进的解决方案。 1982年,兰波特还提出了“拜占庭将军问题”(Byzantine Generals Problem)。 中本聪在他早期的电子邮件中解释了工作证明如何解决这个问题。 然而,他在比特币白皮书中写道:“要在点对点的基础上使用去中心化时间戳服务器,我们需要使用工作量证明系统”。 这句话表明工作量证明主要是用来解决时间戳排序的问题。

时间排序是根本问题

这里必须强调的是,在中本聪想出解决方案之前,去中心化系统中事件与时间点关系的确定难度使得去中心化账本成为不可能。 区块链还有很多其他的技术细节值得玩味,但时机仍然是最基本也是最重要的一点。 我们甚至可以认为,如果不能完成时间排序,就不可能有区块链。

简单回顾“工作量证明”

简单来说,比特币上的工作量证明就是通过SHA-2哈希函数运算后,找到一个满足一定条件(小于一定值)的值(得到的哈希值)。 并且这个要求的值越小,可能满足条件的输入值就越少,越难找到这样的输入值。

这种机制之所以被称为“工作量证明”,是因为满足条件的值太少了。 找到这样的数字需要大量的尝试(也就是工作)。 需要耗费的工作量反过来意味着需要耗费的时间。

通过改变要求,我们可以调整难度以及找到这样一个值的可能性。 比特币难度的动态调整,让整个网络平均每十分钟找到这样一个值。

块之间没有任何反应

链的状态是在链上的块中执行事务的结果。 所以每个新块都会生成一个新状态。 因为区块链的状态随着每一个新的区块不断变化,我们看一个区块生成的平均时间(十分钟)是区块链时间的最小计量单位。

SHA 函数是无记忆和无过程的

安全哈希算法在统计学上被称为无记忆的。 这种特性显然违反人类的直觉。 无记忆的最好例子是抛硬币。 如果一枚硬币连续十次正面朝上,是否意味着下次出现反面的可能性更大? 直觉告诉我们,“是”。 但实际上,无论之前的记录如何,正面或反面的概率仍然是 50/50。

这种无记忆是工作证明的无过程性质的先决条件。 Processless是指当矿工在挖矿时反复尝试不同的nonce,每次尝试都是一个独立的事件。 无论他们付出了多少努力,随后的每次尝试都有相同的概率找到正确的结果。 换句话说,每次不成功的尝试都不会让矿工“更接近”正确的结果。 尝试挖矿一年的矿工与刚开始挖矿的矿工相比,到达下一个区块的可能性不大。

因此,在给定的难度下,在给定的时间内找到结果的概率只取决于所有矿工遍历可能的哈希值的速度,与过去的历史无关,也与区块数据无关,只与哈希率有关(哈希率,哈希运算完成的速度)。

哈希率实际上是矿工数量和挖矿设备计算哈希值速度的函数。

(注:严格意义上的SHA并不是processless,因为hash值的个数是有限的。但即便如此,因为256位整数的范围太大,我们实际上认为它是processless的process。)

SHA函数的输入值不重要

在比特币区块链中,工作量证明算法的输入值是一个区块的区块头(包括区块中交易数据的一些摘要信息,以及前一个区块的哈希值)。 但是即使我们只是随机输入一些数据,找到需要的哈希值的概率还是一样的。 不管输入的是有效的区块头还是一些随机字节,找到正确结果的时间平均仍然是十分钟。 当然,如果你真的把随机内容作为输入值,即使你找到了结果,你的区块也不会被打包到区块链上。 这种情况虽然也算是工作量证明,但是没有用。

全宇宙难度统一

你知道困难是普遍的吗? 这意味着,在整个宇宙之中,无论是在什么地方,难度都是一样的。 所以,我们可以请火星上的矿工帮忙挖矿。 他们不需要认识地球上的矿工,甚至不需要交流。 全网依然每10分钟挖出一个区块。 (嗯,其实他们得想办法告诉我们地球人,他们先挖了一个街区比特币最小计量单位,不然挖了我们也不知道。)

很明显,远程参与的矿工们之前彼此之间没有任何交流,因为他们只是想一起解决同一个数理统计问题。 他们实际上并不知道彼此的存在。

这个“统一”属性看似神奇,其实很好理解。 我说“团结”是因为它是一个容易理解的词。 但准确地说,是指“每个矿工都知道”。

SHA-256哈希函数的输入值可以是0到2^256之间的任意整数(因为输出值是32位字节,所以也在0到2^256之间;任何更大的值都会有相同的哈希值作为先前的值,或者是多余的)。 虽然这是一个非常大的数字(甚至比已知宇宙中的原子数还要多),但至少每个人都知道范围并可以从中选出一个值。

如果每个人都知道输入值的范围、使用的函数 (SHA-256) 和难度要求,那么找到解决方案的概率对所有人都是统一和公平的。

做矿工也很简单,计算SHA即可

如果问题是你要找到一个合适的哈希值,那么你需要做的就是尝试运行一次哈希函数,然后“叮”,你已经影响了全局哈希率(global hash rate)。 因为这个尝试,你也可以被看作是一个矿工,帮助别人一起解决这个问题。 你不需要告诉别人你做了什么(除非你找到了最终的解决方案),别人也不需要知道。 无论哪种方式,您的尝试都会影响整体结果。 一点都不夸张。

如果你还有点怀疑,没关系,想想一个类比——找到最大的质数。 这道题很难,一旦找到一个更大的素数,这个数就算是“找到”和“已知”了。 在数字世界中,有无穷多个素数。 但是因为我们都使用相同的数字系统,所以无论谁试图解决这个问题,我们都面临着同样的问题。 你不需要告诉别人你决定要找到最大的素数,你只需要等到你真正找到解决方案。 如果没有人愿意去研究这个问题,就永远找不到解决问题的方法。 所以,只要公布最终结果,参与的程度(即反复尝试寻找结果的次数)都会影响结果,即使参与过程是完全保密的。 从这个角度来看,中本聪发明的机制真是高明——利用上面的逻辑,秘密参与过程和不成功的尝试都会影响最终的结果。

值得注意的是,由于 SHA 函数是无过程的,因此每次尝试都可以视为参与者在做出努力后立即离开网络。 因此,我们可以假设矿工每秒进出网络无数次。

参与度显示在统计数据中

魔法秘密参与属性也相反。 全球哈希率(global hash rate)之所以能为大家所知,并不是因为矿工在“矿工登记处”注册,然后上报自己的哈希率,根本不是这样。

算力之所以能够被大家所熟知,其实很简单。 某人在某个地方每十分钟左右找到一定难度的解决方案需要这么多次尝试(大约 10^21)。

我们不知道这些参与者是谁,他们也不需要告诉别人他们在工作。 此外,它们可以存在于宇宙中的任何地方。 但可以肯定的是,这些参与者(矿工)一定存在。 因为网络在不断地产生区块,也就是在不断地寻找满足要求的解。

工作负载作为时钟

综上所述,我们可以知道工作量证明的核心:挖矿的难度要求是时钟。 喜欢就叫它“宇宙钟”吧,它不需要与任何人同步,每个人都可以“看到”它。

没关系,这个时钟不准确。 重要的是每个人都有相同的时钟,并且链条的状态可以明确地与这个时钟的滴答声相关联。

该时钟由未知数量参与者的集体哈希率总和驱动; 分散在地球上,彼此没有联系。

最后一块拼图

工作量证明问题的解决方案必须是区块的哈希值(准确地说是区块头)。 正如我们之前所说,输入值并不重要。 但是,如果它是一个真正的块,那么当找到解决方案时,就是时钟“滴答”的时刻。 不是之前,不是之后,而是在那一刻。 我们非常确定,因为块是机制的一部分。

换句话说,如果 SHA256 函数的输入值不是一个块,我们仍然有一个时钟,但是没有办法将块与时钟的滴答关联起来。 使用块作为输入值可以很好的解决这个问题。

值得注意的是,我们的工作量证明时钟只能给我们计时。 但是我们听不到滴答声的顺序。 来回连接的哈希链用于解决这个问题序列)。

分布式共识是什么?

共识意味着一致同意。 所有参与者都必须遵守的一项规则是时钟会滴答作响。 此外,每个人都可以听到滴答声并知道与每个滴答声相关的数据。 正如中本聪在一封电子邮件中提到的那样,这实际上解决了拜占庭将军问题。

还有另一种共识是为处理特殊情况而设计的——两个连续的报价与冲突的区块相关联。 这种冲突只能通过等待下一次报价发生来解决。 当与 tick 关联的下一个块出现时,它后面是两个先前冲突的块之一。 这使得另一个块成为“孤立块”。 一条链会如何发展是一个概率问题,但也可能或多或少与工作量证明时钟有关。

大概就是这样

以上就是工作量证明在区块链上的作用。 矿工不会通过购买“彩票”来赢得打包区块的权利,也不会将电能转化为有价值的东西。 这些说法走得很远。

彩票这个词无非是为了吸引更多的矿工参与挖矿。 它不是区块链本身运行的机制。 可能有人会说区块的哈希值形成一条链,但这与工作量证明无关,只是用密码学加强了区块顺序的记录。 哈希链还确保之前的报价越来越不可变且越来越安全。

工作量证明机制还增强了块的不变性。 这也顺便让隔离见证(Segregated Witness)变得可行,不过也可以通过保留签名(witness)来实现。 所以这个角色只是次要的。

总结

比特币区块链的工作量证明实际上是一个分布式、去中心化的时钟。

如果你理解了这个解释,那么你应该更好地理解工作量证明和权益证明之间的区别。 显然,两者根本不同:权益证明是权力(使用随机性分布),而工作证明是时钟。

在讨论区块链时,我们说“工作量证明”不太合适。 该术语是从 Hashcash 项目流传下来的; 它用于工作证明的地方。 在区块链上,主要用于获取可验证的时间序列。 当一个人看到满足难度条件的哈希时,他/她就知道生成哈希一定需要一些时间。 而这个时间是由“工作量”引起的。 但是这个哈希值之所以有意义,是因为它证明了它是经过一段时间产生的。

工作证明主要是关于时间,而不是工作; 这一事实也指出,可能还有其他更耗时但需要更少精力的统计问题。 这个事实也意味着比特币的哈希率实际上太多了。 我们前面提到的比特币时钟实际上只需要一小部分哈希率就可以顺利运行。 然而,奖励机制的存在刺激了能量消耗。

找到一种以更少的工作享受更快的滴答率的方法很困难,如果你找到了,请告诉我!

此外,我要特别感谢 UChicago Statistics 的 Sasha Trubetskoy 对本文的修改和建议。

(结束)

(本文链接较多,可点击左下方“阅读原文”从EthFans网站获取)

原文链接: