本發(fā)明涉及互聯(lián)網(wǎng)數(shù)據(jù)傳輸領域,特別地涉及區(qū)塊鏈驗證技術(shù)中的數(shù)據(jù)對比及共識。
背景技術(shù):
隨著網(wǎng)絡在人們?nèi)粘I钪械牡匚辉絹碓街匾?,網(wǎng)絡上重要信息的安全和防偽需求也非常迫切。區(qū)塊鏈技術(shù)作為隨著比特幣一起發(fā)展的一種驗證防偽技術(shù)已得到廣泛應用,但目前還存在一些問題如下:
1、在新區(qū)塊交易數(shù)據(jù)對比時都需要傳送全部哈希值,數(shù)據(jù)量很大;
2、交易數(shù)據(jù)傳輸重復的概率大,自己缺少的數(shù)據(jù)不能確定地去找下載的來源,效率不高,數(shù)據(jù)不容易補全,有部分交易有較長的延時;
3、或選一臺服務器打包來廣播新區(qū)塊,傳播速度慢,反復傳輸?shù)臄?shù)據(jù)量大,或者要同時比較非常多的服務器來達成共識,達成共識的時間不夠快。
4、數(shù)據(jù)存儲還不夠靈活。
技術(shù)實現(xiàn)要素:
為了克服上述現(xiàn)有技術(shù)的不足,本發(fā)明提供了一種區(qū)塊鏈的數(shù)據(jù)對比及共識方法,包括: 對于每筆交易內(nèi)容的哈希值計算,通過變換隨機數(shù),使得在一段時間內(nèi)預設哈希值中的N位數(shù)不重復,稱為不重復編號,N為正整數(shù);認證服務器比較不同哈希值的所述不重復編號,判斷交易是否一致。
進一步地,所述哈希值用16進制表示;
進一步地,所述不重復的N位數(shù)可以是前N位、后N位、或任意N位的組合。
進一步地,定義一臺或多臺服務器作為前置節(jié)點,由1臺前置節(jié)點計算所有的不重復編號,或者設定不重復編號的段號,由多臺前置節(jié)點分別計算不同段號的不重復編號。
進一步地,通過前置服務器按照獲取順序給每筆交易附加上整數(shù)編號,并附上新區(qū)塊的高度,方便判斷交易數(shù)據(jù)被認證服務器接收的時間先后。
進一步地,利用布隆過濾器檢查數(shù)據(jù)的遺漏情況,通過變換隨機數(shù)一段時間內(nèi)生成的哈希值使其在布隆過濾器中不重復。
進一步地,利用布隆過濾器檢查數(shù)據(jù)的遺漏情況的方法具體包括:
步驟S1:根據(jù)需要傳送的數(shù)據(jù)量建立布隆過濾器,設計映射函數(shù)確保在布隆過濾器上添加所有哈希值后,仍留有一部分空;
步驟S2:通過變換隨機數(shù)生成的哈希值使其在第一服務器上的布隆過濾器中不會重復,每次在布隆過濾器上添加哈希值時,在二進制位數(shù)組上至少有一個位置的1是和這個添加的哈希值唯一對應的。
步驟S3:第二服務器把收到的全部哈希值都添加到布隆過濾器,比較第一服務器第二服務器上的布隆過濾器是否一致,若不一致,就把在第二服務器中添加完數(shù)據(jù)的布隆過濾器發(fā)送到第一服務器。
步驟S4:第一服務器收到第二服務器發(fā)來的布隆過濾器,把第一服務器上的所有哈希值繼續(xù)添加到發(fā)來的過濾器上,把所有能填上新的空位的哈希值記錄下來,發(fā)送到第二服務器。
步驟S5:重復步驟S3和步驟S4,直到第二服務器上的布隆過濾器和第一服務器上的布隆過濾器一致為止。
比較從前置節(jié)點服務器A傳輸?shù)接泿し掌鰾的數(shù)據(jù)差異的方法,包括以下步驟:
步驟S1:使用上述布隆過濾器檢查數(shù)據(jù)的遺漏情況的方法,補全遺漏的交易數(shù)據(jù);
步驟S2:根據(jù)前期實際交易量設計類梅克爾樹的層級,設計類梅克爾數(shù)節(jié)點的容量是2n+1-2,最下層理論上最多可放置交易筆數(shù)是2n;
進一步地,按最近的交易筆數(shù),考慮歷史交易筆數(shù),動態(tài)調(diào)整每個新的區(qū)塊的不重復編號的設計容量。
容量調(diào)整方案為:若最新一個區(qū)塊的實際交易筆數(shù)超過2n的80%,下一區(qū)塊的類梅克爾樹最下層的設計容量即可增加1倍,為2n+1,若最新一個區(qū)塊的實際交易筆數(shù)小于2n的30%,下一區(qū)塊的類梅克爾樹最下層設計容量即可縮小1倍,為2n-1。
新區(qū)塊的設計容量是2n,即共有2n的編號可選,前置節(jié)點服務器A建立一個2n位數(shù)的第一字符串,每位都為0,在產(chǎn)生不重復編號后,把編號和字符串位置對應起來,將相應的位置的0字符串用1代替,2n位字符串位置編號從左到右為0至2n -1;
前置節(jié)點服務器B也建立一個2n位的第二字符串,收到傳過來的交易數(shù)據(jù)后,把相應的不重復編號與字符串對應的位置的0用1替換;
服務器B把第二字符串發(fā)送到前置節(jié)點與第一字符串進行對比,找出不同的字符的位置,該位置編號就是不重復編號,將這些編號的相應數(shù)據(jù)發(fā)送到服務器B即補全了所缺少的數(shù)據(jù)。
步驟S3:類梅克爾樹數(shù)據(jù)存儲用一個數(shù)組表示,0至2n+1-2節(jié)點存儲下層2個哈希值的串聯(lián)后再哈希的哈希值,2n-1到2n+1-2節(jié)點存儲按順序的不重復編號,在類梅克爾數(shù)存儲數(shù)組下標和不重復編號的差是2n -1,沒有對應的信息的葉子節(jié)點默認為哈希空值;
步驟S4:自下而上逐層計算合并的哈希值,直到算出根節(jié)點的哈希值;
步驟S5:向系統(tǒng)選出的共識記賬服務器傳送類梅克爾樹的值;
步驟S6:找到最下層有差異的哈希值,缺失數(shù)據(jù)的共識記帳服務器向有相關數(shù)據(jù)的前置節(jié)點或其他服務器請求下載數(shù)據(jù),若數(shù)據(jù)與其他服務器不一致,則將數(shù)據(jù)發(fā)送到缺失的服務器進行校驗,重新計算出相關的哈希值后再通知共識記賬服務器。
步驟S7:重復步驟S4、S5、S6,排除與周圍的共識記帳服務器相同率少于20%的交易,重復步驟S4。
步驟S8:選舉若干臺共識記賬服務器,將這幾臺服務器所有交易的類默克爾樹根進行對比,類默克爾樹根哈希值一樣的最多的服務器生成的區(qū)塊作為最新的區(qū)塊,若默克爾樹根哈希值都不一樣,就隨機選一臺,其他共識記賬服務器對比類默克爾樹根哈希值,若一樣就作為新的區(qū)塊,若不一樣,就比較類默克爾樹,下載不同的交易數(shù)據(jù),形成一樣的新區(qū)塊,或直接下載新的區(qū)塊,最后去掉類默克爾樹最層哈希值為空值的節(jié)點,重新生成容量更小的區(qū)塊。
不但本區(qū)塊鏈的交易可以形成共識,跨區(qū)塊鏈也可以形成共識,跨鏈數(shù)據(jù)交換的步驟如下:
步驟S1:相應的區(qū)塊鏈監(jiān)管部門互相授權(quán)兩條或多條鏈可以跨區(qū)塊鏈交易;
步驟S2:用戶在A或B區(qū)塊鏈上都開立合法公鑰地址帳戶;
步驟S3:用戶將交易內(nèi)容用A、B區(qū)塊鏈上對應的私鑰分別簽名;
步驟S4:用戶將簽名和相應的公鑰發(fā)送到自己公鑰地址帳戶所在的區(qū)塊鏈,同時發(fā)送到交易對手的區(qū)塊鏈,或?qū)⒐餐暮灻l(fā)到兩個區(qū)塊鏈。
步驟S5:A區(qū)塊鏈記帳服務器驗證交易A或B的簽名后達成共識后寫入A區(qū)塊鏈最新區(qū)塊,執(zhí)行交易并在A區(qū)塊鏈上紀錄;
步驟S6:B區(qū)塊鏈上的多臺記賬服務器訪問A區(qū)塊鏈上的歷史紀錄,若發(fā)現(xiàn)有對應的跨鏈交易信息,則B區(qū)塊鏈上相當多臺記賬服務器達成共識后,在B區(qū)塊鏈上執(zhí)行交易。
與現(xiàn)有技術(shù)相比,本發(fā)明的區(qū)塊鏈的數(shù)據(jù)對比及共識方法使數(shù)據(jù)對比需要傳送的信息大幅度減少,非常方便地找出遺漏的數(shù)據(jù),并能定位請求下載交易數(shù)據(jù),靈活的共識方案,可大幅度地縮短各服務器達成共識的時間,跨鏈交易設計使區(qū)塊鏈上的數(shù)字貨幣和數(shù)字資產(chǎn)可以真正的跨鏈轉(zhuǎn)移,就像現(xiàn)金的轉(zhuǎn)移一樣,不需要轉(zhuǎn)移中介,有利于區(qū)塊鏈在不用領域和地域發(fā)揮更大的作用,交易數(shù)據(jù)可按不重復編號分段校驗、打包、存儲,可使數(shù)據(jù)存儲采用更多的方案來實現(xiàn),區(qū)塊鏈的發(fā)展不會受制于服務器的性能和容量。
附圖說明
圖1是說明本發(fā)明的方法中如何利用不重復編號查補遺漏數(shù)據(jù);
圖2是說明本發(fā)明的方法中如何產(chǎn)生不重復編號;
圖3是說明本發(fā)明的方法中利用布隆過濾器檢查數(shù)據(jù)的遺漏情況的方法;
圖4是說明本發(fā)明的方法中跨鏈交易的實現(xiàn)方法;
圖5是說明本發(fā)明的方法中如何設計類梅克爾樹;
圖6是說明本發(fā)明的方法中如何通過類梅克爾樹來同步異常數(shù)據(jù);
圖7是說明本發(fā)明的方法中如何選舉共識服務器來達成共識,形成新的區(qū)塊。
具體實施方式
本發(fā)明提供了一種區(qū)塊鏈的數(shù)據(jù)對比及共識方法,包括:對于每筆交易內(nèi)容的哈希值計算,通過變換隨機數(shù),使得在一段時間內(nèi)預設哈希值中的N位數(shù)不重復,稱為不重復編號,N為正整數(shù);記賬服務器間比較不同哈希值的所述不重復編號,判斷交易是否一致。所述哈希值用16進制表示,另外也可以通過前置服務器來獲取按順序給每筆交易附加上整數(shù)編號,并附上新區(qū)塊的高度,方便判斷交易數(shù)據(jù)被服務器接收的時間先后,對于前面區(qū)塊的遺漏的交易數(shù)據(jù)可以單獨建組對比。所述不重復的N位數(shù)可以是前N位、后N位、或任意N位的組合。區(qū)塊鏈系統(tǒng)中可以定義一臺或多臺服務器作為交易入口,稱為前置節(jié)點,可以由1臺前置節(jié)點選取所有的不重復編號,或者由多臺前置節(jié)點分別選取不同段號的不重復編號。
如果有公鑰地址的帳戶較多地發(fā)送不符合要求的交易哈希值,這里約定發(fā)送交易需要一筆超過最小額度的金額,若系統(tǒng)認為是違反交易或安全規(guī)則,可以將這金額消失,若帳戶的最小余額不夠則將不能發(fā)起交易,對于較多地發(fā)送不符合要求的交易哈希值的服務器,通過一定的監(jiān)控程序,可以自動或人工手動停止其服務,也可由區(qū)塊鏈上CA證書中心來管理,檢測服務器監(jiān)測到違反系統(tǒng)運行規(guī)則的公鑰地址后(交易賬戶公鑰地址或服務器公鑰地址),通知CA證書中心凍結(jié)其一些功能,也可寫入黑名單。
所有記帳服務期在區(qū)塊鏈準備打包前,比特股是每次只選一臺服務器做記帳服務期,然后廣播給其他服務器,瑞波幣是所有記帳服務器都相互比較,把周圍服務器的交易哈希值與自己服務器上的交易哈希值對比,若80%的交易哈希值一致,則打包,而這里則可以根據(jù)需要選舉若干臺服務器(1臺至全部服務器的組合)作為共識服務器,每臺服務器定時統(tǒng)計和其他服務器的通訊性能,并相互交換信息,每臺服務器即可根據(jù)各服務器通訊性能信息,設計不同的多臺服務器組合的共識方案,要排除通訊性能較差的服務器,兼顧一下每臺服務器和其他非組合中的其他服務器的通訊性能,目的是使組合的共識服務器打包速度快,傳播給其他最新區(qū)塊的速度快。不同記賬服務器(或稱共識服務器)若發(fā)送交易哈希值進行對比,需要傳送大量的數(shù)據(jù),比較也耗時間,只要發(fā)送不重復編號對比即可,如可以排序后按順序?qū)Ρ龋部梢苑诺阶值鋗ap中對比。
實施例1,參照圖1:
本實施例說明如何利用不重復編號查補遺漏數(shù)據(jù)。
利用不重復編號對比數(shù)據(jù)缺失,這里預估新區(qū)塊交易筆數(shù)在6筆,設置總編號量為2的4次方,以交易哈希值的前兩位表示。
這里共有16個編號(0至15)可以選,建立一個16位的全部是“0”的字符串StringA16,在前置節(jié)點A服務器選出不重復編號后,把編號和字符串位置一一對應起來,將相應的位置的0字符串用1替換,16位字符串位置編號從左到右為0至15。這里字符串0、4、7、a、d、f位的字符為“1”。
服務器B也和A服務器一樣建立一個全是0的16位字符串StringB16,服務器收到A服務器傳過來的交易數(shù)據(jù)后,把相應的不重復編號與字符串對應的位置的0用1替換,這里字符串0、7、a、f位的字符為“1”。
服務器B把StringB16發(fā)送到A服務器與StringA16進行對比,找出不同的字符的位置4、d,這位置編號就是交易的不重復編號4、d,將這些編號的相應數(shù)據(jù)發(fā)送到B服務器即補全了服務器B所缺的數(shù)據(jù)
可以設定不重復編號的段號,分配在不同的前置節(jié)點上,比如交易哈希值開始的第一位為3(或用16進制表示段號:0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f)的所有不重復編號都要到這個前置節(jié)點(或幾臺前置節(jié)點集群)上登記,并把相關的交易發(fā)送給其他記帳服務器,其他記帳服務器若缺少3開始的不重復編號的交易,在這個前置節(jié)點一定能下載到3開始的不重復編號的交易,通過不重復編號的分段發(fā)放,既保證不重復編號,也可以分流集中取號的壓力。
不同段號的不重復編號的發(fā)送和下載可以是分服務器管理的,在新的區(qū)塊形成過程中,同一段號的交易統(tǒng)一共識和打包也是可行的,并可以建立獨立的分段號的類梅克爾樹,計算分段號的類梅克爾樹根哈希值,最后在把分段號的類梅克爾樹根作為葉子節(jié)點建立新的類梅克爾樹,并生成類梅克爾樹根哈希值,作為整個新區(qū)塊所有交易的哈希值,不同段號的交易會常會出現(xiàn)同一支出地址的情況,記帳服務器要檢查累計支付金額不應超過該賬戶余額,或者設專門的服務器檢查同一地址支出的情況,并通知那些打包的服務器,交易哈希值可分段打包,可以在一個記帳服務器上打包和存儲一個分段或多個分段,共識打包對比和硬盤存儲也可以用不同的服務器來完成。
實施例2,參照附圖2:
本實施例說明如何產(chǎn)生不重復編號。
假設分0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f(16進制)號前置云節(jié)點給用戶取號。
2號節(jié)點除了第一位必須是2以外,還規(guī)定第二位和第三位不能重復,即16*16=256,即規(guī)定每個區(qū)塊的時候這個節(jié)點只能發(fā)最多256個不同編號的交易號。
用戶可以規(guī)定發(fā)出去的幾筆交易都是錢包的第4筆交易,系統(tǒng)約定每次只能是一筆交易生效,不用擔心多付問題。
如用戶挑選2號節(jié)點發(fā)送交易,就生成一批交易的哈希值,把第一位是2的幾筆交易發(fā)到2號節(jié)點,2027—,2245—,2246—,2231—,經(jīng)2號節(jié)點判斷,2027、2245、2231已經(jīng)被其他用戶挑選,這里2246是空缺的,前置云節(jié)點就把2246—這筆交易發(fā)送給記帳服務器了,其他交易刪除。
附加區(qū)塊高度的使記帳服務器可以判斷交易數(shù)據(jù)是本區(qū)塊期間發(fā)出的還是前面區(qū)塊發(fā)出(但還沒有寫入?yún)^(qū)塊鏈的交易)。
比如現(xiàn)在新的區(qū)塊是9891,在前置節(jié)點用戶的交易數(shù)據(jù)獲得一個附加的區(qū)塊高度,據(jù)此可以放到本區(qū)塊的本節(jié)點的布隆過濾器或類梅克爾樹來對比,但小于區(qū)塊9891標記如區(qū)塊9890、9889的交易數(shù)據(jù)(但還沒有寫入?yún)^(qū)塊鏈的交易),需要單獨放到一組合中與其他記帳服務器去對比,這樣可以確保最新區(qū)塊交易數(shù)據(jù)在對比過程中不會有編號碰撞的情況。
實施例3,參照圖3:
本實施例說明利用布隆過濾器檢查數(shù)據(jù)的遺漏情況,可以通過變換隨機數(shù)一段時間內(nèi)生成的哈希值使其在布隆過濾器中不重復,可以使數(shù)據(jù)從A服務器傳輸?shù)紹服務器后前后比較的誤判率降為0(假設數(shù)據(jù)僅會遺漏,不會有新的數(shù)據(jù)出現(xiàn))。
步驟S1:這里要從A服務器要傳送共6個哈希值到B服務器,設布隆過濾組位數(shù)為16位。
步驟S2:通過變換隨機數(shù)生成的哈希值使其在A服務器上的布隆過濾器中不會重復,每次在布隆過濾器上添加哈希值時,在二進制位數(shù)組上至少有一個位置的1是和這個添加的哈希值唯一對應的,h1、h2、h3、h4、h5、h6共6個哈希值對應不同的位,都是唯一映射的。
步驟S3:B服務器把收到的全部哈希值都添加到布隆過濾器(空的和A服務器上一樣),比較A和B兩個填上哈希值后的布隆過濾器是否一致,比較結(jié)果B上缺少2和d位,把缺的編號發(fā)送給A服務器請求下載。
步驟S4:重復步驟S3,直到B服務器上的布隆過濾器和A服務器一致為止。
實施例4,參照圖4:
本實施例說明跨鏈交易是如何實現(xiàn)的,本區(qū)塊鏈的交易可以形成共識,跨區(qū)塊鏈也可以形成共識,通過區(qū)塊鏈的投票權(quán)系統(tǒng)或區(qū)塊鏈最高權(quán)限的CA管理中心可以授權(quán)跨區(qū)塊鏈傳遞數(shù)字貨幣或數(shù)字資產(chǎn),甚至可以在兩條或多條區(qū)塊鏈之間交易,這有利于區(qū)塊鏈的行業(yè)分工或地域分工,如產(chǎn)權(quán)登記、信息存證、電子商務、政務系統(tǒng)、物流、物聯(lián)網(wǎng)、供應鏈、交易所、銀行清算系統(tǒng)、行業(yè)、企業(yè)(采購、銷售、報銷)、央行、交通運輸、公用事業(yè)支付、醫(yī)療系統(tǒng)(方便公費醫(yī)療管理)、零錢包(可以將頻繁的小額交易獨立開來)等,跨鏈交易的步驟如下:
步驟S1:相應的區(qū)塊鏈監(jiān)管部門互相授權(quán)兩條(如A和B)或多條鏈可以跨區(qū)塊鏈交易,即允許一條區(qū)塊鏈上的數(shù)字貨幣或數(shù)字資產(chǎn)可以轉(zhuǎn)移到另一條區(qū)塊鏈上。
步驟S2:用戶在A或B區(qū)塊鏈上都開立合法公鑰地址帳戶(如通過區(qū)塊鏈上CA認證中心認證通過),為安全期間,最好讓CA中心將需要跨鏈交易的本人在不同鏈上的公鑰地址都進行關聯(lián)簽名認證,證明兩個不同鏈上的公鑰地址是同一人擁有,并用CA中心所擁有的權(quán)限將相關CA證書分別寫入A和B區(qū)塊鏈。CA中心可以給用戶一個隨機數(shù)簽名,只要能用用戶公鑰解開,就說明用戶是該公鑰的擁有者,同時可以通過聲音、視頻或身份證等信息確認用戶的真實身份。
步驟S3:交易內(nèi)容為,用戶要將A區(qū)塊鏈上的幣(如100個)轉(zhuǎn)移到B區(qū)塊鏈上,用戶將交易內(nèi)容用A、B區(qū)塊鏈上對應的私鑰分別簽名或依次簽名。
步驟S4:用戶將簽名和相應的公鑰發(fā)送到自己公鑰地址帳戶所在的區(qū)塊鏈,也可以同時發(fā)送到交易對手的區(qū)塊鏈,或?qū)⒐餐暮灻l(fā)到兩個區(qū)塊鏈。
步驟S5:A區(qū)塊鏈記帳服務器驗證交易A或B的簽名后達成共識后寫入A區(qū)塊鏈最新區(qū)塊,將用戶A公鑰地址上的幣(如100個)扣除,在A區(qū)塊鏈上紀錄“支付給B區(qū)塊鏈公鑰地址”,這里僅是記錄,標記為不能再花費的幣。
步驟S6:B區(qū)塊鏈上的相當多臺記賬服務器訪問A區(qū)塊鏈上的歷史紀錄,若發(fā)現(xiàn)確實有對應的跨鏈交易信息,已標記為不能再花費的幣(如100個),B區(qū)塊鏈上相當多臺記賬服務器達成共識后,同意在B區(qū)塊鏈用戶公鑰地址上增加幣(如100個)。
步驟S7:用戶將A區(qū)塊鏈上的幣轉(zhuǎn)移到B區(qū)塊鏈上后,就可以直接向在B區(qū)塊鏈上的商家(如公交公司)或其他個人支付幣。
步驟S8:商家(如公交公司)或其他個人也可以重復S1至S7步驟,將幣從B區(qū)塊鏈跨鏈支付到A區(qū)塊鏈。
實施例5,參照圖5、6:
本實施例說明如何設計類梅克爾樹,并如何同步異常數(shù)據(jù)。
類梅克爾樹數(shù)據(jù)存儲用一個數(shù)組表示,0至14存儲下層2個哈希值的串聯(lián)后再哈希的哈希值,15開始到30存儲按順序的交易不重復編號,在類梅克爾數(shù)存儲數(shù)組下標和不重復編號他們的差是15,沒有對應的信息的葉子節(jié)點默認為哈??罩?。
A服務器的類梅克爾樹自下而上逐層兩兩串聯(lián)計算哈希值,如15和16的哈希值串聯(lián)后哈希的哈希值存在7,3和4的哈希值串聯(lián)后哈希的哈希值存在1,直到算出根節(jié)點的根哈希值。
B服務器收到A的數(shù)據(jù)后,如同A一樣建立類梅克爾樹,并一直計算出根節(jié)點的根哈希值。
這個類梅克爾樹的建立方式和普通的梅克爾樹是不一樣的,最大的優(yōu)勢是即使哈希值的數(shù)量不一樣,也不會改變各哈希值在類梅克爾樹中的相應的位置,所有的哈希值都是能對號入座的,同一不重復編號的哈希值在不同的服務器上的類梅克爾樹上的位置都是一樣的。
這里比較A、B兩顆類梅克爾樹的根哈希值,不一樣,比較其子節(jié)點,1節(jié)點不一致,2節(jié)點一致,比較1節(jié)點的子節(jié)點,3一致,4不一致,比較4節(jié)點的子節(jié)點,9一致,10不一致,比較10節(jié)點下的子節(jié)點,21一致,22不一致,22節(jié)點對應的不重復編號是7,向A服務器請求下載不重復編號7的哈希值?,F(xiàn)在從下往上計算哈希值,把新請求來的不重復編號7的哈希值放到22,把21和22哈希值串聯(lián)后哈希獲得哈希值放入10,把9和10串聯(lián)合并后哈希的好希值放入4,把3和4串聯(lián)合并后哈希的好希值放入1,把1和2串聯(lián)合并后哈希的好希值放入0,對比A和B服務器兩顆類梅克爾樹的更哈希值為一致,則兩邊的數(shù)據(jù)完全一致。
實施例6,參照圖7:
本實施例說明如何選舉共識服務器來達成共識,形成新的區(qū)塊。
選舉若干臺共識記賬服務器提供共識服務,將這幾臺服務器所有交易的類默克爾樹根進行對比,類默克爾樹根哈希值一樣的最多的服務器生成的區(qū)塊作為最新的區(qū)塊,若默克爾樹根哈希值都不一樣,就隨機選一臺,其他記帳服務期對比類默克爾樹根哈希值,若一樣就作為新的區(qū)塊,若不一樣,就比較類默克爾樹,下載不同的交易數(shù)據(jù),形成一樣的新區(qū)塊,或直接下載新的區(qū)塊,最后也可以去掉類默克爾樹最下層哈希值為空值的節(jié)點,重新生成容量更小的區(qū)塊。
最后應說明的是,以上實施例僅用以說明本發(fā)明的技術(shù)方案而非限制,盡管參照較佳實施例對本發(fā)明進行了詳細說明,本領域的普通技術(shù)人員應當理解,可以對本發(fā)明的技術(shù)方案進行修改或者等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍,其均應涵蓋在本發(fā)明的權(quán)利要求范圍當中。