PoW共识机制原理
1 PoW機制
工作量證明(Proof-of-Work,PoW)是一種對應服務與資源濫用、或是阻斷服務攻擊的經濟對策。一般是要求用戶進行一些耗時適當的復雜運算,并且答案能被服務方快速驗算,以此耗用的時間、設備與能源做為擔保成本,以確保服務與資源是被真正的需求所使用。
- 工作量證明的特點是什么?
即是難于計算,卻易于驗證。 - 產生工作量的方法是什么?
不斷哈希不同的值, 直到哈希值符合一定的條件。 - 工作量證明如何驗證?
接收方對證明進行哈希, 看是否符合上述條件,可以快速驗證。
2 比特幣如何使用PoW共識機制
比特幣的共識機制就是PoW共識,借鑒了HashCash的處理方法, 下面就來說說比特幣如何進行PoW共識的。
從區塊頭的結構中可以看到一個4 bytes的Nonce值,Nonce值的變動會影響整個區塊頭的哈希值,挖礦節點即是通過嘗試不同的Nonce值(通常從0開始每次加1),尋找一個哈希值小于Difficulty Target指定的難度值。
| 4 bytes | Version | 區塊版本號,目前為2 |
| 32 bytes | Previous Block Hash | 前置區塊(父區塊)的區塊頭Hash,Hash算法為double-SHA256 |
| 32 bytes | Merkle Root | 區塊中交易Merkle樹根 |
| 4 bytes | Timestamp | 區塊創建UNIX時間戳 |
| 4 bytes | Difficulty Target | 工作量證明算法難度 |
| 4 bytes | Nonce | 通過變動該計數器來達成工作量證明要求的結果 |
3 PoW證明過程
PoW證明過程,這也就是俗稱的挖礦過程, 找到合適的哈希值。
這里不詳細說明區塊打包過程, 區塊通過一定的算法被生成, 當然生成是需要一定的代價的。
區塊頭里的各個值并不是隨機的, 而是由固定的算法得出, Merkle根哈希值就是把交易打包變成一顆Merkle樹, 最后得出根的哈希值, 難度值是根據算法不斷調整, 要維持出塊速率是10分鐘出一個塊。
首先我們把所有交易打包生成Merkle樹, 計算Merkle根的哈希值, 然后組裝區塊頭, 把區塊頭不斷進行SHA256(SHA256(區塊頭))雙重哈希操作, 然后判斷是否小于網絡目標值, 這里其實就是把它變成2進制, 二進制前面有多少位是沒有0的, 因為有1的話, 這個十進制的值肯定是很大的, 就不會符合條件。 如果大于這個目標值, 說明前面的位數沒有滿足前多少位為0的條件 哈希不成功, 那么就改變隨機數值,組成新的區塊頭,繼續哈希。
這是就是是挖到礦了,其他節點驗證的話也簡單,只要做一次SHA256(SHA256(驗證區塊頭))來判斷。
挖礦難度
比特幣挖礦難度調整方式非常簡單,難度目標調整即不斷將256位的難度值減小,如277315號區塊的難度值十六進制表示為:0x0000000000000003A30C00000000000000000000000000000000000000000000
這個數字在二進制表示下前60位均是0,如果要增加難度只需要減小這個值,隨著難度值的減小,起始0的個數增多,可尋找的哈希值范圍減小,挖礦難度就越大。
難度調整
難度的調整是在每個完整節點中獨立自動發生的。每2016個區塊,所有節點都會按統一的公式自動調整難度。如果區塊產生的速率比10分鐘快則增加難度,比10分鐘慢則降低難度。
公式可以總結為:新難度值=舊難度值×(過去2016個區塊花費時長/20160分鐘)
4 POW的優缺點
優點
- 去中心化,將記賬權公平的分派到其他節點
記賬權是通過看節點的PoW, 誰挖礦最快, 誰就能拿到這個礦 - 安全性高,破壞系統需要投入極大的成本
因為獲得正確哈希值的概率和算力成正比, 如果沒有掌握51%的算力就不能作弊。這樣代價要高于誠實挖礦,所以安全性高
缺點
- 會造成資源浪費
因為挖礦需要大量的哈希運算,需要電力和各種算力資源,而且找到合適的哈希值實際上并沒有其他的作用 - 網絡性能太低
因為比特幣出塊的時間是10分鐘, 所以交易確認至少需要10分鐘,而且目前支持支持每秒7筆交易的速度,不適合商業用處。 - PoW共識算法算力集中化。
目前挖礦礦池是主力, 算力高的礦池有選擇權, 持本人么有參與決定的權利
思考
1:挖礦過程為什么要計算兩次哈希值?
中本聰在設計比特幣的挖礦算法的時候,考慮到SHA2-256算法存在被破解的可能,雖然在理論上并未出現對SHA2-256算法的攻擊。為了減弱攻擊的威脅,區塊頭數據要對SHA2-256算法運算兩次。
2:如果所有節點都從0開始嘗試Nonce值,那不就永遠都是算力高的節點先計算出有效的結果,算力低的節點永遠沒希望挖礦成功?
區塊頭大部分信息都是一樣的,但是Merkle Root對于每個節點必然是不同的,因為每個節點都會有自己的Coinbase交易,該交易中存在節點礦工的地址,此地址對于每個獨立挖礦節點都是不同的,根據哈希函數的雪崩效應可知每個獨立節點的Merkle Root必定有顯著的區別。
3:如何解決拜占庭問題?
通過工作量證明就增加了發送信息的成本,降低節點發送消息速率,這樣就以保證在一個時間只有一個節點在進行廣播,同時在廣播時會附上自己的簽名。工作量證明其實相當于提高了做叛徒(發布虛假區塊)的成本,只有第一個完成證明的節點才能廣播區塊,競爭難度非常大,需要很高的算力,如果不成功其算力就白白的耗費了,整個系統也因此而更穩定。
總結
- 上一篇: anaconda常用命令
- 下一篇: CPLD