難度目標的英文名為Difficulty Targets,使整個網路的計算力大致每 10 分鐘產生一個區塊所需要的難度數值即為難度目標。
基本介紹
- 中文名:難度目標
- 外文名:Difficulty Targets
簡介
區塊中的難度目標
- 版本號:用於跟蹤軟體/協定的更新。如果新版本的軟體不兼容舊版本的軟體,那么就認為是發生了“分叉”。
- 上一區塊頭哈希值:存儲的是鏈上上一個區塊的哈希值,也是區塊鏈設計的精髓所在。
- Merkle根:為了在區塊中體現出交易而做的一個計算,主要是解決帳本中交易記錄Hash計算的效率問題。每當產生一次交易,那么就與其他所有準備打包進區塊的交易組成交易列表,通過Merkle Tree算法生成Merkle Root Hash,作為交易列表的摘要存到區塊頭中。流程可以概括為每相臨的兩條交易記錄向上形成一個Hash值,再與相鄰的節點再往上形成Hash值,一直到樹根形成所有交易記錄的唯一Hash值,即Merkle根。
- 時間戳:該區塊產生的近似時間。這個時間雖然是節點生成的但是其是否有效需要其他節點的認可(允許有一定程度的誤差)。
- 難度目標:該區塊工作量證明的算法的目標值。
- Nonce: 用於工作量證明算法的計數器。
在工作量證明中的套用
- 礦工在網路中拿到最新一個區塊的頭部信息,其中的Merkle根包含了交易記錄的信息摘要;
- 將拿到的頭部信息作為參數,將nonce值從零開始,去計算其雙重SHA256值(SHA256(SHA256(頭部信息)));
- 如果算出的答案不符合要求(前n位為0),則將nonce值增加一個單位,再算;
- 直到計算出符合難度目標的答案,就挖到一個區塊,即可將自己創建的區塊廣播出去,其他節點驗證無誤即保存到自己的區塊鏈上。
- 如果同時有多個節點實現了工作量證明,那么整個網路集群採用少數服從多數原則,集群中大部分採用了哪個區塊就選擇此區塊組成最新的賬本,達到最終一致性。
- 如果節點同步到了多個長度不同的區塊鏈賬本,那么選擇其中長的作為賬本。