在之前的文章中已经说过了比特币是一种去中心化的分布式账本,因此各节点之间是相互不信任的。那么比特币网络中的所有参与者如何达成对任意一个所有权的共识呢?这篇文章就会介绍如何解决这个问题。
比特币的共识由所有节点的4个独立过程相互作用而产生:
1.每个节点(挖矿节点)依据标准对每个交易进行独立验证
2.挖矿节点通过完成工作量证明,将交易记录独立打包进新区块
3.每个节点独立的对新区块进行校验并组装进区块链
4.每个节点对区块链进行独立选择,在工作量证明机制下选择累计工作量最大的区块链
同时,挖矿也会获得一定比特币的奖励,挖矿是一种激励机制,这种机制实现了去中心化的安全。有了挖矿的奖励,矿工们就有了工作的动力。。矿工通过创造一个新区块得到的比特币数量大约每四年减少一半。也就是说开始时为2009年1月每个区块奖励50个比特币,然后到2012年11月减 半为每个区块奖励25个比特币。直到2140年。届时所有的比特币全部发行完毕。那矿工们的主要收益就会来源于交易费。
工作量证明算法
矿工们通过反复计算哈希值来获得记账权,为了保证10分钟左右只有一个人可以记账,就必须要提高记账的难度,使得Hash的结果必须以若干个0开头。同是为了满足这个条件,在进行Hash时引入一个随机数变量。之前文章在介绍区块头的时候就提到过 nonce(随机数),矿工们就通过用不同 nonce值去计算区块头的哈希值直到计算所得哈希值小于难度值。难度值越小,计算的难度就越大,打个比方,不断扔一个骰子以得到小于一个特定点数的游戏。第一局小于6。只要你不扔出6, 你就会赢。然后下一局小于2。那么只能扔1才行。
最长链选择
当有两名矿工在几乎在相同的时间内,各自都算得了工作量证明解,便立即传播自己的区块到网络中,先是传播给邻近的节点而后传播到整个网络。每个收到有效区块的节点都会将其并入并延长区块链,这样就会产生两条不同的链。 比如下图产生两个区块#3458A和#3458B,节点或选择工作量最大的一条,在整个区块链网络中有些节点会接受了#3458A,有些节点接受#3458B。
收到#3458A的(挖矿)节点,会立刻以这个区块为父区块来产生新的候选区块,并尝试寻找这个候选区块的工作量证明解。同样地,接受#3458B区块的节点会以这个区块为链的顶点开始生成新块,延长这个链(下面称为B链)。假设选择#3458B区块的节点先计算出下一个区块#3459B,并广播到全网,这是下面的链比上面的链长,则选择的更长的链。
原文地址:https://www.cnblogs.com/mambakb/p/9738473.html