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