以太坊技术黄皮书学习笔记9:区块头验证

公式12是通过pow函数计算出来n和m,然后通过公式1和2来检查n,m的有效性,公式12,13,14,在后面的章节会详细讲解,公式15就是一种数据的存储方式叫做有向无环图,有兴趣的同学可以自行搜索资料,这里简单解释一下:区块数据在同步到各个节点之后,各节点通过pow函数来检验当前区块头信息的有效性,这些检查可以证明本区块信息是消耗了一定算力才能够得到正确的n和m值,这个会在下面的章节详细的解释,这里暂时说明需要通过这些检查,区块头信息才是有效的。

公式3是当前区块的区块难度必须等于D(H)的运算结果,区块难度是用来调节全网出块速速的,如果前面2个区块的出块时间间隔比较小,那么通过这个调整这个区块难度,可以使得新区块的出块间隔变大,这样可以在固定的一段时间间隔内产生固定数量的区块.:

公式1表示创始区块,即以太坊第一个区块诞生是的区块难度,这个是个固定值:

否则的话使用公式2来计算当前的难度,并与D0进行比较取较大者。

公式2的逻辑是,父节点的难度,加一个由公式3和8的乘积作为调剂的因子,公式9是一个根据当前区块高度Hi变化的因子,我们来一一分解。

首先第一个参数是父节点的难度,这个是作为基准值。公式7是计算当前时间与父节点区块的生成时间的差值,如果这个值比较大,那么无论公式4取1还是2,公式3都将是一个负值,而且时间间隔越大,此负值的绝对值越大。公式8

x的值显然是一个正数,是根据前父节点区块难度生成的一个系数。因此如果本区块与父节点的出块时间间隔过大,那么第二个调节因子就会使得整体难度变小,进而使得下一个出块速度变快,时间间隔变小。公式5的含义表示父节点区块不包含叔叔节点,公式4的意图是,对于父节点存在叔叔节点的情况,适当增加出块难度,延长一下出块时间,公式9和10是将另外的因素增加的区块难度里面,从这两个公式可以看出,从区块高度3000000开始,每增加10万个区块,区块难度就会适当增加一些,官方的解释是,这个参数是为了给以太坊开发POS共识机制提供足够的时间,并且不至于使得网络僵死,因为这种指数级的时间变化与区块高度之间的关系相对缓和,不会引起网络出块速度剧烈震荡,当前的区块高度:5000000+,因此,此时公式9的值应该是2^18。

继续看验证公式V(H)中的公式4表示已经使用的gas值应该小于等于gas的最高限额,公式5,6,7表示,当前区块的gas最高限额要小于父节点gas最高限额加上父节点gas限额的1024分之一,要大于父节点gas最高限额减去父节点最高限额的1024分之一,并且最小值必须大于等于5000

Wei。

公式8表示当前区块的时间戳要大于父节点的时间戳

公式9表示当前的区块高度是父节点区块高度加1

公式10表示,当前附加的数据长度不能超过32字节。

如果顺利通过以上检查,那么其他节点就可以将当前区块数据作为有效的新数据挂接在本地存储的区块链数据上。以此达到全球网络节点共同记账共同验证的目的。

你可能感兴趣的:(以太坊技术黄皮书学习笔记9:区块头验证)