挖矿知识入门手册

前言:


在数字货币的生态体系里,挖矿无疑是最耳熟能详的一个词语,工作量证明、交易打包、区块广播……各类专业术语眼花缭乱,在大概了解整个过程后也能讲出个一二。然而在实际情况中,大部分人都不知道这些名词之间的作用关系究竟是什么,其中也不乏一些在数字货币领域里沉浮多年的资深人士。


我在初步入门学习时发现,很多细节上的痛点问题并没有一个连贯且易懂的答案,知识点都是片状且孤立的,让人们对于这个重要的过程迟迟不能有一个站在高处的系统认知。所以我将自己曾经有过的疑问总结成几篇文章,从初学者视角用自问自答的方式,深入浅出地为大家答题解惑。


数字货币是一种高度技术化的投资产品,只有深刻了解它的机制才能对它的前景做好最准确的判断。


挖矿知识手册入门

第一部分:底层知识储备

在这个部分里,我将介绍挖矿相关的基本底层知识,其中将会设计到部分数学与编程知识,但各位也无需担心,我会用最浅显的语言来解释,务必让专业的知识变得不再有门槛而难以理解。


在了解必备的原理后,下一篇文章里我将结合本章内容,从应用层面进行实操分析。


Q1:什么是挖矿?为什么拥有高算力在挖矿过程中如此重要?


A: 首先用大家都知道的一句话笼统概括:挖矿的过程就是产生比特币的过程。


矿工们需要一同竞争去算出一个数字,当算出的数字小于系统给出的目标值时,即可宣布挖矿成功,进而获得系统奖励的比特币(目前是12.5个)。


在这个过程里,矿工只能用暴力破解(试数)的方式“碰瓷”答案,除了大量反复的机械计算以外没有任何捷径可走,这就是为什么算力如此重要的原因:你的计算能力越强(算力越大),你就能比别人有更高的优先级算出正确答案——在这个领域里拼的是人海战术,三个臭皮匠远比一个诸葛亮更吃香。


这也就是矿场、矿池之所以会出现的原因。


Q2:什么是矿机、矿场、矿池和节点?它们之间的关系是什么?


A: 矿机是专门为了解题而出现的机器,根据出现的先后顺序分别为CPU矿机,GPU矿机,ASIC矿机。


最初一批人使用CPU(内存)进行计算挖矿,想要大量汇聚算力意味着需要很多CPU同时进行。但在此过程中他们发觉利用CPU进行计算简直是大材小用,有很多计算单元根本用不上,杀鸡焉用宰牛刀?何况成本还很贵。


此时人们发现GPU(显卡)能处理的并行计算正好能满足挖矿需求,进而纷纷转向利用GPU挖矿,大大减少了成本,提高了性价比。但在越来越多的矿工入场后,人们已经不能满足于GPU的运算速度了,进而出现了大批的ASIC矿机,即专用集成线路矿机。这种矿机根据不同的币种算法有着不同的型号,专挖各类数字货币。


ASIC矿机的问世瞬间让算力世界不再公平。越来越多的资本入场,开始购置大批的矿机进行集中挖矿。他们将这些矿机安排在电费地租便宜的深山中,没日没夜地同时进行计算,此时便形成了矿场。


然而矿场也随着市场的扩大而逐渐不占优势。由于各方算力势力的崛起,矿场单打独斗,越来越难挖到属于自己的块,出块的不确定性很难保证收益能够负担起成本。


于是各个矿场决定抱团取暖,他们将算力汇聚在一起,最终成为了矿池。一方面出块的概率大大提高,可以分得一杯羹;另一方面即是没有挖到块,矿池也会给他们固定的保底收益,就是出块后获得的比特币大头会被矿池拿走——但是虽然是别人吃肉,但毕竟是自己实力跟不上,能够喝口汤就已经不错了不是吗?


所以一句话概括,矿机汇聚成矿场,矿场汇聚成矿池,涓滴成河,川流入海。


那么现在的数字货币网络里,节点已经不再再是个人的设备了,任何一个矿场或者矿池,都可以看作成一个大的节点,并且后者已经远远超过了个人设备节点,成为了比特币网络的主力军。


Q3: 什么是工作量证明(proof-of-work)?它和上一个回答里提到的目标值是什么关系?


A: 首先我们先要了解一下什么是哈希计算(hash)。


在比特币挖矿里主要使用SHA-256算法。我们无需具体了解这个算法的具体机制,我们只需要知道,一个数字A通过SHA-256的计算后,将会变成一个长度为256位的数字B,此时B就叫做A的哈希值。


不同的数字的哈希值绝不会一样,并且这个过程不可逆,即A可以通过SHA-256得到B,而如果仅知道B,绝不能倒推出数字A。所以即使当系统给出一个值C(已被哈希计算过),没有任何人能够倒推出这个值在哈希前是一个什么数字,只能一个一个数字进行尝试计算。当某个人算出一个哈希后的数字比系统给出的值C小,即可认证计算成功。


此时,矿工为了寻求答案而进行的计算尝试的过程,我们称之为工作量证明(proof-of-work)。


综上所述:


系统给出的值C即是目标值; 矿工每计算一次,都是工作量证明(proof-of-work)的具体体现。所以工作量证明(proof-of-work)即是证明矿工们为了得到答案确实进行了计算; 再具体一些,我们设定一个参数nonce,作为工作量证明的计数器。nonce初始值为0,每进行一次计算数值加1。

Q4: 系统如何自动判断是否需要调整挖矿难度?又是如何调节才能将出块速度维稳在每十分钟一个?


A: 我们都知道,系统将比特币出块的速度设定为1个/10分钟。但这个并不是绝对固定的,因为出块的速度跟全网各个节点的算力大小有关。


从下图https://btc.com/stats/diff网站数据我们可以发现:




实际的出块速度并不是精准的10分钟,而是在一定的值域内呈小范围的波动。当某些节点具有较强的算力,它便能更轻松地解开数学题,也就是更快地挖到块。此时系统将会根据一定周期内的出块平均时间,进行相应的难度(difficulty)调整:


如果平均值小于10分钟,便会增加解题难度,即将目标值设置的更小;当目标值减小时,找到一个小于它的哈希值会越来越难(例如,扔骰子扔到小于3点总会比扔到小于6点的概率更小)。反之亦然。


在这里,系统将每14天进行一次难度评估计算,并作出难度调整。


其中:


设d=14天=60*24*14=20160分钟


在这14天内,将会挖出块的数量:p=6*24*14=2016个


那么出块平均时间 avg t1 =p/d


当avg t1 小于上一个周期的avg t0时便会增加难度,相反亦同理。


我们需要注意一点的是,挖矿的速度与比特币交易的数量与金额规模无关,仅跟全网的算力大小有关。而算力的大小又跟电费、当前币价有关,因为若是币价过于低,cover不住挖矿的成本,便会有大量的矿工离场。此时系统的算力便会降低,挖矿的难度也会相应调小。但由于系统每14天才会进行一次调整,所以比特币的挖矿难度会有些许的滞后性。


10分钟的出块速度也是当初中本聪一个权衡,太快的话会导致加大分叉概率(关于分叉与孤块,后面的文章会详细介绍);而太慢的话会使交易确认变得过于漫长。


挖矿知识入门手册

扫一扫手机访问

发表评论