❶ 姣旂壒甯佺殑鎸栫熆鍒板簳鎸栫殑鏄浠涔
姣旂壒甯佺殑鎸栫熆鏄涓縐嶉氳繃姣旂壒甯佺綉緇滅殑鍏辮瘑鏈哄埗鈥斺斿伐浣滈噺璇佹槑錛圥oW錛夋潵鑾峰緱姣旂壒甯佺殑榪囩▼銆傚湪榪欎釜榪囩▼涓錛岀熆宸ヤ滑闇瑕佽В鍐沖嶆潅鐨勬暟瀛﹂棶棰橈紝絎涓涓瑙e喅闂棰樼殑鐭垮伐灝嗚幏寰楁柊鐢熸垚姣旂壒甯佷綔涓哄栧姳銆傝繖縐嶅栧姳鍖呮嫭涓ら儴鍒嗭細鍖哄潡濂栧姳鍜屼氦鏄撹垂銆傚綋鍓嶆瘮鐗瑰竵浠鋒牸綰︿負3900緹庡厓鏃訛紝鎸栧埌涓涓鍖哄潡鐨勭熆宸ュ彲鑾峰緱澶х害48750緹庡厓鐨勫尯鍧楀栧姳鍜6000緹庡厓鐨勪氦鏄撹垂錛屾昏$害54750緹庡厓銆
姣旂壒甯佹寲鐭跨殑鍘熺悊綾諱技浜庝竴涓鏉戝簞鐨勫喅絳栬繃紼嬨傚湪榪欎釜鏉戝簞涓錛屾潙闀塊氳繃涓縐嶇壒孌婄殑鏂瑰紡璁╂潙姘戣揪鎴愬叡璇嗭細閫氳繃鎺ㄥ法鐭蟲潵鍐沖畾涓鍗堝悆浠涔堛傚湪姣旂壒甯佺綉緇滀腑錛岀熆宸ヤ滑鈥滄帹宸ㄧ煶鈥濇潵瑙e喅鏁板﹂棶棰橈紝絎涓涓瑙e喅闂棰樼殑鐭垮伐灝嗚幏寰楃綉緇滅殑璁ゅ彲錛屽苟璁板綍涓嬬浉搴旂殑浜ゆ槗錛岃幏寰楀栧姳銆
鏈鍒濓紝姣旂壒甯佺殑鎸栫熆鏄鍩轟簬CPU鐨勶紝浣嗛殢鐫鎸栫熆闅懼害鐨勫炲姞錛孋PU鐨勮$畻鑳藉姏宸叉棤娉曟弧瓚抽渶奼傘傚洜姝わ紝鐭垮伐浠寮濮嬩嬌鐢ㄤ笓闂ㄤ負閫氱敤璁$畻璁捐$殑鏄懼崱鏉ユ寲鐭褲傛樉鍗℃嫢鏈夋暟鍗冧釜嫻佸勭悊鍣錛岄潪甯擱傚悎榪涜屾寲鐭挎墍闇鐨勯氱敤璁$畻銆傝繖灝卞ソ姣旇10涓鑰佸笀鍜屽皬瀛︾敓涓璧峰啓鏁板瓧1錛屽皬瀛︾敓鍥犱負浜烘暟澶氳屽畬鎴愬緱鏇村氥傛樉鍗℃寲鐭垮洜姝ゆ垚涓轟竴縐嶉珮鏁堣幏寰楁瘮鐗瑰竵鐨勬柟寮忋
鏄懼崱鎸栫熆鐨勬祦琛屽規樉鍗″競鍦轟環鏍間駭鐢熶簡宸ㄥぇ褰卞搷銆傚湪姣旂壒甯佷環鏍奸珮浼佹椂錛屽ぇ閲忕熆宸ュ拰鐭垮満娑屽叆甯傚満錛屾帹楂樹簡鏄懼崱鐨勯渶奼傚拰浠鋒牸銆備絾闅忕潃姣旂壒甯佷環鏍肩殑鍥炶惤錛屾寲鐭挎敹鐩婂噺灝戱紝澶ч噺鐭垮崱嫻佸叆浜屾墜甯傚満錛屾樉鍗′環鏍間篃闅忎箣涓嬮檷銆傜劧鑰岋紝鐢變簬鏄懼崱鎸栫熆鐨勭壒孌婃э紝璁稿氫漢涓嶅緩璁璐涔頒簩鎵嬬熆鍗°
鎬諱箣錛屾瘮鐗瑰竵鎸栫熆鏄涓涓澶嶆潅涓斿姩鎬佸彉鍖栫殑榪囩▼錛屽畠涓嶄粎鍏崇郴鍒版瘮鐗瑰竵鐨勭敓鎴愶紝榪樺獎鍝嶇潃鏄懼崱甯傚満浠鋒牸鐨勬嘗鍔ㄣ傚逛簬鎯寵佸姞鍏ユ寲鐭胯屼笟鐨勪釜浜烘潵璇達紝闇瑕佽皚鎱庤冭檻錛屽洜涓哄競鍦哄彉鍖栧彲鑳戒細甯︽潵宸ㄥぇ鐨勯庨櫓銆
❷ PoW共識機制的原理
比特幣的共識機制就是PoW共識,借鑒了HashCash的處理方法, 下面就來說說比特幣如何進行PoW共識的。
從區塊頭的結構中可以看到一個4 bytes的Nonce值,Nonce值的變動會影響整個區塊頭的哈希值,挖礦節點即是通過嘗試不同的Nonce值(通常從0開始每次加1),尋找一個哈希值小於Difficulty Target指定的難度值。
PoW證明過程,這也就是俗稱的挖礦過程, 找到合適的哈希值。
這里不詳細說明區塊打包過程, 區塊通過一定的演算法被生成, 當然生成是需要一定的代價的。
區塊頭里的各個值並不是隨機的, 而是由固定的演算法得出, Merkle根哈希值就是把交易打包變成一顆Merkle樹, 最後得出根的哈希值, 難度值是根據演算法不斷調整, 要維持出塊速率是10分鍾出一個塊。
首先我們把所有交易打包生成Merkle樹, 計算Merkle根的哈希值, 然後組裝區塊頭, 把區塊頭不斷進行SHA256(SHA256(區塊頭))雙重哈希操作, 然後判斷是否小於網路目標值, 這里其實就是把它變成2進制, 二進制前面有多少位是沒有0的, 因為有1的話, 這個十進制的值肯定是很大的, 就不會符合條件。 如果大於這個目標值, 說明前面的位數沒有滿足前多少位為0的條件 哈希不成功, 那麼就改變隨機數值,組成新的區塊頭,繼續哈希。
這是就是是挖到礦了,其他節點驗證的話也簡單,只要做一次SHA256(SHA256(驗證區塊頭))來判斷。
比特幣挖礦難度調整方式非常簡單,難度目標調整即不斷將256位的難度值減小,如277315號區塊的難度值十六進製表示為:
這個數字在二進製表示下前60位均是0,如果要增加難度只需要減小這個值,隨著難度值的減小,起始0的個數增多,可尋找的哈希值范圍減小,挖礦難度就越大。
難度的調整是在每個完整節點中獨立自動發生的。每2016個區塊,所有節點都會按統一的公式自動調整難度。如果區塊產生的速率比10分鍾快則增加難度,比10分鍾慢則降低難度。
公式可以總結為:新難度值=舊難度值×(過去2016個區塊花費時長/20160分鍾)
優點
缺點
1:挖礦過程為什麼要計算兩次哈希值?
中本聰在設計比特幣的挖礦演算法的時候,考慮到SHA2-256演算法存在被破解的可能,雖然在理論上並未出現對SHA2-256演算法的攻擊。為了減弱攻擊的威脅,區塊頭數據要對SHA2-256演算法運算兩次。
2:如果所有節點都從0開始嘗試Nonce值,那不就永遠都是算力高的節點先計算出有效的結果,算力低的節點永遠沒希望挖礦成功?
區塊頭大部分信息都是一樣的,但是Merkle Root對於每個節點必然是不同的,因為每個節點都會有自己的Coinbase交易,該交易中存在節點礦工的地址,此地址對於每個獨立挖礦節點都是不同的,根據哈希函數的雪崩效應可知每個獨立節點的Merkle Root必定有顯著的區別。
3:如何解決拜占庭問題?
通過工作量證明就增加了發送信息的成本,降低節點發送消息速率,這樣就以保證在一個時間只有一個節點在進行廣播,同時在廣播時會附上自己的簽名。工作量證明其實相當於提高了做叛徒(發布虛假區塊)的成本,只有第一個完成證明的節點才能廣播區塊,競爭難度非常大,需要很高的算力,如果不成功其算力就白白的耗費了,整個系統也因此而更穩定。