一、工作量证明机制(pow)是什么
工作证明(Proof Of Work,简称POW),顾名思义,即工作量的证明。通常来说只能从结果证明,因为监测工作过程通常是繁琐与低效的。
比特币在Block的生成过程中使用了POW机制,一个符合要求的Block Hash由N个前导零构成,零的个数取决于网络的难度值。要得到合理的Block Hash需要经过大量尝试计算,计算时间取决于机器的哈希运算速度。当某个节点提供出一个合理的Block Hash值,说明该节点确实经过了大量的尝试计算,当然,并不能得出计算次数的绝对值,因为寻找合理hash是一个概率事件。当节点拥有占全网n%的算力时,该节点即有n/100的概率找到Block
Hash。
工作证明机制看似很神秘,其实在社会中的应用非常广泛。例如,毕业证、学位证等证书,就是工作证明,拥有证书即表明你在过去投入了学习与工作。生活大部分事情都是通过结果来判断的。
二、什么是工作量证明
在区块链里很重要一个概念就是工作量证明,英文全称为Proof of Work,缩写为POW。相信很多人刚接触到这个概念的时候都很费解,“咦,工作量证明?意思是要证明我做了多少工作吗?”;我更相信很多投资比特币或者被一些所谓的“可以一夜暴富”的“新型数字货币”所忽悠的投资人,对这个概念更加“耳熟能详”,因为他们听到太多那些“货币”宣称自己有更安全的算法、更可靠的工作量证明机制。因为听得多,似乎很懂,但就是不真正理解它,这种认知上的不对称,往往是传销币等妖物有机可趁的主要原因。
之前给大家介绍“拜占庭将军问题”的时候,提到过拜占庭将军解决的主要是多个节点之间如何取得共识的问题(如果你忘了当时的故事背景是怎样,那再去好好翻翻之前的课程吧),但是并没有深入介绍如何进行共识。如何进行共识,是区块链里最关键的一个问题,也是被讨论得最多的一个,在区块链诞生之前,分布式系统领域里对共识算法就有很多研究,但是这里并不打算展开了。
1、工作量证明真的是用来证明你做了多少工作
其实,正如本文第一段提到的,很多人刚开始理解的那个概念,“工作量证明主要用来证明一个人做了多少工作”,基本是正确的,计算机领域并不是只有一些生涩的概念的,这个概念通俗易懂,反倒让我们困惑了。
还是要回到拜占庭将军问题的故事场景,在那个故事里,我们应该信任谁,谁能担此大任成为那个英雄卓绝的将军呢?
可能因为城邦之间信息在不断传输,传输量太大,每个城邦的将军都王婆卖瓜,自卖自夸,到底该信任谁,基本上很难区分。细心的朋友可以好好发挥一下想象力。其实,有种最简单粗暴的方法:看谁最聪明!谁最聪明,我们就相信谁。
谁最聪明这个问题其实太主观了,没办法,只能拿实力说话。就像我们经历过无数的考试一样——来,将军们,大家做道题吧,解答准确且最快的人胜出。
于是,智多星旁白:请听题儿,请问在一个值比如123456789,后面追加一个5位随机数,请找到一个随机数,使得所计算的哈希值前5位都是0。
将军们千万不要懵逼,你不知道并不代表别人不知道,于是那个最聪明的将军快速的算了出来,并写上自己的名字,交了试卷。老师一验证,完全正确,于是选出他作为那个拜占庭将军,号令群雄。
如果你不知道哈希算法,请回去复习之前的课程。另外,这里提醒一点,将军必须写上自己的名字表明是自己算对的这道题,这在区块链里也很重要,它表示签名表明自己胜出,最后还能获得奖励哟。
以上介绍的这个有的意思的过程,就是所谓的工作量证明。
2、怎么理解挖矿,矿机,矿池?
工作量证明最常见是在比特币里,当大家还不太理解这个玩意儿的时候,已经很多地方见到“挖矿”“矿机”这些宣传字眼了,那个时候我们根本不能理解的是,在电脑里面怎么挖矿?脑洞完全打不开啊。我也困惑了很久,当在淘宝上看到有人卖矿机的时候,我一脸鄙夷,说这一定是忽悠。
很多时候鄙视其实更多是自己不理解造成的,直到它长成庞然大物,直到罗胖提到的“旁边有个物种坐了起来”,才发现我们理解地似乎有点晚了。即便如此,我们不能因此放弃对一个新鲜事物的认识呀。
所谓挖矿,其实就是计算机对上面提到的工作量证明进行的一个运算过程。大家或许会奇怪,将军算题这么高大上的一个比喻到了这里怎么变成挖矿这么苦逼的一个概念呢?其实,拜占庭将军只是以一种有趣的方式描述了故事背景,及工作量证明的一些细节,而挖矿更贴近区块链里工作量证明的一个过程——因为,确实很苦逼!
其实,上面提到的“智多星”或者“老师”,就是那个神秘人物中本聪,比特币的发明人(或组织)。中本聪出的这道难题说白了就是一个傻瓜式地,只能吭哧吭哧,老老实实地,从1,2,3…n不断尝试计算的一个计算题,也即密码学里提到的暴力破解的概念。这种计算过程,枯燥乏味,耗费精力时间,这么苦逼,用“挖矿”形容最好不过了。而这个“矿”就是比特币,一种如黄金般稀缺的玩意儿。
但是我们不要忘了,这种机械化的计算是计算机最擅长的事儿了,于是所有的都交给计算机吧,这才有了“矿机”的概念。随着技术的发展,大家发现,计算机功能太强大,完全没有必要全部用来进行这种计算,于是不断精简,将挖矿算法集成到一些芯片里,不仅节省能源,而且算得更快。这就有了CPU挖矿,GPU挖矿,FPGA挖矿,ASIC挖矿等这类说法。
而矿池的出现,是随着比特币数量的总数限制,以及四年减半的硬性要求,挖矿到后期竞争越来越激烈,挖到比特币的难度越来越大,于是只能抱团并肩作战,这个团体就叫做“矿池”。有矿机的人可以选择加入某个矿池,矿池集合所有矿机的力量,进行类似上面算术难题的计算;在计算时,将随机数号码段进行分配,不同号码段交给不同的矿机计算,于是计算的效率大大提升,这样便可以集合作战,共享收益。
其实上面介绍的一些概念都非常初级,目的还是希望很多没有相关基础的人都能搞懂,只有把这些最基本的概念都理解了,走到后面才更容易,不是吗?
三、什么是工作量证明机制(POW)
工作量证明机制(POW)不难理解,很多情况下我们都使用POW,只是不自知而已。在不考虑验证的情况下(无论是中心化还是非中心化的验证),我们可以认为任何具有概率性事件的累计都是工作量证明,如淘金。假设矿石含金量为p%质量,当你得到一定量黄金时,我们可以认为你一定挖掘了1/p质量的矿石。而且得到黄金数量越多,这个证明越可靠。
在一个简单的钓鱼游戏里,如果钓到鱼的概率是较小的,我们可以认为玩家持有一定数量的鱼就相当于完成了一定量的钓鱼工作,从而可以认为玩家完成了钓鱼任务。
一个人具有的一些技能如外语口语,乐器或是运动技巧,通常也是一种工作量证明。不用检查四六级证书,一个人能流利的说外语或者演奏乐器,那么TA一定在这些技能上投入了足够的工作量,而且这个工作量与技能的熟练程度是正相关的。数字货币交易平台“币汇”。
再说这四六级证书,一般认为在不能作弊的考试里采用足够多的客观题,也可以做到工作量证明的效果,因为一个人从概率上不可能连续蒙对大量的客观题。因此一般认为文凭也是有说服力的。同样的,飞行员的飞行小时数也说明问题,如果你飞了一万小时还活着,大概率就不是靠运气。
在一些其他场合我们也可以见到POW的踪影,比如电子游戏里的胜率、K/D比率,在大量的交战中一定的胜率能说明玩家的实力。同样有些游戏里的成就系统、装备体系也是POW,一般认为成就点数高的玩家在游戏里投入更多,更不容易诈骗,有时候交易点卡要求装备等级或者成就点数也是这个道理。
因此,POW要求出示一定的证明表明工作量,证明可以是直接记录也可以是以概率表示,其中对于由小概率事件累计的工作,出示结果等同于证明了工作量(因为不太可能直接得到小概率结果)
在比特币和其他类比特币的系统中,POW系统是以合乎要求的HASH作为工作结果。由于矿工要取得合法的计算结果需要一定量的计算,因此得到合法的计算结果就可以证明完成了一定量的计算。