細(xì)談PoW

前景提要

之前在文章當(dāng)中也提到過PoW算法的工作原理,以及他的一些源代碼的實(shí)現(xiàn),但是,我覺得那些內(nèi)容還是了解的不夠深入,最近又對PoW進(jìn)行了一個深入的了解,下面談一下我個人的心得,并對之前的文章進(jìn)行一些補(bǔ)充。

關(guān)于PoW

PoW是最開始又中本聰在比特幣的白皮書當(dāng)中提出的共識機(jī)制,和以往的共識機(jī)制(Paxos,Raft,PBFT)不同的是,PoW主要是通過競爭記賬的方式來解決去中心化的記賬系統(tǒng)的一致性問題的,也就是說以每個節(jié)點(diǎn)的計(jì)算能力來競爭記賬權(quán),也就是我們所說的“算力競賽”。

在比特幣當(dāng)中,每10分鐘都會進(jìn)行一輪的算力競賽,只要競賽勝利,就會獲得一次記賬的權(quán)力,在這里所說的算力競賽,也就是我們要說的PoW(Proof-of-Work)共識機(jī)制。

那么Pow的要求是什么呢,在源碼中,或者說這種機(jī)制當(dāng)中,會定義一個target值,我們要做的就是通過暴力計(jì)算,來找到一個小于target的值(注意!是小于?。?,一旦成功,那么就說明成功,這樣我們就可以獲得記賬權(quán)利,也就相當(dāng)于完成了一次PoW。

對于上面這句話,有幾個點(diǎn)可以詳細(xì)的說明一下:
1)我們要找到的那個值一定是要小于target的;
2)為什么我們要在這里說是暴力計(jì)算呢,因?yàn)槲覀冊谶M(jìn)行計(jì)算的時候是一個一個數(shù)進(jìn)行嘗試的,通過嘗試找到最終的答案;
3)繼續(xù)2)的問題,如何進(jìn)行一個數(shù)一個數(shù)的嘗試呢?我們繼續(xù)往下看

我們知道比特幣的區(qū)塊頭當(dāng)中包含著很多的基本內(nèi)容,之前在源碼當(dāng)中也提到過,其中大部分內(nèi)容都是固定的,但是有一個是會一直變化的,那就是nonce值,這是一個隨機(jī)值,他的作用就是通過與區(qū)塊頭其他內(nèi)容結(jié)合,并進(jìn)行一定的函數(shù)執(zhí)行,讓所得結(jié)果與target進(jìn)行比較,為了不錯過任何一種可能性,因此我們的nonce值往往是從0開始,以1為增量,一直變化的,所以這也很好的解釋了為什么會叫做“暴力計(jì)算”。

說到這里,就可以看出來Pow有一個很嚴(yán)重的問題,那就是----嚴(yán)重的資源浪費(fèi),從暴力計(jì)算問題就可以看出來,我們每一次都是需要從頭開始的,每相鄰的兩次Pow計(jì)算也是毫無關(guān)聯(lián)的,因此會造成很大的浪費(fèi)

Pow中使用的加密函數(shù)

在Pow中,對于工作量證明所需要的函數(shù)是SHA256加密算法。
關(guān)于SHA256算法,我們在這里進(jìn)行簡單的介紹:

SHA256是安全散列算法SHA(Secure Hash Algorithm)系列算法之一,其摘要長度為256bits,即32個字節(jié),故稱SHA256。SHA系列算法是美國國家安全局 (NSA) 設(shè)計(jì),美國國家標(biāo)準(zhǔn)與技術(shù)研究院(NIST) 發(fā)布的一系列密碼散列函數(shù),包括 SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512 等變體。主要適用于數(shù)字簽名標(biāo)準(zhǔn)(DigitalSignature Standard DSS)里面定義的數(shù)字簽名算法(Digital Signature Algorithm DSA)。

如果有興趣的話,可以查閱一些相關(guān)的資料,我之后也會提到這種加密算法,這種算法,對于比特幣來說,還是相對安全的。(當(dāng)然只是相對的)

在Pow中,我們使用的是連續(xù)兩次的SHA256加密算法得到我們要和target進(jìn)行比較的內(nèi)容,也就是

target > SHA256(SHA256(Block_header))

如果滿足這個式子,那么恭喜你,你獲得記賬權(quán)了!

Pow中的難度調(diào)整

在Pow當(dāng)中,因?yàn)槊恳淮味际窃谶M(jìn)行算力計(jì)算,而且
每一次進(jìn)行算力競賽的時候,target的值也是不盡相同的,那么這樣,就會造成計(jì)算難度高低不同的問題。

首先我們先提出target的計(jì)算方法:

目標(biāo)值=最大目標(biāo)值/難度值

有人會問,為什么不能就設(shè)定成一個固定的值,反正nonce值是在不斷進(jìn)行變化的,只要能找到不就好了么,而且這樣還會省去調(diào)整難度的問題,這樣想思路是好的,但是你這樣容易會對下一次計(jì)算提供“便捷”,你一旦知道了上一次的最終nonce值,那么下一次你一定會想辦法看看是不是有什么規(guī)律可循,這樣你接下來的計(jì)算速度會越來越快(那比特幣會受不了的)。因此,難度調(diào)整是十分有必要的。

那么是如何進(jìn)行調(diào)整的呢?我們通過的是一個公式進(jìn)行調(diào)整:

新難度值=舊難度值×(過去2016個區(qū)塊花費(fèi)時長/20160分鐘)

要說明的是,為什么在這里使用的是20160,這是比特幣每兩周生成所有塊的理想時間(1塊=10分鐘)。

這樣,我們就可以實(shí)現(xiàn)對Pow算法難度的設(shè)置,從而將難度一直保持在一個相對平衡的水平,也從而保證每一次算力競賽的時間長度大概是在10分鐘左右。

PoW能否解決拜占庭將軍問題

貌似所有區(qū)塊鏈當(dāng)中的共識算法的最終目的,或者說是評價指標(biāo),應(yīng)該都是對拜占庭將軍問題的解決處理,因此我們來談一談PoW到底能不能解決拜占庭將軍問題,其實(shí),在2015年,Juan Garay就對比特幣的PoW共識算法進(jìn)行了正式的分析,他最終得出的結(jié)論是比特幣的PoW共識算法是一種概率性的拜占庭協(xié)議(Probabilistic BA)。Garay對比特幣共識協(xié)議的兩個重要屬性分析如下。

一致性

在不誠實(shí)節(jié)點(diǎn)總算力小于50%的情況下,同時每輪同步區(qū)塊生成的幾率很少的情況下,誠實(shí)的節(jié)點(diǎn)具有相同的區(qū)塊的概率很高。

正確性

當(dāng)不誠實(shí)算力具一定規(guī)模,超過51%,甚至不用接近50%的時候,比特幣的共識算法并不能保證正確性,也就是,不能保證大多數(shù)的區(qū)塊由誠實(shí)節(jié)點(diǎn)來提供。這就是著名的51%算力攻擊。

總結(jié)

通過以上的分析,我們可以看到,比特幣的共識算法并不適合于私有鏈和聯(lián)盟鏈。其原因首先是它是一個最終一致性共識算法,并不是一個強(qiáng)一致性共識算法。第二個原因是其共識效率低,提供共識效率又會犧牲共識協(xié)議的安全性。

但是,作為區(qū)塊鏈入門必學(xué)的經(jīng)典共識機(jī)制,PoW還是在一定程度上有很大的意義的,因此我們還是很有必要學(xué)習(xí)PoW算法的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 注:以下內(nèi)容根據(jù) 2018 年 1 月 15 日 CoinMarketCap 的加密貨幣市值排名編寫。 001. ...
    成長為價值投資者閱讀 5,048評論 0 10
  • 一直很羨慕那種耕有其田,居有其屋,千里馬有伯樂,才有所用的世外桃源。然而理想很豐滿,現(xiàn)實(shí)卻很骨感。 常常在想,用一...
    芃芃麥田閱讀 428評論 0 1
  • 最近似乎有點(diǎn)不太開心的花皮小姐??傆X得她處于性格的轉(zhuǎn)變期。就像不知道從哪天開始、她面對陌生人也可以安然求摸了。期待...
    bb2ec6e297b5閱讀 100評論 0 0
  • 我度過了美好的童年 我滿懷著希望與夢想一步步成長 我在家人的呵護(hù)下逃脫風(fēng)雨的洗禮 我身上時常散發(fā)著玫瑰花的芬芳 我...
    寒江雪邊閱讀 238評論 0 1
  • 衛(wèi)生巾、衛(wèi)生棉條和月經(jīng)杯是提高女性經(jīng)期生活質(zhì)量的三個偉大發(fā)明。 然而這些我們司空見慣的東西存在于地球上才不到一百年...
    保健養(yǎng)生力閱讀 715評論 0 0

友情鏈接更多精彩內(nèi)容