Daniel's Studio.

浅谈PoW(Proof of Work)共识机制

字数统计: 2.6k阅读时长: 8 min
2019/10/15 Share

阅读材料:

定义及起源

工作量证明,PoW(Proof of Work),是一种应对服务与资源滥用、或是阻断服务攻击的经济对策。一般要求用户进行一些耗时适当的复杂运算,并且其答案能被服务方快速验算。以耗用的时间、设备与能源作为担保成本,确保服务与资源是被真正的需求所使用。

工作量证明,从名字不难理解,简单来说就是通过一定的方式或手段来证明在过去一段时间内完成的工作量,以获得别人的奖励和认同。结合我们日常生活,倘若要求 A 监测 B 工作的完整过程,这将极为费时费力且十分低效。因此,我们一般都会采用工作量证明的机制,例如我们的考试成绩、各种证书等等,将重点放在工作的结果上,使得验证工作变得高效。

从第二篇文章中得知,第一个被广泛了解和接受的PoW系统是HashCash,并且最开始是用来解决垃圾邮件问题的。这个系统要求发送者去解决一个数学难题:通过在邮件信息中包含一段邮件签名,签名包括收件人地址,时间戳和一个特殊的值“nonce”,使得其哈希值前恰好有一定数量的0。由于哈希算法的不确定性,产生正确的“nonce”的代价十分昂贵,但验证起来却十分简单。当时的人们希望通过这种方法来要求邮件的发送者证明其发送的邮件不是垃圾邮件,同时提高垃圾邮件发送者发送垃圾邮件的代价。但在第二篇文章中提到,PoW对于垃圾邮件问题的解决并没有想象中的有效,存在的问题会在后面讲到。

因此,PoW早在比特币出现之前就已经发明并经过实践检验,证明了其有效性。中本聪在设计区块链的共识机制的时候就采用了PoW。下面我们先来介绍PoW共识机制的原理。

原理

由于区块链被设计为一个去中心化的分布式全球账本,那么那以避免的会出现拜占庭将军问题(The Byzantine Generals Problem)。那么,如何使得区块链中的所有分布式节点能够排除错误,快速达成一致,使得比特币系统有效、稳定、正确的运行,就需要一个共识机制,即上文介绍的PoW。

比特币中各个节点通过PoW共识机制争取记账权,并达成一致的流程大致如下:

  • 每当新交易产生,会向全网广播,收到广播的节点们将交易纳入自己的区块中
  • 每个节点(矿工)通过挖矿—解决一个哈希难题,争取获得对于记录了过去一段时间交易信息的区块的记账权
  • 某个节点成功挖到了矿后,向全网广播,由其他节点进行验证
  • 验证区块的有效性后,节点之间达成共识,接受该区块。该节点获得对于这块区块的记账权,负责将其链入区块链的尾部,同时获得比特币奖励
  • (如果有两个矿工同时挖出矿,区块链就会暂时分叉,但到最后节点总是认可最长的链)

PoW共识机制需要满足以下一些条件:

  • 工作量证明函数。该函数找到解很难,但是验证解很容易,保证生成证明需要经过一定数量和难度的计算,以达到耗费一定时间的目的,且难以伪造。
  • 难度值。比特币的工作量证明函数的难度值是动态变化的,难度值的强弱要满足大约在10分钟左右出一块的要求,如果出快速度过快,就会提高难度,反之亦然。

基于以上分析,我们不难得知,基于PoW的共识机制是一种类似于按劳分配的机制,只不过这里的劳动是计算机的算力:算力越大,解决哈希难题的可能性也越大,得到的收益也越大。这就会导致一些问题,出现一些自私的挖矿者,第一篇文章中提到了这一情况,提出了比特币的挖矿协议不是incentive-compatible的,并提出了对于比特币协议进行修改的一些方案。

文章解读

在这里对于阅读资料中提到的两篇文章做一个概括和总结:

一、Majority Is Not Enough:Bitcoin Mining Is Vulnerable

在这篇文章中,作者提出了一个与传统相反的观点:比特币的共识机制是脆弱的。传统观点认为,PoW共识机制可以有效的抵御少数群体串通合作的情况,但作者描述了一个策略,会使得少数群体获得比该群体公平份额更多的收入,背后的思想是:私自挖矿,就是一个矿池保持其挖出的矿的私有,故意使得区块链分叉。下面做一个简单的介绍:

自私的矿工获利的方式是使得诚实的矿工浪费其努力。我简单概括一下文中提出的场景:假设私有的矿工们率先挖出了一个矿,他们不会马上公开广播,而是秘密创建私有分支,此时他们就处于有利地位,因为他们掌握的链比公开的链更长。后续的,假设自私矿池又发现一个矿,就会继续增长其私有链。

由于私有矿池的算力毕竟占少数,因此他们的优势最终会被抹平,但就在即将抹平的时候,他们会通过一些虚假的矿工(这些矿工受其控制),让他们的广播信息在全网传播的更快,那么,由于比特币协议规定节点都接受并传播最长且最先接收的链,他们的链就会被接受。结果就是,自私的矿工获得全部收益,而诚实矿工们之前的计算都白费了。

当然,文章中提出了一些解决方法,例如节点接收到相同长度的链时,应该传播所有分支,并随机选择一条进行开采等。

二、“Proof-of-Work” Proves Not to Work

在第二篇文章中,文章的作者从两个方面:经济方面和安全方面进行了细致的分析,并依据真实的数据进行了预估,得出了一个结论:让每一封电子邮件都附带工作证明是不可行的。论证如下:

  • 从经济角度,如果要使得垃圾邮件发送者由于收益原因不再发送邮件,我们就必须限制其发送垃圾邮件的速度。经过一系列的数据论证,作者得出的结论是,要想达到这样的结果,工作证明的时间最低为43.2秒,但这就会影响合法发送者的发送体验。
  • 从安全角度,由于工作证明的存在,垃圾邮件发送者会想办法提高发送速度,他们就会使用病毒去控制其他机器,让其他邮件为其计算工作证明的结果而不被发现,那么我们就需要把难题难度进一步提高。

因此,部署通用的PoW方案简单但却不合理。文章还提出了,可能存在的可行方案是创建一些白名单,使工作证明只是整体系统的一部分,但这种方案是复杂且脆弱的。

优缺点

基于上文,我们已经对于PoW有了一个大致的了解。总体而言,PoW有以下优缺点。

优点

  • 完全去中心化,有效的解决了拜占庭将军问题;
  • 任何人都可以自由接入节点或者离开节点。

缺点

  • 资源浪费。由于计算机算力一定程度上决定了挖到矿的概率,挖矿者会想方设法提高自己矿机的算力,而随着矿机性能的提高,哈希难题的难度也会相应增加。就这样,矿工之间就会展开一场没有硝烟的战争。而这些计算机的算力以及电力资源,由于都是用于产生毫无意义的哈希值,都被浪费掉了;
  • 51%问题。PoW共识机制设计的最大问题就是如果某个团体拥有整个系统51%的算力,他将可以随意篡改区块链。虽然现在对于比特币网络看似目前不太可能,但这也是潜在问题之一,不能保证一定不会发生,目前排名前五的矿池拥有近70%的总哈希算力。一些小型的基于工作证明PoW的网络就更加危险,比如,2016年Ethereum network就收到了攻击威胁;
  • 随着全网算力提升,分叉—即同时挖到矿的概率越来越高,而分叉意味着矿工需要长时间的等待才能确认自己挖出来的区块得到了全网的认可,而用户也需要长时间的等待才能得到交易的确认。

可能的解决方法

下面谈一谈我自己了解到和能想到的,对于一些问题的解决思路。

  • 对于算力浪费的问题,我们应该可以设计一种比较有意义的难题,作为PoW共识机制下节点要去解决的对象,例如对于复杂数学难题的求解,舍弃原来毫无意义的哈希值寻找。但这种问题设计起来确实十分困难,很难找到一个像寻找哈希值这样契合PoW要求的难题;
  • 对于矿池越来越庞大的现象,可能需要设计一些奖励和惩罚措施,比如降低大矿池的收入,增加个体矿工的收入,以鼓励矿工们脱离矿池。
CATALOG
  1. 1. 定义及起源
  2. 2. 原理
  3. 3. 文章解读
    1. 3.1. 一、Majority Is Not Enough:Bitcoin Mining Is Vulnerable
    2. 3.2. 二、“Proof-of-Work” Proves Not to Work
  4. 4. 优缺点
    1. 4.1. 优点
    2. 4.2. 缺点
  5. 5. 可能的解决方法