帖子目录
为什么需要工作量证明
我们已经知道矿工如何寻找哈希值而生成一个有效的区块,而节点又是如何交流并达成共识将新的区块添加到区块链上。
这种验证和达到共识的过程,必须耗费大量的计算成果。
也就是说我们必须对即辛苦挖矿又贡献大量算力的矿工给予奖励,这就是我们要探讨的工作量证明共识机制。
工作量证明 PoW 就是寻找一个密码学难题的解答,也就是我们俗称的“挖矿”。
寻找一个小于难度阈值的哈希值是必须经过很多耗时且复杂的运算。
这个运算结果的哈希值可以被其他节点用来证明提供者的确付出了一定的工作量,所以被叫做工作量证明。
然而工作量证明机制并非是加密货币所独有的。
早在1993年,美国的两位教授提出了工作量证明机制,这是专门针对垃圾邮件而设计的反垃圾邮件机制。
其特点就是发送邮件时,必须执行少量计算,以确保服务与资源不被滥用。
此机制使到每封电邮发送时都附加了一个微小的成本,进而能遏制大量垃圾邮件的发送。
中本聪借鉴了工作量证明机制,并加入矿工激励等机制,实现了区块链一致性的共识机制。
工作量证明共识的记账过程
简单而言,记账过程的工作量证明就是寻找一个合适的哈希值,即是证明矿工的确付出很多运算的工作量。
工作量证明的完整流程:
- 客户端向网络的任意节点要求对新交易进行记账;
- 节点会验证交易记录并广播到整个网络;
- 每个记账节点收到此请求后,将收到的交易信息与其他尚未记录的账本组成一个交易列表;
-
并通过 默克尔树 将此交易列表生成一个默克尔根哈希,把默克尔根哈希及其他相关字段组装成 80 个字节的区块头,这区块头即为工作量证明的输入;
- 矿工们不停地改变区块头中的 Nonce 数值,并对区块头做双重的哈希运算(即 SHA256(SHA256(区块头输入值)) );
- 一但其结果小于当前网络的难度阈值(即是挖到矿了! ),工作量证明完成;
- 当一个节点成功解了一个工作量证明,它有权记账并将新区块添加到其链中并向其邻近节点广播;
- 其他的节点进行复制并继续传播这个新区块,然后同时进行下一个区块的竞争挖矿。
十分钟的比特币工作量证明机制算力跑道
众所周知比特币系统有很多矿工参与挖矿。
以下是比特币系统工作量证明的步骤:
- 比特币系统利用工作量证明机制,给矿工们铺了一条算力的跑道。
- 系统通过调整前导 0 的哈希值来改变出题难度,从而保证算出工作量证明的时间大致在十分钟左右。
- 也就是说,比特币系统是每十分钟记账一次,矿工们每十分钟就可以重新再比一次。
- 系统会给所有的矿工广播一个目标值(即输出值),让矿工去找到它的输入值。
-
因为哈希函数本身是不能进行反向运算的,所以如果矿工们要找到输入值,唯一的做法就像在 区块揭秘 帖文中所提的方法。
- 就类似于掷骰子一样,任意的选一个数值,运算它的输出是否符合系统给的目标值。
- 如果不是,就换下一个数值再试。
- 哪个矿工的运算能力(即其硬体设备)强,也就意味着在同一个时间内他掷出的骰子次数会更多,所以很大几率他会先找到正确的输入值。
- 一旦找到答案后,节点就会把结果发送给全网。
- 因为哈希函数的确定性,对于相同的输入,那么运算得到的哈希值也一定相同。
- 网络的任何一个节点都可以在瞬间验证最终的哈希值是否正确。
- 于是大家就会承认这个节点抢到了记账权,系统也会把所有的比特币奖励给此节点的矿工。
要从输入值算输出值,是非常简单的运算过程,计算机可以很快完成。
这和之前所述的工作量证明算法相反!
工作量证明机制造成的分叉
区块链数据的唯一性就是所有节点的矿工都遵从同样的机制。
如果有些矿工不遵从同样的机制,那么就会出现分叉。
不过在这里,我们要讨论的是由工作量证明机制所造成的分叉。
在工作量证明共识机制,矿工们互相竞争寻找答案,谁先找到答案就向全网进行广播。
其他矿工就把答案复制到自己的账本后面,然然后又开始新的一轮记账竞争。
由于节点通过不同的路径连接起来,距离长短不一,所以会产生网络传播延迟的问题。
也就意味着在同一个时间内会出现两个矿工都找到答案,并在自己的节点添加新的区块。
临近节点的矿工就会就会将新的区块复制到自己的区块链之后,然后接着在这个区块开始新的挖矿。
于是就出现了区块链的分叉。
而工作量证明机制则是这样解决问题的:
- 不同分叉链上的矿工数量不同,算力也有差别,因此两条链的增长速度也是不一样的。
- 经过一段时间后,算力比较强的链,其长度会超过另一条链。
- 当矿工发现全网有一条更长的链时,更倾向于选择长的链,会把更长的链复制到自己的节点。
- 所有节点的矿工也会遵循这一原则,复制比较长的链。
- 这条长链就成为了主链,分叉出来的链则会逐渐消失。
工作量证明机制的优缺点
工作量证明机制是非常开放和简单,人人机会均等,任何人都可以成为矿工加入挖矿行列。
假设你为工作量证明共识提供了10%的算力,而你也期待能够得到10%的挖矿奖励。
然而,比特币挖矿奖励要么全取要么一无所获。
大家比拼运算能力,谁抢到记账权,谁就获得奖励。
我们就来谈谈,工作量证明共识机制的优缺点有哪些?
- 去中心化:记账权是通过工作量证明共识机制,记账权分发给所有的参与节点公平競爭。
- 易于实现:任何节点无需许可即可加入,共识算法简单也容易验证。
- 安全性高:必须拥有51% 的运算力才能篡改账本,攻击成本高于效益。
- 浪费资源:挖矿需要大量的电力和各种算力资源,大家都重复的做同样的事情,造成资源浪费。
- 网络效率低:所有的交易确认都需要花费10分钟,而且全网必须一起参与才能达到共识。
- 算力集中化:近年来挖矿必须花费大量的成本才能产生盈利,进而成为一些集团和大户获取其暴利的工具。
在下一篇帖子中,我们会讨论有哪些新的机制既能保留工作量证明机制的优势,又能解决它的问题。