pow,proof of work,即工作量證明,是著名公鏈bitcoin所採用的共識演算法。那麼pow到底是什麼玩意呢?簡單來說,pow就是乙個證明,證明你確實做了一定量符合要求的工作。通常「這份工作」做起來有些難度,但是驗證方卻很容易通過結果來驗證是否做了相應的工作。
一句話介紹下位元幣的pow到底在幹什麼?其實就是對區塊頭幾乎**的瘋狂進行hash運算,期間夾雜著nonce的遞增,得出來的hash值與"某個hash值"比大小(也驗證了某位大佬的話:一切演算法的背後本質都是在比大小)。
估計有人一臉懵逼的納尼?區塊頭什麼玩意?hash運算用的雜湊函式家族中的哪個?nonce什麼鬼玩意?"某個hash值" 又是個什麼東西?比大小?到底是比大還是比小?下面一一道來。
1、區塊頭。位元幣的區塊頭大小為80位元組。其中包含4位元組的版本號,32位元組的上一區塊的hash值,32位元組的merkle根hash值,4位元組的時間戳(utc),4位元組的難度值、4位元組的nonce。**如下:
位元幣區塊頭blockheader定義如下:
2、hash運算。位元幣系統使用的是sha256。sha256就是雜湊函式家族中的乙個,輸出值為256位的雜湊演算法。到目前為止,還沒有出現對sha256演算法的有效攻擊。
3、nonce。就是區塊頭中的最後乙個欄位nnonce。位元幣原始碼中對nonce的處理為++pblock->nnonce(期間夾雜著nonce的遞增)。涉及原始碼如下:
4、某個hash值。是由當前全網的難度值(就是區塊頭中的倒數第二欄位nbits)計算得出的,其中形參ncompact就是nbits。原始碼如下:
5、比大小。比的是小,就是瘋狂hash運算後得到的hash值比難度值得到的hash值小,就表示你取到真經啦。其中第80行由難度值nbits得到hash值設定到bntarget中,第87行在比較大小,如果比難度值大,return false。不好意思,白做了。原始碼如下:
以上就是位元幣的pow工作機制了。感興趣的可以仔細看看3、nonce 中的那個最外層 while 迴圈,還有些更深的細節在裡面,這裡就不bb了。pow給人的感覺就是太浪費了。截至目前,整個位元幣全網的算力已經極其巨大了,這種龐大的算力用來做這種無用的hash運算筆者覺得真是巨大的浪費。好了,結束。
區塊鏈共識演算法 POW
pow proof of work 工作量證明 工作量證明即挖礦,通俗來說就是幹的越多,收穫越多。即通過與或運算,來計算出乙個滿足規則的隨機數,即獲得了本次的記賬權。在發出本輪需要記錄的資料之後,全網其他節點驗證之後一起儲存。乙個符合要求的區塊雜湊值block hash由n個前導的零組成 零的個數取...
區塊鏈之共識演算法
在分布式系統中,為了使得整個系統正常工作,乙個非常核心的問題就是如何保證集群中所有節點中的資料完全相同並且能夠對發起的提案達成一致。共識演算法就是用來解決上述問題的的,從而保證分布式系統一致性的方法。共識的特性 終止性 termination 所有正常運作的程序 節點 最終會在有限步數中結束並作出決...
區塊鏈 PoW 共識機制的原理與認識
有效可靠 因為雜湊函式具有免碰撞 隱匿性以及不存在比窮舉更好地方法來使得雜湊值落在特定的範圍。利用時間戳 非對稱加密 雜湊函式以及共識機制解決了拜占庭將軍的問題。實現了去中心化 pow 的共識機制解決了去中心化結構中各個節點間資料不一致的問題。同時這一機制保證了在這個系統中每乙個節點的公平性,即每乙...