官术网_书友最值得收藏!

三、區塊鏈共識機制

區塊鏈要成為一個難以攻破的、公開的、不可篡改數據記錄的去中心化誠實可信系統,需要在盡可能短的時間內做到分布式數據記錄的安全、明確及不可逆,提供一個最堅實且去中心化的系統。在實踐中,該流程分為兩個方面:一是選擇一個獨特的節點來產生一個區塊;二是使分布式數據記錄不可逆。實現上述流程的技術核心就是:共識機制。共識機制是區塊鏈節點就區塊信息達成全網一致共識的機制,可以保證最新區塊被準確添加至區塊鏈、節點存儲的區塊鏈信息一致不分叉甚至可以抵御惡意攻擊。

當前主流的共識機制包括:工作量證明、權益證明、工作量證明與權益證明混合(PoS+PoW)、股份授權證明、瑞波共識協議等。

(一)工作量證明

工作量證明(Proof of Work),顧名思義,即指工作量的證明。PoW機制的基本步驟如下:①節點監聽全網數據記錄,通過基本合法性驗證的數據記錄將進行暫存;②節點消耗自身算力嘗試不同的隨機數,進行指定哈希計算,并不斷重復該過程直至找到合理的隨機數;③找到合理的隨機數后,生成區塊信息,首先輸入區塊頭信息,然后是數據記錄信息;④接單對外部廣播出新產生的區塊,其他節點驗證通過后,連接至區塊鏈中,主鏈高度加一,然后所有節點切換至新區塊后面繼續進行工作量證明和區塊生產。

PoW叫工作量證明體現在步驟②中,節點需要不斷消耗算力工作,進行哈希計算,以找到期望的隨機數。以比特幣區塊鏈為例,通過PoW機制維護區塊鏈的整體運行及其安全性。驗證節點通過隨機的散列運算,爭奪比特幣區塊鏈的記賬權,防止欺詐交易,避免“雙重支付”,這一過程需要消耗電力、算力來完成。因此,驗證節點也成為“礦工”,隨機數計算查找過程稱為“挖礦”。每一個比特幣區塊鏈中的區塊都包含著一個由無意義數據構成的短字符串(稱為隨機數),找到一個合適的隨機數唯一已知的方法是不停地隨機試探直到搜索到一個有效的數。比特幣的PoW中,平均每10分鐘有一個節點找到一個區塊。如果兩個節點在同一個時間找到區塊,那么網絡將根據后續節點和區塊生成情況來確定哪個區塊構建最終區塊鏈。一般情況下,需要6個區塊的生成時間進行確認,因為一般交易在6個區塊(約1個小時)后被認為是安全確認且不可逆的。其工作量主要體現在:一個符合要求的區塊隨機數由N個前導零構成,零的個數取決于網絡的難度值。要得到合理的隨機數需要經過大量嘗試計算,計算時間取決于機器的哈希運算速度。當某個節點提供出一個合理的隨機數值,說明該節點確實經過了大量的嘗試計算。當然,這并不能得出計算次數的絕對值,因為尋找合理隨機數值是一個概率事件。工作量證明機制看似很神秘,其實在社會中的應用非常廣泛。例如,畢業證、學位證、律師證等證書就是工作證明,擁有證書即表明在過去付出了努力。挖礦為整個系統的運轉提供原動力,挖礦有三個重要功能:一是發行新的貨幣;二是維系系統的支付功能;三是通過算力保障系統安全。首先,挖礦消耗資源將黃金注入流通經濟,比特幣通過“挖礦”完成相同的事情,只不過消耗的是CPU時間與電力。其次,挖礦用于產量調節,區塊的產量為大約每兩周2016個,即每10分鐘一塊。第三,通過算力保障系統安全。算力攻擊的概率難度呈指數上升(泊松分布),每個區塊都必須指向前一個區塊,否則無法驗證通過。追根溯源便是高度為零的創世區塊。PoW機制存在兩方面明顯的缺陷。一是算力的消耗與浪費。在PoW中,盡管區塊鏈節點是用來幫區塊鏈進行分布式數據記錄的,但是它們實際所做的大部分工作是尋找正確的隨機數而與數據記錄無關。用來尋找隨機數的能量和資源將永遠地消失,這顯然是一種浪費。二是算力集中化凸顯。PoW機制自然地導致了算力集中問題。由于作為一個普通的個體或者幾十、幾百臺規模的礦機目前都很難挖到區塊了,因此大家必須聯合起來挖礦,就誕生了算力集中的地方——礦池。其中最著名的是比特幣Ghash礦池,它因為數次接近甚至達到了50%比特幣的算力,從而引起了比特幣社區的廣泛擔憂。

(二)權益證明+工作量證明

2012年8月,一個化名Sunny King的極客推出了Peercoin(PPC),采用工作量證明機制PoW發行新幣,采用權益證明機制PoS維護網絡安全,即PoW+PoS機制。該機制中,區塊被分成兩種形式——PoW區塊及PoS區塊。在這種新型區塊鏈體系里,區塊持有人可以消耗他的幣天獲得利息,同時獲得為網絡產生一個區塊和用PoS造幣的優先權。PoS的第一次輸入被稱為權益核心,需要符合某一哈希目標協議。因此,PoS區塊的產生具有隨機性,其過程與PoW相似。但有一個重要的區別在于,PoS隨機散列運算是在一個有限制的空間里完成的,而不是PoW那樣在無限制的空間里尋找,因此無須大量的能源消耗。權益核心所要符合的隨機散列目標是以在核心中消耗的幣天的目標值(幣×天),這與PoW是不同的,PoW的每個節點都具有相同的目標值。因此,核心消耗的幣天越多,就越容易符合目標協議。PoS中還有一種新型的造幣過程。PoS區塊將根據所消耗的幣天產生利息幣,設計時設定了每幣一年將產生1分利息,以避免將來的通脹。在造幣初期時保留了PoW,使最初的造幣更加方便。

在區塊鏈中誰是主鏈的問題是解決分叉的關鍵。PoS判斷主鏈的標準已經轉化為對消耗幣天的判斷。每個區塊的交易都會將其消耗的幣天提交給該區塊,以提高該區塊的得分。獲得最高消耗幣天的區塊將被選中為主鏈。此設計減少了部分對于51%攻擊的憂慮,因為在PoS區塊中,要進行51%攻擊,首先,要控制數量眾多的幣天,成本可能要高于獲得51%的算力,這樣就提高了攻擊的成本;其次,攻擊者在攻擊網絡時,其幣天也會消耗,這將使攻擊者阻止交易進入主鏈的行為變得更加困難。

為抵御分布式拒絕服務攻擊,在PoW+PoS機制中,每個區塊都必須由其擁有者簽名,以避免受到復制并被攻擊者使用。為了抵御攻擊者復制產生多個區塊進行分布式拒絕服務攻擊,每個節點都會收集其接觸到的(核心,時間戳)配對信息。假如一個已接收到的區塊包含與其他之前收到的區塊中的配對信息(核心,時間戳)是重復的,會忽略此區塊直到后者被孤立出去。

在PoW+POS機制下,只要持有幣的人,不論持有的數量多少,都可以挖到數據塊,而不用采用任何的礦池導致算力集中。同時,由于多采用幣天生成區塊,而不是算力,降低了資源消耗,解決了單純PoW機制在維護網絡安全方面先天不足的問題。

(三)權益證明

除了結合PoW使用外,能否單獨利用PoS機制進行區塊鏈系統設計運行呢?答案是肯定的。簡單來說,PoS就是一個根據持有貨幣的量和時間,進行利息發放和區塊產生的機制。在權益證明PoS模式下,有一個名詞叫幣天。例如,每個幣每天產生1幣天,比如持有100個幣,總共持有了30天,那么此時幣天就為3000。這個時候,如果發現了一個新PoS區塊,幣天就會被清空為0。每被清空365幣天,將會從區塊中獲得0.05個幣的利息(可理解為年利率5%)。

PoS的典型應用就是未來幣。同其他加密貨幣一樣,未來幣體系的總賬是建立和儲存在一系列區塊里的,也就是區塊鏈中。每個區塊鏈的備份都存放在未來幣網絡的每個節點里,而且在每個節點上沒有加密的每個賬戶都能夠生成區塊,只要至少一個新入賬戶的交易已經確認了1440次。任何賬戶只要達到了這個標準就會被視為“激活賬戶”。在未來幣里,每個區塊都包含著255個交易,每個交易都是由包含識別參數的192字節的數據頭開始的。一個區塊里的每個交易量都是由128個字節所代表著。總共加在一起就意味著最大的區塊大小有32K字節。每個區塊都有一個“生成簽名”的參數。激活賬戶用自己的私鑰在原先的區塊上簽署“生成簽名”。這就產生了一個64字節的簽名,之后通過SHA256散列該簽名。哈希產生的前八個字節給出了一個數字,作為一個“hit”。“hit”與目前的目標值相比較,如果計算出的“hit”值要比“目標值”低,那么就可以生成下一個區塊了。對于每個活動賬戶來講,“目標值”都是與它自身所確認的余額成比例的。一個持有1000個幣的賬戶得到的目標值是持有20個幣賬戶所得到目標值的50倍。因此,擁有1000個幣的持有者產生的區塊數是持有20個幣的人產生的50倍。同時,“目標值”并不是固定的,隨著先前區塊的時間戳的流逝時刻都在增長。如果在最初的一秒鐘內沒有哪個賬戶的“hit”值是低于“目標值”的,則下一秒鐘“目標值”就會翻倍。“目標值”會連續地翻倍,直到一個活動賬戶的“hit”值有一個較低的數值。還有一個“基本目標”值,它以60秒的間隔設定為目標值。正是這個原因,一個區塊平均產生的時間會在60秒。即使在網絡上只有很少的激活賬戶,它們其中的一個最終會產生一個區塊因為“目標”值會變得相當大。通過將你賬戶的“hit”值與目前的“目標”值相比,你就可以估算出你的“hit”值還有多久能成功。

當一個激活賬戶贏得產生區塊的權利時,就能將任何可獲得的且未確認的交易放入區塊中,并用所有需要的參數來填充該區塊。然后,這個區塊就會被傳播到網絡中作為一個區塊鏈的備選。每一個區塊中的負載值、“hit”、產生的賬戶以及簽名都能被網絡上接收到它的節點所確認。每個區塊參考之前的區塊,區塊形成的區塊鏈可以用來追溯和查詢網絡中素有的交易歷史,所有這些都會追溯到創世源區。上述完整地展示了利用幣天進行區塊產生和驗證共識的過程,體現了PoS的核心思想。

(四)股份授權證明

PoS機制使用一個確定性算法以隨機選擇一個股東來產生下一個區塊,該算法中,賬戶余額決定了節點被選中的可能性。然而,該系統并未使區塊鏈變得越來越安全而不可逆,因為最終區塊鏈的區塊產生權掌握在賬戶余額最多的少數節點手中。同時,PoS面臨的挑戰是如何通過及時而高效的方法達成共識。為達到這個目標,每個持幣節點可以將其投票權授予一名代表。獲票數最多的前100位代表按既定時間表輪流產生區塊。每名代表被分配到一個時間段生產區塊。所有的代表將收到等同于一個平均水平的區塊所含交易費的1%作為報酬。如果一個平均水平的區塊含有100股作為交易費,一名代表將獲得1股作為報酬,即可大大提高共識效率。這就是DPoS的核心思想。

網絡延遲有可能使某些代表沒能及時廣播他們的區塊,而這將導致區塊鏈分叉。然而,這發生的概率較小,因為制造區塊的代表可以與制造前后區塊的代表建立直接連接。在DPoS中,第一個步驟是成為一名代表,必須在網絡上注冊公鑰,然后分配到一個32位的特有標識符。然后該標識符會被每筆交易數據的“頭部”引用。第二個步驟是授權選票。每個錢包有一個參數設置窗口,在該窗口里用戶可以選擇一個或更多的代表,并將其分級。一經設定,用戶所做的每筆交易將把選票從“輸入代表”轉移至“輸出代表”。一般情況下,用戶不會創建特別以投票為目的的交易,因為那將耗費他們一筆交易費。但在緊急情況下,某些用戶可能覺得通過支付費用這一更積極的方式來改變他們的投票是值得的。每個錢包將顯示一個狀態指示器,讓用戶知道代表的表現如何。如果某代表錯過了太多的區塊,那么系統將會推薦用戶去換一個新的代表。如果任何代表被發現簽發了一個無效的區塊,那么所有標準錢包將在每個錢包進行更多交易前要求選出一個新代表。與PoW系統及其他PoS系統一樣,最佳區塊鏈是最長的有效區塊鏈。在任何時候,一名代表錯過簽發一個區塊的機會,該區塊鏈將比潛在競爭對手短。只要交易被寫入區塊后的100個區塊中的51%被生產出來了,那么你就可以安全地認為在主區塊鏈上。也許,在防止區塊鏈分叉所導致的損失方面,最重要的事是在事發后第一時間得知消息。如果10區塊中有超過5個錯過生產,那么這意味著你很可能在一條支鏈上,因此應該停止所有交易,直到分叉得到解決。以一種及時的方式(少于5分鐘)簡單地發現并警示用戶網絡分叉,是可以最小化潛在損失的非常重要的能力。

(五)瑞波共識協議

瑞波共識協議(Ripple Consensus Protocol,RCP),使一組節點能夠基于特殊節點列表達成共識。初始特殊節點列表就像一個俱樂部,要接納一個新成員,必須由一定比例的該俱樂部會員投票通過。RCP機制的工作原理如下。

①驗證節點接收存儲待驗證交易。首先,驗證節點接收待驗證交易,將其存儲在本地;其次,本輪共識過程中新到的交易需要等待,在下次共識時再確認。

②活躍信任節點發送提議:首先,信任節點列表是驗證池的一個子集,其信任節點來源于驗證池;其次,參與共識過程的信任節點須處于活躍狀態,驗證節點與信任節點間存在保活機制,長期不活躍節點將被從信任節點列表刪除;最后,信任節點根據自身掌握的交易雙方額度、交易歷史等信息對交易做出判斷,并加入到提議中進行發送。

③本驗證節點檢查收到的提議是否來自信任節點列表中的合法信任節點,如果是,則存儲;如果不是,則丟棄。

④驗證節點根據提議確定認可交易列表的步驟如下:首先,令信任節點列表中活躍的信任節點個數為M(比如5個),本輪中交易認可閾值為N(百分比,比如50%),則每一個超過M×N個信任節點認可的交易將被本驗證節點認可;其次,本驗證節點生成認可交易列表。系統為驗證節點設置一個計數器,如果計數器時間已到,本信任節點需要發送自己的認可交易列表。

⑤賬本共識達成的步驟如下:首先,本驗證節點仍然在接收來自信任節點列表中信任節點的提議,并持續更新認可交易列表;其次,驗證節點認可列表的生成并不代表最終賬本的形成以及共識的達成,賬本共識只有在每筆交易都獲得至少超過一定閾值(比如80%)的信任節點列表認可才能達成。如果賬本中每筆交易都獲得至少超過一定閾值(比如80%)的信任節點列表認可,則共識達成,交易驗證結束,否則繼續上述過程。

⑥共識過程結束后,已經形成最新的賬本,現將上輪剩余的待確認交易以及新交易納入待確認交易列表,開始新一輪共識過程。

除上述機制外,還有恒星共識協議(Stellar Consensus Protocol,SCP)、改進型實用拜占庭容錯機制(Practical Byzantine Fault Tolerance,PBFT)和Pool驗證池機制等共識機制被提出,甚至已經應用在區塊鏈系統中,不同共識機制各有其應用場景和優勢。

主站蜘蛛池模板: 芷江| 嫩江县| 广平县| 呼图壁县| 广灵县| 康保县| 固原市| 清苑县| 读书| 棋牌| 西乌| 保山市| 昌吉市| 兴隆县| 杭锦旗| 玛曲县| 长丰县| 天全县| 九龙县| 来凤县| 周宁县| 富平县| 宣汉县| 滦平县| 云南省| 扶沟县| 靖远县| 璧山县| 江城| 夏邑县| 房产| 万全县| 沙湾县| 庄浪县| 龙里县| 琼中| 襄垣县| 丘北县| 山阳县| 防城港市| 化州市|