当我们谈到比特币时,除了讨论它代表的价值高低之外,还会谈到一个概念:挖矿。比特币就是通过挖矿产生的。
比特币每年可以挖出的数量是有限的。我们首先需要了解几个简单的概念。大家可能都知道点对点(P2P)的金融交易,那么现在我们来解释一下P2P软件。举个例子:比如你从腾讯视频上观看电影,想要下载到手机上观看。在下载的过程中,电影存在于腾讯视频的服务器上,你下载到手机上也是从腾讯视频服务器的硬盘上下载。但是P2P软件不同,它的资源可以从其他P2P用户的电脑硬盘上下载。其他P2P用户也可从你的手机中下载资源。
我们可以把这个电影比作比特币。比特币并不存储在任何公司、银行、政府的服务器上,而是存在于互联网上,存在于所有人的电脑中。每隔一段时间,比特币系统会在系统节点上生成一个随机代码,然后所有人的电脑都可以计算这个代码。第一个计算出的人将产生一个区块,并得到比特币奖励。这就是我们所说的挖矿。而矿机就是指电脑。
我们之前说过比特币总共只有2100万枚,目前一枚比特币基于目前的数据结构会被分割成8个小数位,即0.00000001BTC。矿工们可以挖到的最小比特币单位就是0.00000001BTC。
在比特币系统中,可以通过自身的算法来动态地调整全网所有电脑的挖矿难度。目前在比特币系统中,每隔10分钟就会有一个节点挖矿成功。一旦有人挖矿成功,比特币系统就会奖励挖矿者一定数量的比特币,这个数量是通过算法进行控制的。简单来说,最开始的四年,每个挖矿成功的人可以得到25枚比特币的奖励。每四年减半,下一个四年,每个挖矿成功的人只能获得12.5个比特币,再下一个四年就会得到6.25个比特币,以此类推,直到2140年比特币的发行完毕,总量为2100万枚。
比特币的设计者中本聪希望每隔10分钟就可以发行一次比特币,但是比特币系统中参与挖矿的电脑可能有成千上万台,那么应该给谁发呢?
中本聪采用了一个工作量证明的策略。比特币系统中为每台电脑生成一个难题。在每个新区块中,区块头的数据结构中有一个Nonce的字段。这个难题是:在区块头其他字段值不变的情况下,不断调整Nonce字段的值,然后计算区块头的哈希值。要求得出的哈希值小于或等于某个固定的值。
列举一下区块头中参与计算的参数: - version:区块的版本 - prev_hash:上一个区块的哈希值 - merkle_root:需要写入交易记录的哈希值 - ntime:更新时间 - nbits:必须小于或等于当前值 - Nonce:上文提到的随机值
计算公式如下: SHA256(SHA256(version+prev_hash+merkle_root+ntime+Nonce)) < nbits
所以挖矿其实就是通过计算机的CPU、GPU计算一个特定的数据结构,比特币挖矿过程使用的是SHA256哈希函数。由于哈希算法是一个不可逆算法,无法通过具体的哈希值来得知原始数据,所以计算机只能采用穷举的方法,从1开始不断尝试。在这个过程中,就评估计算机的CPU计算速度,计算速度快的,很快就能找到这个Nonce值,并将其放入区块的结构体中。然后通过P2P网络进行广播,通过每个节点验证该Nonce的值是否合法。如果全部验证通过,就认为该区块挖掘成功,挖到矿了。其他的计算机可能会计算一半,也可能会计算出来,但一旦有别的计算机计算出的值被验证通过,其他计算机必须放弃本次尝试,转而寻找下一个区块头的Nonce值进行挖掘计算。
用最简单的术语来说,挖矿的节点会不断重复尝试,直到找到的随机数计算得到的哈希值低于某个特定的目标值。哈希函数的结果是无法事先得知的,也是无规律的。只能不断产生计算。
因此,挖矿实际上是让计算机通过穷举的方式,不断寻找Nonce值,计算哈希值。谁先找到这个Nonce值并且广播验证通过,谁就挖到了矿。
普通人如何进行挖矿呢?
任何人都可以在专门的硬件上运行软件,成为比特币的挖矿工。挖矿软件通过P2P网络监听交易广播,执行适当的计算任务,并且确认一些交易。比特币矿工可以获得的收益包括赚取用户支付的交易手续费以及按照固定公式增加的比特币。
挖矿机通常配置了专业的挖矿芯片的电脑。目前大多数采用的是烧录显卡的方式,利用显卡GPU进行挖矿。由于耗电量较大,导致近期市面上的显卡价格不断上涨。
想要进行挖矿,只需要下载挖矿软件并运行算法。需要下载专门的比特币挖矿工具,并注册合作网站。注册得到的用户名和密码填入计算程序中,点击运算即可进行挖矿。例如,比特币挖矿软件guiminer,完全可以免费使用。