區塊鏈資料讀取方法及裝置
本說明書實施例係有關資訊技術領域,尤其有關一種區塊鏈資料讀取方法及裝置。
區塊鏈網路是一種去中心化的、由多個節點參與的分散式資料儲存系統。資料一旦被寫入每個節點上的區塊鏈,一方面,意味著資料在全網公開,另一方面,寫入區塊鏈的資料也難以被刪除與篡改。基於此,在資料存證領域,區塊鏈技術具有很大的應用前景。
然而,在實際應用中,有些資料(本文稱之為敏感性資料)一旦被寫入區塊鏈,就會造成不可消除的危害後果。例如,張三對李四進行誹謗,並將誹謗言論的文字檔上傳到區塊鏈網路進行存證,導致該文字檔被寫入區塊鏈,區塊鏈網路中的任一節點都可以從區塊鏈中讀取該文字檔,這相當於給李四的名譽造成不可消除的傷害。又如,A公司盜取B公司的商業機密,並將盜取的商業機密上傳到區塊鏈網路進行存證,導致該商業機密被寫入區塊鏈,區塊鏈網路中的任一節點都可以從區塊鏈中讀取該商業機密,這相當於給B公司造成不可挽回的損失。
為了解決敏感性資料被寫入區塊鏈容易造成危害後果的問題,本說明書實施例提供一種區塊鏈資料讀取方法及裝置,技術方案如下:
根據本說明書實施例的第1態樣,提供一種對寫入區塊鏈的交易進行查詢的方法,針對寫入區塊鏈的任一交易,區塊鏈網路中的各節點上預先記錄有該交易的交易標識與區塊鏈中該交易所在的交易儲存位置之間的對應關係,所述方法包括:
所述區塊鏈網路中的任一節點接收資料讀取請求;
根據所述資料讀取請求包含的目標交易標識以及預先記錄的交易標識與交易儲存位置的對應關係,確定所述目標交易標識對應的交易儲存位置,作為目標交易儲存位置;
從區塊鏈中的所述目標交易儲存位置讀取資料;
其中,若區塊鏈中對應於所述目標交易標識的交易已被替換成隱匿化資料,則讀取到的資料為所述隱匿化資料,所述隱匿化資料包括所述目標交易標識對應的交易的交易雜湊,將所述目標交易標識對應的交易替換成隱匿化資料的操作,是所述區塊鏈網路中具有交易隱匿權限的節點指令各節點所執行的。
根據本說明書實施例的第2態樣,提供一種區塊鏈資料讀取裝置,所述裝置為所述區塊鏈網路中的任一節點,針對寫入區塊鏈的任一交易,區塊鏈網路中的各節點上預先記錄有該交易的交易標識與區塊鏈中該交易所在的交易儲存位置之間的對應關係,所述裝置包括:
接收模組,接收資料讀取請求;
確定模組,根據所述資料讀取請求包含的目標交易標識以及預先記錄的交易標識與交易儲存位置的對應關係,確定所述目標交易標識對應的交易儲存位置,作為目標交易儲存位置;
讀取模組,從區塊鏈中的所述目標交易儲存位置讀取資料,作為查詢到的資料;
其中,若區塊鏈中對應於所述目標交易標識的交易已被替換成隱匿化資料,則讀取到的資料為所述隱匿化資料,所述隱匿化資料包括所述目標交易標識對應的交易的交易雜湊,將所述目標交易標識對應的交易替換成隱匿化資料的操作,是所述區塊鏈網路中具有交易隱匿權限的節點指令各節點所執行的。
根據本說明書實施例的第3態樣,提供一種區塊鏈系統,包括由多個節點組成的區塊鏈網路;針對寫入區塊鏈的任一交易,區塊鏈網路中的各節點上預先記錄有該交易的交易標識與區塊鏈中該交易所在的交易儲存位置之間的對應關係;
所述區塊鏈網路中的任一節點,接收資料讀取請求;根據所述資料讀取請求包含的目標交易標識以及預先記錄的交易標識與交易儲存位置的對應關係,確定所述目標交易標識對應的交易儲存位置,作為目標交易儲存位置;從區塊鏈中的所述目標交易儲存位置讀取資料,
其中,若區塊鏈中對應於所述目標交易標識的交易已被替換成隱匿化資料,則讀取到的資料為所述隱匿化資料,所述隱匿化資料包括所述目標交易標識對應的交易的交易雜湊,將所述目標交易標識對應的交易替換成隱匿化資料的操作,是所述區塊鏈網路中具有交易隱匿權限的節點指令各節點所執行的。
本說明書實施例所提供的技術方案,如果寫入區塊鏈的某個交易是不宜公開的敏感性資料,那麼,區塊鏈網路中的各節點可以將該交易替換成該交易的交易雜湊。一方面,該交易的交易雜湊是對該交易採用單向散列演算法(即雜湊演算法)計算得到的,由該交易的交易雜湊無法逆推出該交易,因此,將該交易替換成該交易的交易雜湊,相當於將區塊鏈中公示的該交易的明文內容加密後隱匿起來。另一方面,將該交易替換成該交易的交易雜湊,並不會影響該交易所在區塊對應的梅克爾樹的穩定性,也就不會影響到針對其他交易(與該交易位於同一區塊中的交易)的簡單支付驗證(Simplified Payment Verification,SPV)的準確性,從而確保了資料存證業務的正常運行。當請求從區塊鏈中讀取的交易包含有敏感性資料時,區塊鏈網路中的節點向用戶返回的資料實際上並不是該交易的明文內容。
應當理解的是,以上的一般描述和後文的細節描述僅是示例性和解釋性的,並不能限制本說明書實施例。
此外,本說明書實施例中的任一實施例並不需要達到上述的全部效果。
需要說明的是,在本說明書中所描述的交易(transaction),是指用戶透過區塊鏈的用戶端創建,並需要最終發布至區塊鏈的分散式資料庫中的一筆資料。交易是區塊鏈協定中所約定的一種資料結構,一筆資料要存入區塊鏈,就需要被封裝成交易。
區塊鏈中的交易,存在狹義的交易以及廣義的交易之分。狹義的交易是指用戶向區塊鏈發布的一筆價值轉移;例如,在傳統的比特幣區塊鏈網路中,交易可以是用戶在區塊鏈中發起的一筆轉帳。而廣義的交易是指用戶向區塊鏈發布的一筆具有業務意圖的業務資料;例如,營運方可以基於實際的業務需求搭建一個聯盟鏈,依託於聯盟鏈部署一些與價值轉移無關的其它類型的線上業務(比如,租房業務、車輛調度業務、保險理賠業務、信用服務、醫療服務等),而在這類聯盟鏈中,交易可以是用戶在聯盟鏈中發布的一筆具有業務意圖的業務訊息或者業務請求。
在基於區塊鏈的資料存證場景下,交易一旦被寫入區塊鏈,就會被永久存證下來,不可被刪除與篡改。然而,在實際應用中,如果寫入區塊鏈的交易後續被認定包含不宜公開的敏感性資料,那麼,如何使得寫入區塊鏈的敏感性資料停止公開,就成為一個難以解決的技術問題。
假設將寫入區塊鏈的敏感交易(包含敏感性資料的交易)直接刪除,那麼很容易導致基於區塊鏈所運行的資料存證業務無法正常運行。原因具體為:
眾所周知,考慮到有的節點的儲存能力較弱,區塊鏈網路中的節點存在全節點與輕節點之分。全節點的區塊鏈中有完整的資料備份,即每個區塊既包括區塊頭,也包括區塊體;區塊中的各交易儲存於區塊體中,基於區塊中的各交易建構的梅克爾樹的根雜湊儲存於區塊頭中。然而,輕節點的區塊鏈中並沒有完整的資料備份,即每個區塊僅有區塊頭,並沒有區塊體。
當用戶向某個輕節點請求驗證自己之前上傳的資料是否已被寫入區塊鏈時,由於輕節點的區塊鏈中的每個區塊僅包括區塊頭,因此,輕節點需要借助於全節點,才能針對某個交易是否已被寫入區塊鏈進行驗證,這就是所謂的簡單支付驗證SPV。
值得強調的是,在區塊鏈技術領域,所謂簡單支付驗證,廣義上是指標對某個交易,驗證該交易是否已寫入區塊鏈。簡單支付驗證的原理是,輕節點向全節點請求驗證某個交易(稱為目標交易)是否已寫入區塊鏈,全節點首先會定位所述目標交易所在的區塊(稱為目標區塊),然後基於目標區塊中的各交易建構梅克爾樹(Merkle trees),然後確定目標交易對應的梅克爾驗證路徑,並將目標交易對應的梅克爾路徑所關聯的雜湊值返回給輕節點。輕節點會根據全節點返回的雜湊值,驗證目標交易對應的梅克爾路徑是否正確,即根據目標交易的交易雜湊與全節點返回的雜湊值,計算梅克爾樹的根雜湊,並判斷計算得到的根雜湊與自身儲存的目標區塊的區塊頭中的根雜湊是否一致,如果一致,就認定驗證通過,證明目標交易確實已經被寫入區塊鏈中。
圖1是本說明提供的梅克爾樹的結構示意圖。如圖1所示,在梅克爾樹中,各葉節點與目標區塊中儲存的各交易一一對應。每個葉節點上的雜湊值是對相應的交易進行雜湊運算得到的交易雜湊。而針對每個父節點,該父節點上的雜湊值是對該父節點的兩個子節點上的雜湊值進行雜湊運算得到的。
假設目標交易交易1。輕節點需要驗證交易1是否被寫入區塊鏈中。於是,輕節點向任一全節點發送請求,全節點首先會確定目標區塊並建構出如圖1所示的梅克爾樹。然後,全節點會確定交易1對應的梅克爾路徑所關聯的雜湊值為Hash2、Hash10、Hash14,並將Hash2、Hash10、Hash14返回給輕節點。輕節點根據Hash1(交易1的交易雜湊)、Hash2、Hash10、Hash14,就可以計算得到梅克爾樹的根雜湊,然後,輕節點若發現計算得到的根雜湊與目標區塊的區塊頭中儲存的根雜湊一致,就認定交易1確實已經被寫入區塊鏈。
顯然,在觸發針對目標交易的簡單支付驗證之前,全節點通常需要基於目標區塊中的各交易建構梅克爾樹。這樣,才能把目標交易對應的梅克爾路徑所關聯的雜湊值返回給輕節點,從而觸發針對目標交易的簡單支付驗證。這也意味著,交易1至交易8中的任一交易被篡改或被刪除,梅克爾樹的根雜湊(即Hash1-8)就會發生改變,從而影響到簡單支付驗證的準確性。
例如,如圖1所示,交易2包含敏感性資料,如果直接將交易2從區塊鏈中刪除,那麼,當需要針對交易1、交易3至8中的任一交易進行簡單支付驗證時,由於缺少交易2,只能基於交易1、交易3至8建構梅克爾樹,如此,建構的梅克爾樹的根雜湊與目標區塊的區塊頭中儲存的根雜湊是不一致的,會導致簡單支付驗證出錯。
為此,本發明可以在對區塊鏈系統中的簡單支付驗證不構成干擾的前提下,實現了對區塊鏈中某個交易的隱匿。本發明的核心技術手段是將區塊鏈中需要被隱匿的交易替換成該交易的交易雜湊。如此,既可以停止公開該交易的明文內容,又不會干擾到區塊鏈系統中的簡單支付驗證體系的平穩運行。
為了使本領域技術人員更好地理解本說明書實施例中的技術方案,下面將結合本說明書實施例中的圖式,對本說明書實施例中的技術方案進行詳細地描述,顯然,所描述的實施例僅僅是本說明書的一部分實施例,而不是全部的實施例。基於本說明書中的實施例,本領域普通技術人員所獲得的所有其他實施例,都應當屬於保護的範圍。
以下結合圖式,詳細說明本說明書各實施例提供的技術方案。
圖2是本說明書實施例提供的一種對寫入區塊鏈的交易進行隱匿的方法,的流程示意圖,包括以下步驟:
S200:執行節點獲取目標交易標識。
本發明所應用的場景為基於區塊鏈的資料存證場景。在此場景下,由包括多個節點的區塊鏈網路對資料進行分散式存證。
在本說明書實施例中,可以將交易隱匿權限授予區塊鏈網路中的至少一個節點。本文將具有交易隱匿權限的節點稱為執行節點。進一步地,區塊鏈網路中的每個節點都可以是執行節點。
在本說明書實施例中,交易的交易標識用於唯一標識交易。具體地,交易的交易標識可以是對交易進行雜湊運算後得到的交易雜湊,也可以是為交易分配的唯一編號。
在步驟S200中,所述目標交易標識可以是某個用戶發送給執行節點的。該用戶可以是上傳敏感性資料的用戶,也可以是有權要求隱匿敏感性資料的主體(如法院、受害人等)。也就是說,在需要隱匿敏感性資料的場景下,所述目標交易標識可以是包含所述敏感性資料的交易的交易標識。
當然,本方案不僅可以實現對敏感性資料的隱匿,也可以實現對非敏感性資料的隱匿。因此,廣義上講,所述目標交易標識可以是任一交易的交易標識。
S202:所述執行節點建構包含所述目標交易標識的隱匿指令,並向所述區塊鏈網路廣播所述隱匿指令。
具體地,所述執行節點可以對所述隱匿指令進行簽名,並向所述區塊鏈網路廣播簽名後的所述隱匿指令。
S204:針對所述區塊鏈網路中的每個節點,該節點根據所述隱匿指令,將區塊鏈中對應於所述目標交易標識的交易替換成隱匿化資料。
針對區塊鏈網路中的每個節點,該節點具體可以先對所述隱匿指令進行簽名驗證,若簽名驗證通過,則確認所述隱匿指令是所述執行節點發出的,並且,該節點需要確認所述執行節點確實具有交易隱匿權限。然後,該節點才會執行交易隱匿操作。
進一步地,在實際應用中,如果每次交易隱匿操作的記錄也需要寫入區塊鏈進行存證,那麼,所述執行節點具體可以將所述隱匿指令封裝成交易並向所述區塊鏈網路廣播。這樣,區塊鏈網路中的每個節點可以將封裝成交易的所述隱匿指令寫入區塊鏈。
此處需要說明,在本說明書實施例,用於儲存資料存證交易的區塊鏈與用於儲存隱匿指令交易的區塊鏈可以不是同一個區塊鏈。這樣,針對所述區塊鏈網路中的每個節點,該節點上需要維護兩個區塊鏈。
在本說明書實施例中,針對每個節點,該節點在接收到所述隱匿指令之後,需要構造隱匿化資料,並將所述目標交易標識對應的交易替換成構造的隱匿化資料。所述隱匿化資料包括所述目標交易標識對應的交易的交易雜湊。在本文中,交易的交易雜湊是指,對交易進行一次雜湊運算後得到的運算結果。
具體地,如果所述目標交易標識是相應的交易的交易雜湊,那麼,每個節點可以直接將所述交易雜湊作為所述隱匿化資料。如果所述目標交易標識不是相應的交易的交易雜湊,那麼,每個節點可以先對所述目標交易標識對應的交易進行雜湊運算,得到交易雜湊,然後將所述交易雜湊作為所述隱匿化資料。
隨後,每個節點會將區塊鏈中對應於所述目標交易標識的交易替換成隱匿化資料。
在本文中,所謂交易儲存位置,是指區塊鏈中,用於儲存交易的儲存空間或儲存位址。假設區塊鏈中寫入了N個交易(N為大於1的自然數),那麼,區塊鏈中也同時有N個交易儲存位置,分別用於儲存這N個交易。
在本說明書實施例中,每個節點可以根據所述目標交易標識,在區塊鏈中的各交易中進行遍歷,以搜尋所述目標交易標識對應的交易,也就是定位到所述目標交易標識對應的交易所在的交易儲存位置。隨後,從定位到的交易儲存位置刪除所述目標交易標識對應的交易,並向定位到的交易儲存位置存入所述目標交易標識對應的交易的交易雜湊。
進一步地,由於對於節點而言,根據目標交易標識在區塊鏈中以遍歷的方式定位交易效率較低,因此,在本說明書實施例中,每個節點可以預先針對寫入區塊鏈的任一交易,在區塊鏈之外,另行記錄該交易的交易標識與區塊鏈中該交易所在的交易儲存位置之間的對應關係。
其中,針對寫入區塊鏈的任一交易,區塊鏈中該交易所在的交易儲存位置,一般是該交易所在的區塊的高度(即區塊鏈中區塊的順位號)以及該交易在區塊中的順位號。例如,打包有交易A的區塊被寫入到區塊鏈中第4個區塊之後,即打包有交易A的區塊的高度是5,並且,交易A是區塊中的第10個交易。因此,交易A對應的交易儲存位置可以是(5,10)。
區塊鏈網路中的每個節點可以根據所述隱匿指令中包含的目標交易標識以及預先記錄的交易標識與交易儲存位置的對應關係,確定所述目標交易標識對應的交易儲存位置,作為目標交易儲存位置;然後,在區塊鏈中直接定位到所述目標交易儲存位置,並將區塊鏈中儲存於所述目標交易儲存位置的交易替換成隱匿化資料。
此外,在本說明書實施例中,所述隱匿化資料除了包括所述目標交易標識對應的交易的交易雜湊之外,還可以包括更多資訊。
具體地,圖3是本說明書實施例提供的構造隱匿化資料的過程示意圖。每個節點在構造隱匿化資料時,可以獲取所述目標交易標識對應的交易的交易雜湊;將預設的前標記字元拼接到所述交易雜湊的首部;根據所述前標記字元與所述交易雜湊拼接成的資料,確定所述隱匿化資料。
進一步地,圖4是本說明書實施例提供的構造隱匿化資料的另一過程示意圖。每個節點在構造隱匿化資料時,可以獲取所述目標交易標識對應的交易的交易雜湊;將預設的前標記字元拼接到所述交易雜湊的首部,將預設的後標記字元拼接到所述交易雜湊的尾部,並且,將備註資訊拼接到所述後標記字元的尾部;然後,將所述前標記字元、所述交易雜湊、所述後標記字元以及所述備註資訊拼接成的資料確定為所述隱匿化資料。
需要說明的是,上述的前標記字元與後標記字元可以根據實際需要進行指定。例如,所述前標記字元可以為“OE”,所述後標記字元可以為“OF”。
還需要說明的是,所述備註資訊具體可以是為實現特定業務需要所添加的資訊。例如,所述備註資訊可以是“hidden”,表明所述目標交易標識對應的交易已經被隱匿。當用戶查詢所述目標交易標識對應的交易時,所述備註資訊可以提示用戶交易是不可見的。
值得強調的是,上述的前標記字元的作用是,當節點針對某個交易儲存位置進行資料讀取時,如果該交易儲存位置的交易已經被替換成了隱匿化資料,那麼,相當於所述隱匿化資料中的前標記字元向節點透露出資訊:“該交易儲存位置所儲存的不是交易的明文內容,而是交易雜湊”。此外,上述的後標記字元的作用是,當隱匿化資料中包括備註資訊時,將隱匿化資料中的交易雜湊與備註資訊進行區隔,以便節點進行區分。
另外需要說明的是,在本說明書實施例中,每個節點執行的交易隱匿操作所對應的邏輯碼,可以預先被寫入每個節點的韌體中,也可以預先以智慧型合約的形式部署於每個節點上。
圖5是本說明書實施例提供的一種區塊鏈資料讀取方法的流程示意圖,包括如下步驟:
S500:所述區塊鏈網路中的任一節點接收資料讀取請求。
在圖5所示的方法中,所述資料讀取請求可以是用戶發送的。當用戶想要查詢區塊鏈中的某個交易時,需要將包含該交易的交易標識的交易查詢請求發送給所述區塊鏈網路中的任一節點。為了描述的方便,在對圖5所示的方法的說明中,將用戶想要查詢的任一交易的交易標識稱為目標交易標識。
S502:根據所述資料讀取請求包含的目標交易標識以及預先記錄的交易標識與交易儲存位置的對應關係,確定所述目標交易標識對應的交易儲存位置,作為目標交易儲存位置。
如前文所述,在本說明書實施例中,針對寫入區塊鏈的任一交易,區塊鏈網路中的各節點上可以預先記錄該交易的交易標識與區塊鏈中該交易所在的交易儲存位置之間的對應關係。如此,節點可以直接根據所述交易查詢請求中的目標交易標識,定位到區塊鏈中所述用戶所要查詢的交易儲存位置。
S504:從區塊鏈中的所述目標交易儲存位置讀取資料,作為查詢到的資料。
節點在定位到目標交易儲存位置之後,可以直接從目標交易儲存位置讀取資料,然後針對所述資料讀取請求,返回讀取到的資料。
其中,若區塊鏈中對應於所述目標交易標識的交易已被替換成隱匿化資料,則節點讀取到的資料為隱匿化資料。若區塊鏈中對應於所述目標交易標識的交易未已被替換成隱匿化資料,則節點讀取到的資料為所述目標交易標識對應的交易。
顯然,如果所述目標交易標識對應的交易因為包含有敏感性資料已經被隱匿,那麼,用戶查詢所述目標交易標識對應的交易時,節點返回給所述用戶的實際上是隱匿化資料,用戶並不能看到所述目標交易標識對應的交易的明文內容。
此外,如果隱匿化資料中不僅包括交易雜湊,還包括前標記字元,那麼,節點從所述目標交易儲存位置讀取隱匿化資料之後,可以分析出所述隱匿化資料中包含前標記字元,於是,節點可以針對所述資料讀取請求,返回提示資訊,以表明所述用戶所述目標交易標識對應的交易已被替換成隱匿化資料。這種情況下,節點可以不返回隱匿化資料,僅返回一個提示資訊進行說明即可。
或者,如果隱匿化資料中不僅包括交易雜湊,還包括前標記字元、後標記字元與備註資訊,節點從所述目標交易儲存位置讀取隱匿化資料之後,可以將所述備註資訊返回給所述用戶。這種情況下,節點也可以不向用戶返回隱匿化資料。例如,所述備註資訊是“hidden”,用戶節點返回的備註資訊後,就會得知所述目標交易標識對應的交易已經被隱匿。
此外,眾所周知,針對區塊鏈中的每個區塊,在該區塊被創設之初,會基於該區塊中的各交易建構如圖1所示的梅克爾樹,並計算梅克爾樹的根雜湊,將根雜湊寫入該區塊的區塊頭中。該區塊被寫入區塊鏈之後,一旦該區塊中的交易被篡改或刪除,就會導致基於區塊中的各交易建構的梅克爾樹的根雜湊發生變化,與區塊頭中的根雜湊不一致。正是因為如此,區塊鏈中的資料是難以篡改與刪除的。
當輕節點需要借助全節點進行簡單支付驗證時,全節點會根據輕節點提供的目標交易標識,確定所述目標交易標識對應的交易所在的區塊,並基於該區塊中的各交易建構梅克爾樹。隨後,才會基於建構的梅克爾樹觸發針對所述目標交易標識對應的交易的簡單支付驗證。
然而,在本說明書實施例中,針對區塊鏈中的任一區塊,該區塊中的某個交易可能被替換成了隱匿化資料,基於此,本發明相應提供一種改進後的建構梅克爾樹的方法以及一種改進後的簡單支付驗證方法。
圖6是本說明書實施例提供的一種建構梅克爾樹的方法的流程示意圖,包括如下步驟:
S600:目標全節點針對目標區塊中的每個交易儲存位置,從該交易儲存位置讀取資料。
在圖6所示的方法中,所述目標全節點是區塊鏈網路中的任一全節點,所述目標區塊是所述目標全節點的區塊鏈中的任一區塊。
在目標區塊中,通常,每個交易都儲存於各自的交易儲存位置。如果某個交易被替換成了隱匿化資料,則原本儲存該交易的交易儲存位置目前儲存的是該隱匿化資料。
目標全節點當需要建構所述目標區塊對應的梅克爾樹時,會從所述目標區塊的每個交易儲存位置讀取資料。
S602:對從該交易儲存位置讀取的資料進行分析。
目標全節點會針對每個交易儲存位置,對從該交易儲存位置讀取的資料進行分析,以判斷從該交易儲存位置讀取的資料是交易還是隱匿化資料。
具體地,由於交易是區塊鏈協定中約定的一種資料結構,因此,目標全節點可以據此判斷從該交易儲存位置讀取的資料是否為交易,如果不是交易,則是隱匿化資料。
此外,如果隱匿化資料不僅包括交易雜湊,還包括前標記字元,那麼,目標全節點也可以判斷從該交易儲存位置讀取的資料是否為隱匿化資料,如果包含前標記字元,就是隱匿化資料,如果不包含前標記字元,就是交易。
S604:若確定從該交易儲存位置讀取的資料為交易,則對讀取的交易進行雜湊計算,得到交易雜湊。
S606:若確定從該交易儲存位置讀取的資料為隱匿化資料,則從所述隱匿化資料中提取交易雜湊。
其中,從所述隱匿化資料中提取的交易雜湊,是該交易儲存位置原本儲存的交易的交易雜湊。將該交易儲存位置原本儲存的交易替換成所述隱匿化資料的操作,是所述區塊鏈網路中具有交易隱匿權限的節點指令各節點所執行的。
此處需要說明的是,如果所述隱匿化資料是由前標記字元與交易雜湊拼接成的,那麼,目標全節點具體可以將所述隱匿化資料中位於所述前標記字元之後的資料確定為交易雜湊並提取。
如果所述隱匿化資料是由前標記字元、交易雜湊、後標記字元、備註資訊拼接成的,那麼,目標全節點具體可以將所述隱匿化資料中位於所述前標記字元與所述後標記字元之間的資料確定為交易雜湊並提取。
S608:基於所述目標區塊中各交易儲存位置分別對應的交易雜湊,建構所述目標區塊對應的梅克爾樹。
圖7是本說明書實施例提供的一種簡單支付驗證方法的流程示意圖,包括如下步驟:
S700:目標全節點接收驗證請求。
所述目標全節點是區塊鏈網路中的任一全節點。所述驗證請求具體可以是所述區塊鏈網路中的任一輕節點發送的。
S702:根據所述驗證請求,在自身的區塊鏈中確定所述目標交易標識對應的交易所在的區塊,建構所述區塊對應的梅克爾樹。
一般而言,目標全節點在觸發針對針對所述目標交易標識對應的交易的簡單支付驗證流程之前,需要先定位所述目標交易標識對應的交易所在的區塊,並基於該區塊中目前包括的各交易,建構梅克爾樹。需要說明的是,在步驟S702中,目標全節點基於圖5所示的方法建構梅克爾樹。
在步驟S702中,目標全節點可以根據所述目標交易標識以及預先記錄的交易標識與交易儲存位置的對應關係,確定所述目標交易標識對應的交易儲存位置,作為目標交易儲存位置;然後,確定所述目標交易儲存位置所屬的區塊,作為所述目標交易標識對應的交易所在的區塊。
S704:基於建構的梅克爾樹,觸發針對所述目標交易標識對應的交易的簡單支付驗證SPV流程。
在建構梅克爾樹之後,目標全節點就可以觸發針對所述目標交易標識對應的交易的簡單支付驗證SPV流程。
具體地,目標全節點會根據建構的梅克爾樹,確定所述目標交易標識對應交易的梅克爾驗證路徑,並將所述梅克爾路徑所關聯的雜湊值返回給輕節點,以便所述輕節點根據所述目標交易標識對應的交易的交易雜湊以及所述目標全節點返回的雜湊值,計算梅克爾樹的根雜湊,並將計算的根雜湊與所述目標交易標識對應的交易所在的區塊的區塊頭中的根雜湊進行比對,如果一致,就認定通過驗證,如果不一致,就認定未通過驗證。
圖8是本說明書實施例提供的一種對寫入區塊鏈的交易進行隱匿的裝置的結構示意圖,所述裝置是區塊鏈網路中具有交易隱匿權限的節點,所述裝置包括:
獲取模組801,獲取目標交易標識;
執行模組802,建構包含所述目標交易標識的隱匿指令,並向所述區塊鏈網路廣播所述隱匿指令,以使所述區塊鏈網路中的每個節點根據所述隱匿指令,將區塊鏈中對應於所述目標交易標識的交易替換成隱匿化資料;所述隱匿化資料包括所述目標交易標識對應的交易的交易雜湊。
圖9本說明書實施例提供的一種對寫入區塊鏈的交易進行隱匿的裝置的結構示意圖,所述裝置是區塊鏈網路中的任一節點,所述裝置包括:
處理模組901,根據隱匿指令,將區塊鏈中對應於所述目標交易標識的交易替換成隱匿化資料;所述隱匿化資料包括所述目標交易標識對應的交易的交易雜湊;
其中,所述隱匿指令是執行節點根據獲取的目標交易標識建構並向所述區塊鏈網路廣播的;所述執行節點是所述區塊鏈網路中具有交易隱匿權限的節點。
本說明書實施例提供的一種區塊鏈系統,包括由多個節點組成的區塊鏈網路;
所述區塊鏈網路中具有交易隱匿權限的節點,獲取目標交易標識;建構包含所述目標交易標識的隱匿指令,並向所述區塊鏈網路廣播所述隱匿指令;
所述區塊鏈網路中的每個節點,根據所述隱匿指令,將區塊鏈中對應於所述目標交易標識的交易替換成隱匿化資料;所述隱匿化資料包括所述目標交易標識對應的交易的交易雜湊。
圖10是本說明書實施例提供的一種區塊鏈資料讀取裝置的結構示意圖,所述裝置為所述區塊鏈網路中的任一節點,針對寫入區塊鏈的任一交易,區塊鏈網路中的各節點上預先記錄有該交易的交易標識與區塊鏈中該交易所在的交易儲存位置之間的對應關係,所述裝置包括:
接收模組1001,接收資料讀取請求;
確定模組1002,根據所述資料讀取請求包含的目標交易標識以及預先記錄的交易標識與交易儲存位置的對應關係,確定所述目標交易標識對應的交易儲存位置,作為目標交易儲存位置;
讀取模組1003,從區塊鏈中的所述目標交易儲存位置讀取資料,作為查詢到的資料;
其中,若區塊鏈中對應於所述目標交易標識的交易已被替換成隱匿化資料,則讀取到的資料為所述隱匿化資料;所述隱匿化資料包括所述目標交易標識對應的交易的交易雜湊;將所述目標交易標識對應的交易替換成隱匿化資料的操作,是所述區塊鏈網路中具有交易隱匿權限的節點指令各節點執行的。
將所述目標交易標識對應的交易替換成隱匿化資料的操作如下:
獲取所述目標交易標識對應的交易的交易雜湊;
將預設的前標記字元拼接到所述交易雜湊的首部;
根據所述前標記字元與所述交易雜湊拼接成的資料,確定隱匿化資料;
將所述目標交易標識對應的交易替換成隱匿化資料。
根據所述前標記字元與所述交易雜湊拼接成的資料,確定隱匿化資料,具體包括:
將預設的後標記字元拼接到所述交易雜湊的尾部,並且,將備註資訊拼接到所述後標記字元的尾部;
將所述前標記字元、所述交易雜湊、所述後標記字元以及所述備註資訊拼接成的資料確定為所述隱匿化資料。
所述裝置還包括:
提示模組1004,若讀取到的資料包含所述前標記字元,則針對所述資料讀取請求,返回提示資訊,以表明所述目標交易標識對應的交易已被替換成隱匿化資料。
所述裝置還包括:
返回模組1005,針對所述資料讀取請求,返回讀取到的資料。
一種區塊鏈系統,包括由多個節點組成的區塊鏈網路;針對寫入區塊鏈的任一交易,區塊鏈網路中的各節點上預先記錄有該交易的交易標識與區塊鏈中該交易所在的交易儲存位置之間的對應關係;
所述區塊鏈網路中的任一節點,接收資料讀取請求;根據所述資料讀取請求包含的目標交易標識以及預先記錄的交易標識與交易儲存位置的對應關係,確定所述目標交易標識對應的交易儲存位置,作為目標交易儲存位置;從區塊鏈中的所述目標交易儲存位置讀取資料;
其中,若區塊鏈中對應於所述目標交易標識的交易已被替換成隱匿化資料,則讀取到的資料為所述隱匿化資料;所述隱匿化資料包括所述目標交易標識對應的交易的交易雜湊;將所述目標交易標識對應的交易替換成隱匿化資料的操作,是所述區塊鏈網路中具有交易隱匿權限的節點指令各節點執行的。
圖11是本說明書實施例提供的一種建構梅克爾樹的裝置的結構示意圖,所述裝置是區塊鏈網路中的任一全節點,所述裝置包括:
讀取模組1101,針對目標區塊中的每個交易儲存位置,從該交易儲存位置讀取資料,所述目標區塊是所述裝置的區塊鏈中的任一區塊;
分析模組1102,對從該交易儲存位置讀取的資料進行分析;
交易雜湊確定模組1103,若確定從該交易儲存位置讀取的資料為交易,則對所述交易進行雜湊計算,得到交易雜湊;若確定從該交易儲存位置讀取的資料為隱匿化資料,則從所述隱匿化資料中提取交易雜湊,其中,從所述隱匿化資料中提取的交易雜湊,是該交易儲存位置原本儲存的交易的交易雜湊,將該交易儲存位置儲存的交易替換成所述隱匿化資料的操作,是所述區塊鏈網路中具有交易隱匿權限的節點指令各節點執行的;
梅克爾樹建構模組1104,基於所述目標區塊中各交易儲存位置分別對應的交易雜湊,建構所述目標區塊對應的梅克爾樹。
將該交易儲存位置儲存的交易替換成所述隱匿化資料的操作如下:
獲取該交易儲存位置儲存的交易的交易雜湊;
將預設的前標記字元拼接到所述交易雜湊的首部;
根據所述前標記字元與所述交易雜湊拼接成的資料,確定隱匿化資料;
將該交易儲存位置儲存的交易替換成所述隱匿化資料。
根據所述前標記字元與所述交易雜湊拼接成的資料,確定隱匿化資料,具體包括:
將預設的後標記字元拼接到所述交易雜湊的尾部,並且,將備註資訊拼接到所述後標記字元的尾部;
將所述前標記字元、所述交易雜湊、所述後標記字元以及所述備註資訊拼接成的資料確定為所述隱匿化資料。
所述分析模組1102,若從該交易儲存位置讀取的資料不包含所述前標記字元,則確定從該交易儲存位置讀取的資料為交易;若從該交易儲存位置讀取的資料包含所述前標記字元,則確定從該交易儲存位置讀取的資料為隱匿化資料。
所述交易雜湊確定模組1103,將所述隱匿化資料中位於所述前標記字元之後的資料確定為交易雜湊並提取。
所述交易雜湊確定模組1103,將所述隱匿化資料中位於所述前標記字元與所述後標記字元之間的資料確定為交易雜湊並提取。
圖12是本說明書實施例提供的一種簡單支付驗證裝置的結構示意圖,所述裝置是區塊鏈網路中的任一全節點,所述裝置包括:
接收模組1201,接收驗證請求;所述驗證請求包含目標交易標識;
確定建構模組1202,根據所述驗證請求,在自身的區塊鏈中確定所述目標交易標識對應的交易所在的區塊,並基於請求項1至6中任一項所述的方法建構所述區塊對應的梅克爾樹;
觸發模組1203,基於建構的梅克爾樹,觸發針對所述目標交易標識對應的交易的簡單支付驗證SPV流程。
針對寫入區塊鏈的任一交易,區塊鏈網路中的各節點上預先記錄有該交易的交易標識與區塊鏈中該交易所在的交易儲存位置之間的對應關係;
所述確定建構模組1202,根據所述目標交易標識以及預先記錄的交易標識與交易儲存位置的對應關係,確定所述目標交易標識對應的交易儲存位置,作為目標交易儲存位置;確定所述目標交易儲存位置所屬的區塊,作為所述目標交易標識對應的交易所在的區塊。
一種區塊鏈系統,包括:由多個節點組成的區塊鏈網路;
所述區塊鏈網路中的任一全節點,針對目標區塊中的每個交易儲存位置,從該交易儲存位置讀取資料,所述目標區塊是所述目標全節點的區塊鏈中的任一區塊;對從該交易儲存位置讀取的資料進行分析;若確定從該交易儲存位置讀取的資料為交易,則對所述交易進行雜湊計算,得到交易雜湊;若確定從該交易儲存位置讀取的資料為隱匿化資料,則從所述隱匿化資料中提取交易雜湊,其中,從所述隱匿化資料中提取的交易雜湊,是該交易儲存位置原本儲存的交易的交易雜湊;將該交易儲存位置儲存的交易替換成所述隱匿化資料的操作,是所述區塊鏈網路中具有交易隱匿權限的節點指令各節點執行的;基於所述目標區塊中各交易儲存位置分別對應的交易雜湊,建構所述目標區塊對應的梅克爾樹。
一種區塊鏈系統,包括:由多個節點組成的區塊鏈網路;
所述區塊鏈網路中的任一全節點,接收驗證請求,所述驗證請求包含目標交易標識;根據所述驗證請求,在自身的區塊鏈中確定所述目標交易標識對應的交易所在的區塊,並基於請求項1至6中任一項所述的方法建構所述區塊對應的梅克爾樹;基於建構的梅克爾樹,觸發針對所述目標交易標識對應的交易的簡單支付驗證SPV流程。
圖13是本說明書實施例提供的區塊鏈系統的結構示意圖。
本說明書實施例還提供一種電腦設備,其至少包括記憶體、處理器及儲存在記憶體上並可在處理器上運行的電腦程式,其中,處理器執行所述程式時實現圖2、5至7所示方法的功能。
圖14示出了本說明書實施例所提供的一種更為具體的計算設備硬體結構示意圖,該設備可以包括:處理器1410、記憶體1420、輸入/輸出介面1430、通訊介面1440和匯流排1450。其中,處理器1410、記憶體1420、輸入/輸出介面1430和通訊介面1440透過匯流排1450實現彼此之間在設備內部的通訊連接。
處理器1410可以採用通用的CPU(Central Processing Unit,中央處理器)、微處理器、特殊應用積體電路(Application Specific Integrated Circuit,ASIC)、或者一個或多個積體電路等方式來實現,用於執行相關程式,以實現本說明書實施例所提供的技術方案。
記憶體1420可以採用ROM(Read Only Memory,唯讀記憶體)、RAM(Random Access Memory,隨機存取記憶體)、靜態儲存設備,動態儲存設備等形式來實現。記憶體1420可以儲存作業系統和其他應用程式,在透過軟體或者韌體來實現本說明書實施例所提供的技術方案時,相關的程式碼保存在記憶體1420中,並由處理器1410來呼叫執行。
輸入/輸出介面1430用於連接輸入/輸出模組,以實現資訊輸入及輸出。輸入輸出/模組可以作為組件配置在設備中(圖中未示出),也可以外接於設備以提供相應功能。其中,輸入裝置可以包括鍵盤、滑鼠、觸控螢幕、麥克風、各類感測器等,輸出設備可以包括顯示器、揚聲器、振動器、指示燈等。
通訊介面1440用於連接通訊模組(圖中未示出),以實現本設備與其他設備的通訊互動。其中,通訊模組可以透過有線方式(例如USB、網線等)來實現通訊,也可以透過無線方式(例如行動網路、WIFI、藍牙等)來實現通訊。
匯流排1450包括一通路,在設備的各個組件(例如,處理器1410、記憶體1420、輸入/輸出介面1430和通訊介面1440)之間傳輸資訊。
需要說明的是,儘管上述設備僅示出了處理器1410、記憶體1420、輸入/輸出介面1430、通訊介面1440以及匯流排1450,但是在具體實施過程中,該設備還可以包括實現正常運行所必需的其他組件。此外,本領域的技術人員可以理解的是,上述設備中也可以僅包含實現本說明書實施例方案所必需的組件,而不必包含圖中所示的全部組件。
本說明書實施例還提供一種電腦可讀儲存媒體,其上儲存有電腦程式,該程式被處理器執行時實現圖2、5至7所示方法的功能。
電腦可讀媒體包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現資訊儲存。資訊可以是電腦可讀指令、資料結構、程式的模組或其他資料。電腦的儲存媒體的例子包括,但不限於相變記憶體(PRAM)、靜態隨機存取記憶體(SRAM)、動態隨機存取記憶體(DRAM)、其他類型的隨機存取記憶體(RAM)、唯讀記憶體(ROM)、電可擦除可編程唯讀記憶體(EEPROM)、快閃記憶體或其他記憶體技術、唯讀光碟唯讀記憶體(CD-ROM)、數位多功能光碟(DVD)或其他光學儲存器、磁盒式磁帶,磁帶磁磁片儲存器或其他磁性儲存設備或任何其他非傳輸媒體,可用於儲存可以被計算設備存取的資訊。按照本文中的界定,電腦可讀媒體不包括暫態性電腦可讀媒體(transitory media),如調變的資料信號和載波。
透過以上的實施方式的描述可知,本領域的技術人員可以清楚地瞭解到本說明書實施例可借助軟體加必需的通用硬體平臺的方式來實現。基於這樣的理解,本說明書實施例的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟體產品的形式體現出來,該電腦軟體產品可以被儲存在儲存媒體中,如ROM/RAM、磁碟、光碟等,包括若干指令用以使得一台電腦設備(可以是個人電腦、伺服器、或者網路設備等)執行本說明書實施例各個實施例或者實施例的某些部分所述的方法。
上述實施例闡明的系統、方法、模組或單元,具體可以由電腦晶片或實體實現,或者由具有某種功能的產品來實現。一種典型的實現設備為電腦,電腦的具體形式可以是個人電腦、膝上型電腦、蜂巢式電話、相機電話、智慧型電話、個人數位助理、媒體播放機、導航設備、電子郵件收發設備、遊戲控制台、平板電腦、可穿戴設備或者這些設備中的任意幾種設備的組合。
本說明書中的各個實施例均採用漸進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對於方法和設備實施例而言,由於其基本相似於方法實施例,所以描述得比較簡單,相關之處參見方法實施例的部分說明即可。以上所描述的方法實施例僅僅是示意性的,其中,所述作為分離部件說明的模組可以是或者也可以不是物理上分開的,在實施本說明書實施例方案時可以把各模組的功能在同一個或多個軟體和/或硬體中實現。也可以根據實際的需要選擇其中的部分或者全部模組來實現本實施例方案的目的。本領域普通技術人員在不付出創造性勞動的情況下,即可以理解並實施。
以上所述僅是本說明書實施例的具體實施方式,應當指出,對於本技術領域的普通技術人員來說,在不脫離本說明書實施例原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本說明書實施例的保護範圍。
S200:方法步驟
S202:方法步驟
S204:方法步驟
S500:方法步驟
S502:方法步驟
S504:方法步驟
S600:方法步驟
S602:方法步驟
S604:方法步驟
S606:方法步驟
S608:方法步驟
S700:方法步驟
S702:方法步驟
S704:方法步驟
801:獲取模組
802:執行模組
901:處理模組
1001:接收模組
1002:確定模組
1003:讀取模組
1004:提示模組
1005:返回模組
1101:讀取模組
1102:分析模組
1103:交易雜湊確定模組
1104:梅克爾樹建構模組
1201:接收模組
1202:確定建構模組
1203:觸發模組
1410:處理器
1420:記憶體
1430:輸入/輸出介面
1440:通訊介面
1450:匯流排
為了更清楚地說明本說明書實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的圖式作簡單地介紹,顯而易見地,下面描述中的圖式僅僅是本說明書實施例中記載的一些實施例,對於本領域普通技術人員來講,還可以根據這些圖式而獲得其他的圖式。
圖1是本說明提供的梅克爾樹的結構示意圖;
圖2是本說明書實施例提供的一種對寫入區塊鏈的交易進行隱匿的方法的流程示意圖;
圖3是本說明書實施例提供的構造隱匿化資料的過程示意圖;
圖4是本說明書實施例提供的構造隱匿化資料的另一過程示意圖;
圖5是本說明書實施例提供的一種區塊鏈資料讀取方法的流程示意圖;
圖6是本說明書實施例提供的一種建構梅克爾樹的方法的流程示意圖;
圖7是本說明書實施例提供的一種簡單支付驗證方法的流程示意圖;
圖8是本說明書實施例提供的一種對寫入區塊鏈的交易進行隱匿的裝置的結構示意圖;
圖9本說明書實施例提供的一種對寫入區塊鏈的交易進行隱匿的裝置的結構示意圖;
圖10是本說明書實施例提供的一種區塊鏈資料讀取裝置的結構示意圖;
圖11是本說明書實施例提供的一種建構梅克爾樹的裝置的結構示意圖;
圖12是本說明書實施例提供的一種簡單支付驗證裝置的結構示意圖;
圖13是本說明書實施例提供的區塊鏈系統的結構示意圖;
圖14是用於配置本說明書實施例裝置的一種電腦設備的結構示意圖。