比特币挖矿的原理就是矿工将区块链上一定数量的交易打包到一个区块当中,之后共同计算数学问题,第一个解决数学问题的矿工可以得到答案,并且决定谁将会获得新发行的比特币。比特币挖矿分为破解挖矿任务、验证区块、广播新区块、等过程。
挖矿原理
1.POW算法:
这一算法可以动态调节全网的挖矿难度,保证每隔10分钟,比特币网络当中就会有一个节点成功获得区块奖励。挖矿是比特币发行的唯一途径,挖矿实际上就是矿工竞争的过程,最先解出复杂数学问题答案的矿工可以得到区块奖励。
2.哈希算法:
每个区块头都含有一个nonce字段,这是一种密码学加密方式,它并不可逆,不可以通过具体的哈希值推断出原文,因此每个节点只能采用穷举的方法,这就和矿工的算力息息相关,算力更高的设备可以更快得到正确的nonce值。
挖矿过程
1.破解挖矿任务:
节点创建好预备块之后,会将区块头数据发送给矿工,矿工会递增区块头里面的随机数,每次调整都会按照比特币的协议规定,使用SHA256算法对区块头的哈希值进行计算,如果区块头的哈希值大于目标哈希,就会变更随机数,一直到区块头的哈希值小于或者等于目标哈希。
2.验证区块,延长本地区块链:
矿工找到可以让预备区块头哈希小于目标哈希的随机数时,会向挖矿节点上报挖矿结果,挖矿节点接收到信息之后可以按照矿工的信息对区块进行重组,并且对区块进行验证,节点会将新区块的数据保存到本地数据库当中,添加到本地区块链。验证过程中,会对区块头是否合法、交易数据当中的第一笔是否为coinbase交易、每一笔交易是否合法等进行验证。
3.向全网广播:
挖矿节点的新区块在本地进行保存之后,将会向比特币网络广播挖矿节点,一般会先将新区块的区块头广播出去,其他的节点接到广播之后,先对区块头信息进行验证,之后节点会在本地区块索引库当中创建新区块的索引,接收到新区块的全部信息之后,节点验证交易信息和区块头的MerkleRoot哈希,通过验证后将交易信息录入到新区块当中,至此完成新区块的广播和验证操作。