挖矿(英语:Mining),是获取比特币的勘探方式的昵称。由于其工作原理与开采矿物十分相似,因而得名。此外,进行挖矿工作的比特币勘探者也被称为矿工。
1. 工作原理
比特币矿工通过解决具有一定工作量的工作量证明机制问题,来管理比特币网络 —— 确认交易并且防止双重支付。
中本聪在他的论文中阐述说:
“在没有中央权威存在的条件下,既鼓励矿工支持比特币网络,又让比特币的货币流通体系也有了最初的货币注入源头。”
中本聪把通过消耗CPU的电力和时间来产生比特币,比喻成金矿消耗资源将黄金注入经济。 比特币的挖矿与节点软件主要是透过点对点网络、数字签名、交互式证明系统来进行发起零知识证明与验证交易。
每一个网络节点向网络进行广播交易,这些广播出来的交易在经过矿工(在网络上的计算机)验证后,矿工可使用自己的工作证明结果来表达确认,确认后的交易会被打包到数据块中,数据块会串起来形成连续的数据块链。中本聪本人设计了第一版的比特币挖矿程序,这一程序随后被开发为广泛使用的第一代挖矿软件Bitcoin,这一代软件从2009年到2010年中旬都比较流行。
每一个比特币的节点都会收集所有尚未确认的交易,并将其归集到一个数据块中,矿工节点会附加一个随机调整数,并计算前一个数据块的SHA-256散列运算值。挖矿节点不断重复进行尝试,直到它找到的随机调整数使得产生的散列值低于某个特定的目标。
由于散列运算是不可逆的,查找到匹配要求的随机调整数非常困难,需要一个可以预计总次数的不断试错过程。这时,工作量证明机制就发挥作用了。当一个节点找到了匹配要求的解,那么它就可以向全网广播自己的结果。其他节点就可以接收这个新解出来的数据块,并检验其是否匹配规则。如果其他节点通过计算散列值发现确实满足要求(比特币要求的运算目标),那么该数据块有效,其他的节点就会接受该数据块。
2. 挖矿矿产
除了将接收到的交易信息打包到数据块,每个数据块都会允许“发行”一定数量的新比特币,用来激励成功发现数据块的矿工。
比特币系统按照预定的货币增发节奏决定发行的比特币数量。如果其他支付交易有给手续费的,那么矿工还会获得手续费。由于矿工可以自行决定是否将某一个交易数据打包到数据块中,因此矿工有可能优先选择手续费较高的交易来打包。
数据块产生速率的预期为每10分钟一个,但每个数据块中,新发行的比特币不能超过50个,而这个数字每产出21万个区块就会减半,大约每4年就会发生一次。
因此,比特币的总数量不会超过2100万个。随着新发行比特币数量的下降,手续费将成为挖矿的主要动机。
那些在较早时期将计算机资源投入到比特币挖矿活动中的用户,相对于较晚加入的矿工而言,获得比特币容易得多。这样设计的原因,主要是为了保证在比特币的早期发展阶段可以吸引足够的计算力来处理数据块。事实上,如果没有人挖矿,比特币的初期交易活动就无法处理,比特币经济也将停止运行。
2012年12月第一次减半
第二次发生减半的实际时间是2016年7月9日 16:46:13 UTC,每个数据块中新发行的比特币当前为12.5个
3. 挖矿难度
为了使得数据块产生的速度维持在大约每十分钟一个,产生新数据块的难度会定期调整。
如果数据块产生的速度加快了,那么就提高挖矿难度;如果数据块产生速度变慢了,那么就降低难度。比特币系统在每隔2016个数据块被产出后(约两周的时间),会以最近这段时间的数据块产生速度,自动重新计算接下来的2016个数据块之挖矿难度。
而难度基本上就决定了一个有效的数据块标头(英语:Block Header)的 SHA-256 散列值应小于一定值,也就是说该散列值必须要恰好落在目标区间之内才算有效,当目标区间越小就意味着命中机率越低。
换句话说就是挖矿的难度越高。由于ASIC计算设备的爆炸式加入,当前挖矿难度呈现几何级数的上升,当前平均每15天增加50%难度,让普通个人挖矿者的挖矿工作变得异常困难。
4. 挖矿设备
最早,比特币矿工都是通过Intel或AMD的CPU产品来挖矿。但由于挖矿是运算密集型应用,且随着挖矿人数与设备性能的不断提升难度逐渐增加,现在使用CPU挖矿早已毫无收益甚至亏损。
截至2012年,从2013年第一季度后,矿工逐渐开始采用GPU或FPGA等挖矿设备。同时,ASIC设备也在2013年中旬大量上市。
从2013年7月起,全网算力由于ASIC设备大量投入运营呈现直线上涨,以2013年7月的平均算力计算,所有CPU挖矿设备均已经无法产生正收益,而FPGA设备也接近无收益。2013年9月平均算力估算,现有的针对个人开发的小型ASIC挖矿设备在未来1-2个月内也接近无正收益。大量算力被 5 THash/s以上的集群式ASIC挖矿设备独占。个人挖矿由于没有收益,几乎被挤出挖矿群体。有一些比特币矿工则集资在某些可获取低价电力的地方兴建机房安装大批挖矿设备进行挖矿。
部分比特币矿工为省下自己挖矿的成本,将挖矿程序制作成恶意程序,在网络上感染其他人的计算机,来替自己挖矿。
5. 矿池
由于比特币全网的运算水准在不断的呈指数级别上涨,单个设备或少量的算力都无法在比特币网络上获取到比特币网络提供的区块奖励。在全网算力提升到了一定程度后,过低的获取奖励的概率。促使一些“bitcointalk”上的极客开发出一种可以将少量算力合并联合运作的方法,使用这种方式创建的网站便被称作“矿池”(Mining Pool)。
在此机制中,不论个人矿工所能使用的运算力多寡,只要是透过加入矿池来参与挖矿活动,无论是否有成功挖掘出有效数据块,皆可经由对矿池的贡献来获得少量比特币奖励,亦即多人合作挖矿,获得的比特币奖励也由多人依照贡献度分享。
截止2017年11月,全球算力排名前五的比特币矿池有:AntPool、BTC.com 、BTC.TOP、ViaBTC、F2Pool,当前全球约70%的算力在中国矿工手中。
6. 手续费
比特币矿工会对大部分交易收取少量费用,其主要目的是防止有人大量发送无聊的小额交易,浪费网络资源。当前每笔交易的手续费大部分是฿ 0.0001/KB (即0.0001btc/KB) ,实际上0.9.0版本之后将默认手续费降为฿ 0.00001/KB (即0.00001 btc/KB)。因为大部分交易占用的数据量都小于1千字节,所以一般情况下฿ 0.00001(即0.00001 btc/KB)的手续费就足够了。同时,在将来比特币区块奖励较少时,手续费将成为矿工收入的主要来源,比特币的手续费会与该交易占用的字节数相关。
当前比特币系统中手续费的计算标准并非强制性的,因此用户也可以在交易进行时不给予任何手续费,但大多数矿工在组建数据块时通常会优先考虑带有较高手续费的交易,以便在挖矿成功时能获得较高的报酬,因此无附带任何手续费的交易,可能会需要等待较长的时间才能被处理并纳入区块链中。
此外,现在因为区块容量上限“1MB”以及近期比特币交易量大增的因素,手续费大幅上涨,而且等待交易被确认的时间也变长了许多。