读书笔记 · 2026年 7月 19日 0

区块链 – day 188

区块链之所以叫“链”,体现的就是区块与区块间串联的结构。注意是串联,它不是星型连接、环型连接,也不是并连,而是首尾衔接的串联。

在区块链中,每一个区块里都包含着成百上千条交易记录。只要经过检查合格了,就写在之前最后一个区块的后面。

那都检查什么项目呢?比如说,交易记录的签名对不对,比特币是不是重复使用了等。

这些检查工作由比特币矿工做。矿工检查合格后,就发送给其他矿工,其他矿工接到新区块也会先检查。如果检查合格,就把这个新区块添加在自己电脑里存储的那条链的最末尾。

不过同一时间有N多矿工都在做这件事,它们检查的那个新区块里的内容都是最近刚发生的交易。大概率说,一个新区块里的交易记录大多数是同时到的,但肯定还会略有区别,所以就会面临一个问题——它们会同时向网络提交N个不同版本的新区块。

比如说同一时间有200个不同版本的新区块出现,那选哪个为大家的标准呢?

比特币网络的解决办法是,限制单位时间里产生新区块的数量。

比如说,限制10分钟内只允许产生一个新区块,于是谁先检查完并上传了这个新区块,就以谁的为准。

2

当然,10分钟只是我举的例子。实际中,这个硬性的时间间隔,是通过让矿工完成两道数学题来保证的。

这两道数学题,一个简单,一个复杂。而这里就包含着密码学的部分,而且第一道简单题是区块链之所以能称为“链”的关键。

我们先说简单题,它是这样计算的:

计算出一个字符串,这串字符由3部分组成。第一部分是这个新区块内包含的成百上千的交易记录,第二部分是这个新区块的基本信息,最后一个部分是前一个区块的SHA256函数值。

三部分综合在一起,就是第一道题的结果,它是一串字符。

为什么说这是区块链之所以称为链的重要步骤呢?

就是因为当前区块要求包含前一个区块的SHA256函数值,于是区块与区块间就勾连起来了。任何一个区块都包含了它之前所有的历史,所以我们把它称为“链”。

好,简单题这样就算完了。对当今任何计算机来说,瞬间就可以计算完。

3

而第二道难题就不是瞬间了,一般来说需要整个比特币网络全部计算机加起来,运算大约十几分钟才能算完。

这道题之所以这样难,主要作用就是让提交新区块的人在时间间隔上可以拉开足够长的时间。以免发生咱们刚才说的新区块同时出现的问题,引起麻烦。

第二道题的题目是第一题的结果加一个随机数,组成一个新的字符串。这个新字符串用SHA256运算一下,会得到另一个256位的二进制数。

但什么才算答案正确呢?

得要求这个256位的数字,前72位全部都是0,才算答案正确。

你可能问了:你给我的可是个随机数啊,怎么可能这么巧合,算完后前72位都是0呢?是啊,那就得看运气喽。

具体要有多好的运气呢?我们可以算一下:

第一位是0的概率是1/2,第二位还是0的概率是1/4,这样延续下去,到了第72位仍然还是0的概率是1/2^72,也就是说要进行2^72次SHA256运算,整个比特币网络里,才有一次做对题目的机会。具体是谁做对的,说不好。你的算力越强,你的运气就会越好。

一旦有人做对了,经过软件检查,新区块就会被放在当前区块链的末尾。

对于其他矿工来说,虽然很羡慕,但客户端软件可没有情绪,它们按程序执行,检查新区块是否合格,合格的话就更新到自己的链的末尾,整个比特币网络承认了这个新区块。

好,这就是比特币网络确认新区块的过程。

4

我们回顾下,比特币区块链里的密码学是什么。

就是做2道题,1个简单,1个复杂。简单的那个起到的作用是,记录交易信息,再把前后两个区块串联起来;复杂的那个起到的作用是,让每个新区块诞生的时间间隔足够长,以免出现新区块同时产生的情况。

不论是哪道题,它们都只使用了SHA256函数,这是一种密码学相关的计算。

这些就是区块链上的密码学技术细节,到这里你就能知道,比特币只使用了浅显易懂的密码学应用,并没有发明什么新的加密法。但因为精心的设置,整条链一直运行了10年。

怎么说是精心的设置呢?

咱举个例子。你可能会问:如果计算机性能提升很多,没人用CPU计算难题2了,而用速度是CPU几千万倍的专用集成电路(ASIC)做运算,几毫秒就能算出来了,怎么办呢?

没关系。中本聪规定了,从某某序号的区块后,那个幸运的随机数的要求就变高了,不是前72位是零了,而要求前73位或者前74位是零,难度是从前2倍或者4倍了。而且这个难度是随着算力增加而增加的,这就保证新区块的生成时间总会有合理的间隔。

除此之外,就算网络里非常不幸,出现了短短几秒钟诞生2个新区块A和B的情况,还可以通过下个新区块是从A先长出来还是B先长出来来解决。

因为比特币网络还有个规则——整个比特币网络,只认可长度最长的那条链。

这个规则可以防止有人伪造比特币。比如当前进行到B100这个区块了,下一个应该是B101,但有人手工制作出来了另一个区块,跟B101不一样,咱们把它叫作M101。

这里的交易内容都是给他自己付钱,让他成为富翁的,所以这是伪造的嘛。但是,这样的伪造极难得逞。

因为M101后面的以M开头的侧链M102区块还是得他一个人做,M103也是。可另一条以B开头的主链上B101、B102、B103是全网所有人在做。全网速度远远快于一个人的算力,所以这个人做出的区块链,长度总会比全网主链要短。

而刚刚那条规则是,大家只认可最长的那条链,所以这个人即便伪造了交易记录,做出的那条侧链始终得不到认可,所以他没法伪造比特币。

只有一种情况下他会得逞,就是他一个人的算力超过所有其他人的总和,那时他制作新区块的速度就快过所有人,他做的这条链就会更长,全网就认可他这条链了。但这么做太贵了,可能要几十上百亿美元,所以可能性极低。也因此,区块链极难伪造。