矿工挖出区块后,就进行网络广播,传递给相邻的节点,节点接收到新的区块后会进行一系列的验证,比如区块数据格式是否正确;区块头的哈希值小于目标难度;区块时间戳是否在允许范围之内;区块中第一个交易(且只有第一个)是coinbase交易;区块中的交易事务是否有效等,总之就是一连串的检测,全部校验通过就把新的区块数据纳入到自己的区块链账本中。如果是挖矿节点接收到信息,就会立即停止当前的挖矿计算,转而进行下一区块的竞争。
比特币的挖矿过程说到这里,不知道有没有朋友会有个疑惑,那就是挖矿算法虽然能够提供工作量证明,表明矿工确实是投入了相当的算力的,但是却不能保证只能是一个矿工能挖到啊,如果在同一时间内多个矿工都计算出了符合条件的值,都拥有了打包权,那以谁的为准呢?比特币中的解决方案,竟然是那么简单,人家没用什么复杂的算法,就是让节点自己选择,最终传播最广、处于最长链中的区块将被保留,因此到底谁的区块会被保留下来,可能还真得看看运气了。
这里实际上隐含着FLP原理,先看下定义:在网络可靠,存在节点失效(即使只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性算法。这个其实也很好理解,来看个例子:三个人在不同房间投票,虽然三个人彼此之间是可以通电话沟通的,但是经常会有人时不时地睡着。比如,A投票0,B投票1,C收到了然后睡着了(类比节点失效了),则A和B永远无法在有限时间内和C共同获得最终的结果。看到这里,我们也就明白了挖矿的作用了,除了发行新的比特币外,主要就是维持网络共识,让每个节点对区块链的数据保持最终一致性。
原文地址:https://www.cnblogs.com/qukuailian/p/8684491.html
时间: 2024-11-08 01:47:38