参考:1、精通比特币(80):节点是如何校验新区块的? | BtcCFO.com ,作者:飞哥
2、巴比特专栏 | 比特币现金添加的Checkpoint到底是什么,有什么影响?,作者:tan90d
比特币中每个节全点将独立校验网络中的新区块。当新区块在网络中传播时,每一个节点在将它转发到其节点之前,会进行一系列的测试去验证它。这确保了只有有效的区块会在网络中传播。
具体校验包括:
1、区块的数据结构语法上有效
2、验证工作量证明,区块头的哈希值小于目标难度(确认包含足够的工作量证明)
3、区块时间戳早于验证时刻未来两个小时(允许时间错误)
4、验证区块大小在长度限制之内,即看区块大小是否在设定范围之内。(BTC是数据区块体不能大于1M,隔离验证区块不能大于3M;BCH是区块不能大于32M;BSV现在是不能大于128M)
5、第一个交易(且只有第一个)是coinbase交易,即一个区块,矿工只能给自己奖励一次
6、验证区块内的交易并确保它们的有效性:验证MerkleRoot是否是由区块体中的交易得到的,即重构区块Merkle树得到的树根,看是否和区块头中的hashMerkleRoot值相等
为什么独立校验是去中心化共识的重要组成部分
为什么矿工不为他们自己记录一笔交易去获得数以千计的比特币?这是因为每一个节点根据相同的规则对区块进行校验。一个无效的coinbase交易将使整个区块无效,这将导致该区块被拒绝,因此,该交易就不会成为总账的一部分。矿工们必须构建一个完美的区块,基于所有节点共享的规则,并且根据正确工作量证明的解决方案进行挖矿,他们要花费大量的电力挖矿才能做到这一点。如果他们作弊,所有的电力和努力都会浪费。
独立校验的作用
独立校验还确保了诚实的矿工生成的区块可以被纳入到区块链中,从而获得奖励。行为不诚实的矿工所产生的区块将被拒绝,这不但使他们失 去了奖励,而且也浪费了本来可以去寻找工作量证明解的机会,因而导致其电费亏损。
源码见比特币核心客户端的CheckBlock函数和CheckBlockHead函数