本申請涉及計算機通信技術(shù)領(lǐng)域,尤其涉及一種區(qū)塊數(shù)據(jù)校驗方法和裝置。
背景技術(shù):
區(qū)塊鏈技術(shù)也稱為分布式賬本技術(shù),是一種分布式互聯(lián)網(wǎng)數(shù)據(jù)庫技術(shù),其特點是去中心化、公開透明、不可篡改、可信任。區(qū)塊鏈中存儲的每一條數(shù)據(jù),將會廣播存儲至區(qū)塊鏈中各個區(qū)塊中,因此,區(qū)塊鏈的每個區(qū)塊中存儲全量的、一致的數(shù)據(jù)。
在實際應(yīng)用中,區(qū)塊鏈需要保持各個區(qū)塊中存儲數(shù)據(jù)一致。通常采用數(shù)據(jù)校驗的方式校驗各個區(qū)塊中存儲的數(shù)據(jù)是否一致。
具體地,在進行區(qū)塊數(shù)據(jù)校驗時,需要確定每一個區(qū)塊的校驗值,并將各個區(qū)塊的校驗值進行比對,進而判斷區(qū)塊鏈的各個區(qū)塊中存儲的數(shù)據(jù)是否一致。
經(jīng)研究發(fā)現(xiàn),在確定每一個區(qū)塊的校驗值時,由于區(qū)塊中存儲的數(shù)據(jù)量比較大,那么在確定該區(qū)塊的校驗值時,需要將區(qū)塊中存儲的所有數(shù)據(jù)進行計算,計算得到該區(qū)塊的校驗值。但是隨著區(qū)塊中存儲數(shù)據(jù)量的增加,將使得計算校驗值的計算量增加,進而導(dǎo)致數(shù)據(jù)校驗效率降低。
因此,如何提高區(qū)塊數(shù)據(jù)校驗的效率成為本領(lǐng)域亟待解決的問題。
背景技術(shù)部分公開的信息只是為了加強對本申請的一般背景的理解,不應(yīng)視為承認或默許這種信息構(gòu)成本領(lǐng)域技術(shù)人員已知的現(xiàn)有技術(shù)。
技術(shù)實現(xiàn)要素:
有鑒于此,本申請實施例提供了一種區(qū)塊數(shù)據(jù)校驗方法和裝置,以解決現(xiàn)有技術(shù)中區(qū)塊數(shù)據(jù)校驗效率較低的問題。
本申請實施例提供一種區(qū)塊數(shù)據(jù)校驗方法,包括:
從包含多個數(shù)據(jù)節(jié)點的區(qū)塊中選擇用于存儲新增數(shù)據(jù)的數(shù)據(jù)節(jié)點;
針對所述數(shù)據(jù)節(jié)點,確定所述新增數(shù)據(jù)的校驗值,并根據(jù)所述新增數(shù)據(jù)的校驗值,計算所述數(shù)據(jù)節(jié)點的更新校驗值;
根據(jù)所述數(shù)據(jù)節(jié)點的更新校驗值與所述區(qū)塊中包含的其他數(shù)據(jù)節(jié)點的原始校驗值,得到所述區(qū)塊的校驗值;
其中,所述區(qū)塊的校驗值用于校驗所述區(qū)塊中存儲的數(shù)據(jù)是否與區(qū)塊鏈中其他區(qū)塊中存儲的數(shù)據(jù)一致。
本申請實施例還提供一種區(qū)塊數(shù)據(jù)校驗裝置,包括:
選擇模塊,從包含多個數(shù)據(jù)節(jié)點的區(qū)塊中選擇用于存儲新增數(shù)據(jù)的數(shù)據(jù)節(jié)點;
確定模塊,針對所述數(shù)據(jù)節(jié)點,確定所述新增數(shù)據(jù)的校驗值,并根據(jù)所述新增數(shù)據(jù)的校驗值,計算所述數(shù)據(jù)節(jié)點的更新校驗值;
處理模塊,根據(jù)所述數(shù)據(jù)節(jié)點的更新校驗值與所述區(qū)塊中包含的其他數(shù)據(jù)節(jié)點的原始校驗值,得到所述區(qū)塊的校驗值;
其中,所述區(qū)塊的校驗值用于校驗所述區(qū)塊中存儲的數(shù)據(jù)是否與區(qū)塊鏈中其他區(qū)塊中存儲的數(shù)據(jù)一致。
本申請實施例采用的上述至少一個技術(shù)方案能夠達到以下有益效果:
在區(qū)塊中新增數(shù)據(jù)時,利用新增數(shù)據(jù)確定用于存儲該新增數(shù)據(jù)的數(shù)據(jù)節(jié)點的更新校驗值,避免了現(xiàn)有技術(shù)中當(dāng)區(qū)塊中新增數(shù)據(jù)時利用區(qū)塊中所有數(shù)據(jù)計算校驗值所導(dǎo)致的時間消耗較長的問題,使在計算新增數(shù)據(jù)的區(qū)塊的校驗值時,所消耗時間與區(qū)塊中數(shù)據(jù)量的多少無關(guān),有效縮短了校驗值的計算時間,從而提高了區(qū)塊數(shù)據(jù)校驗的效率。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:
圖1為本申請實施例提供的一種區(qū)塊數(shù)據(jù)校驗方法的流程示意圖;
圖2為本申請實施例提供的merkletree結(jié)構(gòu)示意圖;
圖3為本申請實施例提供的確定新增數(shù)據(jù)的校驗值的流程示意圖;
圖4為本申請實施例提供的確定新增數(shù)據(jù)的校驗值的流程示意圖;
圖5為本申請實施例的一種區(qū)塊數(shù)據(jù)校驗裝置的結(jié)構(gòu)示意圖。
具體實施方式
為了實現(xiàn)本申請的目的,本申請實施例提供了一種區(qū)塊數(shù)據(jù)校驗方法及裝置,從包含多個數(shù)據(jù)節(jié)點的區(qū)塊中選擇用于存儲新增數(shù)據(jù)的數(shù)據(jù)節(jié)點;針對所述數(shù)據(jù)節(jié)點,確定所述新增數(shù)據(jù)的校驗值,并根據(jù)所述新增數(shù)據(jù)的校驗值,計算所述數(shù)據(jù)節(jié)點的更新校驗值;根據(jù)所述數(shù)據(jù)節(jié)點的更新校驗值與所述區(qū)塊中包含的其他數(shù)據(jù)節(jié)點的原始校驗值,得到所述區(qū)塊的校驗值;其中,所述區(qū)塊的校驗值用于校驗所述區(qū)塊中存儲的數(shù)據(jù)是否與區(qū)塊鏈中其他區(qū)塊中存儲的數(shù)據(jù)一致。與處理所有歷史數(shù)據(jù)的現(xiàn)有技術(shù)相比,本申請實施例著重考慮區(qū)塊的新增數(shù)據(jù),對于新增數(shù)據(jù)的區(qū)塊,提出了采用增量方式計算校驗值,避免了現(xiàn)有技術(shù)中當(dāng)區(qū)塊中新增數(shù)據(jù)時利用區(qū)塊中所有數(shù)據(jù)計算校驗值所導(dǎo)致的時間消耗較長的問題,使在計算新增數(shù)據(jù)的區(qū)塊的校驗值時,所消耗時間與區(qū)塊中數(shù)據(jù)量的多少無關(guān),有效縮短了校驗值的計算時間,從而提高了區(qū)塊數(shù)據(jù)校驗的效率。
需要說明的是,本申請實施例中所記載的用于計算校驗值的設(shè)定算法可以是各種校驗算法,還可以是各種不可逆算法,具體算法類型在本申請實施例中不做具體限定。
例如:可以使用哈希算法計算得到需要的校驗值。哈希(hash)算法,即散列函數(shù),又可以稱之為哈希函數(shù)。它是一種單向密碼體制,即它是一個從明文到密文的不可逆的映射,即只有加密過程,沒有解密過程。同時,哈希函數(shù)可以將任意長度的輸入經(jīng)過變化以后得到固定長度的輸出。典型的哈希算法包括md2、md4、md5和sha-1等。
本領(lǐng)域技術(shù)人員應(yīng)該理解,本申請實施例的說明書中提到的哈希算法僅是示例,并不構(gòu)成對本發(fā)明的限制。本領(lǐng)域技術(shù)人員能夠根據(jù)實際應(yīng)用和需要采用其他用于校驗的算法,這里不做具體限定。
為使本申請的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本申請具體實施例及相應(yīng)的附圖對本申請技術(shù)方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
以下結(jié)合附圖,詳細說明本申請各實施例提供的技術(shù)方案。
圖1為本申請實施例提供的一種區(qū)塊數(shù)據(jù)校驗方法的流程示意圖。所述區(qū)塊數(shù)據(jù)校驗方法包括以下步驟。
步驟s110:從包含多個數(shù)據(jù)節(jié)點的區(qū)塊中選擇用于存儲新增數(shù)據(jù)的數(shù)據(jù)節(jié)點。
區(qū)塊鏈由若干區(qū)塊采用鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)連接形成。每個區(qū)塊中包括多個數(shù)據(jù)節(jié)點。區(qū)塊中包含的數(shù)據(jù)節(jié)點可以構(gòu)建為梅克爾樹(merkletree)的形式,即包含根節(jié)點和多個葉子節(jié)點。
在merkletree結(jié)構(gòu)中,區(qū)塊中包含的數(shù)據(jù)節(jié)點作為merkletree結(jié)構(gòu)中的底層葉子節(jié)點,如圖2所示。
從圖2中可以看出,在merkletree結(jié)構(gòu)中,a、b、c、d和e對應(yīng)于區(qū)塊中的數(shù)據(jù)節(jié)點。
本領(lǐng)域技術(shù)人員應(yīng)該理解,在區(qū)塊中基于數(shù)據(jù)節(jié)點構(gòu)建梅克爾樹,可以根據(jù)需要確定梅克爾樹的深度。
需要說明的是,為了保證區(qū)塊鏈中各個區(qū)塊中存儲數(shù)據(jù)的一致性,在區(qū)塊鏈的各個區(qū)塊中構(gòu)建的梅克爾樹的深度相同,此外,各個區(qū)塊中包含的數(shù)據(jù)節(jié)點的個數(shù)也相同。此外,還應(yīng)該理解,這里列出的梅克爾樹只是一種舉例說明,本領(lǐng)域技術(shù)人員可以采用其他適當(dāng)?shù)臄?shù)據(jù)構(gòu)建形式,這里不做具體限定。
對于待存儲的數(shù)據(jù)(這里的數(shù)據(jù)可以稱之為新增數(shù)據(jù)),首先,確定用于存儲該新增數(shù)據(jù)的區(qū)塊;其次,確定在該區(qū)塊中用于存儲該新增數(shù)據(jù)的數(shù)據(jù)節(jié)點。
那么在接收到新增數(shù)據(jù)時,首先,確定用于存儲所述新增數(shù)據(jù)的區(qū)塊信息,所述區(qū)塊信息中包含區(qū)塊標(biāo)識和數(shù)據(jù)節(jié)點標(biāo)識。
具體地,對所述新增數(shù)據(jù)對應(yīng)的數(shù)據(jù)內(nèi)容進行計算,得到確定的區(qū)塊信息。
根據(jù)本申請實施例,新增數(shù)據(jù)對應(yīng)的數(shù)據(jù)內(nèi)容可以根據(jù)新增數(shù)據(jù)的類型確定,也可以根據(jù)新增數(shù)據(jù)中包含的數(shù)據(jù)確定,這里不做具體限定。
例如:該新增數(shù)據(jù)為文本數(shù)據(jù),那么新增數(shù)據(jù)對應(yīng)的數(shù)據(jù)內(nèi)容可以理解為該文本數(shù)據(jù)的內(nèi)容摘要;也可以理解為該文本數(shù)據(jù);那么可以按照設(shè)定算法,對該新增數(shù)據(jù)對應(yīng)的數(shù)據(jù)內(nèi)容(例如:內(nèi)容摘要,或者文本數(shù)據(jù))進行計算,得到計算結(jié)果,此時根據(jù)計算結(jié)果確定區(qū)塊信息。
再例如:該新增數(shù)據(jù)為一條交易數(shù)據(jù),那么可以按照設(shè)定算法,對該交易數(shù)據(jù)進行計算,得到計算結(jié)果,此時根據(jù)計算結(jié)果確定區(qū)塊信息。
本申請實施例中所記載的設(shè)定算法:例如采用求余的計算方式,那么將數(shù)據(jù)內(nèi)容轉(zhuǎn)換為整數(shù)數(shù)據(jù),以區(qū)塊鏈中所包含的區(qū)塊個數(shù)作為除數(shù),利用該除數(shù)對整數(shù)數(shù)據(jù)進行計算,得到的商值和余數(shù)。這里的商值可以視為區(qū)塊標(biāo)識,余數(shù)可以視為區(qū)塊中數(shù)據(jù)節(jié)點標(biāo)識;或者商值可以視為數(shù)據(jù)節(jié)點標(biāo)識,余數(shù)可以視為區(qū)塊標(biāo)識。
當(dāng)然,為了根據(jù)需要將新增數(shù)據(jù)分配至適當(dāng)?shù)膮^(qū)塊和數(shù)據(jù)節(jié)點,本領(lǐng)域技術(shù)人員也可以設(shè)想對數(shù)據(jù)內(nèi)容進行計算的其他方式,例如對數(shù)據(jù)內(nèi)容進行隨機計算等等,這里不做限定。
其次,根據(jù)所述區(qū)塊標(biāo)識,從區(qū)塊鏈中查找與所述區(qū)塊標(biāo)識對應(yīng)的區(qū)塊;以及從查找到的區(qū)塊中確定與所述數(shù)據(jù)節(jié)點標(biāo)識對應(yīng)的數(shù)據(jù)節(jié)點。
在形成區(qū)塊鏈的過程中,為每一個區(qū)塊確定一個區(qū)塊標(biāo)識,那么在得到區(qū)塊信息時,可以根據(jù)區(qū)塊信息中的區(qū)塊標(biāo)識,從區(qū)塊鏈中查找到與該區(qū)塊標(biāo)識對應(yīng)的區(qū)塊;
由于每一個區(qū)塊中包含多個數(shù)據(jù)節(jié)點,可以為每一個數(shù)據(jù)節(jié)點確定數(shù)據(jù)節(jié)點標(biāo)識,那么在得到區(qū)塊信息時,可以根據(jù)區(qū)塊信息中的數(shù)據(jù)節(jié)點標(biāo)識,從查找到的區(qū)塊中確定與該數(shù)據(jù)節(jié)點標(biāo)識對應(yīng)的數(shù)據(jù)節(jié)點。
最后,將查找到的數(shù)據(jù)節(jié)點作為用于存儲所述新增數(shù)據(jù)的數(shù)據(jù)節(jié)點。
步驟s120:針對所述數(shù)據(jù)節(jié)點,確定所述新增數(shù)據(jù)的校驗值。
在本申請實施例中,由于新增數(shù)據(jù)在被存儲至數(shù)據(jù)節(jié)點之前,數(shù)據(jù)節(jié)點中有可能已經(jīng)存儲了數(shù)據(jù),而這些數(shù)據(jù)中有可能有些數(shù)據(jù)與新增數(shù)據(jù)之間存在某種關(guān)聯(lián)關(guān)系,那么與新增數(shù)據(jù)之間存在關(guān)聯(lián)關(guān)系的數(shù)據(jù)可以被稱之為關(guān)聯(lián)數(shù)據(jù);也可能數(shù)據(jù)節(jié)點中存儲的數(shù)據(jù)與該新增數(shù)據(jù)之間不具備關(guān)聯(lián)關(guān)系,即在數(shù)據(jù)節(jié)點中不存在與該新增數(shù)據(jù)關(guān)聯(lián)的關(guān)聯(lián)數(shù)據(jù)。
需要說明的是,本申請實施例中所記載的關(guān)聯(lián)關(guān)系可以是在用戶賬戶、支付活動、交易時間、交易地點等因素方面產(chǎn)生的關(guān)系,例如:同一個用戶的兩個交易數(shù)據(jù),那么這兩個交易數(shù)據(jù)因為用戶賬戶相同而產(chǎn)生關(guān)聯(lián)關(guān)系;也可以是交易行為產(chǎn)生的關(guān)系,例如:一個交易數(shù)據(jù)所記載的內(nèi)容是用戶a向用戶b轉(zhuǎn)賬100元;另一條交易數(shù)據(jù)所記載的內(nèi)容是用戶b向用戶轉(zhuǎn)賬100元;那么這兩條交易數(shù)據(jù)因為轉(zhuǎn)賬行為中所包含的對象和金額相同而產(chǎn)生關(guān)聯(lián)關(guān)系;這里對于關(guān)聯(lián)關(guān)系的具體內(nèi)容不做具體限定。
此外,新增數(shù)據(jù)在被存儲至數(shù)據(jù)節(jié)點之前,數(shù)據(jù)節(jié)點中可能尚未存儲數(shù)據(jù),此時,可以視為在數(shù)據(jù)節(jié)點中不存在與該新增數(shù)據(jù)關(guān)聯(lián)的關(guān)聯(lián)數(shù)據(jù)。
那么在確定所述新增數(shù)據(jù)的校驗值時,可以但不限于分為以下兩種情形:
第一種情形:在數(shù)據(jù)節(jié)點中不存在與該新增數(shù)據(jù)關(guān)聯(lián)的關(guān)聯(lián)數(shù)據(jù)。
那么確定所述新增數(shù)據(jù)的校驗值可以參考圖3,圖3為本申請實施例提供的確定新增數(shù)據(jù)的校驗值的流程示意圖。
s310:確定所述新增數(shù)據(jù)對應(yīng)的字符串。
在本申請實施例中,確定新增數(shù)據(jù)對應(yīng)的字符串可以采用將數(shù)據(jù)轉(zhuǎn)換為字符串的任何適當(dāng)?shù)募夹g(shù)手段,例如通過相應(yīng)的轉(zhuǎn)換函數(shù)將新增數(shù)據(jù)轉(zhuǎn)換為字符串等,這里不做具體限定。
s320:按照設(shè)定算法,對所述字符串進行計算得到所述新增數(shù)據(jù)的校驗值。
具體地,利用哈希算法,對所述字符串進行計算得到所述新增數(shù)據(jù)的哈希值,將該哈希值作為該新增數(shù)據(jù)的校驗值。
本領(lǐng)域技術(shù)人員應(yīng)該理解,這里提到的哈希算法僅是示例,并不構(gòu)成對本發(fā)明的限制。
第二種情形:在數(shù)據(jù)節(jié)點中存在與該新增數(shù)據(jù)關(guān)聯(lián)的關(guān)聯(lián)數(shù)據(jù)。
那么確定所述新增數(shù)據(jù)的校驗值可以參考圖4,圖4為本申請實施例提供的確定新增數(shù)據(jù)的校驗值的流程示意圖。
s410:分別確定所述關(guān)聯(lián)數(shù)據(jù)對應(yīng)的第一字符串和所述新增數(shù)據(jù)對應(yīng)的第二字符串。
同樣地,確定關(guān)聯(lián)數(shù)據(jù)對應(yīng)的第一字符串和新增數(shù)據(jù)對應(yīng)的第二字符串可以采用將數(shù)據(jù)轉(zhuǎn)換為字符串的任何適當(dāng)?shù)募夹g(shù)手段,例如通過相應(yīng)的轉(zhuǎn)換函數(shù)將數(shù)據(jù)轉(zhuǎn)換為字符串等,這里不做具體限定。
s420:按照設(shè)定方式對所述第一字符串和所述第二字符串進行排序。
需要說明的是,設(shè)定方式,可以根據(jù)實際需要確定,也可以根據(jù)實驗結(jié)果確定,在本申請實施例中所采用的排序方式不限定。例如:將第一字符串和第二字符串順序排列,其目的是將第一字符串和第二字符串進行組合,形成用于計算的字符串組,是第一字符串在前還是第二字符串在前,在本申請實施例中不限定。本領(lǐng)域技術(shù)人員也可以采用其他排序方式。
s430:按照設(shè)定算法,對排序后得到的字符串進行計算得到所述新增數(shù)據(jù)的校驗值。
具體地,利用哈希算法,對排序后得到的字符串進行計算得到所述新增數(shù)據(jù)的哈希值,將該哈希值作為該新增數(shù)據(jù)的校驗值。
步驟s130:根據(jù)所述新增數(shù)據(jù)的校驗值,計算所述數(shù)據(jù)節(jié)點的更新校驗值。
具體地,確定所述數(shù)據(jù)節(jié)點在未存儲所述新增數(shù)據(jù)之前的原始校驗值;根據(jù)所述原始校驗值和所述新增數(shù)據(jù)的校驗值,計算得到所述數(shù)據(jù)節(jié)點的更新校驗值。
在本申請實施例中,由于數(shù)據(jù)節(jié)點在存儲該新增數(shù)據(jù)之前如果已經(jīng)存儲了其他數(shù)據(jù),那么在存儲其他數(shù)據(jù)時,將為該數(shù)據(jù)節(jié)點計算一個校驗值,這個校驗值相對于新增數(shù)據(jù)來說,可以稱之為原始校驗值。
例如:對于數(shù)據(jù)節(jié)點a,每存儲一個數(shù)據(jù),將計算一個校驗值,也就是說數(shù)據(jù)節(jié)點的校驗值將隨著數(shù)據(jù)節(jié)點中數(shù)據(jù)的更新發(fā)生變化。假設(shè)在存儲新增數(shù)據(jù)之前,該數(shù)據(jù)節(jié)點a中已存儲了數(shù)據(jù)11和數(shù)據(jù)12,那么數(shù)據(jù)節(jié)點在存儲數(shù)據(jù)11時,計算得到校驗值a;數(shù)據(jù)節(jié)點在存儲數(shù)據(jù)12時,a可以稱之為原始校驗值,此時利用原始校驗值計算得到校驗值b;那么b可以稱之為更新校驗值。
假設(shè)新增數(shù)據(jù)為數(shù)據(jù)13,那么根據(jù)步驟s120得到數(shù)據(jù)13的校驗值c,此時需要確定該數(shù)據(jù)節(jié)點在未存儲數(shù)據(jù)13之前的校驗值,即校驗值b,那么此時校驗值b被稱之為原始校驗值。利用校驗值c和校驗值b,按照設(shè)定算法,計算得到該數(shù)據(jù)節(jié)點的更新校驗值。
需要說明的是,如果該數(shù)據(jù)節(jié)點之前尚未存儲數(shù)據(jù),該新增數(shù)據(jù)作為該數(shù)據(jù)節(jié)點的第一數(shù)據(jù),那么在本申請實施例中,該新增數(shù)據(jù)的校驗值可以看做是該數(shù)據(jù)節(jié)點的校驗值。
步驟s140:根據(jù)所述數(shù)據(jù)節(jié)點的更新校驗值與所述區(qū)塊中包含的其他數(shù)據(jù)節(jié)點的原始校驗值,得到所述區(qū)塊的校驗值。
在本申請實施例中,確定所述區(qū)塊中包含的多個數(shù)據(jù)節(jié)點對應(yīng)的樹結(jié)構(gòu),以及確定所述區(qū)塊中包含的其他數(shù)據(jù)節(jié)點的原始校驗值;根據(jù)所述數(shù)據(jù)節(jié)點的更新校驗值與所述區(qū)塊中包含的其他數(shù)據(jù)節(jié)點的原始校驗值,遍歷所述樹結(jié)構(gòu),得到所述樹結(jié)構(gòu)的根節(jié)點的校驗值,并將所述根節(jié)點的校驗值作為所述區(qū)塊的校驗值。
以圖2中所示的內(nèi)容為例。假設(shè)在尚未有新增數(shù)據(jù)存儲至圖2中所示的區(qū)塊時,圖2中所示的數(shù)據(jù)節(jié)點a對應(yīng)的校驗值為a、數(shù)據(jù)節(jié)點b對應(yīng)的校驗值為b、數(shù)據(jù)節(jié)點c對應(yīng)的校驗值為c、數(shù)據(jù)節(jié)點d對應(yīng)的校驗值為d以及數(shù)據(jù)節(jié)點e對應(yīng)的校驗值為e。
此時,新增數(shù)據(jù)需要存儲至數(shù)據(jù)節(jié)點a,那么校驗值a、校驗值b、校驗值c、校驗值d和校驗值e此時被稱之為原始校驗值。
當(dāng)新增數(shù)據(jù)存儲至數(shù)據(jù)節(jié)點a之后,數(shù)據(jù)節(jié)點a的校驗值將發(fā)生變化,假設(shè)數(shù)據(jù)節(jié)點a的校驗值由校驗值a變化為校驗值g,那么校驗值g可以稱之為數(shù)據(jù)節(jié)點a的更新校驗值。
此時,基于數(shù)據(jù)節(jié)點a的校驗值g、數(shù)據(jù)節(jié)點b的校驗值b、數(shù)據(jù)節(jié)點c的校驗值c、數(shù)據(jù)節(jié)點d的校驗值d以及數(shù)據(jù)節(jié)點e的校驗值e,按照設(shè)定算法,計算得到區(qū)塊的校驗值。
例如:根據(jù)數(shù)據(jù)節(jié)點a、數(shù)據(jù)節(jié)點b、數(shù)據(jù)節(jié)點c、數(shù)據(jù)節(jié)點d和數(shù)據(jù)節(jié)點e在圖2中所示的樹結(jié)構(gòu),利用數(shù)據(jù)節(jié)點a的校驗值g、數(shù)據(jù)節(jié)點b的校驗值b、數(shù)據(jù)節(jié)點c的校驗值c、數(shù)據(jù)節(jié)點d的校驗值d以及數(shù)據(jù)節(jié)點e的校驗值e,計算得到區(qū)塊的校驗值。
在獲得該區(qū)塊的校驗值之后,可以將其與區(qū)塊鏈中其他區(qū)塊的校驗值進行比較。如果比較的結(jié)果一致,則說明該區(qū)塊中存儲的數(shù)據(jù)與其他區(qū)塊中存儲的數(shù)據(jù)一致,校驗通過。如果比較的結(jié)果不一致,則說明該區(qū)塊中存儲的數(shù)據(jù)與其他區(qū)塊中存儲的數(shù)據(jù)不一致,例如區(qū)塊數(shù)據(jù)可能已經(jīng)丟失或者已經(jīng)被篡改,不能通過校驗。
在本申請實施例中,通過增量計算的方式,快速確定區(qū)塊因新增數(shù)據(jù)而發(fā)生變化的變化后的校驗值,縮短了校驗值計算的時間,提升了系統(tǒng)計算性能。
通過本申請實施例所提供的技術(shù)方案,從包含多個數(shù)據(jù)節(jié)點的區(qū)塊中選擇用于存儲新增數(shù)據(jù)的數(shù)據(jù)節(jié)點;針對所述數(shù)據(jù)節(jié)點,確定所述新增數(shù)據(jù)的校驗值,并根據(jù)所述新增數(shù)據(jù)的校驗值,計算所述數(shù)據(jù)節(jié)點的更新校驗值;根據(jù)所述數(shù)據(jù)節(jié)點的更新校驗值與所述區(qū)塊中包含的其他數(shù)據(jù)節(jié)點的原始校驗值,得到所述區(qū)塊的校驗值;其中,所述區(qū)塊的校驗值用于校驗所述區(qū)塊中存儲的數(shù)據(jù)是否與區(qū)塊鏈中其他區(qū)塊中存儲的數(shù)據(jù)一致。與處理所有歷史數(shù)據(jù)的現(xiàn)有技術(shù)相比,本申請實施例著重考慮區(qū)塊的新增數(shù)據(jù),對于新增數(shù)據(jù)的區(qū)塊,提出了采用增量方式計算校驗值,避免了現(xiàn)有技術(shù)中當(dāng)區(qū)塊中新增數(shù)據(jù)時利用區(qū)塊中所有數(shù)據(jù)計算校驗值所導(dǎo)致的時間消耗較長的問題,使在計算新增數(shù)據(jù)的區(qū)塊的校驗值時,所消耗時間與區(qū)塊中數(shù)據(jù)量的多少無關(guān),有效縮短了校驗值的計算時間,從而提高了區(qū)塊數(shù)據(jù)校驗的效率。
另一方面,對于未處理的原始數(shù)據(jù),如果被篡改,即使根據(jù)本申請實施例在計算新增數(shù)據(jù)的校驗值時未發(fā)現(xiàn)這種篡改,但是由于區(qū)塊鏈的構(gòu)造和性質(zhì),在區(qū)塊鏈的各個區(qū)塊中執(zhí)行數(shù)據(jù)更新時肯定能發(fā)現(xiàn)這樣的篡改;從而,不會影響區(qū)塊數(shù)據(jù)的最終校驗。
圖5為根據(jù)本申請實施例的一種區(qū)塊數(shù)據(jù)校驗裝置的結(jié)構(gòu)示意圖。所述區(qū)塊數(shù)據(jù)校驗裝置包括選擇模塊510、確定模塊520和處理模塊530。
選擇模塊510,從包含多個數(shù)據(jù)節(jié)點的區(qū)塊中選擇用于存儲新增數(shù)據(jù)的數(shù)據(jù)節(jié)點;
確定模塊520,針對所述數(shù)據(jù)節(jié)點,確定所述新增數(shù)據(jù)的校驗值,并根據(jù)所述新增數(shù)據(jù)的校驗值,計算所述數(shù)據(jù)節(jié)點的更新校驗值;
處理模塊530,根據(jù)所述數(shù)據(jù)節(jié)點的更新校驗值與所述區(qū)塊中包含的其他數(shù)據(jù)節(jié)點的原始校驗值,得到所述區(qū)塊的校驗值;
其中,所述區(qū)塊的校驗值用于校驗所述區(qū)塊中存儲的數(shù)據(jù)是否與區(qū)塊鏈中其他區(qū)塊中存儲的數(shù)據(jù)一致。
在本申請的另一個實施例中,所述選擇模塊510從包含多個數(shù)據(jù)節(jié)點的區(qū)塊中選擇用于存儲新增數(shù)據(jù)的數(shù)據(jù)節(jié)點,包括:
在接收到新增數(shù)據(jù)時,確定用于存儲所述新增數(shù)據(jù)的區(qū)塊信息,所述區(qū)塊信息中包含區(qū)塊標(biāo)識和數(shù)據(jù)節(jié)點標(biāo)識;
根據(jù)所述區(qū)塊標(biāo)識,從區(qū)塊鏈中查找與所述區(qū)塊標(biāo)識對應(yīng)的區(qū)塊;以及從查找到的區(qū)塊中確定與所述數(shù)據(jù)節(jié)點標(biāo)識對應(yīng)的數(shù)據(jù)節(jié)點;
將查找到的數(shù)據(jù)節(jié)點作為用于存儲所述新增數(shù)據(jù)的數(shù)據(jù)節(jié)點。
在本申請的另一個實施例中,所述選擇模塊510確定用于存儲所述新增數(shù)據(jù)的區(qū)塊信息,包括:
對所述新增數(shù)據(jù)對應(yīng)的數(shù)據(jù)內(nèi)容進行計算,得到確定的區(qū)塊信息。
在本申請的另一個實施例中,所述確定模塊520確定所述新增數(shù)據(jù)的校驗值,包括:
在確定所述數(shù)據(jù)節(jié)點中不存在與所述新增數(shù)據(jù)的關(guān)聯(lián)數(shù)據(jù)時,確定所述新增數(shù)據(jù)對應(yīng)的字符串;
按照設(shè)定算法,對所述字符串進行計算得到所述新增數(shù)據(jù)的校驗值。
在本申請的另一個實施例中,所述確定模塊520確定所述新增數(shù)據(jù)的校驗值,包括:
在確定所述數(shù)據(jù)節(jié)點中存在與所述新增數(shù)據(jù)的關(guān)聯(lián)數(shù)據(jù)時,分別確定所述關(guān)聯(lián)數(shù)據(jù)對應(yīng)的第一字符串和所述新增數(shù)據(jù)對應(yīng)的第二字符串;
按照設(shè)定方式對所述第一字符串和所述第二字符串進行排序;
按照設(shè)定算法,對排序后得到的字符串進行計算得到所述新增數(shù)據(jù)的校驗值。
在本申請的另一個實施例中,所述確定模塊520根據(jù)所述新增數(shù)據(jù)的校驗值,計算所述數(shù)據(jù)節(jié)點的更新校驗值,包括:
確定所述數(shù)據(jù)節(jié)點在未存儲所述新增數(shù)據(jù)之前的原始校驗值;
根據(jù)所述原始校驗值和所述新增數(shù)據(jù)的校驗值,計算得到所述數(shù)據(jù)節(jié)點的更新校驗值。
在本申請的另一個實施例中,所述處理模塊530根據(jù)所述數(shù)據(jù)節(jié)點的更新校驗值與所述區(qū)塊中包含的其他數(shù)據(jù)節(jié)點的原始校驗值,得到所述區(qū)塊的校驗值,包括:
確定所述區(qū)塊中包含的多個數(shù)據(jù)節(jié)點對應(yīng)的樹結(jié)構(gòu),以及確定所述區(qū)塊中包含的其他數(shù)據(jù)節(jié)點的原始校驗值;
根據(jù)所述數(shù)據(jù)節(jié)點的更新校驗值與所述區(qū)塊中包含的其他數(shù)據(jù)節(jié)點的原始校驗值,遍歷所述樹結(jié)構(gòu),得到所述樹結(jié)構(gòu)的根節(jié)點的校驗值,并將所述根節(jié)點的校驗值作為所述區(qū)塊的校驗值。
需要說明的是,本申請實施例中所記載的區(qū)塊數(shù)據(jù)校驗裝置可以通過軟件方式實現(xiàn),也可以通過硬件方式實現(xiàn),這里不做具體限定。區(qū)塊數(shù)據(jù)校驗裝置對于新增數(shù)據(jù)的區(qū)塊,提出了采用增量方式計算校驗值,避免了現(xiàn)有技術(shù)中當(dāng)區(qū)塊中新增數(shù)據(jù)時利用區(qū)塊中所有數(shù)據(jù)計算校驗值所導(dǎo)致的時間消耗較長的問題,使在計算新增數(shù)據(jù)的區(qū)塊的校驗值時,所消耗時間與區(qū)塊中數(shù)據(jù)量的多少無關(guān),有效縮短了校驗值的計算時間,從而提高了區(qū)塊數(shù)據(jù)校驗的效率。
在20世紀90年代,對于一個技術(shù)的改進可以很明顯地區(qū)分是硬件上的改進(例如,對二極管、晶體管、開關(guān)等電路結(jié)構(gòu)的改進)還是軟件上的改進(對于方法流程的改進)。然而,隨著技術(shù)的發(fā)展,當(dāng)今的很多方法流程的改進已經(jīng)可以視為硬件電路結(jié)構(gòu)的直接改進。設(shè)計人員幾乎都通過將改進的方法流程編程到硬件電路中來得到相應(yīng)的硬件電路結(jié)構(gòu)。因此,不能說一個方法流程的改進就不能用硬件實體模塊來實現(xiàn)。例如,可編程邏輯器件(programmablelogicdevice,pld)(例如現(xiàn)場可編程門陣列(fieldprogrammablegatearray,fpga))就是這樣一種集成電路,其邏輯功能由用戶對器件編程來確定。由設(shè)計人員自行編程來把一個數(shù)字系統(tǒng)“集成”在一片pld上,而不需要請芯片制造廠商來設(shè)計和制作專用的集成電路芯片。而且,如今,取代手工地制作集成電路芯片,這種編程也多半改用“邏輯編譯器(logiccompiler)”軟件來實現(xiàn),它與程序開發(fā)撰寫時所用的軟件編譯器相類似,而要編譯之前的原始代碼也得用特定的編程語言來撰寫,此稱之為硬件描述語言(hardwaredescriptionlanguage,hdl),而hdl也并非僅有一種,而是有許多種,如abel(advancedbooleanexpressionlanguage)、ahdl(alterahardwaredescriptionlanguage)、confluence、cupl(cornelluniversityprogramminglanguage)、hdcal、jhdl(javahardwaredescriptionlanguage)、lava、lola、myhdl、palasm、rhdl(rubyhardwaredescriptionlanguage)等,目前最普遍使用的是vhdl(very-high-speedintegratedcircuithardwaredescriptionlanguage)與verilog。本領(lǐng)域技術(shù)人員也應(yīng)該清楚,只需要將方法流程用上述幾種硬件描述語言稍作邏輯編程并編程到集成電路中,就可以很容易得到實現(xiàn)該邏輯方法流程的硬件電路。
控制器可以按任何適當(dāng)?shù)姆绞綄崿F(xiàn),例如,控制器可以采取例如微處理器或處理器以及存儲可由該(微)處理器執(zhí)行的計算機可讀程序代碼(例如軟件或固件)的計算機可讀介質(zhì)、邏輯門、開關(guān)、專用集成電路(applicationspecificintegratedcircuit,asic)、可編程邏輯控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc625d、atmelat91sam、microchippic18f26k20以及siliconelabsc8051f320,存儲器控制器還可以被實現(xiàn)為存儲器的控制邏輯的一部分。本領(lǐng)域技術(shù)人員也知道,除了以純計算機可讀程序代碼方式實現(xiàn)控制器以外,完全可以通過將方法步驟進行邏輯編程來使得控制器以邏輯門、開關(guān)、專用集成電路、可編程邏輯控制器和嵌入微控制器等的形式來實現(xiàn)相同功能。因此這種控制器可以被認為是一種硬件部件,而對其內(nèi)包括的用于實現(xiàn)各種功能的裝置也可以視為硬件部件內(nèi)的結(jié)構(gòu)。或者甚至,可以將用于實現(xiàn)各種功能的裝置視為既可以是實現(xiàn)方法的軟件模塊又可以是硬件部件內(nèi)的結(jié)構(gòu)。
上述實施例闡明的系統(tǒng)、裝置、模塊或單元,具體可以由計算機芯片或?qū)嶓w實現(xiàn),或者由具有某種功能的產(chǎn)品來實現(xiàn)。一種典型的實現(xiàn)設(shè)備為計算機。具體的,計算機例如可以為個人計算機、膝上型計算機、蜂窩電話、相機電話、智能電話、個人數(shù)字助理、媒體播放器、導(dǎo)航設(shè)備、電子郵件設(shè)備、游戲控制臺、平板計算機、可穿戴設(shè)備或者這些設(shè)備中的任何設(shè)備的組合。
為了描述的方便,描述以上裝置時以功能分為各種單元分別描述。當(dāng)然,在實施本申請時可以把各單元的功能在同一個或多個軟件和/或硬件中實現(xiàn)。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
在一個典型的配置中,計算設(shè)備包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。內(nèi)存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機存取存儲器(sram)、動態(tài)隨機存取存儲器(dram)、其他類型的隨機存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。
本領(lǐng)域技術(shù)人員應(yīng)明白,本申請的實施例可提供為方法、系統(tǒng)或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
以上所述僅為本申請的實施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。