继续以比特币为例,由于比特币系统采用了对等网络,即网络中不存在一个中心机构对整个系统的状态进行维护,系统的每个参与方都是平等的。那么如何在众多的参与者中形成一个统一的数据存储记录便成了最大的难题。
在中心化的系统中,参与者的绝大多数操作都需要在和中心机构的互动中完成。比如在在线支付的过程中,中心机构负责核实每个账户的可用余额,确保每笔金额不会被双重支付,也是由中心机构来完成对用户账户余额的更新以及交易记录的保存。中心机构对任何一笔交易的真实性进行核定,也由中心机构对用户的财产安全负责。
在区块链系统中,为保证交易记录真实唯一的被保存下来,引入了一种独特的在对等节点间建立共识的机制——工作量证明机制(Proof of Work, PoW)。其目的是要在众多节点中选出一个唯一的节点来完成区块数据的记录,选择的标准就是:提出一个难题,最先解出难题的节点便拥有了这个区块的记录权,这个节点负责把过去一段时间的所有交易存储在区块中并追加到区块链的末尾。
在比特币这个系统中,所选择的难题是之前提到的SHA-256哈希函数。具体的过程就是,收集从生成上一个区块到现在的交易记录,将收集的数据按照区块的要求组织在一起,将版本号、前一区块的哈希值、时间、难度值、及之前提到过的Merkle树根等等共80字节的数据组成一个区块头,在区块头中引入一个随机数,对这个区块头进行两次哈希运算,结果会得到一个哈希值。
![](https://img.haomeiwen.com/i2261919/a2e62f08004d8ff4.png)
结果哈希值如果满足前n位均为0,则这个结果符合要求,如果不符合要求,就变换这个随机数,继续进行哈希运算,直到找到符合要求的结果或者收到其他节点完成解题的信号。n的值取决于区块头中的难度值,因为计算机硬件在不断更新换代,每隔一段时间,系统会自动调整n,以保证解题的时间维持在10分钟左右。当工作量证明完成以后,会在全网内建立起一种共识:该节点拥有这个最新区块的记录权,如果区块内的所有交易都能被验证通过,这个区块便会被认可追加到整个区块链的末尾。
为了便于理解寻找前n位为0的哈希值结果的过程,可以简化分析。假设我们要求得的哈希结果值只有4位二进制,那么所有结果的可能就有16种(如图)。当n=1时,就是求第一位是0的结果值,如果输入是随机的,那么就像是掷硬币一样,每次概率有二分之一的概率求得符合要求的结果。当n=2时,就是要求结果前两位是0,此时,概率减半,每次计算有1/4的概率结果符合要求。当n=4时,每次计算求得符合要求的结果是1/16。所以,可以看出,当n不断增加时,计算难度不断增加,通过随机输入求得符合要求结果的工作量会不断增加。
这里会有两个问题,一是这些使用比特币的用户为什么要参与到工作量证明的过程中?要知道因为工作量证明需要进行大量的计算,最直接的就是计算机工作要消耗电能。这个问题的回答涉及到比特币的发行过程。由于比特币这种电子货币没有一个中央机构发行货币,那么必须要设计一种机制自动发行比特币。
比特币的系统规定,比特币的总量为2100万个,发行会伴随着区块的产生,即每产生一个区块,则会奖励区块生成者。最开始每个区块奖励50个比特币,然后每210000个区块奖励减半,那么可以计算出的总量就是约2100万。另外由于比特币的交易是存在手续费的,一个区块中所记录的所有交易的交易费也会奖励给记录者。这个参与比特币工作量证明的竞争机制也称为“挖矿”。因此节点参与工作量证明的竞争的激励就是记录该区块所产生的比特币奖励。随着时间的推移,发行货币会逐渐减少,交易费用会最终超过新发行货币的奖励。
第二个问题是,网络中由于存在延迟或两个节点在几乎相同的时间都完成了工作量证明。类似这种情况发生时,可能网络中不同的节点认可了不同的区块作为最新区块,这种情况就是分叉。在比特币中的规定是,始终选择最长的区块链作为共识,所以即便短时间内可能存在分叉,但随着时间的推移,相对比较短的区块链会因不被认可而被抛弃。
总结一下,在比特币区块链中,建立共识的机制是工作量证明机制。在区块中引入一个随机数,不断变换这个随机数,直到计算出符合难度要求的结果或收到其他节点完成工作量证明的信号。一个节点若计算出符合要求的哈希结果值并得到了认可,便拥有了记录区块的权利,同时得到区块中交易费用以及系统发行比特币的奖励。
网友评论