在区块链中面临的最大问题就是双重支付问题,就是在网络中某一个恶意节点去散布两种不同的交易,并且这两种交易是相互矛盾的,就是导致网络中其他好人节点看到两条链,那么整个网络为了解决这个问题需要通过一些协议去进行投票而达到一致,占票高的链被写入区块链,占票少的就不会写入区块链。
在比特币中处理这类问题并不是说人手一票来进行投票,而是通过CPU算力来投票。
比如上一篇讲的,C面对两种说法(A转600给B,A转500给B),他会看到两条竞争链,那么C的策略就是先不做决定,而是看看哪一条链更长,链越长说明它需要耗费的算力就更多,那么就代表了整个网络投给那个链就更多,以此C就会投票给链更长的,于是正反馈,越来越多的好人就会投票给更长的链。
那这里有没有可能那个恶意的用户造一条更长的链呢?
A如果要实现双重支付,就要在自己广播自己向B转了600的同时保留一条副链(副链上保留了自己向B转了500),然后用自己的算力去和主链竞争。
假设大多数CPU由好人控制,那么主链将会远远把A的副链抛到后面,因为A的算力是竞争不过所有的节点的。一般而言,若已出现 >15个区块,副链超过主链的概率将会
假设A掌握了 >51%的算力,A自己做的副链就有可能保持与主链同样的区块产生率,理论上是可以造成双重支付,也就是更改之前的转账交易,使B被骗。
那么怎么避免A做出这种破坏生态的行为呢?
比特币为了防范这种情况,使用了经济激励的方法。所以当A真正拥有大于51%的算力,也会选择去挖矿。
总结一下:Pow算法
1、利用CPU投票,长链代表多数票,以此取得共识。
2、基于大多数好人假设,双重支付问题成功概率较低。
3、经济激励约束行为。让掌握多数算例的矿工与整体的利益一致,否则成本高,收益低。
程序猿
改变世界
领取专属 10元无门槛券
私享最新 技术干货