共识算法系列分享(2):
PoW
引言
共识算法是近年来区块链领域最热门的创新,新型共识算法不断提出,在各种号称百万TPS公链的白皮书中对PoW嗤之以鼻,以致于很多人都觉得PoW貌似已是昨日黄花。但必须指出的是,PoW作为区块链共识算法的鼻祖,尽管有各种不足,但是仍没有一种共识算法可以全方面超过它,或在安全性、或在中心化程度等方面比它差。当前运行最久、最稳定的两大主链,比特币和以太坊仍是PoW,所以认真研究PoW是极其重要的。
1.
PoW的本质
我们在本系列的第一篇《从问题说起》[1]中提到,在一个分布式网络中对节点可能发生的错误分为两种:一类为Fail-stop错误,另一类为Byzantine错误。Fail-stop错误假设网络处于一个封闭的环境,节点只会发生宕机;而Byzantine错误则假充网络是开放的,任何人都可以接入,节点不仅会发生宕机,而且有可能会发生作恶。比特币是第一个真正意义上解决了Byzantine的网络,在假设接入节点有可能会恶意修改源代码的情况下,仍然保证全体网络达成共识。这是一个伟大的创举,实现了开放和免中介化的特性。
PoW的使命就是使网络中作恶的节点不能轻易得逞。PoW的全称是Proof of Work,翻译为“工作量证明”。工作量证明的设立就是针对作恶节点,让作恶的成本急剧上升,使得无法通过作恶获得比做为一个诚实节点更大的回报,导致没有作恶的动力。工作量证明有一个关键的特性就是:计算困难,验证简单。也就是说,提供工作量需要花费大量的计算,而验证却非常快,这种特性使得诚实节点可以轻松验证节点是否在作恶。
PoW源于1993年Cynthia Dwork 和 Moni Naor 的工作[2],用来解决垃圾邮件问题。通常人们总是从事后的角度来解决垃圾邮件问题,利用人工智能等技术分析垃圾邮件的特点,例如,邮件有多个不同域名的接收者、邮件标题包含广告等特殊关键字,通过这些特征判断是否垃圾邮件。但垃圾邮件制造者总是能轻易地绕开这些特点,制造更多具有新特征的垃圾邮件。Cynthia Dwork 和 Moni Naor认为,垃圾邮件泛滥的主要原因在于制造垃圾邮件的成本太低,提高发送邮件的代价将使垃圾邮件制造者知难而退。其具体方法就是针对每封邮件的时间戳、每个接收者和邮件内容,寻找一个随机数,使得H(Email,)的哈希结果以t个0开头。当有s个接收者的时候,至少需要计算s*2t个次哈希才能把邮件发出去,而每当邮件再次发送或内容有微小改动时都需要重新计算哈希。对于邮件验证者来说,只需计算一次哈希就能判定邮件是否正确计算了值。而对于正常的邮件发送者来说,由于发送邮件的数量有限,也能承受计算值多出来的工作量。
比特币中的POW算法与此类似,每个节点根据手续费多少、时间戳等特性对所接收到的交易进行排序打包进一个block,并不停地变化随机数nonce计算block的hash以满足小于难度值。一旦某个节点计算完成,就及时将block通过gossip协议广播出去,只要多于1/2的节点接受了这个block并基于其上进行下一次block的计算,这就能有希望在最长的链中存在。
POW满足了CAP中的A和P,对Consistent进行了一定的取舍,整个系统是弱一致性,在某个时刻点不能保证所有节点返回的结果一致,但随着最大高度的block的不断传播会将最新的结果同步至所有节点。
2.
PoW的缺点
PoW最大的优点是开放,对参与者没有准入要求。但同时也带来了一系列的问题:
性能较低。比特币的区块时间是 10 分钟,以太坊的区块时间大约是 14 秒。Off-chain和sharding等都是提高PoW性能常用方法。
1/2抵抗和矿池的问题。PoW的安全性与网络规模成正比,网络规模越大就越安全。甚至出现了专门的网站[3]统计对PoW主链发起1/2攻击需要的算力。另外,矿机逐渐被中心化的矿池垄断也是一个问题,最大的矿池BTC.com占了约20%的算力。
资源浪费。这是PoW受批评比较多的一个问题,在寻找Hash的过程中的计算其实是无意义的,造成了能源浪费。这也是当前公链共识算法的可持续性问题[4]的争议点。
下图是著名的区块链信息网站统计的比特币Hashrate变化图[5],算力高达40EH/S,每秒做400亿亿次运算!折合成电力消耗,超过了伊朗整个国家的电力消耗总量。
(图一:比特币的Hash Rate)
矿机霸权。比特币PoW采用SHA256哈希,一些ASIC专用芯片能更快速地计算出来,容易导致被这些ASIC专用矿机垄断,不利于整个生态的平衡。
3.
PoW的发展
3.1、解决资源浪费问题
在解决资源浪费的问题上,有素数币、治疗币、比原链等典型代表:
PrimeCoin[6]素数币将SHA256改成了搜索素数算法,要求矿工找出一个符合条件的大素数。Primecoin的Block分为三种,Cunningham I型,Cunningham II 型和孪生素数型。Cunningham I型要求新块的素数小于前一个Block中的素数2倍,Cunningham II 型要求大于前一个的2倍,孪生素数型则要求新块的素数与前一个块的素数是孪生关系,即+2。素数是数学领域的一个重要的基础问题,哥德巴赫猜想、黎曼猜想、孪生素数猜想、RSA算法等都与素数相关,所以素数币的PoW计算意义很大。
Curecoin[7]治疗币将SHA256算法与蛋白质褶皱结构的研究进行了结合。蛋白质褶皱研究需要对蛋白质进行生化反应的模拟,用于发现治愈疾病的新药,计算量较大。
比原链在PoW中引入了矩阵运算,其计算本身仍是无意义的。但因为矿机支持了矩阵运算,可以复用于人工智能计算等场景。
3.2 解决矿机霸权问题
在解决矿机霸权的问题上,PoW算法从比特币的CPU消耗型逐步向内存消耗型、网络消耗型发展。
早期的典型代表有莱特币和达世币。莱特币使用刚性内存哈希函数Scrypt取代SHA256,达世币混合使用11种哈希函数;
以太坊Ethash是内存消耗型算法,预生成1G的DAG内存Cache,并线性增长。使得计算nonce需要大量内存和带宽,这样即使运算超快的机器也无法同时寻找nonce值,使得ASIC机器难以生产,保证了挖矿的公平性。
3.3解决性能较低问题
目前公链层出不穷,重点都在强调自己的高性能,动辄百万TPS。但需要指出的是,区块链领域另一个不可能三角是:去中心化、安全和计算环保,PoS、dPoS等共识算法虽然无需浪费算力去反复搜索Hash、在性能上优于PoW,但在去中心化程度上是不如PoW的。
(图片二:区块链的不可能三角)
4.
ATN与PoW
ATN的一个愿景就是将共享算力用于人工智能计算,包括人工智能模型训练、预测和在线服务。素数币和治疗币给了我们一些启示,将人工智能中一些标准计算抽取出来,成为共识算法中的计算目标,但这样做能覆盖到的人工智能计算场景非常有限,无法满足AI研究者的算力要求。同时,寻找外星人的SETI@HOME[8]、医学研究的FOLDING@HOME[9]等算力共享项目是另一种思路,对数据和计算任务进行分发,不限制计算函数,更容易满足上层应用需求。ATN采用链下计算和链上共识相结合的方式,链下计算满足人工智能复杂的运行环境,通过链上共识与区块链结合起来。
[总结:本文是共识算法系列分享的第二篇,主要阐述了PoW的历史、现状和发展趋势,对PoW的特点进行了讨论。“计算困难、验证简单”是PoW设计的核心思想,通过提高作恶者的代价来保证网络的安全。PoW在性能较低、资源浪费和矿机霸权等方面有一定的不足,近年来在改进这些方面的研究成果颇多。]
[2] Cynthia Dwork and Moni Naor. Pricing via processing or combatting junk mail. In Ernest F. Brickell, editor, CRYPTO’92, volume 740 of LNCS, pages 139–147. Springer, August 1993
[3] https://www.crypto51.app/
[4] https://medium.com/@preethikasireddy/fundamental-challenges-with-public-blockchains-253c800e9428
[5] https://www.blockchain.com/zh-cn/charts/hash-rate?timespan=all
[6] http://primecoin.io/
[7] https://curecoin.net/
[8] https://setiathome.berkeley.edu/
[9] https://foldingathome.org/
加入ATN社区,了解更多最新动态
领取专属 10元无门槛券
私享最新 技术干货