PoW机制

PoW机制

比特币系统的重要概念是一个基于互联网的去中心化账本,即区块链,每个区块相当

于账本页,区块中记录的信息主体,即为相应的交易内容。账本内容的唯一性要求记账行
为是中心化的行为,然而,中心化所引发的单点失败,可能导致整个系统面临危机甚至崩
溃。去中心记账可以克服中心化账本的弱点,但同时也会带来记账行为的一致性问题。
从去中心化账本系统的角度看,每个加入这个系统的节点都要保存一份完整的账本,
但每个节点却不能同时记账,因为节点处于不同的环境,接收到不同的信息,如果同时记
账的话,必然会导致账本的不一致,造成混乱。因此,需要有共识来达成哪个节点有权记
账。比特币区块链通过竞争记账的方式解决去中心化的记账系统的一致性问题。
比特币系统设计了以每个节点的计算能力即“算力”来竞争记账权的机制。在比特币系
统中,大约每10分钟进行一轮算力竞赛,竞赛的胜利者,就获得一次记账的权力,并向其
他节点同步新增账本信息。
然而,在一个去中心化的系统中,谁有权判定竞争的结果呢?比特币系统是通过一个
称为“工作量证明”(Proof of Work,PoW)的机制完成的。
简单地说,PoW就是一份确认工作端做过一定量工作的证明。PoW系统的主要特征是
计算的不对称性。工作端需要做一定难度的工作得出一个结果,验证方却很容易通过结果
来检查工作端是不是做了相应的工作。
举个例子,给定字符串“blockchain”,我们给出的工作量要求是,可以在这个字符串
后面连接一个称为nonce的整数值串,对连接后的字符串进行SHA256哈希运算,如果得到
的哈希结果(以十六进制的形式表示)是以若干个0开头的,则验证通过。为了达到这个
工作量证明的目标,我们需要不停地递增nonce值,对得到的新字符串进行SHA256哈希运
算。按照这个规则,需要经过2688次计算才能找到前3位均为0的哈希值,而要找到前6位

均为0的哈希值,则需进行620969次计算。


通过上面这个计算特定SHA256运算结果的示例,我们对PoW机制有了一个初步的理
解。对于特定字符串后接随机nonce值所构成的串,要找到这样的nonce值,满足前n位均
为0的SHA256值,需要多次进行哈希值的计算。一般来说,n值越大,需要完成的哈希计
算量也越大。由于哈希值的伪随机特性,要寻找4个前导0的哈希值,预期大概要进行2 16
次尝试,这个数学期望的计算次数,就是所要求的“工作量”。
比特币网络中任何一个节点,如果想生成一个新的区块并写入区块链,必须解出比特
币网络出的PoW问题。这道题关键的3个要素是工作量证明函数、区块及难度值。工作量
证明函数是这道题的计算方法,区块决定了这道题的输入数据,难度值决定了这道题所需

要的计算量


工作量证明函数

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

的哈希算法。到目前为止,还没有出现对SHA256算法的有效攻击。具体见第4章的讲解。

区块

比特币的区块由区块头及该区块所包含的交易列表组成。区块头的大小为80字节,由
4字节的版本号、32字节的上一个区块的哈希值、32字节的Merkle根哈希值、4字节的时间
戳(当前时间)、4字节的当前难度值、4字节的随机数组成。区块包含的交易列表则附加
在区块头后面,其中的第一笔交易是coinbase交易,这是一笔为了让矿工获得奖励及手续

费的特殊交易。区块的大致结构如图5-2所示。


拥有80字节固定长度的区块头,就是用于比特币工作量证明的输入字符串。因此,为
了使区块头能体现区块所包含的所有交易,在区块的构造过程中,需要将该区块要包含的
交易列表,通过Merkle树算法生成Merkle根哈希值,并以此作为交易列表的哈希值存到区

块头中。其中Merkle树的算法图解如图5-3所示。


图5-3展示了一个具有4个交易记录的Merkle树的根哈希值的计算过程。首先以这4个
交易作为叶子结点构造一棵完全二叉树,然后通过哈希值的计算,将这棵二叉树转化为
Merkle树。首先对4个交易记录:Txa~Txc,分别计算各自的哈希值H A ~H C ,然后计算两个中间
节点的哈希值H AB =Hash(H A +H B )和H CD =Hash(H C +H D ),最后计算出根节点的哈

希值H ABCD =Hash(H AB +H CD )。而构造出来的区块链呈现如图5-4所示。


由图5-4所示的简化的区块链结构,我们可以发现,所有在给定时间范围需要记录的
交易信息被构造成一个Merkle树,区块中包含了指向这个Merkle树的哈希指针,关联了与
该区块相关的交易数据,同时,区块中也包含了指向前一区块的哈希指针,使得记录了不

同交易的单个区块被关联起来,形成区块链。

难度值

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

希值必须小于目标值。

PoW的过程

比特币PoW的过程,可以简单理解成就是将不同的nonce值作为输入,尝试进行
SHA256哈希运算,找出满足给定数量前导0的哈希值的过程。而要求的前导0的个数越
多,代表难度越大。比特币节点求解工作量证明问题的步骤大致归纳如下:
1)生成铸币交易,并与其他所有准备打包进区块的交易组成交易列表,通过Merkle
树算法生成Merkle根哈希;
2)把Merkle根哈希及其他相关字段组装成区块头,将区块头的80字节数据作为工作
量证明的输入;
3)不停地变更区块头中的随机数,即nonce的数值,并对每次变更后的区块头做双重
SHA256运算(即SHA256(SHA256(Block_Header))),将结果值与当前网络的目标
值做对比,如果小于目标值,则解题成功,工作量证明完成。
比特币的工作量证明,就是俗称“挖矿”所做的主要工作。理解工作量证明机制,将为

我们进一步理解比特币区块链的共识机制奠定基础。

基于PoW的共识记账

我们以比特币网络的共识记账为例,来说明基于PoW的共识记账过程。
1)客户端产生新的交易,向全网进行广播要求对交易进行记账;
2)每一个记账节点一旦收到这个请求,将收到的交易信息纳入一个区块中;
3)每个节点都通过PoW过程,尝试在自己的区块中找到一个具有足够难度的工作量
证明;
4)当某个节点找到了一个工作量证明,它就向全网进行广播;
5)当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才
认同该区块的有效性;
6)其他节点表示它们接受该区块,而表示接受的方法则是在跟随该区块的末尾,制
造新的区块以延长该链条,而将被接受区块的随机哈希值视为先于新区块的随机哈希值。
通过上述的记账过程,客户端所要求记录的交易信息被写入了各个记账节点的区块链

中,形成了一个分布式的高概率的一致账本。

关于比特币PoW能否解决拜占庭将军的问题

关于比特币PoW共识机制能否解决拜占庭将军问题一直在业界有争议。2015年,Juan
Garay对比特币的PoW共识算法进行了正式的分析,得出的结论是比特币的PoW共识算法
是一种概率性的拜占庭协议(Probabilistic BA)。Garay对比特币共识协议的两个重要属
性分析如下。
1)一致性(Agreement)
在不诚实节点总算力小于50%的情况下,同时每轮同步区块生成的几率很少的情况
下,诚实的节点具有相同的区块的概率很高。用数学的严格语言说应该是:当任意两个诚
实节点的本地链条截取K个节点,两条剩下的链条的头区块不相同的概率随着K的增加呈
指数型递减。
2)正确性(Validity)
大多数的区块必须由诚实节点提供。严格来说,当不诚实算力非常小的时候,才能使
大多数区块由诚实节点提供。
因此可以看到,当不诚实的算力小于网络总算力的50%时,同时挖矿难度比较高,在
大约10分钟出一个区块情况下,比特币网络达到一致性的概念会随确认区块的数目增多而
呈指数型增加。但当不诚实算力具一定规模,甚至不用接近50%的时候,比特币的共识算
法并不能保证正确性,也就是,不能保证大多数的区块由诚实节点来提供。
因此,我们可以看到,比特币的共识算法不适合于私有链和联盟链。其原因首先是它
是一个最终一致性共识算法,不是一个强一致性共识算法。第二个原因是其共识效率低。
提供共识效率又会牺牲共识协议的安全性。
另一方面,比特币通过巧妙的矿工奖励机制来提升网络的安全性。矿工挖矿获得比特
币奖励以及记账所得的交易费用使得矿工更希望维护网络的正常运行,而任何破坏网络的
非诚信行为都会损害矿工自身的利益。因此,即使有些比特币矿池具备强大的算力,它们
都没有作恶的动机,反而有动力维护比特币的正常运行,因为这和它们的切实利益相关。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值