本發(fā)明涉及一種區(qū)塊鏈技術(shù),特別是一種基于p2p金融區(qū)塊鏈機制的共識算法。
背景技術(shù):
近年來p2p金融發(fā)展迅速,但是在發(fā)展過程中也出現(xiàn)了一些問題,公司公信力不夠,客戶并不十分信任公司所帶來的項目,這也是p2p金融發(fā)展過程中的一個很大的阻礙。然而區(qū)塊鏈技術(shù)的面世,給p2p金融領(lǐng)域帶來了福音,區(qū)塊鏈技術(shù)建立的是一種去中心化的共識機制,這種機制結(jié)合了數(shù)字加密與博弈論,使得參與者無須任何外部強制性約束的情況下即形成了相互牽制的可信環(huán)境,這種可信環(huán)境去除了中心化授權(quán)與外部管制的必要性,反而恰恰是建立在互相不信任的基礎(chǔ)之上的。于是在這種去中心化、去信任化的區(qū)塊鏈架構(gòu)中,所解決的正是這個充滿虛擬與匿名的網(wǎng)絡世界的信用與治理問題,具有廣闊的應用領(lǐng)域和重要的應用價值。
在區(qū)塊鏈系統(tǒng)中,多個節(jié)點各自維護一個區(qū)塊鏈,這種分布式環(huán)境下的系統(tǒng),要保證數(shù)據(jù)在所有節(jié)點的一致性,需要引入分布式系統(tǒng)的一致性算法。在區(qū)塊鏈系統(tǒng)中,多個節(jié)點各自維護一個區(qū)塊鏈,要保證數(shù)據(jù)在所有節(jié)點的一致性,需要保證每個節(jié)點維護的區(qū)塊鏈是一樣的。隨著電子商務網(wǎng)站等分布式應用的高速發(fā)展,系統(tǒng)可能會遭受到更多的攻擊,從而導致節(jié)點中存在“叛徒節(jié)點”,要保證系統(tǒng)在這種情況下保持正常運作,且忠誠的正常節(jié)點的數(shù)據(jù)保持一致,在這樣的情況下,引入了基于拜占庭算法的建塊方式。關(guān)鍵的服務不僅需要能夠容忍良性錯誤,還需要容忍拜占庭錯誤。就共識算法而言,早在1999年miguelcastro(卡斯特羅)和barbaraliskov(利斯科夫)就提出了一種高效的方法來解決這種分布式系統(tǒng)中存在的拜占庭問題,2009年中本聰提出了工作量證明(pow)的方法來解決分布式系統(tǒng)中一致性的問題。然而,p2p金融由于其本身業(yè)務特點的原因,這些方案仍然不具備很強的公信力。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種基于p2p金融區(qū)塊鏈機制的共識算法,共識算法包括如下步驟:(1)準備階段:選取leader且當leader收到足夠多的交易之后由leader開始計算區(qū)塊;(2)計算區(qū)塊,最后將計算好的區(qū)塊廣播;(3)區(qū)塊的狀態(tài)根以及區(qū)塊頭部部分的一致性驗證;(4)區(qū)塊和交易的存儲;(5)完成上述步驟后,重復開啟下一輪的計算。
優(yōu)選的,所述步驟(1)具體操作步驟為:使用輪詢算法選取leader,從redis中讀取交易,當leader收到的交易數(shù)量大于1的時候,進入計算區(qū)塊,當leader收到的交易數(shù)量小于1的時候,返回,繼續(xù)從redis中讀取交易。
優(yōu)選的,所述步驟(2)具體操作步驟為:獲取前一個區(qū)塊的哈希值、狀態(tài)樹根,計算交易集合的默克爾樹樹根,并獲取前一個區(qū)塊狀態(tài)根,此后計算區(qū)塊頭部哈希值,最后將計算好的區(qū)塊廣播。
優(yōu)選的,所述步驟(3)具體操作步驟為:節(jié)點收到區(qū)塊之后,首先驗證前一個區(qū)塊的狀態(tài)根是否正確,如果錯誤則廣播反對票,如果正確則繼續(xù)驗證區(qū)塊頭部部分,如果頭部驗證錯誤,同樣廣播反對票,如果頭部驗證通過,那么廣播同意票給其他節(jié)點。
優(yōu)選的,所述步驟(4)具體操作為:節(jié)點接收對區(qū)塊的投票并統(tǒng)計,若收到超過1/3以上的反對票,則放棄此區(qū)塊并重新開始計算,若收到超過2/3以上的贊成票,則執(zhí)行交易并將區(qū)塊和交易存儲到數(shù)據(jù)庫。
優(yōu)選的,基于p2p金融區(qū)塊鏈機制在區(qū)塊鏈的每個節(jié)點均保留有區(qū)塊鏈系統(tǒng)所有的信息,在建立區(qū)塊鏈系統(tǒng)的時候同時建立交易鏈和用戶鏈雙鏈。
優(yōu)選的,交易鏈負責區(qū)塊鏈系統(tǒng)中產(chǎn)生的所有交易以及外部應用服務器發(fā)送過來的交易,用戶鏈負責存儲和維護用戶信息。
優(yōu)選的,僅在需要的地區(qū)部署用戶鏈,其他地域?qū)⒉粫渴鹩脩翩?,僅會部署交易鏈。
優(yōu)選的,區(qū)塊鏈在執(zhí)行交易的過程中,會實時與所述用戶鏈進行交互,獲取用戶信息并對所述用戶信息進行相應更新。
本發(fā)明的共識算法根據(jù)確定有限狀態(tài)自動機的特點,在具有相同的初始狀態(tài)、相同的交易集合前提下,保證了交易執(zhí)行結(jié)果的一致性,使用這種方式進行計算,可以使得交易的執(zhí)行和區(qū)塊的存儲與區(qū)塊計算并行執(zhí)行,系統(tǒng)不需要等待所有的交易執(zhí)行完畢才可以進行下一個區(qū)塊的計算,在完成一致性之后就可以進行下一輪計算,一定程度上減少了區(qū)塊鏈共識所需要消耗的時間,從而提高了交易的吞吐,有效的緩解了目前區(qū)塊鏈交易速度不足的問題,同時提高了系統(tǒng)的公信力。
根據(jù)下文結(jié)合附圖對本發(fā)明具體實施例的詳細描述,本領(lǐng)域技術(shù)人員將會更加明了本發(fā)明的上述以及其他目的、優(yōu)點和特征。
附圖說明
后文將參照附圖以示例性而非限制性的方式詳細描述本發(fā)明的一些具體實施例。附圖中相同的附圖標記標示了相同或類似的部件或部分。本領(lǐng)域技術(shù)人員應該理解,這些附圖未必是按比例繪制的。本發(fā)明的目標及特征考慮到如下結(jié)合附圖的描述將更加明顯,附圖中:
圖1是根據(jù)本發(fā)明實施例的基于p2p金融的區(qū)塊鏈機制示意圖;
圖2是根據(jù)本發(fā)明實施例的基于p2p金融的共識算法示意圖。
具體實施方式
在進行具體實施方式的說明之前,為了更為清楚的表達所論述的內(nèi)容,首先說明本發(fā)明所涉及的有限狀態(tài)自動機的特性這一概念。p2p金融行業(yè)的所有的交易都可以稱作是確定的有限狀態(tài)自動機(dfsm),定義交易狀態(tài)機m為五元組m=(q,σ,δ,q0,f),q={(q0,q1,q2,…,qm)},q是交易狀態(tài)機所有狀態(tài)的集合;σ是輸入事件的集合;δ是轉(zhuǎn)換函數(shù)的集合δ:q×σ→q;q0是初始狀態(tài)值q0∈q,f是終止狀態(tài)的集合
企業(yè)區(qū)塊鏈系統(tǒng)節(jié)點需要分散布置,各個組織機構(gòu)都會有區(qū)塊鏈的若干個節(jié)點,這就在一定程度上保證了區(qū)塊鏈系統(tǒng)具有去中心化的特性。各個節(jié)點均保留有區(qū)塊鏈系統(tǒng)所有的信息,包括計算代碼、賬本信息等,企業(yè)區(qū)塊鏈系統(tǒng)處于對其客戶隱私的保護的角度出發(fā),在建立區(qū)塊鏈系統(tǒng)的時候,會建立交易鏈和用戶鏈雙鏈,其中交易鏈主要負責區(qū)塊鏈系統(tǒng)中產(chǎn)生的所有交易以及外部應用服務器發(fā)送過來的交易,用戶鏈主要負責存儲和維護用戶信息。由于其對隱私功能的需求,除企業(yè)內(nèi)部以及部分地區(qū)會部署用戶鏈以外,其他地域?qū)⒉粫渴鹩脩翩?,僅會部署交易鏈。區(qū)塊鏈在執(zhí)行交易的過程中,會實時與用戶鏈進行交互,獲取用戶信息并對其進行相應更新。
如此形成了一個新型的p2p金融區(qū)塊鏈機制,為了保證公司客戶信息的隱私,同時也是對自身業(yè)務數(shù)據(jù)的保護,新型機制采用用戶鏈和交易鏈雙鏈運行的交易模式、監(jiān)管機構(gòu)參與整個業(yè)務流轉(zhuǎn)。雙鏈機制是用戶鏈和交易鏈,服務端在接收到交易之后會對交易進行判斷,判斷屬于那種交易類型,如果是一些關(guān)于用戶信息的變更,那么此交易就會分發(fā)給用戶鏈進行處理和存儲。其他交易則會發(fā)送到交易鏈中進行處理和存儲,其中一些對用戶賬戶信息的操作,在交易鏈中處理完成之后需要將最終結(jié)果交給用戶鏈進行處理,在用戶鏈中更新用戶賬戶信息,以保證賬本的完整。在新型機制下的區(qū)塊鏈系統(tǒng),節(jié)點分散的分布在各個地方,在保證數(shù)據(jù)安全的前提下,讓監(jiān)管機構(gòu)加入到區(qū)塊鏈系統(tǒng)中來,通過建立完善的權(quán)限機制,在保證監(jiān)管機構(gòu)可以隨時隨地進行監(jiān)管的同時,也讓監(jiān)管機構(gòu)加入到公司業(yè)務的流轉(zhuǎn)中來,這種方式不僅僅保證了數(shù)據(jù)隨時在被監(jiān)管,同時也減少了審計過程中的一些麻煩。
參見附圖2,一種基于p2p金融區(qū)塊鏈機制的共識算法,共識算法包括如下步驟:(1)準備階段:使用輪詢算法選取leader,從redis中讀取交易,當leader收到的交易數(shù)量大于1的時候,進入計算區(qū)塊,當leader收到的交易數(shù)量小于1的時候,返回,繼續(xù)從redis中讀取交易;(2)計算區(qū)塊:獲取前一個區(qū)塊的哈希值、狀態(tài)樹根,計算交易集合的默克爾樹樹根,并獲取前一個區(qū)塊狀態(tài)根,此后計算區(qū)塊頭部哈希值,最后將計算好的區(qū)塊廣播;(3)一致性驗證:節(jié)點收到區(qū)塊之后,首先驗證前一個區(qū)塊的狀態(tài)根是否正確,如果錯誤則廣播反對票,如果正確則繼續(xù)驗證區(qū)塊頭部部分,如果頭部驗證錯誤,同樣廣播反對票,如果頭部驗證通過,那么廣播同意票給其他節(jié)點;(4)區(qū)塊和交易的存儲:節(jié)點接收對區(qū)塊的投票并統(tǒng)計,若收到超過1/3以上的反對票,則放棄此區(qū)塊并重新開始計算,若收到超過2/3以上的贊成票,則執(zhí)行交易并將區(qū)塊和交易存儲到數(shù)據(jù)庫;(5)完成上述步驟后,重復開啟下一輪的計算。
雖然本發(fā)明已經(jīng)參考特定的說明性實施例進行了描述,但是不會受到這些實施例的限定而僅僅受到附加權(quán)利要求的限定。本領(lǐng)域技術(shù)人員應當理解可以在不偏離本發(fā)明的保護范圍和精神的情況下對本發(fā)明的實施例能夠進行改動和修改。