一、什么是挖矿?
挖矿是指添加交易到区块链的过程。
二、挖矿是怎么工作的?
每一个比特币网络中的节点共享其接收到的新交易,并且将这些交易保存在自己的内存池(Memory Pool)。
内存池是节点存放交易数据的临时存储区域
每个节点都可以尝试去把内存池中的交易“挖”进一个存放比特币交易数据的账本,这个账本叫区块链。
你可以把内存池想象成存放“浮动”的交易,而区块链存放“打包”的交易。
然而,为了将交易从内存池添加到区块链,节点需要做很多的计算工作。这些计算工作量是通过解决内存池中存在的“难题”而被强制执行的。
三、挖矿难题是什么?
OK,想象成你是一个节点。在任何时候你都可以将内存池中的交易压缩成由数字和字母组成的“字符串”(哈希计算)。
字符串代表了内存池中所有的交易
现在,你的目标寻找一个数字,使得HASH(数字 + 交易哈希字符串)值满足特定数量的0开头。
绝大部分时间你会得到一个并不满足要求的结果
但是你持续不断的努力,或许就会碰到一个刚好符合要求的数字
现在,这看起来相当简单,而实际上却是非常困难的:这完全是一个随机性的,你能做的就是寄希望在不断的尝试中可以找到符合要求的结果——这就是比特币挖矿(使用电脑的CPU进行大量的哈希计算,然后寄希望于自己的运气)。
如果你幸运的找到了一个符合要求的哈希值,那么内存池中的交易将会添加到区块链,并且比特币网络中的其他节点会将你构造的区块添加到他们自己的区块链副本上。同时,你会获得25BTC作为你努力进行哈希计算的奖励;此外,你也会获得那些被打包进区块中的交易所提供的交易费用(矿工费)。
“特定数量的”来源于“挖矿难度”,这是由比特币网络设定的,基于矿工总量进行调节——挖矿的人越多,难度越大,也就是字符串开头需要的个数越多(表示更难以找到一个胜利的结果)。
以上是一个“区块怎样添加进区块链”的简化描述版本,更详细的介绍请参阅“区块”章节。
四、为什么挖矿是必需的?
好问题!为什么不直接将交易添加到区块链呢?
因为挖矿让整个比特币网络就打包哪些交易达成一致意见(共识),这就是数字货币如何避免欺诈的方法。
当你提交一个比特币交易,网络上的节点并不会立即侦听到该交易。相反,交易会通过节点传送给其他相邻节点的方式来传播到整个比特币网络。
一个描述交易扩散到全网络的词是“传播(propagation)”
然而,构造另外一个使用上述相同比特币的交易并且将之添加到区块链也是可能的。举例来说,你可以使用一些比特币购买一瓶啤酒,然后迅速的再使用这些比特币来买一块披萨。
一些节点会首先侦听到披萨交易(并忽略啤酒交易);然而另外一些节点先听到啤酒交易(而忽略掉披萨交易)
虽然你的披萨交易是在啤酒交易之后发生的,但是由于交易扩散到比特币网络的方式存在延迟,这使得网络对于你是应该获得啤酒还是披萨产生了异议。
那么网络是怎么来裁决执行哪个交易呢?
当然是挖矿!
如果网络上的一个节点完成了难题挑战,那么它内存池中的交易将会添加到区块链中。
如果一个有披萨交易的节点成功的挖出一个区块,那么该披萨交易会添加到区块链,从而使得啤酒交易会从网络中丢弃消失。
这看起来不是一个很正统的方式来选择交易,但这确实是比特币网络用来处理冲突信息时达成共识的解决方案。
积极的一面是,每生成一个区块来打包内存池中的交易仅需10分钟的时间间隔,所以你至多等待10分钟来确认比特币到达你的地址即可(从而不会被发送到其他的地址)。
另外一个挖矿的好处
如果你想试图控制加入区块链的区块(例如,交易),那么你必须同其他比特币网络中的矿工竞争解决区块难题。
也就是说,你需要有一台拥有超级计算能力的电脑,这台电脑的计算能力比全比特币网络其他电脑的算力之和还要强。如你所知,这是不可能的!——首先,你可能需要花几百亿在硬件上,然后才有机会来获得这样的计算能力。
五、我怎样开始挖矿呢?
迫不及待的想要获得那25BTC/区块的奖励?
非常简单,你只需要开启比特币客户端的一个开关便可以开始挖矿了。
然而,由于使用电脑CPU进行挖矿在当前是极其低效的,这个“挖矿”开关在比特币软件界面上移除了。
但别担心!这个挖矿功能依旧存在的…你只需要按照如下操作即可恢复挖矿:
GO to:Help > Debug Window > Console。敲入如下命令: setgenerate true
这就是“打开挖矿”的命令。现在,你的客户端将开始从内存池中拿出交易来构建区块,并不断的进行哈希计算。这会,你应该感觉到了它在开始挖矿了!因为你的CPU在努力计算哈希试图找到一个合法的结果而发出了嗡嗡的嘶鸣声。
它可能不会找到一个合法的区块(除非奇迹发生),但是试一下也是很有趣的。如果你觉得这完全是在浪费电力,你可以关闭挖矿:setgenerate false。
(完)
领取专属 10元无门槛券
私享最新 技术干货