POW共识机制介绍

PoW,即Proof-of-Work,工作量证明,本质上是一种经济手段,它要求请求资源方提供一些“工作”来证明它没有恶意,因为这些工作需要花费一定的资源(时间或金钱),所以可以用来解决如ddos攻击、垃圾信息等问题。相应地,这些工作必须有如下特点:对于资源请求方来说难于立即解决(不过是可解的),但对于资源提供方来说是容易验证的。

对于比特币来说,它使用的是一种叫hashcash(哈希现金)的工作量证明,它最初被用于做邮件过滤,对于正常的邮件来说,因为一般来说短时间内发送量不会很高,相应的工作量证明也不会占用很多时间。但对于垃圾邮件来说,因为需要发送的量很大,占用的计算资源也就很大,这样做是得不偿失的,所以也就能够过滤掉垃圾邮件。

在比特币中,hashcash则是用来产生区块的。在一个区块被添加至链上之前,矿工必须完成工作量证明。这里又存在一个问题,矿工为什么会想要去完成工作量证明呢(耗费计算资源)?这是因为产生区块的过程实际上是在记账,是把交易记录、时间、账本序号、上一个区块的hash值一起hash打包的过程,而对于记账成功的矿工是提供比特币奖励的,这就激发了矿工争相记账,但最后能够完成工作量证明成功记帐的矿工只有一个。

矿工在进行工作量证明之前,要做如下工作:

  • 收集广播中还没有被记录的交易信息
  • 检查每个交易信息中付款地址的余额信息
  • 检查交易签名
  • 打包验证通过的交易信息
  • 添加一个奖励交易(新区快的首个交易):给自己的地址增加12.5个比特币(奖励)

之后就开始进行工作量证明(散列算法一般选择SHA256):

  1. 把上个块的hash值与当前帐页信息一起进行hash处理
  2. 设置一个随机值nonce
  3. nonce递增,并对nonce,和第一步得到的字符串一起做hash,得到满足前置0个数的结果,就是正确的nonce

可见“工作”就是找到随机数的过程,当然这个工作的难度会根据区块产生的速度自动调节,一般是10分钟左右诞生一区块,难度调节则是通过设置前置0的个数。当一个矿工成功完成工作后,就会广播发布区块,收到区块的网络节点进行验证,验证通过则不再竞争,而是再此区块后进行工作。如果同时收到多个区块,则先在最先收到的区块后进行工作,保留其余收到的区块,若后续发现另一条链更长则更换区块。

从上述过程我们可以发现POW机制的优缺点都比较显著:

优点:

  • 去中心化,做的工作越多,得到的越多,而且相对公平,即使算力更大也只是获得收益的概率变大,难以达到垄断。
  • 安全性高,理论上来说要做attacker必须具有压倒性的算力优势(>50%),而且对于一般attacker来说,诚实挖矿的收益还更高,所以一般不会出现欺诈的现象。

缺点:

  • 资源浪费。目前比特币的价格十分高昂,吸引了越来越多的人投入这一领域。大批矿池、矿机进行军备竞赛,加快挖矿的速度。但因为比特币系统的调节,新区块产生的速度越快,计算问题的难度就会更大,以至于形成了恶性循环,许多计算资源就这样浪费掉了。
  • 交易确认时间过长。随着节点的增加,区块链更容易产生分叉,选择最长的主链后其他的分支都要舍弃。目前区块确认的共识周期长达十分钟,每秒交易量也很低。

对于资源浪费这一点,可以引入一些更有价值的问题,如寻找大的素数等数学、物理乃至其他学科上的计算问题,而不只是单纯进行hash值寻找。但实际上,要完成这一点还是很难的,因为这些问题可能相对难以快速验证,也没有好的方法去控制问题难度。

对于POW的缺点,另一种共识机制:POS(Proof of stake)提供了很好的解决方案:

  • 不需要消耗庞大的算力,节省电力:如在BFT-style的POS中,不再根据计算工作来证明自己,而是每个人都被随机的选择去创建块,但块的确认是通过多轮的投票来决定的,这就避免了资源消耗。
  • POS机制会对节点持币以及维持节点给予少量的奖励,然而恶意交易所受到的惩罚会千百倍于奖励,这就防止了持币多的人进行恶意操作,防止中心化。

当然,POS也存在自己的缺点,以至于近来还出现了POW-POS混合机制。想必在不远的未来,区块链共识机制会更加的成熟,更加的稳定。