4.5 工作量證明——PoW
工作量證明(Proof of Work,以下簡稱PoW)機制隨著比特幣的流行而廣為人知。PoW協議簡述如下:
1)向所有的節點廣播新的交易;
2)每個節點把收到的交易放進塊中;
3)在每一輪中,一個被隨機選中的節點廣播它所保有的塊;
4)其他節點在驗證塊中的所有的交易正確無誤後接受該區塊;
5)其他節點將該區塊的雜湊值放入下一個它們建立的區塊中,表示它們承認這個區塊的正確性。
節點們總是認為最長的鏈為合法的鏈,並努力去擴大這條鏈。如果兩個節點同時廣播各自挖出的區塊,其他節點以自己最 先收到的區塊為準開始挖礦,但同時會保留另一個區塊。所以就會出現一些節點先收到A的區塊並在其上開始挖礦,同時保留著B的區塊以防止B的區塊所在的分支 日後成為較長的分支。直到其中某個分支在下一個工作量證明中變得更長,之前那些在另一條分支上工作的節點就會轉向這條更長的鏈。
平均每10分鐘有一個節點找到一個區塊。如果兩個節點在同一個時間找到區塊,那麼網路將根據後續節點的決定來確定 以哪個區塊構建總賬。從統計學角度講,一筆交易在6個區塊(約1個小時)後被認為是明確確認且不可逆的。然而,核心開發者認為,需要120個區塊(約一 天),才能充分保護網路不受來自潛在更長的、已將新產生的幣花掉的區塊鏈的威脅。
生物學上有一個原理叫作“不利原理”(handicap principle),該原理可以幫助我們解釋工作量證明的過程。這個原理說,當兩隻動物有合作的動機時,它們必須很有說服力地向對方表達善意。為了打消 對方的疑慮,它們向對方表達友好時必須附上自己的代價,使得自己背叛對方時不得不付出昂貴的代價。換句話說,表達方式本身必須是對自己不利的。
定義可能很拗口,但是這是在歷史上經常發生的事:在中國歷史上,國家和國家之間簽訂盟約,為了表示自己對盟約的誠 意,經常會互質。即互相送一個兒子(有些時候甚至會送太子,即皇位繼承人)去對方國家做人質。在這種情況下,為取得信任而付出的代價就是君主和兒子的親 情,以及十幾年的養育。
比特幣的工作量證明很好地利用了不利原理解決了一個自己網路裡的社會問題:產生一個新區塊是建立在耗時耗力的巨大 代價上的,所以當新區塊誕生後,某個曠工要麼忽視它,繼續自己的新區塊尋找,要麼接受它,在該區塊之後繼續自己的區塊的挖礦。顯然前者是不明智的,因為在 比特幣網路裡,以最長鏈為合法鏈,這個礦工選擇忽視而另起爐灶,就不得不說服足夠多的礦工沿著他的路線走。相反要是他選擇接受,不僅不會付出額外的辛苦, 而且照樣可以繼續自己的更新區塊的挖礦,不會再出現你走你的我走我的,是一個全網良性建設。比特幣通過不利原理約束了節點行為,十分偉大,因為這種哲學可 以用到如今網際網路建設的好多方面,比如防垃圾郵件、防DDoS攻擊。
PoW共識協議的優點是完全去中心化,節點自由進出。但是依賴機器進行數學運算來獲取記賬權,資源的消耗相比其他共識機制高,可監管性弱,同時每次達成共識需要全網共同參與運算,效能效率比較低,容錯性方面允許全網50%節點出錯。
·目前比特幣已經吸引全球大部分的算力,其他再用PoW共識機制的區塊鏈應用很難獲得相同的算力來保障自身的安全。
·挖礦造成大量的資源浪費。
·共識達成的週期較長。
來源:我是碼農,轉載請保留出處和連結!
本文連結:http://www.54manong.com/?id=94
相關文章
- Go實現Pow工作量證明Go
- 工作量證明(PoW)的內部攻擊模型模型
- 2.2 工作量證明
- 區塊鏈小白入門019——工作量證明機制(POW)是什麼?區塊鏈
- 區塊鏈共識機制技術一--POW(工作量證明)共識機制區塊鏈
- 工作量證明挖礦
- LaravelZero 從零實現區塊鏈(二)工作量證明Laravel區塊鏈
- 比特幣如何挖礦(挖礦原理)-工作量證明比特幣
- BTCV欲開發「合併採礦」輔助工作量證明(AuxPoW)UX
- 基於Java語言構建區塊鏈(二)—— 工作量證明Java區塊鏈
- 使用Go構建區塊鏈 第2部分:工作量證明Go區塊鏈
- 區塊鏈的基石:工作量證明機制,如何驅動數字貨幣革命?區塊鏈
- JavaScript Math.pow()JavaScript
- 4.5
- Chapter 4 證明技巧APT
- pow演算法思考演算法
- bitcoin 與存在性證明
- Pow共識演算法演算法
- 共識演算法-PoW演算法
- Quick Pow: 如何快速求冪UI
- LeetCode-Super PowLeetCode
- Leetcode Pow(x,n)LeetCode
- 初識零知識證明
- dijkstra 複雜度證明複雜度
- sin/cos(α+β) 的展開證明
- Java工作量統計系統Java
- ETH-Pow演算法分析演算法
- 【go共識演算法】-POWGo演算法
- Leetcode-Pow(x,n)LeetCode
- Pow(x,n) leetcode javaLeetCodeJava
- 網路流複雜度證明複雜度
- 數學證明 學習筆記筆記
- Note - 高斯消元法(證明略)
- 4.5 zookeeper分散式分散式
- OpenGL 4.5釋出
- 【董天一】IPFSFilecoin和複製證明
- 證明arguments是個物件不是陣列物件陣列
- 帶你走進零知識證明