【區塊鏈】PoW 挖礦過程-python代碼實現

PoW 工作量證明

       因爲比特幣採用了 PoW 共識機制,所以這個概念才得以被廣泛傳播。PoW 全稱 Proof of Work,中文名是工作量證明,PoW 的核心設計思路是提出一個計算難題,但是這個難題答案的驗證過程是非常容易的,這種特性我們稱之爲計算不對稱特性,即計算困難,驗證簡單。
       在分析拜占庭將軍問題的時候可以看出,如果所有節點在同一時刻發起提案,那麼這個系統的記 賬過程將會非常的複雜混亂,爲了降低具有提案權的節點數量,採用工作量證明不失爲一個好辦法。 所以我們需要構造一個計算不對稱的難題,這個難題在比特幣中被選定爲以 SHA256 算法計算一個目標哈希,使得這個哈希值符合前 N 位全是 0。
       舉個例子,假設我們給定一個字符串“helloworld”,我們提出的難題是,計算一個數字,與給定的字符串連接起來,使這個字符串的 SHA256 計算結果的前 4 位是 0,這個數字我們稱作 nonce,比如字符串 "helloworld1234",nonce 就是 1234,我們要找到符合條件的 nonce。
import hashlib
def main(str_start):
 base_sring = "helloworld"
 nonce = 10000
 count = 0
 while True:
     target_sring = base_sring + str(nonce)
     m = hashlib.sha256()
     m.update(target_sring.encode('utf-8'))
     pow_hash = m.hexdigest()
     count = count + 1  # 統計次數
     if pow_hash.startswith(str_start):
         print(pow_hash)
         print("nonce: %s scan_times: %s" % (nonce, count))
         break
     nonce = nonce + 1  # nonce從10000往上增長

if __name__ == '__main__':
    main("0000")  # 前4位爲0,以此類推
    main("00000")
    main("000000")
    main("0000000")

運行結果:

 

        可以看出,每次要求哈希結果的前 N 位多一個 0,計算次數就多了很多倍,當要求前 7 位都是 0 時,計算次數達到了 6.5 億次,CPU 負載長時間達到 100%。
        通過上述程序,希望你對區塊鏈 PoW 機制有個直觀的瞭解。由於結果只能暴力搜索,而且搜索空間非常巨大,作弊幾乎不可能,另外符合條件的 nonce 值也是均勻分佈在整個空間中的,所以哈希是一個非常公平且粗暴的算法。
以上代碼的基本邏輯就是 PoW 挖礦過程,搜索到一個目標值就會獲得記賬權 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章