每天一个知识点:POW

本文作者来自【U赞全球发烧友】,U赞社区将从今天开始,为大家每日分享一个区块链的知识点。

U赞,U Network 价值内容第一公链,是全球第一个去中心化内容估值和发布平台。

每天5分钟,助你在区块链的世界里自由翱翔~

本期分享者介绍

郭敏,硅谷密探发烧友,山西人,欢迎山西老乡撩我。现从事数字货币矿厂建设指导及数字货币挖掘工作(说的直白一点就是一名苦逼的矿工),去年10月结识了硅谷密探,从朱嘉伟老师的《从零到一全面学透区块链》学完后才知道了区块链除了挖矿还有这么多玩法,到后来加入硅谷live的精英社群,价值探员群,坚持观看每周的《中美区块链50讲》,各位发烧友的项目分析,经过自己的不懈学习又进入了发烧友社群,在硅谷live社群中感觉收获颇丰,让我从一个区块链小白成长为现在的老韭菜,也结识了不少大神,对挖矿也有了不一样的体会,相信跟着硅谷live在区块链的知识汲取上每天都有收获,每天都能取得进步,最后再赞一下咱们的U赞,相信会发展的越来越好。

以下为分享内容:

POW定义与解释

全称Proof Of Work,译为工作量证明。简单理解就是一份证明,用来确认你做过一定量的工作。例如在计算机系统中,可以用于这样的情形:A请求一个B的服务,如果A可以短时间大量的请求,可能会造成B的崩溃,于是B对于服务的请求者出题,或者约定一种“解答-验证”协议,这个题需要花费一定的时间去计算,计算好了以后,发送给B验证,B瞬间可以验证完毕,验证通过,再给A提供服务。监测工作的整个过程通常是极为低效的,而通过对工作的结果进行认证来证明完成了相应的工作量,则是一种非常高效的方式。比如现实生活中的毕业证、驾驶证等等,拥有证书即表明你在过去投入了学习与工作。生活中大部分事情都是通过结果来判断的。

POW的基本原理

工作量证明系统主要特征是客户端需要做一定难度的工作得出一个结果,验证方却很容易通过结果来检查出客户端是不是做了相应的工作。这种方案的一个核心特征是不对称性:工作对于请求方是适中的,对于验证方则是易于验证的。它与验证码不同,验证码的设计出发点是易于被人类解决而不易被计算机解决。

比特币中的POW

比特币网络中任何一个节点,如果想生成一个新的区块并写入区块链,必须解出比特币区块链出的工作量证明的迷题。这道题关键的三个要素是工作量证明函数、区块及难度值。工作量证明函数是这道题的计算方法,区块决定了这道题的输入数据,难度值决定了这道题的所需要的计算量。

1、比特币工作量证明函数比特币系统中使用的工作量证明函数是SHA256。SHA是安全散列算法(Secure Hash Algorithm)的缩写,是一个密码散列函数家族。这一组函数是由美国国家安全局(NSA)设计,美国国家标准与技术研究院(NIST) 发布的,主要适用于数字签名标准。SHA256就是这个函数家族中的一个,是输出值为256位的哈希算法。到目前为止,还没有出现对SHA256算法的有效攻击。

2、比特币区块比特币的区块由区块头及该区块所包含的交易列表组成。区块头的大小为80字节,由4字节的版本号、32字节的上一个区块的散列值、32字节的Merkle Root Hash、4字节的时间缀(当前时间)、4字节的当前难度值、4字节的随机数组成。区块包含的交易列表则附加在区块头后面,其中的第一笔交易是coinbase交易,这是一笔为了让矿工获得奖励及手续费的特殊交易。拥有80字节固定长度的区块头,就是用于比特币工作量证明的输入字符串。因此,为了使区块头能体现区块所包含的所有交易,在区块的构造过程中,需要将该区块要包含的交易列表,通过Merkle Tree算法生成Merkle Root Hash,并以此作为交易列表的摘要存到区块头中。

3、比特币难度值难度值(difficulty)是矿工们在挖矿时候的重要参考指标,它决定了矿工大约需要经过多少次哈希运算才能产生一个合法的区块。比特币的区块大约每10分钟生成一个,如果要在不同的全网算力条件下,新区块的产生保持都基本这个速率,难度值必须根据全网算力的变化进行调整。简单地说,难度值被设定在无论挖矿能力如何,新区块产生速率都保持在10分钟一个。难度的调整是在每个完整节点中独立自动发生的。每2016个区块,所有节点都会按统一的公式自动调整难度,这个公式是由最新2016个区块的花费时长与期望时长(期望时长为20160分钟即两周,是按每10分钟一个区块的产生速率计算出的总时长)比较得出的,根据实际时长与期望时长的比值,进行相应调整(或变难或变易)。也就是说,如果区块产生的速率比10分钟快则增加难度,比10分钟慢则降低难度。这个公式可以总结为如下形式:本次难度值 = 上次难度值 * ( 20160分钟/上次难度打包2016个区块花费的时长 )

工作量证明需要有一个目标值。比特币工作量证明的目标值(Target)的计算公式如下:目标值 = 最大目标值 / 难度值其中最大目标值为一个恒定值:

目标值的大小与难度值成反比。比特币工作量证明的达成就是矿工计算出来的区块哈希值必须小于目标值。

比特币工作量证明的过程,就是通过不停的变换区块头(即尝试不同的nouce值)作为输入进行SHA256哈希运算,找出一个特定格式哈希值的过程(即要求有一定数量的前导0)。而要求的前导0的个数越多,代表难度越大。比特币工作量证明的过程我们可以把比特币矿工解这道工作量证明迷题的步骤大致归纳如下:生成Coinbase交易,并与其他所有准备打包进区块的交易组成交易列表,通过Merkle Tree算法生成Merkle Root Hash把Merkle Root Hash及其他相关字段组成区块头,将区块头的80字节数据(Block Header)作为工作量证明的输入不停的变更区块头中的随机数即nonce的数值,并对每次变更后的的区块头做双重SHA256运算(即SHA256(SHA256(Block_Header))),将结果值与当前网络的目标值做对比,如果小于目标值,则解题成功,工作量证明完成。

注:

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF中的F为0-9,a-f的随机数。

数字货币中POW目前存在的较大的争议

1、矿池出现算力和技术垄断,安全性遭到质疑,有“51%算力攻击”的可能;

2、挖矿造成大量的资源浪费,这个看法对于认为数字货币一文不值的人是肯定的,但对于认可市场经济及数字货币价值的人来讲算是个伪命题。

我认为工作量证明不应该被看做是神秘莫测或铺张浪费的。它不仅有正常功效,而且对任何通信协议设计都有潜在的参考价值。如果在电子邮件出现时工作量证明就被大家熟悉了,那垃圾邮件的产生会变得成本极高,就不会产生大量垃圾邮件。如果网络协议在处理用户请求时要求提供工作量证明,我们也许就不必担心DDOS攻击了。

更多学习内容,添加小猪手微信

回复“知识点”进群免费学习

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180601G1JO4A00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券