本申請涉及區(qū)塊鏈,特別是涉及一種區(qū)塊鏈狀態(tài)快照生成方法、裝置、計算機設備及存儲介質(zhì)。
背景技術:
1、目前,常見的區(qū)塊鏈系統(tǒng)均以狀態(tài)樹作為賬戶和合約的歷史狀態(tài)存儲的數(shù)據(jù)結構。例如以太坊使用的mpt樹(merkle?patricia?tree,梅克爾樹),aptos使用的jmt樹(jellyfish?merkle?tree,一種稀疏梅克爾樹)等。狀態(tài)快照一般在歸檔節(jié)點(某些區(qū)塊鏈系統(tǒng)中也稱為數(shù)據(jù)節(jié)點)上生成,生成狀態(tài)快照可以抽象為一次遍歷特定區(qū)塊下的狀態(tài)樹的全部節(jié)點的過程。
2、然而,在傳統(tǒng)技術中,由于狀態(tài)樹的節(jié)點大部分存在磁盤上,因此傳統(tǒng)技術中生成狀態(tài)快照時需要通過層序遍歷、后序遍歷等方式遍歷訪問每個狀態(tài)樹節(jié)點,這意味著大量的磁盤讀寫操作,需要消耗較多計算機資源。
技術實現(xiàn)思路
1、基于此,有必要針對上述技術問題,提供一種能夠減少計算機資源消耗的區(qū)塊鏈狀態(tài)快照生成方法、裝置、計算機設備及存儲介質(zhì)。
2、第一方面,本申請?zhí)峁┝艘环N區(qū)塊鏈狀態(tài)快照生成方法。所述方法包括:
3、獲取初始區(qū)塊的第一節(jié)點集合以及關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量,所述關聯(lián)區(qū)塊包括與初始區(qū)塊以及目標區(qū)塊相關聯(lián)的區(qū)塊;所述區(qū)塊狀態(tài)變量包括當前區(qū)塊相較于前一區(qū)塊的節(jié)點變化信息;
4、基于所述第一節(jié)點集合以及每個所述關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量,確定所述目標區(qū)塊的第二節(jié)點集合,并將所述第二節(jié)點集合作為所述目標區(qū)塊的狀態(tài)快照。
5、在其中一個實施例中,所述區(qū)塊狀態(tài)變量包括區(qū)塊狀態(tài)增量以及區(qū)塊狀態(tài)減量,所述區(qū)塊狀態(tài)增量包括所述當前區(qū)塊相較于前一區(qū)塊的增量節(jié)點集合,所述區(qū)塊狀態(tài)減量包括所述當前區(qū)塊相較于前一區(qū)塊的減量節(jié)點集合。
6、在其中一個實施例中,若所述初始區(qū)塊的區(qū)塊高度大于所述目標區(qū)塊的區(qū)塊高度,則關聯(lián)區(qū)塊包括所述初始區(qū)塊與目標區(qū)塊之間的中間區(qū)塊以及初始區(qū)塊;
7、若所述初始區(qū)塊的區(qū)塊高度小于所述目標區(qū)塊的區(qū)塊高度,則關聯(lián)區(qū)塊包括所述初始區(qū)塊與目標區(qū)塊之間的中間區(qū)塊以及目標區(qū)塊。
8、在其中一個實施例中,若所述初始區(qū)塊的區(qū)塊高度大于所述目標區(qū)塊的區(qū)塊高度,所述基于所述第一節(jié)點集合以及所述每個關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量,確定所述目標區(qū)塊的第二節(jié)點集合包括:
9、基于所述初始區(qū)塊的節(jié)點集合以及所述初始區(qū)塊的區(qū)塊狀態(tài)變量,確定前一區(qū)塊的節(jié)點集合;
10、基于前一區(qū)塊的節(jié)點集合以及所述中間區(qū)塊的區(qū)塊狀態(tài)變量,依次確定每一所述中間區(qū)塊的節(jié)點集合,直至確定所述目標區(qū)塊的第二節(jié)點集合。
11、在其中一個實施例中,所述基于所述初始區(qū)塊的節(jié)點集合以及所述初始區(qū)塊的區(qū)塊狀態(tài)變量,確定前一區(qū)塊的節(jié)點集合包括:
12、在所述初始區(qū)塊的節(jié)點集合中,刪除與所述初始區(qū)塊的區(qū)塊狀態(tài)增量對應的節(jié)點,以及插入與所述初始區(qū)塊的區(qū)塊狀態(tài)減量對應的節(jié)點后,得到所述前一區(qū)塊的節(jié)點集合。
13、在其中一個實施例中,若所述初始區(qū)塊的區(qū)塊高度小于所述目標區(qū)塊的區(qū)塊高度,所述基于所述第一節(jié)點集合以及所述每個關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量,確定所述目標區(qū)塊的節(jié)點集合包括:
14、基于所述初始區(qū)塊的節(jié)點集合以及所述初始區(qū)塊后一區(qū)塊的區(qū)塊狀態(tài)變量,確定后一區(qū)塊的節(jié)點集合;
15、基于后一區(qū)塊的節(jié)點集合以及所述中間區(qū)塊的區(qū)塊狀態(tài)變量,依次確定每一所述中間區(qū)塊的節(jié)點集合,直至確定所述目標區(qū)塊的第二節(jié)點集合。
16、在其中一個實施例中,所述基于所述初始區(qū)塊的節(jié)點集合以及所述初始區(qū)塊后一區(qū)塊的區(qū)塊狀態(tài)變量,確定后一區(qū)塊的節(jié)點集合包括:
17、在所述初始區(qū)塊的節(jié)點集合中,插入與所述后一區(qū)塊的區(qū)塊狀態(tài)增量對應的節(jié)點,以及刪除與所述后一區(qū)塊的區(qū)塊狀態(tài)減量對應的節(jié)點后,得到所述后一區(qū)塊的節(jié)點集合。
18、在其中一個實施例中,所述基于所述第一節(jié)點集合以及所述每個關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量,確定所述目標區(qū)塊的第二節(jié)點集合還包括:
19、基于每個所述關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量,確定總區(qū)塊狀態(tài)變量;
20、基于所述第一節(jié)點集合以及所述總區(qū)塊狀態(tài)變量,確定所述目標區(qū)塊的節(jié)點集合。
21、在其中一個實施例中,所述總區(qū)塊狀態(tài)變量包括總區(qū)塊狀態(tài)增量以及總區(qū)塊狀態(tài)減量;所述基于每個所述關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量,確定總狀態(tài)變量包括:
22、基于每個所述關聯(lián)區(qū)塊的區(qū)塊狀態(tài)減量,確定總區(qū)塊狀態(tài)減量;
23、基于每個所述關聯(lián)區(qū)塊的區(qū)塊狀態(tài)增量,確定總區(qū)塊狀態(tài)增量。
24、在其中一個實施例中,所述基于所述初始區(qū)塊的節(jié)點集合以及所述總狀態(tài)變量,確定所述目標區(qū)塊的節(jié)點集合包括:
25、若所述初始區(qū)塊的區(qū)塊高度大于所述目標區(qū)塊的區(qū)塊高度,則在所述初始區(qū)塊的節(jié)點集合中,刪除與所述總區(qū)塊狀態(tài)增量對應的節(jié)點,以及插入與所述總區(qū)塊狀態(tài)減量對應的節(jié)點后得到所述目標區(qū)塊的節(jié)點集合;
26、若所述初始區(qū)塊的區(qū)塊高度小于所述目標區(qū)塊的區(qū)塊高度,則在所述初始區(qū)塊的節(jié)點集合中,插入與所述總區(qū)塊狀態(tài)增量對應的節(jié)點,以及刪除與所述總區(qū)塊狀態(tài)減量對應的節(jié)點后得到所述目標區(qū)塊的節(jié)點集合。
27、第二方面,本申請還提供了一種區(qū)塊鏈狀態(tài)快照生成裝置。所述裝置包括:
28、數(shù)據(jù)獲取模塊,用于獲取初始區(qū)塊的第一節(jié)點集合以及關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量,所述關聯(lián)區(qū)塊包括與初始區(qū)塊以及目標區(qū)塊相關聯(lián)的區(qū)塊;所述區(qū)塊狀態(tài)變量包括當前區(qū)塊相較于前一區(qū)塊的節(jié)點變化信息;
29、狀態(tài)快照生成模塊,用于基于所述第一節(jié)點集合以及每個所述關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量,確定所述目標區(qū)塊的第二節(jié)點集合,并將所述第二節(jié)點集合作為所述目標區(qū)塊的狀態(tài)快照。
30、第三方面,本申請還提供了一種計算機設備。所述計算機設備包括存儲器和處理器,所述存儲器存儲有計算機程序,所述處理器執(zhí)行所述計算機程序時實現(xiàn)上述第一方面中任一區(qū)塊鏈狀態(tài)快照生成方法的步驟。
31、第四方面,本申請還提供了一種計算機可讀存儲介質(zhì)。所述計算機可讀存儲介質(zhì),其上存儲有計算機程序,所述計算機程序被處理器執(zhí)行時實現(xiàn)上述第一方面中任一區(qū)塊鏈狀態(tài)快照生成方法的步驟。
32、上述區(qū)塊鏈狀態(tài)快照生成方法、裝置、計算機設備及存儲介質(zhì),通過獲取初始區(qū)塊的第一節(jié)點集合以及關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量,關聯(lián)區(qū)塊包括與初始區(qū)塊以及目標區(qū)塊相關聯(lián)的區(qū)塊;區(qū)塊狀態(tài)變量包括當前區(qū)塊相較于前一區(qū)塊的節(jié)點變化信息;再基于第一節(jié)點集合以及每個關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量,確定目標區(qū)塊的第二節(jié)點集合,并將第二節(jié)點集合作為目標區(qū)塊的狀態(tài)快照。獲取初始區(qū)塊的節(jié)點集合,以及關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量后,即可推算確定目標區(qū)塊的狀態(tài)快照,在不需要遍歷全量狀態(tài)樹的情況下確定目標區(qū)塊的狀態(tài)快照,有效減少了計算機資源消耗,也提高了狀態(tài)快照的生成效率。
33、本申請的一個或多個實施例的細節(jié)在以下附圖和描述中提出,以使本申請的其他特征、目的和優(yōu)點更加簡明易懂。
1.一種區(qū)塊鏈狀態(tài)快照生成方法,其特征在于,所述方法包括:
2.根據(jù)權利要求1所述的方法,其特征在于,所述區(qū)塊狀態(tài)變量包括區(qū)塊狀態(tài)增量以及區(qū)塊狀態(tài)減量,所述區(qū)塊狀態(tài)增量包括所述當前區(qū)塊相較于前一區(qū)塊的增量節(jié)點集合,所述區(qū)塊狀態(tài)減量包括所述當前區(qū)塊相較于前一區(qū)塊的減量節(jié)點集合。
3.根據(jù)權利要求2所述的方法,其特征在于,
4.根據(jù)權利要求3所述的方法,其特征在于,若所述初始區(qū)塊的區(qū)塊高度大于所述目標區(qū)塊的區(qū)塊高度,所述基于所述第一節(jié)點集合以及所述每個關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量,確定所述目標區(qū)塊的第二節(jié)點集合包括:
5.根據(jù)權利要求4所述的方法,其特征在于,所述基于所述初始區(qū)塊的節(jié)點集合以及所述初始區(qū)塊的區(qū)塊狀態(tài)變量,確定前一區(qū)塊的節(jié)點集合包括:
6.根據(jù)權利要求3所述的方法,其特征在于,若所述初始區(qū)塊的區(qū)塊高度小于所述目標區(qū)塊的區(qū)塊高度,所述基于所述第一節(jié)點集合以及所述每個關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量,確定所述目標區(qū)塊的節(jié)點集合包括:
7.根據(jù)權利要求6所述的方法,其特征在于,所述基于所述初始區(qū)塊的節(jié)點集合以及所述初始區(qū)塊后一區(qū)塊的區(qū)塊狀態(tài)變量,確定后一區(qū)塊的節(jié)點集合包括:
8.根據(jù)權利要求2所述的方法,其特征在于,所述基于所述第一節(jié)點集合以及所述每個關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量,確定所述目標區(qū)塊的第二節(jié)點集合還包括:
9.根據(jù)權利要求8所述的方法,其特征在于,所述總區(qū)塊狀態(tài)變量包括總區(qū)塊狀態(tài)增量以及總區(qū)塊狀態(tài)減量;所述基于每個所述關聯(lián)區(qū)塊的區(qū)塊狀態(tài)變量,確定總狀態(tài)變量包括:
10.根據(jù)權利要求9所述的方法,其特征在于,所述基于所述初始區(qū)塊的節(jié)點集合以及所述總狀態(tài)變量,確定所述目標區(qū)塊的節(jié)點集合包括:
11.一種區(qū)塊鏈狀態(tài)快照生成裝置,其特征在于,所述裝置包括:
12.一種計算機設備,包括存儲器和處理器,所述存儲器存儲有計算機程序,其特征在于,所述處理器執(zhí)行所述計算機程序時實現(xiàn)權利要求1至10中任一項所述的方法的步驟。
13.一種計算機可讀存儲介質(zhì),其上存儲有計算機程序,其特征在于,所述計算機程序被處理器執(zhí)行時實現(xiàn)權利要求1至10中任一項所述的方法的步驟。