社会热点
比特币白皮书讲解(二)
2026-04-01 11:25
比特币白皮书讲解(二)

上一篇,我们一起解读了比特币白皮书的简介,第一章,第二章的内容,这一篇我们继续。(注:文章中双引号部分是白皮书原文)

“3.时间戳服务器time stamp serve

我们提出的方案从时间戳服务器开始。时间戳服务器计算包含多个需要被打时间戳的数据项的区块的哈希值并广泛地发布这个哈希值,就像在报纸或新闻组帖子里 [2-5]。时间戳能证明要得到这个哈希值,显然这些数据当时一定是存在的。每个时间戳的哈希值都纳入了上一个时间戳,形成一条链,后面的时间戳进一步增强前一个时间戳。”

论文的第三章是时间戳服务器,time stamp server

这一章很短,只有一段话和一张图,主要是强调将时间戳信息纳入区块信息中,所谓说时间见证了一切。图中就是一个个区块构成的链,也就是区块链。比特币大概每10分钟产生一个新的区块,每个区块中记录了这段时间所有的交易信息

这些区块的数据加上前一个区块的哈希值,再打上时间戳,就构成了当前区块的哈希,这个哈希还要参与下一个区块哈希的运算。这就让所有区块像编年史一样,按照时序紧密的连接,你中有我,我中有你,并且同步到所有节点。

因此历史区块信息几乎无法篡改,因为当要修改某个区块数据,就要修改其后所有已生成区块的哈希数据,还要让大多数节点形成共识,我们后面将证明这几乎不可能。

“4.工作量证明Prof of Work

为了实现一个基于点对点的时间戳服务器,我们需要使用一个类似AdamBack  提出的哈希货币 [6] 的工作量证明系统,而不是报纸或新闻组帖子那样。工作量证明采取搜索一个数,使得被哈希时(如使用 SHA-256)得到的哈希值以数个 0 比特开始。平均所需工作量将随所需0 比特呈指数级增长而验证却只需执行一次哈希。

对于我们的时间戳网络,我们通过在区块中加入一个随机数,直到使得区块的哈希值满足所需 0比特的数被找到的方式实现工作量证明。一旦消耗了 CPU 算力使区块满足了工作量证明,那么除非重做这个工作否则就无法更改区块。由于后面的区块是链接在这个区块后面的,改变这个区块将需要重做所有后面的区块。

工作量证明同时解决了在多数决定中确定投票方式的问题。如果多数是按 IP地址投票来决定,那么它将可能被能分配大量 IP地址的人破坏。工作量证明本质上是按 CPU 投票。最长的链代表了多数决定,因为有最大的计算工作量证明的算力投入到这条链上。如果多数的 CPU 算力被诚实节点控制,诚实的链就会增长得最快并超过其他的竞争链。要修改过去的某区块,攻击者必须重做这个区块以及其后的所有区块的工作量证明,从而赶上并超过诚实节点的工作。我们后面会证明随着后续的区块被添加一个更慢的攻击者赶上诚实节点的概率将呈指数级递减。

为了抵消硬件运算速度的增加及平衡不同时期运行节点的利益,工作量证明的难度将由移动平均数法来确定每小时生成区块的平均数。如果区块生成得过快,那么生成的难度就会增加。”

第四章是工作量证明,Prof of Work, 也就是POW

前面提到整个账本是由全体分布式节点来共同维护,那么接下来就面临谁拥有记账权的问题?

中本聪通过引入了工作量证明机制,公平有效的解决了这个问题。 POW理念早在亚当贝克的《哈希现金》中就使用过。

中本聪设计的工作量证明,就是让所有节点去计算一个哈希数值,并且尽可能的小,满足一个不等式。这个计算的复杂度,随着目标值的变化而动态的调整,目标值越小,难度就越大。

实践中会让这种复杂度维持在合理的计算成本下,大概10分钟左右计算出来一次的水平。这其实就是矿工挖矿的过程,也就是大量的算力,计算SHA256哈希数值,来寻找一个解。这种算法的好处是,计算随着目标值的减小成指数级的增长,但是验证起来却非常的简单,只需要执行一次哈希就可以了。

为了保证每次工作量证明都是重新计算,每个区块中还会加入一个随机数Nonce正如图中所示,每个区块中就包含了前一个区块的哈希,一个随机数,以及所有的交易数据的默克尔根。

中本聪在这一章节的最后,又进一步的解释道,工作量证明还解决了在多数决定中确定投票方式的问题。这一点怎么理解呢?

工作量证明本质上是按CPU的算力来投票,最长的那条链它代表了最多数的投票结果,因为它有最大的工作量证明的算力投票到这条链上。如果多数的CPU算力被诚实的节点所控制,那么诚实的链就会增长得最快,并且超过其他的竞争链。

前面提到过要修改过去的一个区块信息,那么其后已产生的区块信息都要修改,因为它们包含了前面区块的哈希值。但是从在一章我们看到,要修改区块没有那么简单,因为需要记账权,也就是工作量证明,这个成本极其高,也就是说要修改过去的某个区块,攻击者必须要重新做这个区块,以及其后所有区块的工作量证明,从而才能赶上并且超过当前诚实节点已经达成共识的这条最长链。

这种概率会随着后续区块的增长而大大的减小,成本也会远远大于收益。我们会在11章中证明这个观点,为了抵消硬件运算速度的增加,以及平衡不同时期运行节点的利益,工作量证明的难度会由一种移动平均数法来确定每小时生成区块的平均个数,这里面中本聪他考虑到了摩尔定律,因为几年后或者几十年后,运算的能力会大大的提升,但是这也没有关系,如果区块生成的过快,系统会让区块的生成难度增加,最终还是保持在10分钟的水平。如何能够设计有效的机制来部署整个分布式网络呢?

“5.网络Network

1)运行网络的步骤如下:

2)新交易向所有节点广播。

3)每个节点将新交易收集到一个区块。

4)每个节点为它的区块寻找工作量证明。

5)当一个节点找到了工作量证明,就向所有节点广播这个区块。

6)节点只有在区块内所有交易都是有效的且之前没有被支付的情况下接收这个区块。

节点通过使用这个区块的哈希值作为上一个哈希值,在链中创建下一个区块的方式表示对这个区块的接受。

节点总是认为最长的链为正确的并持续致力于延长它。如果两个节点同时广播了不同的下一个区块,有些节点可能先收到其中一个而其他节点先收到另一个。这种情况,节点基于他们收到的第一个区块工作,但是也保存另一个分支以防它变为更长的链。当下一个工作量证明被找到后僵局就会被打破,从而其中一个分支变得更长;在另一个分支上工作的节点将切换到更长的链上来。

新交易的广播不必到达所有的节点。只要到达一些节点,不久就会进入到一个区块。区块广播也是能容忍消息丢失的。如果一个节点没有收到某个区块,它将在收到下一个区块时发现它丢失了一个区块然后去请求这个区块。”

中本聪在第五章网络Network中给了一个解答,运行整个比特币网络可以分为六个步骤,

第一步,每一笔新的交易都要向所有节点进行广播。

第二步,每个节点要将新交易收集到一个区块中。

第三点,每个节点要为它的区块寻找一个工作量证明。

第四点,当一个节点找到了工作量证明,就要向所有的节点广播这个区块。

第五点,节点只有在验证区块内所有交易都是有效的,而且没有双重支付的情况下,才能接收这个区块。

最后一步,节点使用这个区块的哈希值作为上一个区块哈希值,记录在新区块中,这就表示接受了这个区块。

一个诚实的节点必须要遵循上面六点要求。节点总是认为最长的链是正确的,并且持续的维护和延长它。如果两个节点同时广播了不同的新区块,有些节点可能先收到其中一个,而其他节点先收到另一个,这种情况下节点基于它们先收到的区块来工作,但是也保存另一个分支,以防止它变成更长的链,就是说它要脚踏多条船。

当下一个工作量证明被找到后,这种僵局就会被打破,从而其中一个分支变得更长,在另一个分支上工作的节点将会切换到更长的链上,就是说节点要学会见风使舵。

新交易的广播不必达到所有的节点才会生效,只要达到部分节点,不久后这个交易就会打包进区块中,区块广播也是能容忍一定程度的消息丢失的,如果一个节点没有收到某个区块,它将在收到下一个区块时,发现它丢失了一个区块,然后再去请求这个区块,所以比特币系统它有很强的容错性。

天下熙熙皆为利来,天下攘攘皆为利往,显然想要完成复杂的工作量证明,也就是POW运算,需要大量诚实的网络节点的支持,并将一个个新区块的数据不断写入网络中,这个过程对节点来说需要大量的成本,如果没有利益是显然不现实的。

今天的这篇讲述了白皮书的三,四,五,三个章节的内容,下一篇继续解读

此公众号内容为区块链技术科普文章,不构成任何投资的意见和建议。

发表评论
0评