什么是比特币“挖矿”

比特币是如何产生的

比特币是通过“挖矿”这个行为,“无中生有”的产生出来的。很多人都知道比特币是总量恒定的,即,总量2100万个比特币,但其实在比特币代码中并没有定义2100万这个具体的数值,而是通过定义初始挖矿奖励:每个区块被挖出奖励50个比特币,210000个区块后挖矿奖励减半。所以我们可以看出,比特币的总额是通过计算一个等比数列而得出的:

50 * (1/2)^0 * 210000 + 50 * (1/2)^1 * 210000 + 50 * (1/2)^2 * 210000 …

每个被挖出的区块在它的交易列表中都会包含一个称之为coinbase的交易,一般的交易会有比特币转出方和接收方,而coinbase交易只有接收方,即,把本次区块的挖矿奖励的比特币转入矿工地址的交易。就这样,比特币被“无中生有”的创造了出来。

哈希计算

对于一个哈希函数,输入任意大小的数据,它会输出一个固定大小的哈希值,哈希的几个关键特性:

(1)无法从一个哈希值恢复原始数据(哈希不是加密);

(2)对于一个特定的数据,有且仅有一个哈希值(数字指纹);

(3)即使是数据的微小改变,哈希结果也千差万别。

工作量证明 工作量证明(POW,Proof Of Work ),简单讲就是出示一个证明,证明你确实为某件事情付出过“劳动(工作)”。矿工必须提供有效的工作量证明,才能最终把挖到的区块加入到区块链网络,从而获得该区块的奖励。在比特币网络中工作量证明就是通过矿机的算力来找到一个符合难度标准的哈希计算结果,而为了保证平均每十分钟挖出一个区块,工作量证明的难度会定期的根据区块链全网算力进行调整。

什么是挖矿 挖矿的目的不是获取比特币,而是通过这种激励手段完成了去中心化的交易清算,因此挖矿的行为可以看做是比特币这种电子现金系统的安全基石。

对区块数据(主要是区块链头+计数器( Nonce ))进行哈希运算,比较运算结果是否符合区块链网络的难度标准,如果符合则认为挖出了一个有效区块。区块链网络平均每十分钟会有一个区块被矿工挖出。

矿工(挖矿节点) 矿工挖矿的过程: (1) 矿工监听区块链网络的所有交易; (2) 把把未确认的交易添加到本机的交易内存池中; (3) 从交易内存池中将交易打包进入一个新区块(这个区块称为候选区块,因为它还没有包含有效的工作量证明,只有在矿工成功找到一个工作量证明解之后,这个区块才生效); (4) 给区块数据(data)添加一个计数器( Nonce ),计数器默认从0开始; (5) 将数据(data)和计数器( Nonce )组合到一起,进行哈希计算,得到一个哈希值; (6) 检查哈希值是否符合一定的条件:  如果符合条件,结束  如果不符合,计数器增加,重复步骤 5-6 (7) 监听网络上其他节点发现的新区块,当发现新区块被其他矿工节点挖出时,停止POW并从本地内存池中移除这个新区块里的交易; (8) 如果是自己挖到了有效区块,则立刻将这个区块发给所有相邻节点。这些节点验证新区块后,也会继续传播此区块。最终添加到区块链中。矿工将获得一定数量的比特币作为本次挖矿的奖励。

挖矿这个过程,其实就是一个随机的hash碰撞过程,挖矿就是在寻找一个小于目标hash值的解,而寻找这个解的过程是一个概率事件,其概率的大小便是挖矿难度。