区块链-成功构建区块与校验新区块

成功构建

前面已经看到,挖矿节点建立了一个候选区块,准备拿它来挖矿。节点有几个安装了ASIC(专用集成电路)的矿机, 上面有成千上万个集成电路能够超高速地并行运行SHA256算法。这些定制的硬件经过USB链接到他的挖矿节点上。接下 来,运行在桌面电脑上的挖矿节点将区块头信息传送给这些硬件,让它们以每秒亿万次的速度进行nonce测试。算法

在对区块的挖矿工做开始大概11分钟后,这些硬件里的其中一个求得了解并发回挖矿节点。当把这个结果放进区块头时,nonce4215469401就会产生一个区块哈希值:网络

0000000000000002a7bbd25a417c0374cc55261021e8a9ca74442b01284f0569数据结构

而这个值小于难度目标值:并发

0000000000000003A30C00000000000000000000000000000000000000000000函数

挖矿节点马上将这个区块发给它的全部相邻节点。这些节点在接收并验证这个新区块后,也会继续传播此区块。当这个新区块在网络中扩散时,每一个节点都会将它做为一个全新德区块加到自身节点的区块链副本中。当挖矿节点收到并验证了这个新区块后,它们会放弃以前对构建这个相同高度区块的计算,并当即开始计算区块链中下一个区块的工做。 区块链

 

校验新区块

 比特币共识机制的第三步是经过网络中的每一个节点独立校验每一个新区块。当新区块在网络中传播时,每个节点在将它 转发到其节点以前,会进行一系列的测试去验证它。测试

这确保了只有有效的区块会在网络中传播。独立校验还确保了诚实的矿工生成的区块能够被归入到区块链中,从而得到奖励。行为不诚实的矿工所产生的区块将被拒绝,这不但使他们失去了奖励,并且也浪费了原本能够去寻找工做量证实解的机会,于是致使其电费亏损。比特币

当一个节点接收到一个新的区块,它将对照一个长长的标准清单对该区块进行验证,若没有经过验证,这个区块将被拒 绝。这些标准能够在比特币核心客户端的 CheckBlock函数和CheckBlockHead函数中得到,硬件

它包括:语法

  • 区块的数据结构语法上有效
  • 区块头的哈希值小于目标难度(确认包含足够的工做量证实)
  • 区块时间戳早于验证时刻将来两个小时(容许时间错误)
  • 区块大小在长度限制以内
  • 第一个交易(且只有第一个)是 coinbase 交易
  • 使用检查清单验证区块内的交易并确保它们的有效性

每个节点对每个新区块的独立校验,确保了矿工没法欺诈。前面看到了矿工们如何去记录一笔交易,以得到在此区块中创造的新比特币和交易费。

为何矿工不为他们本身记录一笔交易去得到数以千计的比特币?这是由于每个节点根据相同的规则对区块进行校验。一个无效的coinbase交易将使整个区块无效,这将致使该区块被拒绝,所以,该交易就不会成为总帐的一部分。

矿工们必须构建一个完美的区块,基于全部节点共享的规则,而且根据正确工做量证实的解决方案进行挖矿,他们要花费大量的电力挖矿才能作到这一点。若是他们做弊,全部的电力和努力都会浪费。这就是为何独立校验是去中心化共识的重要组成部分。