1. 程式人生 > >POW工作量證明

POW工作量證明

Proof of work,工作量證明,是比特幣中使用的共識機制。主要依靠節點的算力,即通過不斷計算嘗試尋找隨機值使得整個區塊頭的雜湊值滿足預定的難度要求。其具有去中心化、大規模節點支援、節點自由進出的優點,但是其造成大量資源浪費,且效率較低。

POW(Proof of work,工作量證明),去中心化、大規模節點支援、效率低、資源消耗高

在每一個新打包的區塊頭後面新增一個特殊的數字,對整個區塊頭使用雙SHA256,通過不斷嘗試改變這個特殊數字可以使得整個區塊頭的輸出雜湊值開頭有一定數量的零。

每個節點所要找的隨機數可能都不同,由於交易記錄到達每個節點的時間不同,打包進區塊的交易可能數量、順序都不同,所以找的隨機數也不同,存在隨機性。

POW將主鏈定義為最長的且難度係數最高的,即累計工作量最大的那一條。

 比特幣交易的合法性是由整個網絡合力驗證的,只有大多數參與者認同某筆交易, 該交易才被視為有效. 然而, 在這種機制下, 假身份的問題凸顯出來,即敵手可能發起女巫攻擊(Sybil attack).交易發起方可以偽造多個身份, 隨後對自己的交易進行確認,由於“大多數人”都認同這筆交易, 即便是雙重支付,接收方也會相信並接受該交易. 基於控制系統中大部分算力比控制大部分實體難得多的假設, 比特幣協議使用工作量證明來防止女巫攻擊. 在確認交易前, 參與者需要做一些工作來證明他們的真實實體身份, 這項工作是解決一個密碼學難題, 人為地提高了確認交易的計算成本. 因此,驗證交易的能力取決於算力,而不是實體身份數量

.

比特幣系統中不斷產生新交易, 節點需要將合法交易放進一個區塊中. 區塊頭由版本號、前一個區塊雜湊值、Merkle 根、時間戳、難度目標和隨機數六部分組成, 參與者需要尋找隨機數使區塊頭雜湊值小於或等於難度目標. 比特幣協議中使用SHA-256 雜湊演算法, 除非演算法被攻破, 否則最有成效的方法是嘗試不同隨機數, 直到滿足目標, 例如, 難度目標為二進位制雜湊值以48 個0 開頭, 則平均要經過248 次嘗試才能解決難題.

難度目標每經過2016 個區塊後會進行調整, 使區塊的平均速度保持在每10 分鐘一個, 因此每兩週(2016*10min)難度目標會更新, 新難度值T 的計算公式為:

其中, Tprev 是舊難度目標,t_actual是最近產生的2016 個區塊的實際花費時間. 難度目標值越小, 尋找到滿足條件的隨機數就越困難, 如果t_actual小於兩週時間, 意味著區塊確認速度加快, 網路算力提升, 因此新難度值將變小(實際難度變大)使區塊平均生成時間延長從而保持系統穩定性.

該演算法的優點是易實現節點間無需交換額外的資訊即可達成共識,破壞系統需要投入極大的成本。缺點是浪費能源區塊的確認時間難以縮短