区块链的工作量证明(Proof of Work)初步解释

Proof Of Work,顾名思义,直译过来就是工作的证明,也就是证明你,某人做了一定量工作。这就是这种机制的命名来源。如果希望证明某人做了什么工作的话,那显然,最有力的就是目睹,观测他整个工作的过程,然而,这种方式显然是极为不便的而不可取的。所以,我们只需要这个人提供给我们工作的结果即可,也就是我们关注的对象是结果,而不是过程,从计算机的角度来讲,那就是——我们提供给你输入,你只需要给我们一个输出。例如,我们想知道你能够开车,那我们并不需要大费周章找一辆车让你现场开给我们看,而只需要你出示你的驾照即可。
工作量证明系统就是,让发起者进行一定量的运算之后,向接受方出示正确的运算结果作为运算工作,也就是消耗了一定的计算资源的证明。

白皮书里工作量证明其实讲了以下3点:

1.工作量证明的过程就是要解一道数学难题,这道数学难题就是要解一个用SHA256算法运算过的前面带1个或N个0的哈希值。如果矿工能算出这个未被SHA256算法运算过的随机散列值,并向全网广播,就拥有区块的记帐权,从而能获得比特币奖励。其它节点如何知道该矿工找到了这个随机散列值呢?当然是将矿工广播的随机散列值用SHA256算法计算,算出的结果与先前公布的哈希值进行比对,如果与先前哈希值一样,开头也有那么多个0,则验证该矿工计算正确。其它节点于是一致承认该矿工拥记帐权,于是跟随该矿工一起记帐。这里面矿工广播的随机散列值就是矿工向全网提供的工作量证明。而其它节点用SHA256算法计算出结果并比对的过程就是检验矿工是做了一定的工作量。奖励不是白给的,要付出大量劳动的。举个例子:A要向B发一封邮件,但要防止被B误认为是垃圾邮件。系统会根据发件人的发件时间和第几次发邮件出一道难题。这道难题初始信息包括:版本号(可以说是发第几次邮件)+发件日期时间+发件人邮件地址+一串随机散列数值,再将以上信息打包用SHA256算法计算出开头带数个0的hash值。并将这个哈希值公布,从而A和B都知道这个哈希值。那么A现在就要计算这个hash值hash前初始信息中包含有的随机散列值。A如果找到该散列值,就能将散列值与邮件一同发送给B,B只需用SHA256算法将该散列值再HASH计算一遍,得出同样带数个0的哈希值,然后就承认并接收A发的邮件不是垃圾邮件。因为A费了九牛二虎之力计算该难题的目的不仅仅是为了发垃圾邮件。这就是反垃圾邮件算法的形象过程。

2.以上前面数个0的个数可以根据全网挖矿算力灵活进行调整,算力高的时候,减少0的个数,算力低的时侯,增加0的个数,以保证出块数为每10分钟一个,每增加一个0,计算难度将呈指数级增长。

3.解决了一个集体节点中,哪些算是大多数的问题。因为在表决时要少数服从多数嘛!比特币釆用的是一CPU一票,而不是一IP地址一票。IP地址数量容易被操纵,而CPU分布在每个人的电脑里面,所以更加分散,不容易造成中心化,但现在出现了由专业化矿机组成的大型矿池,造成算力越来越中心化,这是中本葱始料未及的。由诚实节点组成的大多数被表现为最长的链。

攻击者想要攻击篡改一个数据除了要与时间戳一致,并完成该区块的工作量证明外,还要完成该区块之后所有区块的工作量证明,这工作量大得惊人,除非攻击者能控制全网51%的算力,否则只能是做梦而矣。

 

上一篇:Top5上最短的经济学论文, 这5篇短到可以进入吉尼斯纪录了!


下一篇:用Python从零开始创建区块链