比特币知识(8)——比特币系统是如何控制均匀出区块的

比特币知识(8)——比特币系统是如何控制均匀出区块的

在比特币系统中,矿机在不断的挖矿——记帐,而比特币矿机集体挖矿却有一个特点,就是总体上挖矿的出区块的时间是大致均匀的——平均10分钟“挖”出一个区块。

参考比特币网站区块信息可以看到,无论是2010年还是现在(2018),系统出区块的时间均值大约都是在10分钟。

比特币出块速度

在学习比特币原理时候,想必很多人都有和我开始学习时同样的疑惑:从2009 到现在,矿机们的硬件性能是越来越好的,矿机个数也越来越多,也就是在越来越多的算力下,比特币系统是如何控制大约10分钟出一个区块的?

在简述这个之前,先来看个相似的例子:

教育部门每年都要出题给学生升学考试,考试的理想结果就是,学生们的成绩符合某种分布,使得学生的成绩不要集体都很高,或者集体都很低,这样方便不同成绩的学生被录取到不同的学校去。那么教育部是如何做到学生成绩不集体过高或者集体过低?估计很多人都会想得到——控制试卷的难度系数即可。如果上一届的学生考试成绩集体都很低,那一定是考得太难了,那么今年可以适当的降低下难度系数;如果上一届学生考试的成绩集体都很高,那一定是考得容易了,今年应该增加考试难度系数。

嗯,比特币系统控制区块速度,就是差不多的原理。

之前文件《区块链基础》说到过,挖矿的本质就是在计算着符合“某条件”的区块头的hash值。这里提到的“条件”,也就是找出一个nonce,使得区块头信息加上这个nonce,再进行计算hash,使得该hash 值小于某个值X。

上面提到的X,按照hash 值的位数,写成二进制形式,如果前面有n个零,我们先把该值理解为出块的难度系数,比如:X = 000000011111……11,这里前面是7个0,也就是难度系数为n=7了。《区块链基础》的 “谁来记账区块——工作量证明”也说明过其难度原理,难度为7的为难度为6的,其运算量会增加一倍(注:《区块链基础》中提到的是16倍,因为是使用十六进制的写法,而这样使用的是二进制写法。)。

比特币系统就是通过控制该难度系数,来动态调整使得均匀区块的。

在矿机们集体挖矿的时候,会达成一个共识,每产生2016个区块会统计一下这2016个区块的平均出块时间,如果平均时间比期望时间小,比如5分钟,可以知道出块速度快了一倍,那么矿机们会把难度系数加倍,比如原来n=5,则现在改为n=6,也就是要求新挖的区块,求出nonce,使得区块hash值小于X = 00000011111……11(前面6个零)才算挖矿成功;同理如果平均时间比期望值多,比如为20分钟,时间比期望值多了一倍,那么矿机们把难度系数减半,比如原来n=5,新的减半为4,也就是新区块的hash值小于 X = 0000111111111……11即可;平均为其他时间时候,同理算出块快了还是慢了多少,这样动态调整难度系数,使得出块平均值尽量接近10分钟。

比特币系统(矿机们)就是按照这样达成的共识算法,每2016个区块就进行调整一次出块难度系数,使得总体上接近均匀出块的。

做下粗略的计算,2016 * 10分钟 = 20160 分钟 = 14天 = 2周。这也就是很多文章说的,比特币系统每两周进行一次难度系数调整。严格来说,每两周调整一次难度系数也是不准确的,和每10分钟出一个区块一个道理,都是个大概值。比特币系统在动态调整着计算难度系数,使得出块时间接近10分钟,从而才有约2周一次调整难度系数的说法。

这里的难度系数是类比的解析,比特币系统难度系数是另一个表示,但是本质是一样的,不影响理解比特币控制出块多原理。

相关文章:
《比特币知识(3)——比特币上限为什么是2100万》
《比特币知识(5)——区块链基础》
《比特币知识(7)——比特币是如何“发行”的》

(全文完)

(欢迎转载本站文章,但请注明作者和出处 云域 – Yuccn

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注