|
PoW(Proof of Work,工作量證明)是區塊鏈技術中基本的、常見的一種共識機制。加密幣中的挖礦,其實就是運用工作量證明來進行的。
一、PoW的起源
工作量證明最早是一個經濟學名詞,指系統為達到某一目標而設置的衡量機制。通俗來說,就是當你完成一定量的工作后,確認這一工作量的證明。因為監測整個工作的過程是非常的耗時的,而只通過檢驗工作結果來確認工作量,顯然效率要更高。
工作量證明系統(或者說協議、函數),是一種應對拒絕服務攻擊和其他服務濫用的經濟對策。它要求發起者進行一定量的運算,也就意味著需要消耗計算機一定的時間。這個概念由Cynthia Dwork 和Moni Naor 1993年在學術論文中首次提出。
在1999年,Markus Jakobsson and Ari Juels兩人將pow概念引入計算機體系,工作量證明(PoW)這個名詞,在兩人的文章中被真正提出。起初,PoW被用于抵擋拒絕服務攻擊和網絡爬蟲,后來在反垃圾郵件中被廣泛使用。
反垃圾郵件系統哈希現金(Hash Cash),其設計理念是一個正常用戶寫一封郵件是需要一定的時間,而發送垃圾郵件者是無法接受這個等待的時間,PoW系統使垃圾郵件發送者需要更多的時間來發送郵件,增大他們的成本,起到抵擋攻擊的作用。
PoW共識機制是基于哈希函數本身復雜的運算,通過給定的初始值和簡單的值遞增規律,利用其碰撞原理,找到特定的碰值,可以通過對碰值的調節,實現對于工作量的調節。
二、哈希函數
哈希函數(Hash Function)即散列函數,輸入一個x,會得出相應的輸出H(x)。其中,這里的x可以是任意長度的字符串,而輸出的H(x)卻具有固定長度,哈希函數正是將任意長度的數據映射到有限長度的域上。在計算過程上,雖然復雜,但非常高效。
比特幣這種加密系統使用的哈希函數,還需要同時具備免碰撞、匿名性、防篡改等特點。
免碰撞指的是:如果輸入的x≠y,絕不會出現H(x)=H(y)的情況,即輸入兩個不同的數據塊,其哈希值一般來說也不會相同。理論上相同的可能性并非絕對沒有,但概率極小。所以,對于一個給定的數據塊,要找到與它哈希值相同的數據塊極難。
哈希函數的隱匿性是指,對于一個給定的輸出結果H(x),想要逆推出輸入的x,在計算上是不可能的。
而對于數據塊的任何一處小小的改動,哈希值隨之產生的變動都會非常明顯,這一點構成了哈希函數的防篡改特點。
同時,在這一函數中,窮舉法是能夠使得哈希值H(x)落在特定范圍的最好方法。在比特幣的區塊鏈上,使用哈希窮舉實現工作量證明能夠擁有隨機和易驗證兩種特性,這兩種特性將于后文中提到。
三、工作量證明的原理
在工作量證明系統中,客戶端完成一定難度的工作,得出一個結果,驗證者只需通過驗證這個結果就能檢驗客戶端是否做了相應的工作。這種方案的一個核心特征是不對稱性:工作對于請求方是適中的,對于驗證方則是易于驗證的。其工作流程如下:
對于任意一串字符,給出了一定的工作量要求,對這串字符進行變更,使其得到具有特定規律的一個結果,若得到這個結果,則驗證通過。為了達到這個目標,需要不斷地對這串字符進行哈希計算,直到計算量達到一定次數時,才能得到要求的變更后的數列。
在計算之前,根據工作量要求可以得出預期的計算次數,這個預期的次數和實際不一定完全吻合,但會大體接近,如果重復多次,會發現這確實是一個符合統計學規律的概率事件。而
這里提到的預期計算次數,其實就是要求的工作量。
以上是工作量證明的基本原理,比特幣系統中的工作量證明機制與其類似,但更為復雜。
四、比特幣的工作量證明
在工作量證明的區塊鏈中,系統會根據算力大小來選取打包的節點,對于節點來說,單純的打包和數據上傳非常簡單,不過,系統需要選取一個特定的節點來處理某件事,為了避免眾多節點對同一件事打包而引起不必要的分叉,比特幣通過前文中提到的哈希窮舉,增加打包難度,以延長打包時間。
簡言之,就是每個節點都需要在10分鐘內找到一個隨機數,并保證這個隨機數加上上文所說的哈希運算,能夠滿足一定的規律。為了找到這個隨機數,只能通過不斷嘗試新的隨機數,不斷的運算。而隨著運算量的增大,目標范圍也會不斷縮小。
哈希窮舉的隨機性和易驗證性在這里體現了出來。首先,即使知道了這個隨機數的范圍,也只能通過大量計算去得到;然后,如果有人找到了隨機數,那么其他節點能夠很容易地檢驗這個結果的正確性。
如果算力增強,就需要修改難度以增加計算次數,比特幣中就有修改難度的規則。所以,想要找到這樣一個隨機數,計算量要遠遠大于預期的工作量。
為了鼓勵節點不斷地對數據和信息進行打包,比特幣的區塊鏈網絡設置了獎勵,即支付給打包(記賬)節點的獎勵和交易費。
打包獎勵是指創建區塊的節點會獲得一定數量的比特幣作為獎勵,獎勵的數量隨著比特幣區塊的生成而減少。
交易費即使用比特幣轉賬時支付給記賬節點的費用,這是支持節點工作、維護區塊鏈自動運轉的重要因素。
這兩種打包獎勵都是通過工作量證明來進行,在比特幣中也就是為人所熟知的挖礦行為。而衍生而來的礦機,在一開始其實是個人計算機這樣的運算設備,隨著算力的提高,難度的增大,專業礦機誕生。自始至終,算力的競爭從未結束,而難度和算力也在不斷進行博弈。
工作量證明的優點是足夠安全、公平和去中心化,其免碰撞、匿名性與不可篡改的特點奠定了比特幣區塊鏈技術的核心;但它的缺點也很明顯,耗時長效率低,算力提高的同時耗費了電力,除了挖礦,這些強大的算力難以轉化成其他資源。
文章轉載自區塊鏈(www.bbcaijing.cn),如有侵權請聯系刪除!