1. 程式人生 > >區塊鏈:PoW工作量證明演算法

區塊鏈:PoW工作量證明演算法

在區塊鏈中面臨的最大問題就是雙重支付問題,就是在網路中某一個惡意節點去散佈兩種不同的交易,並且這兩種交易是相互矛盾的,就是導致網路中其他好人節點看到兩條鏈,那麼整個網路為了解決這個問題需要通過一些協議去進行投票而達到一致,佔票高的鏈被寫入區塊鏈,佔票少的就不會寫入區塊鏈。

 

在比特幣中處理這類問題並不是說人手一票來進行投票,而是通過CPU算力來投票

 

比如上一篇講的,C面對兩種說法(A轉600給B,A轉500給B),他會看到兩條競爭鏈,那麼C的策略就是先不做決定,而是看看哪一條鏈更長,鏈越長說明它需要耗費的算力就更多,那麼就代表了整個網路投給那個鏈就更多,以此C就會投票給鏈更長的,於是正反饋,越來越多的好人就會投票給更長的鏈。

那這裡有沒有可能那個惡意的使用者造一條更長的鏈呢?

 

A如果要實現雙重支付,就要在自己廣播自己向B轉了600的同時保留一條副鏈(副鏈上保留了自己向B轉了500),然後用自己的算力去和主鏈競爭。

 

假設大多數CPU由好人控制,那麼主鏈將會遠遠把A的副鏈拋到後面,因為A的算力是競爭不過所有的節點的。一般而言,若已出現 >15個區塊,副鏈超過主鏈的概率將會 <0.1%。

 

假設A掌握了 >51%的算力,A自己做的副鏈就有可能保持與主鏈同樣的區塊產生率,理論上是可以造成雙重支付,也就是更改之前的轉賬交易,使B被騙。

 

那麼怎麼避免A做出這種破壞生態的行為呢?

比特幣為了防範這種情況,使用了經濟激勵的方法。所以當A真正擁有大於51%的算力,也會選擇去挖礦。

 

總結一下:Pow演算法

1、利用CPU投票,長鏈代表多數票,以此取得共識。

2、基於大多數好人假設,雙重支付問題成功概率較低。

3、經濟激勵約束行為。讓掌握多數算例的礦工與整體的利益一致,否則成本高,收益低。