第3课  区块链的样子?,我们知道了整个区块链网络是1个P2P网络,每个节点都存储了完整的区块链,也大致知道了区块链的数据结构。


在本课中,将详细解释所谓的“挖矿”到底是什么?比特币又是怎么来的?




一、挖矿的过程 交易被记账的过程

下图展示了1个节点挖矿的详细流程:

Step1: 节点会从区块链网络上源源不断的接受到新的未确认的交易

Step2: 对每笔交易进行校验(安全校验、双花校验等。后面会讲到)

校验不合格的会丢弃,校验合格的会放入本机的内存池,又称作Transaction Pool。

Step3: 从这个Memory Pool里面,拿出1批交易(大概两三千个),打包放进一个新的候选块里。

Step4: 关键环节,挖矿。把这个Candidate Block链接到整个区块链的末尾。链接成功,就算是挖出了1个新区块,奖励你50比特币;链接不成功,一直尝试,挖。。

Step5: 把这个新挖出来的区块,广播到网络上。其他节点看到这个新的块,就会终止各自当前的挖矿进度,把这个区块链接到自己的区块链上,接着在这个新的区块后面挖(也就是重复Step4)。


所以大家可以看到:所谓的挖矿,就是自己打包1批交易,生成1个新区块,链接到整个区块链的末尾。


难就难在这个“链接”上,需要大量计算,才可能成功的把你的新区块链接到整个区块链的末尾,下面就来详细讲解这个“链接”的算法。

四、挖矿



二、挖矿算法

在上1课中,我们讲述了Block的结构:Header + Body。Header里面包含了上1个区块的Hash值,还包含1个随机属性nonce,Body里面包含了很多笔交易。


我们要计算本区块的Hash值,计算公式如下:


本区块Hash值 = SHA256D(上1个区块的Hash值 + 交易数据 + nonce)


其中SHA256D,就是计算2次SHA256(至于什么是SHA256,自己百度之。D就是Double的意思)。


Hash值是256位的,所谓的挖矿成功,就是当算出来的Hash值,符合下面这个规则:前48位刚好是oxOOOOOOOOFFFF。可见这个概率非常小!


上1个区块的Hash值是固定的,交易数据也是固定的,唯独变化的就是这个nonce属性。


nonce属性是32位的,我们需要暴力**:遍历该nonce属性0 - 2的32次方的每个值,逐个计算2次SHA256(SHA256D),直到计算出来的hash值符合某个规则(前48位为oxOOOOOOOOFFFF)!!


有人可能会问了,有没有什么算法,构造1个前48位为oxOOOOOOOOFFFF的Hash值,反算出nonce???


答案是没有:因为SHA256算法是不可逆的,你只能逐个尝试,直到算出符合条件的Hash值。


一旦算出了这个值,你就可以把你的这个区块链接到整个区块链的末尾,然后广播出去。


别的节点收到你给的最新的块和对应的Hash值,就会暂时中断当前的挖矿进度。把你给的块重新校验一遍,发现是符合规则的,就会认可你这个区块,把这个区块加到他们的链的末尾。然后再顺着这个区块,挖下1个区块。


所以整个网络的挖矿过程,就是每个节点不断的算Hash值、不断的从别的节点同步最新的块的过程。


三、区块链的不可篡改性


从上面的Hash的计算过程中,我们也会发现区块链的1个关键特性:数据不可篡改。


比如你改了第100个区块的交易数据,那第100个区块的Hash值也要跟着改; 导致第101个区块的Hash值也要跟着改;第102个区块的Hash值也要跟着改;。。。意味着要把100个区块以后的整个链的数据全部篡改。。


在篡改的过程中,别的节点还在一直挖新的区块,你要让所有节点都认可你篡改的数据。。。整个过程几乎是不可能的。


四、比特币怎么来的

1个节点(1个矿工)成功的挖出1个区块之后,系统会奖励50个比特币给该节点(每过4年,奖励减半)。


这50个比特币怎么发放的呢?

矿工自己给自己发放!该节点会在这个新的块的头部插入1个叫做CoinBase的交易,这个交易的输出就是该矿工自己的比特币的账号(或者说比特币地址),没有输入。


我们知道一般的交易,都有输入(买家,付款方),输出(买家,收款方)。CoinBase交易比较特殊,是系统给该矿工“转账”了50个比特币,所以只有输出,没有输入。


至此,买家/卖家完成了1个交易过程,矿工完成了记账过程(挖矿过程),得到系统奖励的比特币。大家各取所需!!!


五、比特币有朝1日挖完了怎么办

我们知道这种挖矿的比特币奖励,每4年减半,那过很多年以后,奖励基本没有了,矿工怎么生活呢?


答案是靠交易的手续费。买家/卖家在交易的时候,要想这笔交易早点在区块链网络上得到确认,就加大手续费,矿工们会优先选那些手续费高的交易进行打包,确认。


所以前期的比特币奖励,是中本聪当初设计的为了维持这个交易网络的运作而设的,其最终目的不是淘金,是要建立一个去中心化、公开透明、稳定运作的交易网络。



六、总结


至此,整个挖矿的过程和挖矿算法就讲完了。但这里有1个问题:


如果2个节点,同时挖出了1个最新的块,各自链接到自己的区块链的末尾(2个节点的区块链数据之前是一样的,就这个最新的块不一样)。然后同时向网络上广播,那2个块,认可谁的呢?


这就是下期要讲的:分叉与51%算力攻击。

相关文章: