本技術(shù)涉及區(qū)塊鏈,尤其涉及一種區(qū)塊鏈共識狀態(tài)同步方法、裝置、設(shè)備以及介質(zhì)。
背景技術(shù):
1、區(qū)塊鏈技術(shù)中,每一個新生成的區(qū)塊都需要在區(qū)塊鏈網(wǎng)絡(luò)中執(zhí)行共識流程,一次完整的共識流程可以包括至少一個階段,參與共識的共識節(jié)點(diǎn)在每一個階段都需要廣播共識消息(例如,區(qū)塊投票信息),各個共識節(jié)點(diǎn)在接收到足夠數(shù)量的其他共識節(jié)點(diǎn)的共識消息之后,共識流程才會繼續(xù)進(jìn)行。若共識節(jié)點(diǎn)a由于網(wǎng)絡(luò)丟包或其他故障等原因未能接收到足夠數(shù)量的共識消息,則該共識節(jié)點(diǎn)a暫時無法繼續(xù)執(zhí)行共識流程,因此需要根據(jù)共識節(jié)點(diǎn)a的共識狀態(tài)來進(jìn)行共識消息的補(bǔ)發(fā),以同步各個共識節(jié)點(diǎn)之間的共識狀態(tài)。
2、目前的共識狀態(tài)同步方案中,通過設(shè)置一個定時器,每1秒發(fā)送一次當(dāng)前共識節(jié)點(diǎn)的共識狀態(tài)消息,該共識狀態(tài)消息需要包括:當(dāng)前共識節(jié)點(diǎn)的標(biāo)識、區(qū)塊高度、共識階段步驟、提案哈希(hash)以及投票集合,該投票集合包括當(dāng)前共識節(jié)點(diǎn)在各個階段接收到的所有投票信息。當(dāng)區(qū)塊鏈網(wǎng)絡(luò)中參與共識的節(jié)點(diǎn)較多時,共識狀態(tài)消息的消息體是很大的,尤其是投票集合中所包含的投票信息的數(shù)量,這會占用很大的網(wǎng)絡(luò)寬帶,容易造成網(wǎng)絡(luò)擁堵,從而影響區(qū)塊鏈的共識性能。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)實(shí)施例提供一種區(qū)塊鏈共識狀態(tài)同步方法、裝置、設(shè)備以及介質(zhì),可以減少共識過程中的網(wǎng)絡(luò)寬帶占用量,進(jìn)而提升區(qū)塊鏈的共識性能。
2、本技術(shù)實(shí)施例一方面提供了一種區(qū)塊鏈共識狀態(tài)同步方法,該方法由第一共識節(jié)點(diǎn)執(zhí)行,該方法包括:
3、獲取第二共識節(jié)點(diǎn)對應(yīng)的第一共識狀態(tài)消息;第一共識狀態(tài)消息為包含共識狀態(tài)和共識消息位圖的字節(jié)數(shù)組,第一共識狀態(tài)消息中的共識消息位圖用于表征第二共識節(jié)點(diǎn)在共識過程中的共識消息接收狀態(tài);
4、對第一共識狀態(tài)消息中的共識狀態(tài)所占用的字節(jié)進(jìn)行解析,得到第二共識節(jié)點(diǎn)對應(yīng)的第一區(qū)塊高度和共識階段;第一區(qū)塊高度的共識過程包括第一共識階段和第二共識階段;
5、若第二共識節(jié)點(diǎn)的共識階段為第二共識階段,則根據(jù)第一區(qū)塊高度對應(yīng)的共識節(jié)點(diǎn)數(shù)量,對第一共識狀態(tài)消息中的共識消息位圖進(jìn)行解析,得到第二共識節(jié)點(diǎn)對應(yīng)的待補(bǔ)發(fā)節(jié)點(diǎn)集合;
6、若第一共識節(jié)點(diǎn)包含待補(bǔ)發(fā)節(jié)點(diǎn)集合中的共識節(jié)點(diǎn)在第二共識階段的共識消息,則向第二共識節(jié)點(diǎn)發(fā)送待補(bǔ)發(fā)節(jié)點(diǎn)集合中的共識節(jié)點(diǎn)在第二共識階段的共識消息。
7、本技術(shù)實(shí)施例一方面提供了一種區(qū)塊鏈共識狀態(tài)同步裝置,該裝置可以運(yùn)行在第一共識節(jié)點(diǎn)中,該裝置包括:
8、消息獲取模塊,用于獲取第二共識節(jié)點(diǎn)對應(yīng)的第一共識狀態(tài)消息;第一共識狀態(tài)消息為包含共識狀態(tài)和共識消息位圖的字節(jié)數(shù)組,第一共識狀態(tài)消息中的共識消息位圖用于表征第二共識節(jié)點(diǎn)在共識過程中的共識消息接收狀態(tài);
9、第一解析模塊,用于對第一共識狀態(tài)消息中的共識狀態(tài)所占用的字節(jié)進(jìn)行解析,得到第二共識節(jié)點(diǎn)對應(yīng)的第一區(qū)塊高度和共識階段;第一區(qū)塊高度的共識過程包括第一共識階段和第二共識階段;
10、第二解析模塊,用于若第二共識節(jié)點(diǎn)的共識階段為第二共識階段,則根據(jù)第一區(qū)塊高度對應(yīng)的共識節(jié)點(diǎn)數(shù)量,對第一共識狀態(tài)消息中的共識消息位圖進(jìn)行解析,得到第二共識節(jié)點(diǎn)對應(yīng)的待補(bǔ)發(fā)節(jié)點(diǎn)集合;
11、投票補(bǔ)發(fā)模塊,用于若第一共識節(jié)點(diǎn)包含待補(bǔ)發(fā)節(jié)點(diǎn)集合中的共識節(jié)點(diǎn)在第二共識階段的共識消息,則向第二共識節(jié)點(diǎn)發(fā)送待補(bǔ)發(fā)節(jié)點(diǎn)集合中的共識節(jié)點(diǎn)在第二共識階段的共識消息。
12、其中,第一解析模塊具體用于:
13、在第一共識狀態(tài)消息中確定用于表示共識狀態(tài)的高度字節(jié)區(qū)間和步驟字節(jié),對高度字節(jié)區(qū)間中的字節(jié)進(jìn)行解析,得到第二共識節(jié)點(diǎn)對應(yīng)的第一區(qū)塊高度;
14、對步驟字節(jié)進(jìn)行解析得到字節(jié)解析結(jié)果,根據(jù)字節(jié)解析結(jié)果確定第二共識節(jié)點(diǎn)對應(yīng)的共識階段。
15、其中,第一共識階段包括提案階段,第二共識階段包括預(yù)投票階段和預(yù)提交階段;
16、第一解析模塊根據(jù)字節(jié)解析結(jié)果確定第二共識節(jié)點(diǎn)對應(yīng)的共識階段,包括:
17、若字節(jié)解析結(jié)果為第一數(shù)值,則確定第二共識節(jié)點(diǎn)對應(yīng)的共識階段為提案階段;
18、若字節(jié)解析結(jié)果為第二數(shù)值,則確定第二共識節(jié)點(diǎn)對應(yīng)的共識階段為預(yù)投票階段;
19、若字節(jié)解析結(jié)果為第三數(shù)值,則確定第二共識節(jié)點(diǎn)對應(yīng)的共識階段為預(yù)提交階段。
20、其中,第二解析模塊具體用于:
21、若第二共識節(jié)點(diǎn)的共識階段為第二共識階段,則獲取第一區(qū)塊高度對應(yīng)的共識委員會,統(tǒng)計第一區(qū)塊高度對應(yīng)的共識委員會中的共識節(jié)點(diǎn)數(shù)量;
22、根據(jù)共識節(jié)點(diǎn)數(shù)量,在第一共識狀態(tài)消息中確定共識消息位圖對應(yīng)的位圖字節(jié)區(qū)間;
23、根據(jù)位圖字節(jié)區(qū)間中所包含的各個比特位的數(shù)值,確定第二共識節(jié)點(diǎn)對應(yīng)的待補(bǔ)發(fā)節(jié)點(diǎn)集合。
24、其中,第二解析模塊根據(jù)位圖字節(jié)區(qū)間中所包含的各個比特位的數(shù)值,確定第二共識節(jié)點(diǎn)對應(yīng)的待補(bǔ)發(fā)節(jié)點(diǎn)集合,包括:
25、根據(jù)位圖字節(jié)區(qū)間中所包含的各個比特位的數(shù)值,確定數(shù)值為零值的比特位在位圖字節(jié)區(qū)間中的比特排序位置;
26、根據(jù)比特排序位置對應(yīng)的節(jié)點(diǎn)索引信息,在第一區(qū)塊高度對應(yīng)的共識委員會中確定待補(bǔ)發(fā)節(jié)點(diǎn)集合;第一區(qū)塊高度對應(yīng)的共識委員會中的一個共識節(jié)點(diǎn)對應(yīng)一個節(jié)點(diǎn)索引信息,一個節(jié)點(diǎn)索引信息對應(yīng)位圖字節(jié)區(qū)間中的一個比特位。
27、其中,該裝置還包括:
28、索引確定模塊,用于按照節(jié)點(diǎn)排序策略對第一區(qū)塊高度對應(yīng)的共識委員會中的共識節(jié)點(diǎn)進(jìn)行排序,得到第一節(jié)點(diǎn)排序列表,為第一節(jié)點(diǎn)排序列表中的共識節(jié)點(diǎn)創(chuàng)建節(jié)點(diǎn)索引信息。
29、其中,該裝置還包括:
30、索引確定模塊,用于在第二區(qū)塊高度的共識過程中,若檢測到第二區(qū)塊高度對應(yīng)的共識委員會與第一區(qū)塊高度對應(yīng)的共識委員會相同,則繼續(xù)保留第一節(jié)點(diǎn)排序列表中的共識節(jié)點(diǎn)所對應(yīng)的節(jié)點(diǎn)索引信息;以及,
31、用于若檢測到第二區(qū)塊高度對應(yīng)的共識委員會與第一區(qū)塊高度對應(yīng)的共識委員會不同,則按照節(jié)點(diǎn)排序策略對第二區(qū)塊高度對應(yīng)的共識委員會中的共識節(jié)點(diǎn)進(jìn)行排序,得到第二共識節(jié)點(diǎn)排序列表,為第二共識節(jié)點(diǎn)排序列表中的共識節(jié)點(diǎn)創(chuàng)建節(jié)點(diǎn)索引信息。
32、其中,第二解析模塊還用于:
33、若第二共識節(jié)點(diǎn)的共識階段為第一共識階段,則對第一共識狀態(tài)消息中的共識消息位圖所占用的字節(jié)進(jìn)行解析,得到位圖解析結(jié)果;
34、若位圖解析結(jié)果為零值,則確定第二共識節(jié)點(diǎn)未接收到第一區(qū)塊高度對應(yīng)的提案數(shù)據(jù);
35、若第一共識節(jié)點(diǎn)包含第一區(qū)塊高度對應(yīng)的提案數(shù)據(jù),則向第二共識節(jié)點(diǎn)發(fā)送第一區(qū)塊高度對應(yīng)的提案數(shù)據(jù)。
36、其中,第二共識階段包括預(yù)投票階段,預(yù)投票階段的共識消息為預(yù)投票信息;
37、投票補(bǔ)發(fā)模塊具體用于:
38、若第一共識節(jié)點(diǎn)包含待補(bǔ)發(fā)節(jié)點(diǎn)集合中的共識節(jié)點(diǎn)在預(yù)投票階段的預(yù)投票信息,則在第一共識節(jié)點(diǎn)對應(yīng)的預(yù)投票信息集合中,獲取待補(bǔ)發(fā)節(jié)點(diǎn)集合中的共識節(jié)點(diǎn)對應(yīng)的預(yù)投票信息;
39、向第二共識節(jié)點(diǎn)發(fā)送待補(bǔ)發(fā)節(jié)點(diǎn)集合中的共識節(jié)點(diǎn)對應(yīng)的預(yù)投票信息。
40、其中,第二共識階段包括預(yù)提交階段,預(yù)提交階段的共識消息為預(yù)提交信息;
41、投票補(bǔ)發(fā)模塊具體用于:
42、若第一共識節(jié)點(diǎn)包含待補(bǔ)發(fā)節(jié)點(diǎn)集合中的共識節(jié)點(diǎn)在預(yù)提交階段的預(yù)提交信息,則在第一共識節(jié)點(diǎn)對應(yīng)的預(yù)提交信息集合中,獲取待補(bǔ)發(fā)節(jié)點(diǎn)集合中的共識節(jié)點(diǎn)對應(yīng)的預(yù)提交信息;
43、向第二共識節(jié)點(diǎn)發(fā)送待補(bǔ)發(fā)節(jié)點(diǎn)集合中的共識節(jié)點(diǎn)對應(yīng)的預(yù)提交信息。
44、其中,該裝置還包括:
45、共識狀態(tài)消息生成模塊,用于若第一共識節(jié)點(diǎn)處于第一區(qū)塊高度對應(yīng)的第一共識階段,且第一共識節(jié)點(diǎn)已接收到第一區(qū)塊高度的提案數(shù)據(jù),則將第一區(qū)塊高度以二進(jìn)制形式填充至高度字節(jié)區(qū)間;以及,
46、還用于將第一共識階段映射為第一數(shù)值,將第一數(shù)值以二進(jìn)制形式填充至步驟字節(jié);以及,
47、還用于將第一區(qū)塊高度的提案數(shù)據(jù)所對應(yīng)的已接收狀態(tài)映射為第一數(shù)值,將第一數(shù)值以二進(jìn)制形式填充至共識消息位圖;以及,
48、還用于將已填充第一區(qū)塊高度的高度字節(jié)區(qū)間、已填充第一數(shù)值的步驟字節(jié)以及已填充第一數(shù)值的共識消息位圖,組合為第一共識節(jié)點(diǎn)對應(yīng)的第二共識狀態(tài)消息。
49、其中,該裝置還包括:
50、共識狀態(tài)消息生成模塊,用于若第一共識節(jié)點(diǎn)處于第一區(qū)塊高度對應(yīng)的預(yù)投票階段,則將第一區(qū)塊高度以二進(jìn)制形式填充至高度字節(jié)區(qū)間,將預(yù)投票階段映射為第二數(shù)值,將第二數(shù)值以二進(jìn)制形式填充至步驟字節(jié);以及,
51、還用于獲取第一區(qū)塊高度對應(yīng)的預(yù)投票信息集合,以及獲取第一區(qū)塊高度對應(yīng)的第一節(jié)點(diǎn)排序列表,根據(jù)第一節(jié)點(diǎn)排序列表對應(yīng)的共識節(jié)點(diǎn)數(shù)量確定共識消息位圖對應(yīng)的位圖字節(jié)區(qū)間;第一節(jié)點(diǎn)排序列表是對第一區(qū)塊高度對應(yīng)的共識委員會中的共識節(jié)點(diǎn)進(jìn)行排序得到的;以及,
52、還用于將預(yù)投票信息集合中的預(yù)投票信息與第一節(jié)點(diǎn)排序列表中的共識節(jié)點(diǎn)進(jìn)行匹配,得到投票信息匹配結(jié)果;以及,
53、還用于根據(jù)投票信息匹配結(jié)果,以及第一節(jié)點(diǎn)排序列表中的共識節(jié)點(diǎn)與位圖字節(jié)區(qū)間中所包含的比特位之間的對應(yīng)關(guān)系,確定位圖字節(jié)區(qū)間中所包含的比特位的數(shù)值;以及,
54、還用于將已填充第一區(qū)塊高度的高度字節(jié)區(qū)間、已填充第二數(shù)值的步驟字節(jié)以及位圖字節(jié)區(qū)間,組合為第一共識節(jié)點(diǎn)對應(yīng)的第二共識狀態(tài)消息。
55、本技術(shù)實(shí)施例一方面提供了一種計算機(jī)設(shè)備,包括存儲器和處理器,存儲器與處理器相連,存儲器用于存儲計算機(jī)程序,處理器用于調(diào)用計算機(jī)程序,以使得該計算機(jī)設(shè)備執(zhí)行本技術(shù)實(shí)施例中上述一方面提供的方法。
56、本技術(shù)實(shí)施例一方面提供了一種計算機(jī)可讀存儲介質(zhì),計算機(jī)可讀存儲介質(zhì)中存儲有計算機(jī)程序,計算機(jī)程序適于由處理器加載并執(zhí)行,以使得具有處理器的計算機(jī)設(shè)備執(zhí)行本技術(shù)實(shí)施例中上述一方面提供的方法。
57、根據(jù)本技術(shù)的一個方面,提供了一種計算機(jī)程序產(chǎn)品或計算機(jī)程序,該計算機(jī)程序產(chǎn)品或計算機(jī)程序包括計算機(jī)指令,該計算機(jī)指令存儲在計算機(jī)可讀存儲介質(zhì)中。計算機(jī)設(shè)備的處理器從計算機(jī)可讀存儲介質(zhì)讀取該計算機(jī)指令,處理器執(zhí)行該計算機(jī)指令,使得該計算機(jī)設(shè)備執(zhí)行上述一方面提供的方法。
58、本技術(shù)實(shí)施例中,第一共識節(jié)點(diǎn)可以獲取第二共識節(jié)點(diǎn)對應(yīng)的第一共識狀態(tài)消息,該第一共識狀態(tài)消息為包含共識狀態(tài)和共識消息位圖的字節(jié)數(shù)組,也就是說,通過采用字節(jié)數(shù)組的結(jié)構(gòu)來表示第一共識狀態(tài)消息,可以壓縮第一共識狀態(tài)消息的數(shù)據(jù)量。進(jìn)一步地,對共識狀態(tài)所占用的字節(jié)進(jìn)行解析,得到第二共識節(jié)點(diǎn)對應(yīng)的第一區(qū)塊高度和共識階段,第一區(qū)塊高度的共識過程包括第一共識階段和第二共識階段;若第二共識節(jié)點(diǎn)的共識階段為第二共識階段,則根據(jù)第一區(qū)塊高度對應(yīng)的共識節(jié)點(diǎn)數(shù)量,對共識消息位圖所占用的字節(jié)進(jìn)行解析,得到第二共識節(jié)點(diǎn)對應(yīng)的待補(bǔ)發(fā)節(jié)點(diǎn)集合。若第一共識節(jié)點(diǎn)包含待補(bǔ)發(fā)節(jié)點(diǎn)集合中的共識節(jié)點(diǎn)在第二共識階段的共識消息,則可以將其發(fā)送給第二共識節(jié)點(diǎn),以同步第一共識節(jié)點(diǎn)與第二共識節(jié)點(diǎn)之間的共識狀態(tài),這樣可以減少共識狀態(tài)同步過程中的網(wǎng)絡(luò)寬帶占用量,進(jìn)而可以提升區(qū)塊鏈的共識性能。