區塊鏈要成為一個難以攻破的、公開的、不可篡改數據記錄的去中心化誠實可信系統,需要在盡可能短的時間內做到分布式數據記錄的安全、明確及不可逆,提供一個最堅實且去中心化的系統。在實踐中,該流程分為兩個方面:
一是選擇一個獨特的節點來產生一個區塊
二是使分布式數據記錄不可逆
實現上述流程的技術核心就是:共識機制。共識機制是區塊鏈節點就區塊信息達成全網一致共識的機制,可以保證最新區塊被准確添加至區塊鏈、節點存儲的區塊鏈信息一致不分叉甚至可以抵御惡意攻擊。
當前主流的共識機制包括:工作量證明、權益證明、工作量證明與權益證明混合、股份授權證明、瑞波共識協議等。
(一)工作量證明
工作量證明(Proof of Work,PoW),顧名思義,即指工作量的證明。PoW機制的基本步驟如下:
- 節點監聽全網數據記錄,通過基本合法性驗證的數據記錄將進行暫存;
- 節點消耗自身算力嘗試不同的隨機數,進行指定哈希計算,並不斷重復該過程直至找到合理的隨機數;
- 找到合理的隨機數后,生成區塊信息,首先輸入區塊頭信息,然后是區塊記錄信息;
- 接着對外廣播出新產生的區塊,其他節點驗證通過后,連接至區塊鏈中,主鏈高度加一,然后所有節點切換至新區塊后面繼續進行工作量證明的區塊產生。
PoW叫工作量證明體現在步驟2中,節點需要不斷消耗算力工作,進行哈希計算,以找到期望的隨機數。如果兩個節點在同一時間找到區塊,那么網絡將根據后續節點和區塊生成情況來確定哪個區塊構建最終區塊鏈。
其工作量主要體現在:一個符合要求的區塊隨機數由N個前導零構成,零的個數取決於網絡的難度值。要得到合理的隨機數需要經過大量嘗試計算,計算時間取決於機器的哈希運算速度。當某個節點提供出一個合理的隨機數值,說明該節點確實經過了大量的嘗試計算。當然,這並不能得出計算次數的絕對值,因為尋找合理隨機數值是一個概率事件。
挖礦有三個重要功能:
- 發行新的貨幣
- 維系系統的支付功能
- 通過算力保障系統安全
PoW機制存在兩個方面明顯缺陷:
- 算力的消耗與浪費。
- 算力集中化凸顯。
(二)權益證明
PoS是一個根據持有貨幣的量和時間,進行利息分發和區塊產生的機制。
幣天:每個幣每天產生1幣天。
如果發現了一個新PoS區塊,幣天就會被清空為0。每被清空365幣天,將會從區塊中獲得0.05個幣的利息(可理解為年利率5%)。
未來幣
每個區塊鏈的備份都存放在未來幣網絡的每個節點里,而且在每個節點上沒有加密的每個賬戶都能夠生成區塊,只要至少一個新入賬戶的交易已經確認了1440次。任何賬戶只要達到了這個標准就會被視為“激活賬戶”。在未來幣里,每個區塊都包含着255個交易,每個交易都是由包含識別參數的192字節的數據頭開始的。一個區塊里的每個交易都是由128個字節所代表着。總共加在一起就意味着最大的區塊大小有32K字節。
每個區塊都有一個“生成簽名”的參數。激活賬戶用自己的私鑰在原先的區塊上簽署“生成簽名”。這就產生了一個64字節的簽名,之后通過SHA256散列該簽名。哈希產生的前八個字節給出了一個數字,作為一個“hit”。“hit”與目前的目標值相比較,如果計算出的“hit”值要比“目標值”低,那么就可以生成下一個區塊了。
對於每個活動賬戶來講,“目標值”都是與它自身所確認的余額成比例的。一個持有1000個幣的賬戶得到的目標值是持有20個幣賬戶所得到目標值的50倍。因此,擁有1000個幣的持有者產生的區塊數是持有20個幣的人產生的50倍。同事,“目標值”並不是固定的,隨着先前區塊的時間戳的流逝時刻都在增長。如果在最初的一秒鍾內沒有哪個賬戶的“hit”值是低於“目標值”的,則下一秒鍾“目標值”就會翻倍。“目標值”會連續的翻倍,直到一個活動賬戶的“hit”值有一個較低的數值。還有一個“基本目標”值,它以60秒的間隔設定為目標值。正是這個原因,一個區塊平均產生的時間會在60秒。即使在網絡上只有很少的激活賬戶,它們其中的一個最終會產生一個區塊,因為“目標”值會變得相當大。通過將你賬戶的“hit”值與目前的“目標”值相比,你就可以估算出你的“hit”值還有多久能成功。
當一個激活賬戶贏得產生區塊的權利時,就能將任何可獲得的且未確認的交易放入區塊中,並用所有需要的參數來填充該區塊。然后,這個區塊就會被傳播到網絡中作為一個區塊鏈的備選。每一個區塊中的負載值、“hit”、產生的賬戶以及簽名都能被網絡上接收到它的節點所確認。每個區塊參考之前的區塊,區塊形成的區塊鏈可以用來追溯和查詢網絡中所有的交易歷史,所有這些都會追溯到創世區塊。
(三)權益證明+工作量證明
用工作量證明機制PoW發行新幣,用權益證明機制PoS維護網絡安全,即PoW+PoS機制。該機制中,區塊被分成兩種形式——PoW區塊及PoS區塊。在這種新型區塊鏈體系里,區塊持有人可以消耗他的幣天獲得利息,同時獲得為網絡產生一個區塊和用PoS造幣的優先權。
在PoW+PoS機制下,只要持有幣的人,不論持有的數量多少,都可以挖到數據塊,而不用采用任何的礦池導致算力集中。同時,由於多采用幣天生成區塊,而不是算力,降低了資源消耗,解決了單純PoW機制在維護網絡安全方面先天不足的問題。
(四)股份授權證明
PoS機制使用一個確定性算法以隨機選擇一個股東來產生下一個區塊,該算法中,賬戶余額決定了節點被選中的可能性。然而,該系統並未使區塊鏈變得越來越安全而不可逆。同時PoS面臨的挑戰是如何通過及時而高效的方法達成共識。
為達到這個目標,每個持幣節點可以將其投票權授予一名代表。獲票數最多的前100位代表按既定時間表輪流產生區塊。每名代表被分配到一個時間段生產區塊。所有代表將收到等同於一個平均水平的區塊所含交易費的1%作為報酬。如果一個平均水平的區塊含有100股作為交易費,一名代表將獲得1股作為報酬,即可大大提高共識效率。這是DPoS的核心思想。
在DPoS中,
- 第一步是稱為一名代表,必須在網絡上注冊公鑰,然后分配一個32位的特有標識符。然后該標識符會被每筆交易數據的“頭部”引用。
- 第二步是授權選票。每個錢包有一個參數設置窗口,在該窗口里用戶可以選擇一個或更多的代表,並將其分級。一經設定,用戶所做的每筆交易將把選票從“輸入代表”轉移至“輸出代表”。
一般情況下,用戶不會創建特別以投票為目的的交易,因為那將耗費他們一筆交易費。每個錢包將顯示一個狀態指示器,讓用戶知道代表的表現如何。如果某代表錯過了太多的區塊,那么系統將會推薦用戶去換一個新的代表。如果任何代表被發現簽發了一個無效的區塊,那么所有標准錢包將在每個錢包進行更多交易前要求選出一個新代表。
(五)瑞波共識協議
瑞波共識協議(Ripple Consensus Protocol,RCP),使一組節點能夠基於特殊節點列表達成共識。初始特殊節點列表就像一個俱樂部,要接納一個新成員,必須由一定比例的該俱樂部會員投票通過。
RCP機制的工作原理如下:
- 驗證節點接收存儲待驗證交易。首先驗證節點接收待驗證交易,將其存儲在本地;其次本輪共識過程中新到的交易需要等待,在下次共識時再確認。
- 活躍信任節點發送提議:首先,信任節點列表是驗證池的一個子集,其信任節點來源於驗證池;其次,參與共識過程的信任節點須出於活躍狀態,驗證節點與信任節點間存在保活機制,長期不活躍節點將被從信任節點列表刪除;最后,信任節點根據自身掌握的交易雙方額度、交易歷史等信息對交易做出判斷,並加入到提議中進行發送。
- 本驗證節點檢查收到的提議是否來自信任節點列表中的合法信任節點,如果是,則存儲;如果不是,則丟棄。
- 驗證節點根據提議確定認可交易列表的步驟如下:首先,令信任節點列表中活躍的信任節點個數為M(比如5個),本輪中交易認可闊值為N(百分比,比如50%),則每一個超過M*N個信任節點認可的交易將被本驗證節點認可;其次,本驗證節點生成認可交易列表。系統為驗證節點設置一個計時器,如果計時器時間已到,本信任節點需要發送自己的認可交易列表。
- 賬本共識達成的步驟如下:首先,本驗證節點仍然在接收來自信任節點列表中信任節點的提議,並持續更新認可交易列表;其次,驗證節點認可列表的生成並不代表最終賬本的形成以及共識的達成,賬本共識只有在每筆交易都獲得至少超過一定闊值(比如80%)的信任節點列表認可才能達成。如果賬本中每筆交易都獲得至少超過一定闊值的信任節點列表認可,則共識達成,交易驗證結束,否則繼續上述過程。
- 共識過程結束后,已經形成最新的賬本,現將上輪剩余的待確認交易以及新交易納入待確認交易列表,開始新一輪共識過程。
除上述機制外,還有恆星共識協議(Stellar Consensus Protocol,SCP)、改進型使用拜占庭容錯機制(Practical Byzantine Fault Tolerance,PBFT)和Pool驗證池機制等共識機制被提出,甚至已經應用在區塊鏈系統中,不同共識機制各有其應用場景和優勢。
------《區塊鏈-從數字貨幣到信用社會》