了解比特币的人都或多或少知道 “挖矿”,挖矿是参与维护比特币网络的节点,通过协助生成新区块来获取一定量新增的比特币。当用户发布交易后,需要有人将交易进行确认,写到区块链中,形成新的区块。在一个互相不信任的系统中,该由谁来完成这件事情呢?比特币网络采用了 “挖矿” 的方式来解决这个问题。目前,每 10 分钟左右生成一个不超过 1 MB 大小的区块,串联到最长的链尾部,每个区块的成功提交者可以得到系统 12.5 个比特币的奖励,以及用户附加到交易上的支付服务费用。
拿比特币举例,挖矿的具体过程为:参与者根据上一个区块的 hash 值,10 分钟内的验证过的交易内容,再加上自己猜测的一个随机数 X,让新区块的 hash 值小于比特币网络中给定的一个数。这个数越小,计算出来就越难。系统每隔两周会根据上一周期的挖矿时间来调整挖矿难度,来调节生成区块的时间稳定在 10 分钟左右。为了避免震荡,每次调整的最大幅度为 4 倍。
很自然的,有人会想到,如果我有很强大的计算力,所有的块都是我算出来了,拒不承认别人的交易内容,那是不是就能破坏比特币网络。确实如此,拿到 51% 的算力,就可以攻击整个网络了。那么有没有办法防护呢?除了尽量避免计算力放到同一个组织手里,如果觉得一个矿池掌握的算力太多,矿工应该主动换个矿池挖矿,解决这个问题有人提出了 PoS,因为 PoW 机制的安全只能来自于区块挖矿收益,矿工的激励来自于避免丢失区块收益的风险,这样 PoW 就是依靠一个大量的激励来保证的巨大算力来运作。PoS 打破这种对称性,不是依靠收益来保证安全,而是惩罚。矿工必须付出一大笔押金,并少量的得到奖励,以补偿他们的押金被冻结以及运行节点的开销,但逆转交易的最大开销来自于大于收益几百到上千倍的惩罚(押金被消耗)。PoS 的哲学不是 “安全来自于电力消耗”,而是 “安全来自于押金”。