工作量证明(Proof of Work,简称PoW),类似于现实生活中的毕业证或驾驶证,通过检验结果的方式(如通过相关的考试)来获得认证。在加密世界中,PoW 是区块链网络的底层共识模型,是使各节点在网络中的达成一致的标准,以此来确认交易并为区块链生成新区块,并在此过程中建立激励机制,用作对生成区块的节点的奖励。
PoW (Proof of Work)工作量证明相关的学术研究最早始于20世纪90年代初。1993年,美国计算机科学家、哈佛大学教授辛西娅·德沃克(Cynthia Dwork)提出了工作量证明思想,用来解决垃圾邮件问题。
1997年,亚当·贝克(Adam Back)发明的哈希现金(HashCrash)技术中应用了工作量证明机制,用于抵抗邮件的
拒绝服务攻击及垃圾邮件网关滥用,强制要求每个邮件发送者,必须进行一段哈希运算,人为造成一小段时间的延迟。
哈希现金技术后来被广泛用于垃圾邮件的过滤,也被微软用于著名的Hotmail、Exchange,Outlook等产品中)。
2008年,中本聪在发表的《比特币:一种点对点的电子现金系统》等相关论文中,首次将工作量证明思想应用于区块链共识过程中,提出了比特币系统的区块链PoW共识算法。
PoW共识算法的工作基础是哈希函数,对于一个一定长度的的字符串输入s,哈希函数H(s)输出结果的长度是固定的,并且计算H(s)的过程是高效的。而对于比特币、以太坊等典型区块链系统所使用的哈希函数,还需要具备以下3个前提。
前提1:哈希函数要避免碰撞,即不会出现输入的值不同,但得到的哈希值一样。
前提2:计算过程不可逆,对于一个给定的输出结果H(s),想要逆向推导出输入s,在计算上是不可能的。
前提3:不能使用穷举法之外的其它方法使哈希函数计算结果H(s)落在特定的范围。
PoW 共识算法的参考流程如下:
(1)系统指定一个全局难度值,根据该难度值可以决定下一个区块的哈希计算结果必须满足的要求,一般是要求哈希值小于某个值,为了保证出块时间稳定,随着系统的节点规模逐步增大,难度值也会逐步增加,并且每过一段时间系统会调整难度值;
(2)系统各节点将接收到的多个交易信息打包到新区块的区块体中;
(3)系统各节点构根据新区块体中的交易信息组装新区块的区块头,区块头一般应包含上一个区块的哈希值、由新区块打包的交易信息生成的哈希值、当前系统确定的难度值、时间戳、随机数Nonce的值;
(4)系统各节点使用区块链系统规定的哈希算法进行计算,如比特币系统采用的双重SHA256哈希函数,并将计算结果与系统当前的难度值进行比较,如果哈希值不满足难度值要求,则修改区块头中的随机数Nonce的值,循环进行下一次哈希值的计算;如果节点成功计算出满足难度值要求的哈希值,则马上对系统统所有节点广播新区块信息;
(5)节点收到来自其它节点的广播后,会对收到的新区块信息具进行验证,如比特币系统节点对收到的新区块头进行双重 SHA256 哈希计算。如果验证通过,就不会再竞争当前区块,而是选择接受新区块,写入到分布式账本的本地副本中。
(6)系统各节点开始下一轮出块权的竞争。
在PoW 算法中,系统中只有最快计算出满足难度值要求的希值的节点,才会拥有将新区块添加到分布式账本中的权力,而其它节点只允许对主节点创建的新区块进行复制,从而确保每个节点中分布式账本刷本数据的一致性。
PoW 共识算法依靠算力竞争来分配记账权,随着区块链系统节点规模的快速增加,必然造成巨大的算力资源和电力浪费,据相关数据,2020 年比特币系统消耗电力达 1348.9 亿度电,相当于一个省全年的用电量,这是PoW算法最大的局限性。
同时 PoW 共识算法由于运算时间过长,变得获得记账权的等待时间变久交易确认周期也会变长,严重影响产生区块的效率,例如比特币系统,目前大概是每10分钟产生一个区块,因此比特币系统无法每秒交易处理,性能 TPS 也是PoW共识算法的局限性之一。
工作量证明(Proof of Work,简称PoW),类似于现实生活中的毕业证或驾驶证,通过检验结果的方式(如通过相关的考试)来获得认证。在加密世界中,PoW 是区块链网络的底层共识模型,是使各节点在网络中的达成一致的标准,以此来确认交易并为区块链生成新区块,并在此过程中建立激励机制,用作对生成区块的节点的奖励。
PoW (Proof of Work)工作量证明相关的学术研究最早始于20世纪90年代初。1993年,美国计算机科学家、哈佛大学教授辛西娅·德沃克(Cynthia Dwork)提出了工作量证明思想,用来解决垃圾邮件问题。
1997年,亚当·贝克(Adam Back)发明的哈希现金(HashCrash)技术中应用了工作量证明机制,用于抵抗邮件的
拒绝服务攻击及垃圾邮件网关滥用,强制要求每个邮件发送者,必须进行一段哈希运算,人为造成一小段时间的延迟。
哈希现金技术后来被广泛用于垃圾邮件的过滤,也被微软用于著名的Hotmail、Exchange,Outlook等产品中)。
2008年,中本聪在发表的《比特币:一种点对点的电子现金系统》等相关论文中,首次将工作量证明思想应用于区块链共识过程中,提出了比特币系统的区块链PoW共识算法。
PoW共识算法的工作基础是哈希函数,对于一个一定长度的的字符串输入s,哈希函数H(s)输出结果的长度是固定的,并且计算H(s)的过程是高效的。而对于比特币、以太坊等典型区块链系统所使用的哈希函数,还需要具备以下3个前提。
前提1:哈希函数要避免碰撞,即不会出现输入的值不同,但得到的哈希值一样。
前提2:计算过程不可逆,对于一个给定的输出结果H(s),想要逆向推导出输入s,在计算上是不可能的。
前提3:不能使用穷举法之外的其它方法使哈希函数计算结果H(s)落在特定的范围。
PoW 共识算法的参考流程如下:
(1)系统指定一个全局难度值,根据该难度值可以决定下一个区块的哈希计算结果必须满足的要求,一般是要求哈希值小于某个值,为了保证出块时间稳定,随着系统的节点规模逐步增大,难度值也会逐步增加,并且每过一段时间系统会调整难度值;
(2)系统各节点将接收到的多个交易信息打包到新区块的区块体中;
(3)系统各节点构根据新区块体中的交易信息组装新区块的区块头,区块头一般应包含上一个区块的哈希值、由新区块打包的交易信息生成的哈希值、当前系统确定的难度值、时间戳、随机数Nonce的值;
(4)系统各节点使用区块链系统规定的哈希算法进行计算,如比特币系统采用的双重SHA256哈希函数,并将计算结果与系统当前的难度值进行比较,如果哈希值不满足难度值要求,则修改区块头中的随机数Nonce的值,循环进行下一次哈希值的计算;如果节点成功计算出满足难度值要求的哈希值,则马上对系统统所有节点广播新区块信息;
(5)节点收到来自其它节点的广播后,会对收到的新区块信息具进行验证,如比特币系统节点对收到的新区块头进行双重 SHA256 哈希计算。如果验证通过,就不会再竞争当前区块,而是选择接受新区块,写入到分布式账本的本地副本中。
(6)系统各节点开始下一轮出块权的竞争。
在PoW 算法中,系统中只有最快计算出满足难度值要求的希值的节点,才会拥有将新区块添加到分布式账本中的权力,而其它节点只允许对主节点创建的新区块进行复制,从而确保每个节点中分布式账本刷本数据的一致性。
PoW 共识算法依靠算力竞争来分配记账权,随着区块链系统节点规模的快速增加,必然造成巨大的算力资源和电力浪费,据相关数据,2020 年比特币系统消耗电力达 1348.9 亿度电,相当于一个省全年的用电量,这是PoW算法最大的局限性。
同时 PoW 共识算法由于运算时间过长,变得获得记账权的等待时间变久交易确认周期也会变长,严重影响产生区块的效率,例如比特币系统,目前大概是每10分钟产生一个区块,因此比特币系统无法每秒交易处理,性能 TPS 也是PoW共识算法的局限性之一。