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

成功构建

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

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

0000000000000002a7bbd25a417c0374cc55261021e8a9ca74442b01284f0569

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

0000000000000003A30C00000000000000000000000000000000000000000000

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

 

校验新区块

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

这确保了只有有效的区块会在网络中传播。独立校验还确保了诚实的矿工生成的区块可以被纳入到区块链中,从而获得奖励。行为不诚实的矿工所产生的区块将被拒绝,这不但使他们失去了奖励,而且也浪费了本来可以去寻找工作量证明解的机会,因而导致其电费亏损。

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

它包括:

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

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

为什么矿工不为他们自己记录一笔交易去获得数以千计的比特币?这是因为每一个节点根据相同的规则对区块进行校验。一个无效的coinbase交易将使整个区块无效,这将导致该区块被拒绝,因此,该交易就不会成为总账的一部分。

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

你可能感兴趣的:(bitcoin,区块链)