什么是工作量证明?
1993年工作量证明的概念出现并发展,即:为了防止分布式拒绝服务攻击和其他服务的滥用,例如垃圾邮件,来要求用户做一些工作,这个过程通常意味着需要计算机的处理时间。在2009年,比特币引入了一种新颖的方式:利用工作量证明作为共识算法来验证交易并向区块链广播新块。现在它已经扩展到许多加密货币中,成为了广泛使用的共识算法。
工作量证明机制(POW)不难理解,很多情况下我们都使用POW,只是自己不知道而已。无论是中心化还是非中心化的情况下,我们可以认为任何具有概率性的事件的累计都是工作量证明。
一个人具有的一些技能,比如外语口语,乐器或是运动技巧,通常也是一种工作量证明。不用检查四六级证书,一个人能流利的说外语或者是演奏某种乐器,那么他一定在这些技能上投入了足够的工作量,而且这个工作量与技能的熟练程度是正相关的。
最早的工作量证明,是用在电子邮件系统里的,有个叫hashcash的软件,设计用来防止滥发垃圾邮件。
很多发垃圾邮件的人,从网上爬取了很多电子信箱,然后群发广告过去,一般发黄色网站的广告。黄色网站注册是要收费的,这样一年可以赚不少钱。这是因为发垃圾邮件的成本太低,收益却很高。一台电脑,一个晚上可以发几百万封垃圾邮件。
那Hashcash怎么解决这个问题呢?
它规定发邮件之前你必须做一些工作,先工作,后发邮件。矿工想要获得记账权,必须先做工作,计算一个哈希碰撞。所以接下来讲一下哈希算法。
什么是哈希算法?
算法原理并不复杂,在加密学里应用广泛。在区块链的世界里,哈希算法被普遍运用。
哈希算法,就是把任意长度的输入通过散列短发变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。
举个例子理解一下,我们要去搜索一张图片,在没有人工标注的情况下,在巨大的图库中想要以图搜图是一件极其庞大而又困难的工作量,可是如果通过哈希算法,可以得到一些列哈希函数,通过这些函数,可以将每一张图片转化成一串0~1的编码。
比较神奇的是,编码串相似的图片对应的语义也是相似的。这就是简单的哈希算法在生活中的简单应用。
它是如何工作的?
简单来说,网络中的矿工会在解决复杂的计算难题时相互竞争。这些难题很难解决, 但是其答案很容易被验证是否正确。一旦矿工找到了(某区块)难题的解,他们就能将该区块广播到网络,然后所有其他矿工将验证该答案是否正确。
让我们举个例子:
比特币是一个基于区块链的系统,由分散的节点集体维护。其中一些节点被称之为矿工,负责将新区块添加到区块链中。为了达到这一目的,矿工们需要尝试猜测一个随机数(nonce)。当该数与区块中包含的数据组合并代入到散列函数计算后,结果必须符合给定的条件,比如以四个零开始的计算结果。当找到与条件相符的结果后,其他节点将验证结果的有效性,并且矿工节点将获得该区块奖励。
因此,在没有找到有效的随机数情解的情况下,新的区块不可能被添加到主链中,而有效的随机数又生成特定区块的解(称为块散列)。每个经过验证的区块都包含一个块散列代表矿工所做的工作,这就是为什么这种方法被称为工作量证明。
工作量证明有助于保护网络免受各种不同的攻击。一次成功的攻击非常低效,因为它需要大量的算力以及时间来进行计算,这产生的成本会大于攻击网络的潜在回报。
工作量证明的一个问题是挖矿需要耗费大量功率的昂贵计算机硬件,这些复杂的算法保证了网络的安全性,然而这些计算过程和结果离开了网络将毫无意义。
虽然工作证明量可能不是最有效的解决方案,但它仍然是在区块链网络中达成共识的最流行方法之一。虽然现在已经有很多尝试解决该问题的替代方法,但只有时间才能告诉我们工作证明量的继任者是谁。
就像去挖黄金,你挖的时间越长,设备越先进,说明你的工作量越高,你挖的黄金也就越多。虽然短期看可能有运气因素,但是长期来看是公平的,谁算力高,谁挖的币就多。所以我今天要给大家讲一下工作量证明。