本發(fā)明涉及區(qū)塊鏈,具體地說是一種基于區(qū)塊鏈的大規(guī)模制造全生命周期高效溯源方法。
背景技術(shù):
1、大規(guī)模制造業(yè)供應(yīng)鏈?zhǔn)且粋€(gè)復(fù)雜的系統(tǒng),包括供應(yīng)商、制造商、經(jīng)銷商和客戶,它們合作生產(chǎn)和流通產(chǎn)品。對(duì)于供應(yīng)鏈管理來說,產(chǎn)品全生命周期溯源至關(guān)重要,即檢索問題產(chǎn)品從原料到銷售的全生命周期數(shù)據(jù)。近年來,區(qū)塊鏈作為一種有前景的全生命周期溯源技術(shù)出現(xiàn)了。它具有去中心化、透明性和不變性等理想特性,打破了信息孤島,提高了供應(yīng)鏈利益相關(guān)者之間的信息交換速度。每個(gè)階段的產(chǎn)品數(shù)據(jù)作為交易存儲(chǔ)在鏈上,并在溯源過程中檢索。然而,在大規(guī)模制造業(yè)供應(yīng)鏈中,產(chǎn)品數(shù)量龐大,每個(gè)產(chǎn)品經(jīng)過的階段較多,且每個(gè)階段數(shù)據(jù)量較大,導(dǎo)致了總體交易的數(shù)據(jù)量大和巨大的存儲(chǔ)壓力;同時(shí),產(chǎn)品全生命周期溯源需要對(duì)每個(gè)階段的多個(gè)交易數(shù)據(jù)進(jìn)行一一檢索,加之全生命周期溯源的需求較大,導(dǎo)致數(shù)據(jù)檢索請(qǐng)求的頻次高和巨大的存檢索壓力。為了減輕存儲(chǔ)和檢索壓力,提出了鏈上鏈下模式。因此,需要一種高效的全生命周期溯源中的鏈上鏈下數(shù)據(jù)檢索方法。
2、中國(guó)專利“cn112950227a基于區(qū)塊鏈的中歐陸??炀€跨國(guó)供應(yīng)鏈信息追溯系統(tǒng)及方法”提供了一種基于區(qū)塊鏈的中歐陸??炀€跨國(guó)供應(yīng)鏈信息追溯系統(tǒng)及方法,包括產(chǎn)品追溯模塊和查詢模塊,其中產(chǎn)品追溯模塊包括供應(yīng)鏈鏈上模塊和供應(yīng)鏈鏈下模塊,從而實(shí)現(xiàn)了追溯信息的檢索,另一方面提高了追溯信息的可靠性。但其所述的技術(shù)方案將完整的交易數(shù)據(jù)存儲(chǔ)在鏈下,只將交易的hash值存儲(chǔ)在鏈上進(jìn)行驗(yàn)證。在溯源時(shí),每個(gè)階段的數(shù)據(jù)都是從鏈下不同地址的具有大量數(shù)據(jù)的數(shù)據(jù)表或文檔中檢索的,而不是直接在鏈上檢索。高通信需求導(dǎo)致時(shí)間消耗較長(zhǎng)、整體效率低下。
3、中國(guó)專利“cn113157733a一種面向多鏈數(shù)據(jù)關(guān)聯(lián)性的高效溯源查詢方法”提供了一種面向多鏈數(shù)據(jù)關(guān)聯(lián)性的高效溯源查詢方法,其特征包括:識(shí)別要溯源查詢的目標(biāo)交易、基于跨鏈交易數(shù)據(jù)關(guān)聯(lián)性找到所有對(duì)應(yīng)的目標(biāo)鏈、并行發(fā)出查詢請(qǐng)求、目標(biāo)鏈根據(jù)所述目標(biāo)交易的鍵值進(jìn)行查詢并返回查詢結(jié)果,從而有效提升了溯源查詢效率和整個(gè)系統(tǒng)的可擴(kuò)展性。但其技術(shù)方案在鏈上存儲(chǔ)每個(gè)交易的前序交易關(guān)聯(lián)信息,在每個(gè)交易數(shù)據(jù)生成時(shí),需要從所有具有大量數(shù)據(jù)的區(qū)塊中,檢索其相應(yīng)的前序交易信息,其效率甚至低于上述只在鏈上存儲(chǔ)交易hash值的方法。
4、中國(guó)專利“cn117194518a基于區(qū)塊鏈的大規(guī)模制造全生命周期溯源的數(shù)據(jù)查詢方法”提供了一種基于區(qū)塊鏈的大規(guī)模制造全生命周期溯源的數(shù)據(jù)查詢方法,其在交易結(jié)構(gòu)中增加了當(dāng)前階段的索引和前一階段的索引,從而可以在不檢索所有交易的情況下,獲取交易的關(guān)鍵信息,提高了溯源時(shí)檢索交易的效率。但其技術(shù)方案缺少索引信息和鏈下數(shù)據(jù)之間的關(guān)聯(lián),不適用于鏈上鏈下模式。
技術(shù)實(shí)現(xiàn)思路
1、針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明的目的在于提出一種基于區(qū)塊鏈的大規(guī)模制造全生命周期高效溯源方法,包括:
2、步驟1:針對(duì)制造全生命周期中的待溯源產(chǎn)品,獲取所述待溯源產(chǎn)品的批次號(hào),針對(duì)大規(guī)模制造全生命周期中的多個(gè)階段,確定大規(guī)模制造全生命周期中的最后一個(gè)階段;
3、步驟2:將大規(guī)模制造全生命周期中的最后一個(gè)階段作為當(dāng)前階段,將所述批次號(hào)作為當(dāng)前交易的索引;
4、步驟3:針對(duì)當(dāng)前階段的每一個(gè)當(dāng)前交易的索引的hash值,在預(yù)先劃分的區(qū)塊鏈的多個(gè)節(jié)點(diǎn)組以及節(jié)點(diǎn)組的組號(hào)中,確定用于實(shí)現(xiàn)當(dāng)前檢索請(qǐng)求的區(qū)塊鏈的目標(biāo)組號(hào),針對(duì)每一個(gè)當(dāng)前交易,通過目標(biāo)組號(hào)對(duì)應(yīng)的區(qū)塊鏈節(jié)點(diǎn)組中的節(jié)點(diǎn),根據(jù)當(dāng)前交易的索引的hash值,在預(yù)先構(gòu)建的交易劃分后的inmpt結(jié)構(gòu)中,獲取當(dāng)前階段的上一階段的所有交易的索引的hash值,其中,所有目標(biāo)組號(hào)對(duì)應(yīng)的區(qū)塊鏈節(jié)點(diǎn)組在獲取當(dāng)前階段的上一階段的所有交易的索引的hash值時(shí)是并行執(zhí)行的;
5、其中,所述交易劃分后的inmpt結(jié)構(gòu),即index?merkle?patricia?trie結(jié)構(gòu),包括制造全生命周期中所有階段的所有交易的索引信息,所述交易的索引信息包括key和value,所述key為該交易的索引的hash值,所述value包括該交易的完整信息的鏈下存儲(chǔ)位置,以及該交易對(duì)應(yīng)的上一階段的所有交易的索引的hash值,所述交易劃分后的inmpt結(jié)構(gòu)采用mpt結(jié)構(gòu),所述交易劃分后的inmpt結(jié)構(gòu)包括根節(jié)點(diǎn)、階段分支節(jié)點(diǎn)、擴(kuò)展節(jié)點(diǎn)、分支節(jié)點(diǎn)和葉節(jié)點(diǎn),所述根節(jié)點(diǎn)與所述階段分支節(jié)點(diǎn)相連接,一個(gè)階段分支對(duì)應(yīng)于制造全生命周期中的一個(gè)階段,階段分支節(jié)點(diǎn)與包含相應(yīng)階段的所有交易的索引信息的多個(gè)節(jié)點(diǎn)中的擴(kuò)展節(jié)點(diǎn)相連接,包含相應(yīng)階段的所有交易的索引信息的多個(gè)節(jié)點(diǎn)包括擴(kuò)展節(jié)點(diǎn)、分支節(jié)點(diǎn)和葉節(jié)點(diǎn);
6、步驟4:判斷當(dāng)前階段是否為大規(guī)模制造全生命周期中的第一個(gè)階段,若當(dāng)前階段的為大規(guī)模制造全生命周期中的第一個(gè)階段,則流程結(jié)束;若當(dāng)前階段的不是大規(guī)模制造全生命周期中的第一個(gè)階段,則執(zhí)行步驟5;
7、步驟5:將當(dāng)前階段的上一階段作為新的當(dāng)前階段,將上一階段的每一個(gè)交易的索引的hash值作為一個(gè)當(dāng)前交易的索引的hash值,返回執(zhí)行步驟3。
8、可選的,所述交易劃分后的inmpt結(jié)構(gòu)通過以下步驟構(gòu)建:
9、步驟a1:獲取大規(guī)模制造全生命周期的所有階段中所有交易的索引,針對(duì)每一個(gè)交易的索引,將索引通過hash算法進(jìn)行計(jì)算,得到該交易的索引的hash值,即該交易的key,獲取該交易的上一階段的交易索引的hash值,以及該交易完整信息的鏈下存儲(chǔ)位置,得到該交易的value,該交易的key和該交易的value組成該交易的索引信息,進(jìn)而得到所有交易的索引信息;
10、步驟a2:根據(jù)mpt結(jié)構(gòu)和所有交易的索引信息,構(gòu)建初始inmpt結(jié)構(gòu),所述初始inmpt結(jié)構(gòu)包含所有階段的所有交易的索引信息,所述初始inmpt結(jié)構(gòu)包括一個(gè)根節(jié)點(diǎn)、多個(gè)擴(kuò)展節(jié)點(diǎn)、多個(gè)分支節(jié)點(diǎn)和多個(gè)葉節(jié)點(diǎn),針對(duì)每一個(gè)交易,該交易的索引的key由該交易的擴(kuò)展節(jié)點(diǎn)、該交易的分支節(jié)點(diǎn)和該交易的葉節(jié)點(diǎn)組成,該交易的value存儲(chǔ)在該交易的葉節(jié)點(diǎn)中;
11、步驟a3:根據(jù)大規(guī)模制造全生命周期的各個(gè)階段,在初始inmpt結(jié)構(gòu)中根節(jié)點(diǎn)和擴(kuò)展節(jié)點(diǎn)之間設(shè)置階段分支節(jié)點(diǎn),并根據(jù)階段對(duì)初始inmpt結(jié)構(gòu)中的交易索引信息進(jìn)行劃分,進(jìn)而基于階段分支節(jié)點(diǎn)對(duì)應(yīng)的階段,以及對(duì)初始inmpt結(jié)構(gòu)中的交易索引信息劃分后的該階段對(duì)應(yīng)的結(jié)構(gòu),整理得到交易劃分后的inmpt結(jié)構(gòu)。
12、可選的,步驟3具體包括:
13、步驟3.1:針對(duì)當(dāng)前階段的每一個(gè)當(dāng)前交易的索引,通過hash算法計(jì)算,得到每一個(gè)當(dāng)前索引的hash值,進(jìn)而生成當(dāng)前檢索請(qǐng)求,并將當(dāng)前檢索請(qǐng)求發(fā)送至區(qū)塊鏈,區(qū)塊鏈在接收到當(dāng)前檢索請(qǐng)求后,在預(yù)先劃分的區(qū)塊鏈的多個(gè)節(jié)點(diǎn)組以及節(jié)點(diǎn)組的組號(hào)中,根據(jù)當(dāng)前檢索請(qǐng)求中交易的索引的hash值,計(jì)算區(qū)塊鏈中用于實(shí)現(xiàn)當(dāng)前檢索請(qǐng)求的區(qū)塊鏈節(jié)點(diǎn)組的目標(biāo)組號(hào);
14、步驟3.2:針對(duì)每一個(gè)當(dāng)前交易,通過目標(biāo)組號(hào)對(duì)應(yīng)的區(qū)塊鏈節(jié)點(diǎn)組中的節(jié)點(diǎn),根據(jù)當(dāng)前交易的索引的hash值,在預(yù)先構(gòu)建的交易劃分后的inmpt結(jié)構(gòu),查找當(dāng)前交易的索引的hash值對(duì)應(yīng)的葉節(jié)點(diǎn),在當(dāng)前交易的索引的hash值對(duì)應(yīng)的葉節(jié)點(diǎn)的value中,獲取當(dāng)前階段的上一階段的所有交易的索引的hash值。
15、可選的,步驟3.1中根據(jù)當(dāng)前檢索請(qǐng)求中交易的索引的hash值,計(jì)算區(qū)塊鏈中用于實(shí)現(xiàn)當(dāng)前檢索請(qǐng)求的區(qū)塊鏈節(jié)點(diǎn)組的目標(biāo)組號(hào),具體通過以下方式實(shí)現(xiàn):
16、將當(dāng)前交易的索引的hash值除以區(qū)塊鏈節(jié)點(diǎn)的總組數(shù),再進(jìn)行取模運(yùn)算,得到當(dāng)前交易的索引的hash值對(duì)應(yīng)的用于實(shí)現(xiàn)當(dāng)前檢索請(qǐng)求的區(qū)塊鏈節(jié)點(diǎn)組的目標(biāo)組號(hào),具體通過以下公式實(shí)現(xiàn):
17、rj=ijmodm(1)
18、其中,ij表示當(dāng)前檢索請(qǐng)求j中當(dāng)前交易的索引的hash值,m表示區(qū)塊鏈節(jié)點(diǎn)的總組數(shù),rj表示用于實(shí)現(xiàn)當(dāng)前檢索請(qǐng)求j的區(qū)塊鏈節(jié)點(diǎn)組的目標(biāo)組號(hào)。
19、可選的,所述區(qū)塊鏈的多個(gè)節(jié)點(diǎn)組以及節(jié)點(diǎn)組的組號(hào)的預(yù)先劃分通過以下步驟實(shí)現(xiàn):
20、步驟b1:針對(duì)區(qū)塊鏈的所有節(jié)點(diǎn),確定分組的總組數(shù);
21、步驟b2:根據(jù)總組數(shù),對(duì)區(qū)塊鏈中的所有節(jié)點(diǎn)進(jìn)行劃分,確定每個(gè)節(jié)點(diǎn)所屬的組號(hào),以得到區(qū)塊鏈的多個(gè)節(jié)點(diǎn)組以及節(jié)點(diǎn)組的組號(hào)。
22、可選的,步驟b1具體包括:
23、建立總組數(shù)的公式,具體通過公式(2)表示:
24、
25、其中,m表示區(qū)塊鏈節(jié)點(diǎn)的總組數(shù);c表示每組區(qū)塊鏈中節(jié)點(diǎn)與其他組區(qū)塊鏈中節(jié)點(diǎn)的通信時(shí)間;o表示在區(qū)塊鏈節(jié)點(diǎn)分組前,在inmpt結(jié)構(gòu)中,響應(yīng)當(dāng)前數(shù)據(jù)檢索請(qǐng)求所需時(shí)間;t是優(yōu)化目標(biāo),t表示在總組數(shù)為m時(shí),響應(yīng)當(dāng)前檢索請(qǐng)求所需時(shí)間;s.t.為約束條件,n+為正整數(shù),minm?t在總組數(shù)為m時(shí)使t最小;
26、對(duì)公式(2)求導(dǎo),得到:
27、dt/dm=c-o/m2(3)
28、令導(dǎo)數(shù)為0,得到
29、
30、由于m∈n+,公式(2)的最優(yōu)解為:
31、
32、由此得到區(qū)塊鏈節(jié)點(diǎn)組的總組數(shù)m的值為公式(5)。
33、可選的,步驟b2具體包括:
34、對(duì)區(qū)塊鏈中節(jié)點(diǎn)的地址,通過hash算法,得到hash值,將hash值除以總組數(shù),再進(jìn)行取模運(yùn)算,得到區(qū)塊鏈中節(jié)點(diǎn)被分配到的組號(hào),具體通過以下公式實(shí)現(xiàn):
35、gi=hash(adi)(modm)(6)
36、其中,adi表示節(jié)點(diǎn)i的地址,m表示區(qū)塊鏈節(jié)點(diǎn)的總組數(shù),gi表示節(jié)點(diǎn)i的組號(hào);
37、采用上述技術(shù)方案所產(chǎn)生的有益效果在于:
38、在本發(fā)明中,所述inmpt實(shí)現(xiàn)了通過當(dāng)前交易對(duì)應(yīng)的葉節(jié)點(diǎn)的value,即可直接檢索到前階段交易對(duì)應(yīng)的葉節(jié)點(diǎn),從而避免了在鏈下檢索交易完整信息,以獲取前一階段交易的索引;所述交易劃分實(shí)現(xiàn)了在所述inmpt的不同交易分支上的并行數(shù)據(jù)檢索,從而將檢索時(shí)間復(fù)雜度從o(log(n))降為o(log(n/k)),提高了大量交易數(shù)據(jù)時(shí)的檢索效率;所述節(jié)點(diǎn)劃分實(shí)現(xiàn)了不同節(jié)點(diǎn)組的并行數(shù)據(jù)檢索,從而提高了檢索請(qǐng)求頻次高時(shí)的檢索效率。本發(fā)明與傳統(tǒng)只在鏈上存儲(chǔ)交易hash值的鏈上鏈下方法相比,在全生命周期溯源中的數(shù)據(jù)檢索效率方面提高了約1233%。