其实,这里所谓的挖矿不是普通意义上的挖矿。煤炭是从煤矿里挖出来的,黄金是从金矿里挖出来的。而这里所说的比特币是靠高速计算机从一堆数字里挖出来的。
比特币发明人中本聪这样解释比特币挖矿:比特币每10分钟左右记账一次,每次记账都会得到系统的比特币奖励。记账的矿工有很多,为了公平起见,就要求每一次记账前,所有参与竞争记账权的矿工,先解答出系统给的一道难题。谁最先解出谁就获得了这一次的记账权以及对应的比特币奖励。
打个比方:奥数专家出了一道超级难题,然后广发英雄帖,邀各路英豪共同解题,谁第一个解出来就能得到比特币。题目解出后,专家继续出题,周而复始。比特币就是这样一枚枚从网络中找到挖出,找比特币的过程形象称之为“挖矿”!
一、什么是挖矿?
挖矿是指添加交易到区块链的过程。
二、挖矿是怎么工作的?
每一个比特币网络中的节点共享其接收到的新交易,并且将这些交易保存在自己的内存池(Memory Pool)。
内存池是节点存放交易数据的临时存储区域
每个节点都可以尝试去把内存池中的交易“挖”进一个存放比特币交易数据的账本,这个账本叫区块链。
你可以把内存池想象成存放“浮动”的交易,而区块链存放“打包”的交易。
然而,为了将交易从内存池添加到区块链,节点需要做很多的计算工作。这些计算工作量是通过解决内存池中存在的“难题”而被强制执行的。
三、挖矿难题是什么?
OK,想象成你是一个节点。在任何时候你都可以将内存池中的交易压缩成由数字和字母组成的“字符串”(哈希计算)。
字符串代表了内存池中所有的交易
现在,你的目标寻找一个数字,使得HASH(数字 + 交易哈希字符串)值满足特定数量的0开头。
绝大部分时间你会得到一个并不满足要求的结果
但是你持续不断的努力,或许就会碰到一个刚好符合要求的数字
现在,这看起来相当简单,而实际上却是非常困难的:这完全是一个随机性的,你能做的就是寄希望在不断的尝试中可以找到符合要求的结果——这就是比特币挖矿(使用电脑的CPU进行大量的哈希计算,然后寄希望于自己的运气)。
如果你幸运的找到了一个符合要求的哈希值,那么内存池中的交易将会添加到区块链,并且比特币网络中的其他节点会将你构造的区块添加到他们自己的区块链副本上。同时,你会获得25BTC作为你努力进行哈希计算的奖励;此外,你也会获得那些被打包进区块中的交易所提供的交易费用(矿工费)。
“特定数量的”来源于“挖矿难度”,这是由比特币网络设定的,基于矿工总量进行调节——挖矿的人越多,难度越大,也就是字符串开头需要的个数越多(表示更难以找到一个胜利的结果)。
以上是一个“区块怎样添加进区块链”的简化描述版本,更详细的介绍请参阅“区块”章节。
四、为什么挖矿是必需的?
好问题!为什么不直接将交易添加到区块链呢?
因为挖矿让整个比特币网络就打包哪些交易达成一致意见(共识),这就是数字货币如何避免欺诈的方法。
当你提交一个比特币交易,网络上的节点并不会立即侦听到该交易。相反,交易会通过节点传送给其他相邻节点的方式来传播到整个比特币网络。
一个描述交易扩散到全网络的词是“传播(propagation)”
然而,构造另外一个使用上述相同比特币的交易并且将之添加到区块链也是可能的。举例来说,你可以使用一些比特币购买一瓶啤酒,然后迅速的再使用这些比特币来买一块披萨。
一些节点会首先侦听到披萨交易(并忽略啤酒交易);然而另外一些节点先听到啤酒交易(而忽略掉披萨交易)
虽然你的披萨交易是在啤酒交易之后发生的,但是由于交易扩散到比特币网络的方式存在延迟,这使得网络对于你是应该获得啤酒还是披萨产生了异议。
那么网络是怎么来裁决执行哪个交易呢?
当然是挖矿!
如果网络上的一个节点完成了难题挑战,那么它内存池中的交易将会添加到区块链中。
如果一个有披萨交易的节点成功的挖出一个区块,那么该披萨交易会添加到区块链,从而使得啤酒交易会从网络中丢弃消失。
这看起来不是一个很正统的方式来选择交易,但这确实是比特币网络用来处理冲突信息时达成共识的解决方案。
积极的一面是,每生成一个区块来打包内存池中的交易仅需10分钟的时间间隔,所以你至多等待10分钟来确认比特币到达你的地址即可(从而不会被发送到其他的地址)。
网友评论