本文将解释“工作量证明”在比特币区块链中的关键作用。我们将只关注工作负载证明机制的一个最关键的特性,并证明其他特性(如安全性)是有用但不是必需的附带结果。
本文通过实例说明了区块链在应用中的有趣性质。他们往往不那么直观,有时甚至反直觉。例如,工作量证明,一组人可以一起解决问题,而不必互相沟通。
在理解了这些有趣的特性之后,您可能会得出这样的结论:工作负载证明主要是实现“分布式和去中心化计时系统”(即时钟)的机制。
请注意,本文不讨论工作负载证明的原理,而是区块链如何使用工作负载证明。如果您不知道什么是工作量证明,请从本文开始。
去中心化账本的时序问题
在我们研究解决方案之前,让我们仔细看看这个问题。许多关于工作量证明的文章读起来晦涩难懂,因为它们试图跳过问题,直接解释答案。
很明显,任何一本书都需要整理。正如一个人不应该花掉一笔未付的钱,他也不应该用一笔转移给别人的钱。区块链上的交易必须明确有序,不依赖第三方机构。
即使区块链不保存账本,只做某种日志(因为每个节点都有相同的区块链副本),它也需要对发生的事情进行排序。如果排名不同,结果明显不同;如果排序不同,则成为另一个区块链。
但是,如果事务是由全世界的匿名用户生成的,并且没有中央组织来进行分类,那么我们如何对它们进行排序呢?例如,事务(或块)包含时间戳,但在什么情况下这些时间戳是可信的?
时间只是一个人为的概念。所有的时间来源,包括原子钟,实际上是一个“可信的第三方”但最重要的是,这些第三方在大多数情况下并不完全正确。因为网络延迟或相对论效应会使结果不同。坐在飞机上的人和在地上行走的人之间会出现“时间膨胀”的现象。这种误差会逐渐积累,最终使排序失真。因此,在一个去中心化的、地理上去中心化的系统中,不可能通过使用时间戳来确定时间的顺序。
我们这里说的不是传统的“时间”概念,也不是“年、月、日”的概念。我们需要的是一种机制,允许我们验证一个事件是否在另一个事件之前发生。
首先,为了使用“前”和“后”的描述,我们必须确立“时间点”的概念。乍一看,似乎不可能在时间线上建立一个特定的点,因为没有任何技术可以精确测量普朗克(时间单位,约5.391247×10^-44秒)。但正如您稍后将看到的,这就是比特币的工作原理-它可以通过创建自己的时间概念来确定时间轴上的特定点。
Leslie Lamport于1978年发表的文章“time,clocks,and the ordering of events in a distributed system”(分布式系统中的时间、时钟和事件顺序)中对此问题进行了详细解释。然而,事实上,除了“适当同步的物理时钟”之外,本文并没有提出任何彻底的解决方案。1982年,兰波特还提出了拜占庭一般问题。中本在早前的电子邮件中解释了工作量证明如何解决问题。然而,他在比特币白皮书中写道:“要在对等基础上使用去中心化的时间戳服务器,我们需要使用工作负载证明系统。”这句话表明,工作负载证明主要用于解决时间戳排序问题。
时间排序是最基本的问题
必须强调的是,在Nakamoto提出解决方案之前,不可能确定去中心化系统中事件和时间点之间的相关性,这使得去中心化账本不可能存在。区块链中还有许多其他的技术细节值得深思,但时机仍然是最基本和最重要的一点。我们甚至可以认为,如果我们不能完成时间排序,就不会有区块链。
“工作量认证”简介
简言之,比特币的工作负载证明是在SHA-2的哈希函数运算后找到一个满足一定条件(小于一定值)的值。所需值越小,满足条件的输入值就越少,而且找到这样的输入值就越困难。
这种机制之所以被称为“工作负载证明”,是因为满足条件的值太少。找到这样一个数字需要大量的努力(即工作量)。而需要花费的工作量则意味着需要花费的时间。
通过改变需求,我们可以调整找到这样一个值的难度和可能性。比特币难度的动态调整使网络平均每10分钟找到一个这样的值。
街区之间什么事也没发生
链的状态是在链上的块中执行事务的结果。因此,每个新块生成一个新状态。由于区块链的状态会随着每个新区块的生成而变化,因此我们将生成区块所需的平均时间(10分钟)作为区块链时间的最小计量单位。
Sha函数没有内存和进程
在统计学中,安全哈希算法被认为是无内存的。这一特征显然与人类的直觉背道而驰。无记忆**的例子就是抛硬币。如果一枚硬币已经连续面朝上十次,这是否意味着下次它更有可能面朝上?直觉告诉我们,“是的。”但事实上,无论之前的纪录如何,面对上下的概率仍然是半开半掩的。
这种无记忆性是无进程工作负载证明的前提。非程序性意味着,当矿工在挖矿时重复尝试不同的一次性操作时,每次尝试都是一个独立的事件。不管他们做了多少努力,找到正确结果的概率对于以后的每一次尝试都是一样的。换言之,每一次失败的尝试都不能让矿工们“更接近”正确的结果。一个一年来一直试图挖矿的矿工不会比一个刚开始挖矿的矿工更容易到达下一个街区。
因此,在给定的难度下,在给定的时间内找到结果的概率只取决于所有矿工遍历可能的哈希值的速度,这与过去的历史或块数据无关,而只与哈希率有关。
哈希率实际上是矿工数量和挖矿设备计算哈希值的速度的函数。
(注意:Sha不是严格的过程,因为散列值的数量是有限的。但即便如此,由于256位整数的范围太大,实际上我们认为这是非过程性的。)
Sha函数的输入值不重要
在比特币区块链中,工作负载证明算法的输入值是块的块头(包括块中交易数据的一些摘要信息,以及上一块的哈希值)。但即使我们只是随机输入一些数据,找到一个好的散列的概率是相同的。无论我们输入一个有效的块头或一些随机字节,我们平均花费10分钟的时间来找到一个正确的结果。当然,如果你真的把随机内容作为输入值,即使你找到结果,你的区块也不会打包到区块链上。虽然这种情况可以被视为工作量的证明,但没有用。
困难是普遍的
你知道,困难是常见的。这意味着在宇宙的任何地方,困难都是一样的。所以我们可以请火星上的矿工帮我们挖矿。他们不需要了解地球上的矿工,他们甚至不需要交流。整个网络仍然每10分钟挖一个街区。(好吧,事实上他们必须想办法告诉我们地球人他们已经挖出了石块,否则我们不知道他们是否挖出了石块。)
显然,远程参与的矿工彼此之间几乎没有交流,因为他们试图一起解决同一个数理统计问题。他们彼此不认识。
这种“统一”的属性似乎是超自然的,但实际上它是很好理解的。我说“团结”是因为这很容易理解。但准确地说,它意味着“每个矿工都知道”
SHA-256哈希函数的输入值可以是0到2^256之间的任意整数(因为输出值是32位字节,也可以是0到2^256之间;任何更大的值都将具有与前一个值相同的哈希值,或者是冗余的)。尽管这是一个非常大的数字(甚至比已知宇宙中原子的数量还要多),但至少每个人都知道这个范围,并且可以从中进行选择。
如果所有人都知道输入值的范围、使用的函数(SHA-256)和难度要求,那么找到解决方案的概率是一致的,对所有人都是公平的。
当矿工很容易,沙伯爵就行了
如果问题是要找到一个合适的散列值,只需尝试运行一次散列函数并“叮”一下,就会影响全局散列率。因为这个尝试,你也可以被看作是一个矿工,帮助别人一起解决问题。你不必告诉别人你做了什么(除非你找到了最终的解决方案),其他人也不需要知道。但无论如何,你的尝试会影响整体结果。一点也不夸张。
如果你仍然有点怀疑,想想找**质数的类比。这个问题非常困难,一旦找到一个更大的素数,这个数就会被视为“找到”或“已知”在数字世界里,素数是无限的。但是因为我们使用的是同一个数字系统,无论是谁试图解决这个问题,我们都面临着同样的问题。你不必告诉别人你已经决定找到**的素数。你只要等到找到解决办法。如果没有人想研究这个问题,那么就永远找不到解决办法。所以,只要公布最终结果,参与(即试图寻找结果)就会影响结果,即使参与的过程完全保密。这样看来,中本发明的机制真是妙不可言——运用上述逻辑,秘密参与的过程和不成功的尝试都会影响到最终的结果。
值得注意的是,由于Sha功能是非程序性的,每一次尝试都可以看作是参与者在做出努力后立即离开网络。因此,我们可以想象矿工们每秒无数次地进出网络。
参与情况将在统计中公布
魔法秘密参与属性也成立。之所以可以知道全球散列率,并不是因为矿工们已经在“矿工登记处”注册,然后报告各自的散列率。事实并非如此。
散列率可以被知道的原因很简单。要想每隔十分钟左右找到一个特定困难的解决方案,就要花很多次(大约10^21)的尝试才能在某个地方完成。
我们不知道这些参与者是谁,他们也不必告诉任何人他们在工作。此外,它们可以存在于宇宙的任何地方。但可以肯定的是,这些参与者(矿工)必须存在。因为网络不断堵塞,就是要找到符合要求的解决方案。
工作量就是时钟
综上所述,我们可以知道工作量证明的核心:挖矿的难度要求是一个时钟。如果你愿意,就叫它“宇宙钟”它不需要与其他人同步,每个人都可以“看到”它。
时钟是否准确无所谓。重要的是,每个人的时钟都是一样的,而且链条的状态可以明确地与当时时钟的滴答声联系起来。
时钟是由未知数量的参与者散列率之和驱动的,这些参与者去中心化在地球上,彼此无关。
**一块拼图
工作负载证明问题的解决方案必须是块的哈希值(确切地说,是块头)。如前所述,输入值不重要。然而,如果它是一个真正的块,找到解的时间就是时钟的“滴答”时刻。在那之前或之后,或在那一刻。我们很确定,因为块是这个机制的一部分。
换句话说,如果sha256函数的输入值不是一个块,我们仍然有一个时钟,但是我们不能将该块与时钟滴答连接起来。这个问题可以通过使用块作为输入值来解决。
值得注意的是,我们的工作量证明,时钟只能给我们提供一个滴答声。但我们不能从点击中分辨出顺序。一个哈希链被用来解决这个问题。
分布式共识呢?
共识就是共识。所有参与者都必须遵守的规则是时钟会滴答作响。此外,每个人都能听到滴答声,并知道与每个滴答声相关的数据。正如中本在一封电子邮件中所说,这实际上解决了拜占庭式的普遍问题。
还有另一种共识是专门为处理特定情况而设计的——连续两次点击与冲突块相关。这种冲突只能通过等待下一个滴答声来解决。当与记号相关联的下一个块出现时,它后面将跟上一个冲突中的两个块之一。这会把另一个街区变成“孤立的街区”一个链最终将如何发展是一个概率问题,但它或多或少与工作负载证明时钟有关。
就这样
以上是工作负载证明对区块链的影响。矿工们买“彩票”并不是为了赢得一个区块的挖矿权,也不是为了把电能转换成有价值的东西。
彩票无非是为了吸引更多的矿工参与挖矿。它不是区块链运作的机制。有些人可能会说块的哈希值形成了一个链,但这与工作负载证明无关。它只是利用密码学来加强块顺序的记录。哈希链还可以确保以前的滴答声变得越来越不可变和安全。
工作负载证明机制还增强了块的不变性。这也有使孤立证人可行的副作用,但也可以通过保留签名来实现。所以这个角色只是次要的。
总结
比特币区块链的工作负载被证明是一个分布式和去中心化的时钟。
如果你理解了这个解释,你就应该更清楚地理解工作量证明和权利证明之间的区别。显然,两者本质上是不同的:权利的证明是力量(随机分布的),而工作量的证明是一个时钟。
当讨论区块链时,我们说“工作量证明”是不合适的。这个词是从hashcash项目传递下来的,在该项目中,它用于演示工作量。在区块链上,主要用于获取可验证的时间序列。当一个人看到一个散列满足困难条件时,他/她就知道生成散列值肯定需要一些时间。“这段时间的工作量”但是这个散列之所以有意义是因为它证明了它是在一段时间内生成的。
事实证明,工作量更多的是时间而不是工作;它还指出,可能还有其他统计问题,消耗更多的时间,但需要较少的精力。这也意味着比特币实际上有太多的哈希值。我们前面提到的比特币时钟实际上只需要hashrate的一部分就可以顺利运行。然而,奖励机制的存在刺激了能量消耗。
很难找到一种用更少的工作量享受更快的滴答率的方法。如果你找到了,请告诉我!
此外,我还要感谢uchicago Statistics的Sasha trubetskoy,感谢他们的修订和建议。
文章标题:工作负载证明本质上是一个分散的时钟
文章链接:https://www.btchangqing.cn/78585.html
更新时间:2020年08月04日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。