本發(fā)明涉及區(qū)塊鏈技術(shù)領(lǐng)域,尤其涉及數(shù)據(jù)的保存不需要直接通過交易的確認(rèn)來實(shí)現(xiàn)正確寫入的基于區(qū)塊鏈的快速數(shù)據(jù)存儲方法及系統(tǒng)。
背景技術(shù):
區(qū)塊鏈?zhǔn)且粋€去中心化去信任的集體維護(hù)的可靠數(shù)據(jù)庫,分布式網(wǎng)絡(luò)是區(qū)塊鏈的基礎(chǔ)設(shè)施,每個節(jié)點(diǎn)上產(chǎn)生的數(shù)據(jù)通過分布式網(wǎng)絡(luò)廣播到其他節(jié)點(diǎn),其他節(jié)點(diǎn)通過工作量證明來驗(yàn)證數(shù)據(jù)的真實(shí)性。分布式網(wǎng)絡(luò)是保證區(qū)塊鏈去中心化、不可篡改、可追溯特性的前提,在比特幣網(wǎng)絡(luò)中,正是由于有分布于全球的驗(yàn)證節(jié)點(diǎn),才使得比特幣的工作量證明機(jī)制得到認(rèn)可,也才讓人們認(rèn)識到了區(qū)塊鏈的價值。通過上面的描述不難發(fā)現(xiàn),區(qū)塊鏈的一個重要特性是不可篡改性。由于各個區(qū)塊通過歷史相關(guān)性串聯(lián)在一起形成一個單一鏈,使得數(shù)據(jù)一旦記錄,就不能被篡改。對數(shù)據(jù)的直接修改都將導(dǎo)致之后的區(qū)塊無效化。所以這個特性被廣泛的應(yīng)用在數(shù)據(jù)的防偽,標(biāo)識等方面。
現(xiàn)有的區(qū)塊鏈的基本操作是交易,區(qū)塊鏈記錄的也是關(guān)于用戶的余額或者對余額的修改記錄。由于區(qū)塊鏈的分布式特性,區(qū)塊鏈能記錄的數(shù)據(jù)量很少。對區(qū)塊鏈這個特性,記錄額外數(shù)據(jù)應(yīng)用的通常做法是將一些信息保存在交易的宏信息部分,這樣當(dāng)交易被執(zhí)行并計(jì)入?yún)^(qū)塊鏈后,所包含的宏信息也永久的記錄在區(qū)塊鏈中。
采用這種方式存在以下缺陷:1、執(zhí)行需要交易來實(shí)現(xiàn),一方面需要發(fā)送一定的交易數(shù)額,另一方面需要對交易進(jìn)行簽名,這樣使得對數(shù)據(jù)的記錄必須對應(yīng)于某個用戶賬戶或者錢包,并且需要訪問相應(yīng)的私鑰信息。2、保存的宏信息分散在當(dāng)個交易當(dāng)中,對該信息的查詢必須遍歷每個交易。3、數(shù)據(jù)的保存必須通過交易的確認(rèn)來實(shí)現(xiàn)正確寫入。
技術(shù)實(shí)現(xiàn)要素:
為解決現(xiàn)有技術(shù)存在的問題,本發(fā)明提供一種基于區(qū)塊鏈的快速數(shù)據(jù)存儲方法及系統(tǒng)。
為實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案為:一種基于區(qū)塊鏈的快速數(shù)據(jù)存儲方法,包括:
步驟a、使用者通過客戶端獲得服務(wù)接口;
步驟b、使用者構(gòu)建需要寫入的數(shù)據(jù)條;
步驟c、使用者提供合適的訪問控制,提交數(shù)據(jù)條到接入服務(wù)器;
步驟d、接入服務(wù)器發(fā)送請求至分布式驗(yàn)證服務(wù)器,
步驟e、驗(yàn)證服務(wù)器獲得客戶的存儲請求,得到數(shù)據(jù)條;
步驟f、驗(yàn)證服務(wù)器通過共識系統(tǒng),對數(shù)據(jù)條進(jìn)行驗(yàn)證并對數(shù)據(jù)條集合進(jìn)行共識,
步驟g、當(dāng)區(qū)塊周期到時,驗(yàn)證服務(wù)器將驗(yàn)證過的數(shù)據(jù)寫入?yún)^(qū)塊鏈。
一種基于區(qū)塊鏈的快速數(shù)據(jù)存儲系統(tǒng),其特征在于:包括
客戶端:供使用者寫入數(shù)據(jù)條、數(shù)據(jù)查詢及提供提交數(shù)據(jù)條或查詢指令到接入服務(wù)器的服務(wù)接口;
接入服務(wù)器:接收來自于客戶端的數(shù)據(jù)條或查詢指令,并將數(shù)據(jù)條或查詢指令發(fā)送請求至分布式驗(yàn)證服務(wù)器;
分布式驗(yàn)證服務(wù)器:通過共識系統(tǒng),對數(shù)據(jù)條集合進(jìn)行共識驗(yàn)證,當(dāng)區(qū)塊周期到時,驗(yàn)證服務(wù)器將驗(yàn)證過的數(shù)據(jù)條集合寫入?yún)^(qū)塊鏈;
區(qū)塊鏈系統(tǒng):支持?jǐn)?shù)據(jù)存儲,供驗(yàn)證服務(wù)器將驗(yàn)證過的數(shù)據(jù)寫入相應(yīng)的區(qū)塊鏈中。
采用上述技術(shù)方案所帶來的有益效果為:
1、本發(fā)明不需要通過單個交易來把數(shù)據(jù)計(jì)入?yún)^(qū)塊鏈。而是在區(qū)塊鏈的區(qū)塊部分,單獨(dú)定義出一塊數(shù)據(jù)存儲區(qū),用來記錄用戶的數(shù)據(jù)寫入請求。這樣,我們就避免了現(xiàn)有的通過交易來間接存儲的辦法。使得數(shù)據(jù)的存儲請求和交易的訪問分開,用戶存儲時不需要了解交易的要素(發(fā)送數(shù)額,私鑰簽名,接受地址)。這樣可以有利于用戶端的權(quán)限訪問控制。
2、數(shù)據(jù)存儲的請求通過區(qū)塊鏈提供的服務(wù)接口對用戶開放。針對不同的應(yīng)用場景,這個服務(wù)接口可以設(shè)置成私有的或者公有的。訪問控制可以通過統(tǒng)一的數(shù)據(jù)存儲訪問權(quán)限控制,方式更加靈活。
3、數(shù)據(jù)的存儲效率可以大大提高。相比寄生于交易的方式,直接數(shù)據(jù)存儲的空間利用率得到數(shù)量級的提高。
4、對數(shù)據(jù)的查詢也會由于存儲的統(tǒng)一而獲得加速,同時可以采用各種優(yōu)化的辦法進(jìn)一步提升效率。
5、本存儲技術(shù)可以獨(dú)立于現(xiàn)有的基于交易的區(qū)塊鏈系統(tǒng),也可以架構(gòu)于現(xiàn)有的區(qū)塊鏈系統(tǒng),獲得額外的快速數(shù)據(jù)存儲的功能,部署的方式靈活。
附圖說明
圖1是數(shù)據(jù)條格式框圖。
圖2是共識驗(yàn)證流程框圖。
具體實(shí)施方式
下面結(jié)合具體實(shí)施方式對本發(fā)明優(yōu)選的方案做進(jìn)一步的闡述。
如圖1和圖2所示,一種基于區(qū)塊鏈的快速數(shù)據(jù)存儲方法,其特征在于:包括
步驟a、使用者通過客戶端獲得服務(wù)接口;進(jìn)一步的改進(jìn),服務(wù)接口是公開的或者是受保護(hù)的。
步驟b、使用者構(gòu)建需要寫入的數(shù)據(jù)條;進(jìn)一步的改進(jìn),數(shù)據(jù)條根據(jù)應(yīng)用的需要,自己定義相關(guān)的協(xié)議,包括時間相關(guān)性,唯一性檢查。數(shù)據(jù)條格式從左至右依次為:公鑰、簽名、時戳、序列表、上個區(qū)塊號和負(fù)載。詳細(xì)的方案為客戶端采用數(shù)字加密算法產(chǎn)生一個私鑰,如果用戶已有該私鑰,則不需要再生成;此時通過采用的加密算法進(jìn)行處理,從賬號私鑰導(dǎo)出賬號公鑰;根據(jù)規(guī)定的數(shù)據(jù)條格式,生成數(shù)據(jù)條;如沒有上一個區(qū)塊號,則設(shè)置為0;將數(shù)據(jù)條中除簽名外的部分合并并用私鑰簽名;將獲得的簽名寫入數(shù)據(jù)條。
步驟c、使用者提供合適的訪問控制,提交數(shù)據(jù)條到接入服務(wù)器;
步驟d、接入服務(wù)器發(fā)送請求至分布式驗(yàn)證服務(wù)器,
步驟e、驗(yàn)證服務(wù)器獲得客戶的存儲請求,得到數(shù)據(jù)條;
步驟f、驗(yàn)證服務(wù)器通過共識系統(tǒng),對數(shù)據(jù)條進(jìn)行驗(yàn)證并對數(shù)據(jù)條集合進(jìn)行共識;進(jìn)一步的,驗(yàn)證服務(wù)器查詢當(dāng)前的活躍區(qū)塊是否已有記錄,如已有則忽略;驗(yàn)證服務(wù)器對數(shù)據(jù)條中的公鑰和信息部分進(jìn)行簽名驗(yàn)證;驗(yàn)證節(jié)點(diǎn)對數(shù)據(jù)條中的歷史區(qū)塊進(jìn)行驗(yàn)證,確認(rèn)合法及包含正確的序列號;驗(yàn)證成功,則將數(shù)據(jù)條加入驗(yàn)證隊(duì)列中,并發(fā)送驗(yàn)證結(jié)果至其他驗(yàn)證服務(wù)器;驗(yàn)證服務(wù)器通過預(yù)先設(shè)置的共識機(jī)制決定當(dāng)前的共識數(shù)據(jù)條集合;當(dāng)共識周期到時,所有符合要求的數(shù)據(jù)條集合從驗(yàn)證隊(duì)列寫入?yún)^(qū)塊鏈系統(tǒng)中相應(yīng)的區(qū)塊鏈中;未符合要求的數(shù)據(jù)條進(jìn)入下一次共識周期,直到共識完成或者超時。
步驟g、當(dāng)區(qū)塊周期到時,驗(yàn)證服務(wù)器將驗(yàn)證過的數(shù)據(jù)條集合寫入?yún)^(qū)塊鏈。
步驟h、數(shù)據(jù)查詢,使用者通過客戶端合適的訪問權(quán)限,提交查詢數(shù)據(jù)到接入服務(wù)器;接入服務(wù)器訪問已驗(yàn)證的區(qū)塊鏈,根據(jù)公鑰找出記錄并回溯得到所有的歷史記錄;接入服務(wù)器將數(shù)據(jù)結(jié)果返回給查詢用戶。
一種基于區(qū)塊鏈的快速數(shù)據(jù)存儲系統(tǒng),包括
客戶端:供使用者寫入數(shù)據(jù)條、數(shù)據(jù)查詢及提供提交數(shù)據(jù)條或查詢指令到接入服務(wù)器的服務(wù)接口;
接入服務(wù)器:接收來自于客戶端的數(shù)據(jù)條或查詢指令,并將數(shù)據(jù)條或查詢指令發(fā)送請求至分布式驗(yàn)證服務(wù)器;
分布式驗(yàn)證服務(wù)器:通過共識系統(tǒng),對數(shù)據(jù)條進(jìn)行共識驗(yàn)證,當(dāng)區(qū)塊周期到時,驗(yàn)證服務(wù)器將驗(yàn)證過的數(shù)據(jù)條集合寫入?yún)^(qū)塊鏈;進(jìn)一步的,分布式驗(yàn)證服務(wù)器獲得客戶的存儲請求,得到數(shù)據(jù)條;驗(yàn)證服務(wù)器查詢當(dāng)前的活躍區(qū)塊是否已有記錄,如已有則忽略;驗(yàn)證服務(wù)器對數(shù)據(jù)條中的公鑰和信息部分進(jìn)行簽名驗(yàn)證;驗(yàn)證節(jié)點(diǎn)對數(shù)據(jù)條中的歷史區(qū)塊進(jìn)行驗(yàn)證,確認(rèn)合法及包含正確的序列號;驗(yàn)證成功,則將數(shù)據(jù)條加入驗(yàn)證隊(duì)列中,并發(fā)送驗(yàn)證結(jié)果至其他驗(yàn)證服務(wù)器;驗(yàn)證服務(wù)器通過預(yù)先設(shè)置的共識機(jī)制決定當(dāng)前的共識數(shù)據(jù)條集合;當(dāng)共識周期到時,所有符合要求的數(shù)據(jù)條集合從驗(yàn)證隊(duì)列寫入?yún)^(qū)塊鏈系統(tǒng)中相應(yīng)的區(qū)塊鏈中;未符合要求的數(shù)據(jù)條進(jìn)入下一次共識周期,直到共識完成或者超時。
區(qū)塊鏈系統(tǒng):支持?jǐn)?shù)據(jù)存儲,供驗(yàn)證服務(wù)器將驗(yàn)證過的數(shù)據(jù)寫入相應(yīng)的區(qū)塊鏈中。進(jìn)一步的在區(qū)塊鏈系統(tǒng)中的區(qū)塊鏈的區(qū)塊部分單獨(dú)定義有一塊數(shù)據(jù)存儲區(qū),用來記錄用戶的數(shù)據(jù)寫入請求。
下面針對本技術(shù)方案的工作流程進(jìn)行展開描述:
數(shù)據(jù)存儲流程:
數(shù)據(jù)庫使用者通過客戶端獲得服務(wù)的接口。這個接口可以是公開的或者是受保護(hù)的。使用者構(gòu)建需要寫入的數(shù)據(jù)條,這個數(shù)據(jù)條可以根據(jù)應(yīng)用的需要,自己定義相關(guān)的協(xié)議,包括時間相關(guān)性,唯一性檢查等。使用者提供合適的訪問控制,向接入服務(wù)器獲得提出存儲請求。接入服務(wù)器轉(zhuǎn)發(fā)給后臺處理和驗(yàn)證服務(wù)器驗(yàn)證服務(wù)器通過共識系統(tǒng),對數(shù)據(jù)進(jìn)行共識驗(yàn)證。當(dāng)區(qū)塊周期到時,驗(yàn)證服務(wù)器將驗(yàn)證過的數(shù)據(jù)寫入?yún)^(qū)塊鏈。
系統(tǒng)工作流程:
客戶端創(chuàng)建數(shù)據(jù)條;客戶端通過系統(tǒng)采用的數(shù)字加密算法產(chǎn)生一個私鑰,如果用戶已有該私鑰,則不需要再生成;通過采用的加密算法進(jìn)行處理,從賬號私鑰導(dǎo)出賬號公鑰;根據(jù)圖1的格式,生成數(shù)據(jù)條;如沒有上一個區(qū)塊號,則設(shè)置為0;將數(shù)據(jù)條中除簽名外的部分合并并用私鑰簽名;將獲得的簽名寫入數(shù)據(jù)條。提交數(shù)據(jù)到接入服務(wù)器客戶通過合適的權(quán)限,提交數(shù)據(jù)到接入服務(wù)器;接入服務(wù)器發(fā)送請求至驗(yàn)證服務(wù)器,驗(yàn)證服務(wù)器驗(yàn)證后返回結(jié)果客戶從接入服務(wù)器獲得結(jié)果。
數(shù)據(jù)共識
分布式驗(yàn)證服務(wù)器獲得客戶的存儲請求,得到數(shù)據(jù)條;驗(yàn)證服務(wù)器查詢當(dāng)前的活躍區(qū)塊是否已有記錄,如已有則忽略;驗(yàn)證服務(wù)器對數(shù)據(jù)條中的公鑰和信息部分進(jìn)行簽名驗(yàn)證;驗(yàn)證服務(wù)器對數(shù)據(jù)條中的歷史區(qū)塊進(jìn)行驗(yàn)證,確認(rèn)合法及包含正確的序列號;驗(yàn)證成功,則將數(shù)據(jù)條加入驗(yàn)證隊(duì)列中,并發(fā)送驗(yàn)證結(jié)果至其他驗(yàn)證節(jié)點(diǎn);驗(yàn)證服務(wù)器通過預(yù)先設(shè)置的共識機(jī)制決定當(dāng)前的共識數(shù)據(jù)條集合;當(dāng)共識周期到時,所有符合要求的數(shù)據(jù)條集合從驗(yàn)證隊(duì)列寫入?yún)^(qū)塊鏈系統(tǒng)中相應(yīng)的區(qū)塊鏈中;未符合要求的數(shù)據(jù)條進(jìn)入下一次共識周期,直到共識完成或者超時。
數(shù)據(jù)查詢
客戶通過合適的權(quán)限,提交數(shù)據(jù)到接入服務(wù)器;接入服務(wù)器訪問已驗(yàn)證的區(qū)塊,根據(jù)公鑰找出記錄并回溯得到所有的歷史記錄;接入服務(wù)器將數(shù)據(jù)結(jié)果返回給查詢用戶。