難度目標

難度目標

難度目標的英文名為Difficulty Targets,使整個網路的計算力大致每 10 分鐘產生一個區塊所需要的難度數值即為難度目標。

基本介紹

  • 中文名:難度目標
  • 外文名:Difficulty Targets
簡介,區塊中的難度目標,在工作量證明中的套用,

簡介

難度目標是使整個網路的計算力大致每 10 分鐘產生一個區塊所需要的難度數值。難度目標由區塊鏈網路根據過去兩周的計算結果,自動重新計算未來兩周的難度目標。難度目標由區塊中的 SHA 256 Hash 值所決定,通過控制區塊標頭(Block Header)SHA 256 Hash 值應恰好落在可控範圍目標區間之內來增加或減少難度目標。

區塊中的難度目標

區塊的格式如圖所示:
區塊區塊
這是區塊鏈技術基本都具有的一些頭部信息,包括4位元組的版本號、32位元組的上一個區塊的哈希值、32位元組的Merkle根、4位元組的時間戳(當前時間)、4位元組的難度目標以及4位元組的隨機數。
  • 版本號:用於跟蹤軟體/協定的更新。如果新版本的軟體不兼容舊版本的軟體,那么就認為是發生了“分叉”。
  • 上一區塊頭哈希值:存儲的是鏈上上一個區塊的哈希值,也是區塊鏈設計的精髓所在。
  • Merkle根:為了在區塊中體現出交易而做的一個計算,主要是解決帳本中交易記錄Hash計算的效率問題。每當產生一次交易,那么就與其他所有準備打包進區塊的交易組成交易列表,通過Merkle Tree算法生成Merkle Root Hash,作為交易列表的摘要存到區塊頭中。流程可以概括為每相臨的兩條交易記錄向上形成一個Hash值,再與相鄰的節點再往上形成Hash值,一直到樹根形成所有交易記錄的唯一Hash值,即Merkle根。
  • 時間戳:該區塊產生的近似時間。這個時間雖然是節點生成的但是其是否有效需要其他節點的認可(允許有一定程度的誤差)。
  • 難度目標:該區塊工作量證明的算法的目標值。
  • Nonce: 用於工作量證明算法的計數器。

在工作量證明中的套用

PoW: Proof of Work,工作量證明。這個是比特幣、萊特幣等貨幣型區塊鏈使用的共識機制。類似於現實中的畢業證、駕照等,來證明你具有某種能力。可以認為PoW徹底解決了分散式一致性的問題。其過程以比特幣為例,如下:
  • 礦工在網路中拿到最新一個區塊的頭部信息,其中的Merkle根包含了交易記錄的信息摘要;
  • 將拿到的頭部信息作為參數,將nonce值從零開始,去計算其雙重SHA256值(SHA256(SHA256(頭部信息)));
  • 如果算出的答案不符合要求(前n位為0),則將nonce值增加一個單位,再算;
  • 直到計算出符合難度目標的答案,就挖到一個區塊,即可將自己創建的區塊廣播出去,其他節點驗證無誤即保存到自己的區塊鏈上。
  • 如果同時有多個節點實現了工作量證明,那么整個網路集群採用少數服從多數原則,集群中大部分採用了哪個區塊就選擇此區塊組成最新的賬本,達到最終一致性。
  • 如果節點同步到了多個長度不同的區塊鏈賬本,那么選擇其中長的作為賬本。
這個思路犧牲了一部分一致性來保證區塊鏈的健壯性,即使只有一個結點,區塊鏈系統依舊可以運行。同時也保證了區塊鏈的安全性,除非51%的結點被控制。但一方面如果想要控制這么多節點,不僅要具有很強的算力,還得相當於重構一個區塊鏈網路,另一方面區塊鏈會給予實現工作量證明的節點以獎勵。權衡收益和破壞的成本,基本可以杜絕這種51%攻擊(博弈學的使用)。
此外,還需要提到區塊頭中的難度目標這個值,此值與計算耗時是反比的,即此值越大,那么計算越容易。以比特幣為例,為了控制每十分鐘產生一個區塊的速率,需要根據統計數據動態調整難度目標從而可以寶成區塊的生產速率。
PoW雖然很好的解決了分散式一致性問題,但其非常的耗費計算力,浪費電。

相關詞條

熱門詞條

聯絡我們