本文禁止任何形式的全文粘贴式转载,本文来自 代码家 的博客
阅读本文需要部分区块链基础,建议通过 《区块链理论学习指南》开始学习。
工作量证明(Proof of work)和 股权证明(Proof of stake)是区块链理论研究中重要的两个概念,也是区块链最核心的一部分。本文将对这两个理念进行详细介绍。
区块链本身就是一个分布式账本,既然是分布式账本,那么必然存在以下两个问题:
- 如何在去中心化的网络中建立时间序列的概念
- 当有多个节点完成记录交易的时候,应该采用谁的记录方案作为共识账本中
目前,PoW,PoS 以及 PoS 优化方案成为了解决这两个问题的一些主流方案。
PoW
PoW 通过让每个节点,在准备提交下一个区块 $ B $ 之前,强制规定在区块 $ B $ 中插入一个数 $ nonce $,使得:
$$ H(B) \leq m $$
上述公式中,$H $ 是某个哈希函数,$ m $ 是某个极小的实数,由哈希函数的性质决定,想要找到符合条件的 $ nonce $ ,就必须通过穷举 $nonce$ 的方法来实现。通过调整 $H$ ,$m$ ,就能控制网络中节点,对于每个区块提交的时间窗口的期望。
在 PoW 机制下,由于找到符合要求的 $nonce$ 期望时间是可以调整的,因而构建了去中心化的时间序列机制。同时,也解决了无中心多节点的结果决策问题,即,整个网络采用最早找到合法 $nonce$ 的节点提交的数据。
PoS
在 PoW 机制中,由于想要找到符合条件的 $nonce$ 往往需要花费大量的电力和时间成本,因此,为了使每个 Block 更快被生成,PoS 机制去掉了穷举 $ nonce $ 这一过程,继而采用以下更快速的算法:
$$ H(H(B_{prev}), A, t) \leq balance(A) m $$
- $H$ 依然为某个哈希函数
- $t$ 为 UTC 时间戳
- $B_{prev}$ 指的是上一个区块
- $balance(A)$ 代表账户 $A$ 的账户的余额
- $m$ 依然代表某个认为定义的数
等式左边,唯一可以不断调整的参数是 $t$,等式右边 $ m $ 是某个固定的实数,因此,当 $balance(A)$ 越大,找到合理 $t$ 的概率越大。网络中,普遍对于 $t$ 的范围有所限制,如可以尝试的时间戳不能超过标准时间戳 1 小时,也就说,一个节点可以尝试 7200 次,来找到一个符合条件的 $t$,如果找不到即可放弃。因此,在 PoS 中,一个账户的余额越多,在同等算力下,就越容易发现下一个区块。
DPoS
Delegated Proof of Stake(委托股权证明) 是 PoS 的进化方案,在常规 PoW 和 PoS 中,一大影响效率之处在于任何一个新加入的 Block,都需要被整个网络所有节点做确认。DPoS 优化方案在于:通过不同的策略,不定时的选中一小群节点,这一小群节点做新区块的创建,验证,签名和相互监督,这样就大幅度的减少了区块创建和确认所需要消耗的时间和算力成本。
PoS 潜在攻击方法
账本分叉问题 ( Nothing at Stake Problem )
在 PoW 机制中,当账本出现分叉时,对 PoW 这种算力敏感的算法,矿工必须选择一个方向进行挖矿。而在 PoS 这种算力不敏感的时候,PoS 矿工往往会两个方向都挖,以争取实现利益最大化。当多数矿工都在两条链上一起挖矿的时候,就会很容易出现双重支付攻击。
冷启动问题 ( Initial Distribution Problem )
PoS 机制中,由于持币量会对挖矿难度产生影响。因此,当一个基于 PoS 体系代币系统启动时,就会面临早期获得代币的持有者,没有动力去花费或者转移代币给第三方。同时,持有越多的币,越容易挖到矿,这样就产生了代币初始流通性问题。
解决方案:早起几个版本,通过 PoW 机制来创建货币,而非 PoS。由于 PoW 本身的性质,矿工在挖矿过程中往往需要资金来升级硬件,所以会让矿工手中的币流通起来。
长距离攻击 ( Long-Range Attack )
PoS 中,产生每个 Block 的速度相对 PoW 快了很多。因此,少数不怀好意的节点会想着把整个区块链共识账本全部重写。这在 PoW 中是经典的 51% 问题,即:当某一个节点控制了 51% 及以上算力,就有能力篡改账本,但达到 51% 算力是件极其困难的事情。而在 PoS 中缺乏对算力的约束,那么就存在潜在可能篡改账本。
解决方案:同步时,限制最大能接受的分叉节点数量。
贿赂攻击(Bribe Attack)
贿赂攻击流程如下:
- 攻击者购买某个商品或服务
- 商户开始等待网络确认这笔交易
- 此时,攻击者开始在网络中首次宣称,对目前相对最长的不包含这次交易的主链进行奖励。
- 当主链足够长时,攻击者开始放出更大的奖励,奖励那些在包含此次交易的链条中挖矿的矿工。
- 六次确认达成后,放弃奖励。
- 货物到手,同时放弃攻击者选中的链条。
因此,只要此次贿赂攻击的成本小于货物或者服务费用,此次攻击就是成功的。相比之下,PoW 机制中贿赂攻击就需要贿赂大多数矿工,因此成本极高,难以实现。
币龄加和攻击 ( Coin Age Accumulation Attack )
在最早的 Peercoin 版本中,挖矿难度不仅与当前账户余额有关,也与每个币的持币时间挂钩。
$ H(H(B_{prev}), A, t) \leq balance(A) m Age(coins) $
这就导致,部分节点在等待足够长时间后,就有能力利用 Age 的增加来控制整个网络,产生非常显著的影响。
解决方案:限制 CoinAge 的最大值。
预计算攻击 ( Precomputing Attack)
当 PoS 中的某一节点占有了一定量的算力后,PoS 中占有特定算力的节点,就有能力通过控制 $ H_{prev} $ 来使自己所在算力范围有能力去计算 $H_{next}$。
$$ H(H(B_{prev}), A, t) \leq balance(A) m $$
PoW 和 PoS 对比
攻击方法 |
PoW |
PoS |
DPoS |
短距离攻击(如贿赂攻击) |
– |
+ |
– |
长距离攻击 |
– |
+ |
+ |
币龄累计攻击 |
– |
+ |
+ |
预计算攻击 |
– |
+ |
– |
DDos |
– |
可能 |
– |
女巫攻击(Sybil Attack) |
+ |
+ |
+ |
总结
从功能和趋势来看,比特币如果被当做数字黄金的话,PoW 在比特币未来的发展中依旧起着至关重要作用,同时由于历史问题,比特币的 PoW 机制很难被切换到 PoS 中去。
但对于其他以实用功能取胜的区块链项目而言,从经济效益,共识速度而言,PoS 或者 PoW/PoS 混合模式将会是未来的主流共识方案。
如果感觉写的对你有帮助的话:
通过 Bitcoin 打赏: 1QD9entYzxbJKUL97S9ip4YqqJeQvQa8Ej
通过 Ethereum 打赏:0xdbd92588811c76a7a0CD22f45217Df1926B0709D