數(shù)字交易系統(tǒng)、及用于其的賬戶信息查詢方法
【專利摘要】公開了數(shù)字交易系統(tǒng)、及用于其的賬戶信息查詢方法。該數(shù)字交易系統(tǒng)包括:驗證節(jié)點,被配置為存儲最新賬戶信息、和區(qū)塊鏈中的包含最新交易信息和最新賬戶指示信息的最新區(qū)塊,并基于最新賬戶信息對來自交易節(jié)點的賬戶信息查詢請求進行響應,其中,最新賬戶信息是驗證節(jié)點基于最新交易信息對已有賬戶信息進行更新生成的,最新賬戶指示信息是驗證節(jié)點基于最新賬戶信息生成的,最新區(qū)塊是驗證節(jié)點根據(jù)共識算法與數(shù)字交易系統(tǒng)中的其他驗證節(jié)點之間達成共識的基準;以及交易節(jié)點,被配置為向驗證節(jié)點發(fā)送賬戶信息查詢請求,并接收驗證節(jié)點對于賬戶信息查詢請求的響應。
【專利說明】
數(shù)字交易系統(tǒng)、及用于其的賬戶信息查詢方法
技術領域
[0001]本發(fā)明涉及計算機領域,更具體地涉及數(shù)字交易系統(tǒng)、及用于其的賬戶信息查詢方法。
【背景技術】
[0002]在現(xiàn)有的分布式總賬系統(tǒng)中,每個節(jié)點都需要利用區(qū)塊鏈保存全部的交易記錄,并通過對等(Peer to Peer,簡稱P2P)網(wǎng)絡交換信息來達成所保存的交易記錄的一致性(即,達成共識);每個節(jié)點只能通過區(qū)塊鏈中保存的交易記錄來推算賬戶余額之類的賬戶
?目息O
[0003]現(xiàn)有的分布式總賬系統(tǒng)至少存在以下兩個問題:I)因為每個節(jié)點都需要保存全部的交易記錄,所以隨著交易量的增加,這些節(jié)點的存儲壓力將越來越大;2)因為每次查詢賬戶信息的過程都涉及所有的相關交易記錄,所以查詢賬戶信息的效率低。
【發(fā)明內(nèi)容】
[0004]鑒于以上所述的一個或多個問題,本發(fā)明提供了一種新穎的數(shù)字交易系統(tǒng)、及用于其的賬戶信息查詢方法。
[0005]根據(jù)本發(fā)明實施例的數(shù)字交易系統(tǒng),包括:驗證節(jié)點,被配置為存儲最新賬戶信息、和區(qū)塊鏈中的包含最新交易信息和最新賬戶指示信息的最新區(qū)塊,并基于最新賬戶信息對來自交易節(jié)點的賬戶信息查詢請求進行響應,其中,最新賬戶信息是驗證節(jié)點基于最新交易信息對已有賬戶信息進行更新生成的,最新賬戶指示信息是驗證節(jié)點基于最新賬戶信息生成的,最新區(qū)塊是驗證節(jié)點根據(jù)共識算法與數(shù)字交易系統(tǒng)中的其他驗證節(jié)點之間達成共識的基準;以及交易節(jié)點,被配置為向驗證節(jié)點發(fā)送賬戶信息查詢請求,并接收驗證節(jié)點對于賬戶信息查詢請求的響應。
[0006]根據(jù)本發(fā)明實施例的用于數(shù)字交易系統(tǒng)的賬戶信息查詢方法,該數(shù)字交易系統(tǒng)包括驗證節(jié)點和交易節(jié)點,該賬戶信息查詢方法包括:交易節(jié)點向所述節(jié)點發(fā)送賬戶信息查詢請求;驗證節(jié)點基于其存儲的最新賬戶信息對賬戶信息查詢請求進行響應,其中驗證節(jié)點還存儲有區(qū)塊鏈中的包含最新交易信息和最新賬戶指示信息的最新區(qū)塊,最新賬戶信息是驗證節(jié)點基于最新交易信息對已有賬戶信息進行更新生成的,最新賬戶指示信息是驗證節(jié)點基于最新賬戶信息生成的,最新區(qū)塊是驗證節(jié)點根據(jù)共識算法與數(shù)字交易系統(tǒng)中的其他驗證節(jié)點之間達成共識的基準。
[0007]在根據(jù)本發(fā)明實施例的數(shù)字交易系統(tǒng)、及用于其的賬戶信息查詢方法中,由于驗證節(jié)點僅存儲最新賬戶信息、和區(qū)塊鏈中的包含有最新交易信息和最新賬戶指示信息的最新區(qū)塊,所以驗證節(jié)點的存儲壓力不會隨著交易量的增加而越來越大;由于驗證節(jié)點基于其存儲的最新賬戶信息對賬戶信息查詢請求進行響應,而無需基于交易信息來推算賬戶信息,所以提高了賬戶信息查詢的效率。
【附圖說明】
[0008]通過閱讀以下參照附圖對非限制性實施例所作的詳細描述,本發(fā)明的其它特征、目的和優(yōu)點將會變得更明顯,其中,相同或相似的附圖標記表示相同或相似的特征。
[0009]圖1示出了根據(jù)本發(fā)明實施例的數(shù)字交易系統(tǒng)的框圖;
[0010]圖2示出了用于圖1所示的數(shù)字交易系統(tǒng)的賬戶信息查詢方法的流程圖;
[0011]圖3示出了用于圖1所示的數(shù)字交易系統(tǒng)的區(qū)塊鏈的示例結構示意圖;以及
[0012]圖4A和4B分別示出了圖3所示的賬戶樹的內(nèi)部節(jié)點和葉子節(jié)點的示例結構圖。
【具體實施方式】
[0013]下面將詳細描述本發(fā)明的各個方面的特征和示例性實施例。在下面的詳細描述中,提出了許多具體細節(jié),以便提供對本發(fā)明的全面理解。但是,對于本領域技術人員來說很明顯的是,本發(fā)明可以在不需要這些具體細節(jié)中的一些細節(jié)的情況下實施。下面對實施例的描述僅僅是為了通過示出本發(fā)明的示例來提供對本發(fā)明的更好的理解。本發(fā)明決不限于下面所提出的任何具體配置和算法,而是在不脫離本發(fā)明的精神的前提下覆蓋了元素、部件和算法的任何修改、替換和改進。在附圖和下面的描述中,沒有示出公知的結構和技術,以便避免對本發(fā)明造成不必要的模糊。
[0014]鑒于以上所述的一個或多個問題,本發(fā)明提出了一種新穎的數(shù)字交易系統(tǒng)、及用于其的賬戶信息查詢方法。圖1示出了根據(jù)本發(fā)明實施例的數(shù)字交易系統(tǒng)的框圖。圖2示出了用于圖1所示的數(shù)字交易系統(tǒng)的賬戶信息查詢方法的流程圖。下面,結合附圖詳細描述根據(jù)本發(fā)明實施例的數(shù)字交易系統(tǒng)、及用于其的賬戶信息查詢方法。
[0015]如圖1所示,根據(jù)本發(fā)明實施例的數(shù)字交易系統(tǒng)100包括一個或多個驗證節(jié)點102-1至102-N(下面統(tǒng)稱為驗證節(jié)點102)、以及一個或多個交易節(jié)點104-1至104-M(下面統(tǒng)稱為交易節(jié)點104),其中N和M均為大于O的整數(shù),N和M可以相等也可以不相等,并且通常情況下N小于M(當然,并不排除N大于或者等于M的情況)。
[0016]這里,基于以下前提進一步描述根據(jù)本發(fā)明實施例的數(shù)字交易系統(tǒng)、及用于其的賬戶信息查詢方法:數(shù)字交易系統(tǒng)中已經(jīng)存在若干賬戶地址及其相應的賬戶信息;驗證節(jié)點102可以利用預定的數(shù)據(jù)存儲結構存儲這些賬戶地址和它們的賬戶信息;驗證節(jié)點102可以利用區(qū)塊鏈存儲全部的交易信息和賬戶指示信息;隨著這些賬戶地址之間的交易的執(zhí)行,區(qū)塊鏈不斷增長;驗證節(jié)點102每當生成一個最新區(qū)塊時,基于最新區(qū)塊中包含的最新交易信息對已有賬戶信息進行更新以生成最新交易信息,并基于最新賬戶信息生成最新賬戶指示信息,其中最新賬戶指示信息唯一地指示最新賬戶信息并且被包含在最新區(qū)塊中。
[0017]在一些實施例中,每個驗證節(jié)點102可以存儲最新賬戶信息、和包含全部的交易信息和賬戶指示信息的區(qū)塊鏈,也可以僅存儲最新賬戶信息、和區(qū)塊鏈中的包含最新交易信息和最新賬戶指示信息的最新區(qū)塊;或者,一些驗證節(jié)點102可以存儲最新賬戶信息、和包含全部的交易信息和賬戶指示信息的區(qū)塊鏈,另一些驗證節(jié)點102可以僅存儲最新賬戶信息和區(qū)塊鏈中的包含最新交易信息和最新賬戶指示信息的最新區(qū)塊。驗證節(jié)點102可以以最新區(qū)塊為基準,根據(jù)共識算法與數(shù)字交易系統(tǒng)100中的其他驗證節(jié)點102之間達成共識。
[0018]在一些實施例中,交易節(jié)點104可以向與其有對應關系的、固定的一個或多個驗證節(jié)點102發(fā)送賬戶信息查詢請求,也可以向其信任的任意一個或多個驗證節(jié)點102發(fā)送賬戶信息查詢請求(S卩,執(zhí)行步驟S202);驗證節(jié)點102可以基于其存儲的最新賬戶信息對來自交易節(jié)點104的賬戶信息查詢請求進行響應(S卩,執(zhí)行步驟S204)。
[0019]在結合圖1和圖2描述的數(shù)字交易系統(tǒng)、及用于其的賬戶信息查詢方法中,由于驗證節(jié)點可以基于其存儲的最新賬戶信息對賬戶信息查詢請求進行響應,而無需基于交易信息來推算賬戶信息,所以可以提高賬戶信息查詢的效率;對于僅存儲最新賬戶信息和區(qū)塊鏈中的包含最新交易信息和最新賬戶指示信息的最新區(qū)塊的驗證節(jié)點,其存儲壓力不會隨著交易量的增加而越來越大。
[0020]在實際應用中,隨著圖1所示的數(shù)字交易系統(tǒng)100被越來越多的人使用,可以向該數(shù)字交易系統(tǒng)100添加更多的驗證節(jié)點。新添加的驗證節(jié)點需要從數(shù)字交易系統(tǒng)100中的老驗證節(jié)點(即,已有的驗證節(jié)點)同步最新賬戶信息才能對賬戶信息查詢進行響應。
[0021]在一些實施例中,新添加的驗證節(jié)點可以從數(shù)字交易系統(tǒng)中的任意一個老驗證節(jié)點同步該老驗證節(jié)點存儲的當前最新賬戶信息。然而,如果當前最新賬戶信息包含的數(shù)據(jù)量較大,則在當前最新賬戶信息的同步開始至完成的時間段期間會有一個或多個新區(qū)塊被生成。因此,新添加的驗證節(jié)點還需要從老驗證節(jié)點同步在當前最新賬戶信息的同步開始至完成的時間段期間生成的一個或多個新區(qū)塊,并利用包含在該一個或多個新區(qū)塊中的交易信息對當前最新賬戶信息進行更新以生成最新賬戶信息。
[0022]在一些實施例中,新添加的驗證節(jié)點也可以通過以下處理從數(shù)字交易系統(tǒng)中的任意一個老驗證節(jié)點同步最新賬戶信息:從老驗證節(jié)點同步該老驗證節(jié)點存儲的當前最新賬戶信息;判斷其自身存儲的賬戶信息與所同步的當前最新賬戶信息是否一致;以及如果不一致,則重復以上處理,否則將所同步的當前最新賬戶信息作為最新賬戶信息。
[0023]在一些實施例中,用于圖1所示的數(shù)字交易系統(tǒng)的區(qū)塊鏈中的每個區(qū)塊可以包括區(qū)塊首部、和交易信息兩部分,其中區(qū)塊首部包含唯一地指示前一區(qū)塊的區(qū)塊指示信息、本區(qū)塊的生成時間、唯一地指示本區(qū)塊包含的交易信息的交易指示信息、以及唯一地指示基于本區(qū)塊的交易信息進行更新后的賬戶信息的賬戶指示信息。
[0024]在一些實施例中,每個區(qū)塊中的交易信息可以被組織為交易樹的形式;每個驗證節(jié)點102存儲的賬戶信息可以被組織為賬戶樹的形式(S卩,上述的數(shù)據(jù)存儲結構可以為賬戶樹),其中賬戶樹將賬戶地址作為葉子節(jié)點;每個驗證節(jié)點102可以隨著區(qū)塊鏈的增長而不斷地基于區(qū)塊鏈中的最新區(qū)塊包含的最新交易信息對賬戶樹進行更新,更新后的賬戶樹即為最新賬戶信息。
[0025]在一些實施例中,考慮到采用哈希樹的形式保存信息具有很強的擴展性,只需要更改葉子節(jié)點的結構就可以適用于保存其它的信息,交易樹和賬戶樹可以被組織為哈希樹的形式。
[0026]在一些實施例中,在新添加的驗證節(jié)點從數(shù)字交易系統(tǒng)中的任意一個老驗證節(jié)點同步完最新賬戶信息后,該老驗證節(jié)點會同時向該新添加的驗證節(jié)點發(fā)送最新區(qū)塊,作為新添加的驗證節(jié)點后續(xù)與數(shù)字交易系統(tǒng)中的其他驗證節(jié)點達成共識的基準。
[0027]圖3示出了用于圖1所示的數(shù)字交易系統(tǒng)的區(qū)塊鏈的示例結構示意圖。如圖3所示,用于圖1所示的數(shù)字交易系統(tǒng)的區(qū)塊鏈中的每個區(qū)塊包括區(qū)塊首部、和交易樹兩部分。
[0028]在圖3所示的實施例中,區(qū)塊首部包括前一塊哈希域、時間戳域、交易樹哈希域、以及賬戶樹哈希域,其中:前一塊哈希域保存前一區(qū)塊的哈希值(即,唯一地指示前一區(qū)塊的信息),以保證交易歷史不會被改變;時間戳域保存本區(qū)塊的生成時間,以保證區(qū)塊的時間有序性;交易樹哈希域保存本區(qū)塊的交易樹的根節(jié)點哈希值;賬戶樹哈希域保存與本區(qū)塊對應的賬戶樹的根節(jié)點哈希值。
[0029]在圖3所示的實施例中,交易樹保存包含在本區(qū)塊中的所有交易信息,并且是由本區(qū)塊中包含的所有交易信息自底向上構建的一棵哈希樹。隨著交易樹中包含的所有交易信息所表示的交易的執(zhí)行,驗證節(jié)點102可以對賬戶樹進行更新,并且可以生成更新后的賬戶樹的根節(jié)點哈希值。這里,更新后的賬戶樹即是與本區(qū)塊對應的賬戶樹。
[0030]在一些實施例中,賬戶樹可以采用K叉樹的形態(tài),K的具體數(shù)目可根據(jù)實際需要指定,比如K = 16;賬戶樹還支持回退功能,將本區(qū)塊中包含的所有交易信息所表示的交易反向執(zhí)行一遍,就可以將與本區(qū)塊對應的賬戶樹回退為與上一區(qū)塊對應的賬戶樹,這為系統(tǒng)故障恢復提供了可能。
[0031]圖4A和4B分別示出了圖3所示的賬戶樹的內(nèi)部節(jié)點和葉子節(jié)點的示例結構圖。下面,分別說明賬戶樹的內(nèi)部節(jié)點和葉子節(jié)點的各字段的含義(賬戶樹為K叉樹結構)。
[0032]如圖4A所示,賬戶樹的內(nèi)部節(jié)點包括以下字段:
[0033 ]節(jié)點的哈希值:該節(jié)點保存的所有數(shù)據(jù)的哈希值,采用哈希算法(例如,sha256)生成。例如,可以采用如下哈希算法:哈希(節(jié)點的數(shù)據(jù)庫索引+孩子節(jié)點存在掩碼+節(jié)點的快照編號+K個孩子的哈希值)。
[0034]節(jié)點的數(shù)據(jù)庫索引:該節(jié)點的所有數(shù)據(jù)被保存在鍵值(Key-Value)數(shù)據(jù)庫中時所用的索引,由該節(jié)點在賬戶樹中的前綴路徑表示。由于賬戶樹的每個內(nèi)部節(jié)點最多有K個孩子,因此用log2K比特來表示一層路徑。
[0035]孩子節(jié)點存在掩碼:表示該節(jié)點是否有孩子的1g2K比特的2進制數(shù)。例如,掩碼0000,1000,0100,0000表示該節(jié)點的第6個分支和第11個分支有孩子節(jié)點(分支從0開始,且右邊表示第O分支)。
[0036]節(jié)點的快照編號:如果節(jié)點的快照編號小于當前賬戶樹的當前快照編號,則表示該節(jié)點為賬戶樹快照和當前賬戶樹公用的節(jié)點;如果需要改變當前賬戶樹的該節(jié)點,則需要復制一個節(jié)點,并將所復制的新節(jié)點的快照編號修改為當前賬戶樹的當前快照編號。如果節(jié)點的快照編號大于當前賬戶樹的當前快照編號,則表示該節(jié)點為當前賬戶樹所私有,可以直接改變。節(jié)點的快照編號的初始值為O。
[0037]孩子指針:分別指向該節(jié)點所擁有的孩子節(jié)點的K個指針。將孩子為空的指針賦值成空指針(NULL)。只有孩子節(jié)點存在掩碼中為I的比特位上有孩子,其他的位所對應的指針均為空指針。
[0038]如圖4B所示,賬戶樹的葉子節(jié)點包括以下字段:
[0039 ]節(jié)點的哈希值:該節(jié)點保存的所有數(shù)據(jù)的哈希值,采用哈希算法(例如,sha256)生成。例如,可以采用如下哈希算法:哈希(節(jié)點的數(shù)據(jù)庫索引+孩子節(jié)點存在掩碼+節(jié)點的快照編號+K個孩子的哈希值)。
[0040]節(jié)點的數(shù)據(jù)庫索引:該節(jié)點的所有數(shù)據(jù)被保存在鍵值數(shù)據(jù)庫中時所用的索引,由該節(jié)點在賬戶樹中的前綴路徑表示。
[0041]孩子節(jié)點存在掩碼:表示該節(jié)點是否有孩子的1g2K比特的2進制數(shù)。對于葉子結點而言,其掩碼比特位全為O。
[0042]節(jié)點的快照編號:如果節(jié)點的快照編號小于當前賬戶樹的當前快照編號,則表示該節(jié)點為賬戶樹快照和當前賬戶樹公用的節(jié)點;如果當前賬戶樹需要改變該節(jié)點,則需要復制一個節(jié)點,并將所復制的新節(jié)點的快照編號修改為當前賬戶樹的當前快照編號。如果節(jié)點的快照編號大于當前賬戶樹的當前快照編號,則表示該節(jié)點為當前賬戶樹所私有,可以直接改變。節(jié)點的快照編號的初始值為O。
[0043]葉子節(jié)點全索引:該節(jié)點保存的賬戶地址經(jīng)過哈希運算得出的結果(S卩,該節(jié)點保存的賬戶地址的哈希值),主要有兩個作用:I)作為該節(jié)點的序列化數(shù)據(jù)被保存在鍵值數(shù)據(jù)庫中時所用的索引;2)在賬戶樹中檢索賬戶信息的時候,最終判斷賬戶地址是否一致的依據(jù)。
[0044]序列化數(shù)據(jù):該節(jié)點保存的具體數(shù)據(jù)。例如,將一個包含賬戶地址和諸如賬戶余額的賬戶信息類經(jīng)過例如,Encode函數(shù)調(diào)用之后就會得到一個字符串,該字符串包含了賬戶地址和賬戶余額的信息,該字符串即為序列化數(shù)據(jù);將該字符串經(jīng)過decode函數(shù)調(diào)用之后,就可以恢復出賬戶信息類。該序列化數(shù)據(jù)只在賬戶信息發(fā)生變化時保存,并在賬戶信息存入數(shù)據(jù)庫之后刪除,因此是暫時存儲的。
[0045]當采用圖4A和4B所示的賬戶樹結構時,數(shù)字交易系統(tǒng)中的新添加的驗證節(jié)點可以通過下面兩種方法中的任意一種從數(shù)字交易系統(tǒng)中的任意一個老驗證節(jié)點同步最新賬戶
?目息O
[0046]這里,假設數(shù)字交易系統(tǒng)100包括驗證節(jié)點A、驗證節(jié)點B、和驗證節(jié)點C三個驗證節(jié)點,其中驗證節(jié)點A和驗證節(jié)點B是數(shù)字交易系統(tǒng)100中的已有驗證節(jié)點(即,老驗證節(jié)點),驗證節(jié)點C是數(shù)字交易系統(tǒng)100中的新驗證節(jié)點。
[0047]快照+回放法
[0048]驗證節(jié)點A和驗證節(jié)點B定時(例如,每12小時一次)創(chuàng)建賬戶樹快照,其中每個驗證節(jié)點保存兩份賬戶樹快照。賬戶樹快照的創(chuàng)建采用樹的“寫時拷貝”進行,即:對于沒有修改操作的樹節(jié)點,賬戶樹快照和當前賬戶樹公用;對于要修改的樹節(jié)點,重新復制一個節(jié)點并在新復制的節(jié)點上做賬戶樹的修改。創(chuàng)建賬戶樹快照后,利用最新創(chuàng)建的賬戶樹快照來替換創(chuàng)建時間較早的賬戶樹快照。針對來自驗證節(jié)點C的同步請求,向驗證節(jié)點C同步最新創(chuàng)建的賬戶樹快照。
[0049]驗證節(jié)點C被添加到數(shù)字交易系統(tǒng)100后,會選擇一個自己信賴的老驗證節(jié)點(例如,驗證節(jié)點Α)去同步賬戶樹。驗證節(jié)點A在收到同步請求后,對最新創(chuàng)建的賬戶樹快照進行前序遍歷,將該賬戶樹快照的葉子節(jié)點逐一響應給驗證節(jié)點C。驗證節(jié)點A在將最新創(chuàng)建的賬戶樹快照的所有葉子節(jié)點都響應給驗證節(jié)點C后,將創(chuàng)建該賬戶樹快照時對應的區(qū)塊的序號也發(fā)送給驗證節(jié)點C,這一序號在回放時使用。
[0050]在同步快照的過程中,又有新區(qū)塊生成,因此在快照同步完成之后,還需要同步新生成的區(qū)塊。由于新生成的區(qū)塊數(shù)量較少,因此可以采用回放法的方式來進行同步。
[0051]回放法的主要過程是:驗證節(jié)點C收到一個新生成的區(qū)塊后,通過比較本地區(qū)塊的序號(local_seq)和新生成的區(qū)塊的序號(net_seq)來判斷是否需要回放同步。如果local_seq+l<net_seq,則進行同步。由于區(qū)塊保存有上一個區(qū)塊的哈希值,因此同步的方向是net_seq-l到local_seq+l,并將同步收到的數(shù)據(jù)緩存起來。等到所有的區(qū)塊都緩存完成之后,按照local_seq+l到net_seq-l的順序確認區(qū)塊。在確認區(qū)塊的時候同時更新賬戶樹的
?目息O
[0052]具體地,上述同步過程可以通過以下步驟完成:驗證節(jié)點C選擇驗證節(jié)點A進行數(shù)據(jù)同步;驗證節(jié)點C向驗證節(jié)點A發(fā)送快照同步請求;驗證節(jié)點A收到快照同步請求后,對最新創(chuàng)建的賬戶樹快照進行前序遍歷,將該賬戶樹快照的葉子節(jié)點響應給驗證節(jié)點C;驗證節(jié)點C每次收到一個響應之后,就將該葉子節(jié)點加入到自己的賬戶樹中;驗證節(jié)點A將所有葉子節(jié)點都發(fā)送給驗證節(jié)點C后,將該賬戶樹快照對應的區(qū)塊序號發(fā)送給驗證節(jié)點C;驗證節(jié)點C收到賬戶樹快照對應的區(qū)塊序號后,快照同步完成并進入到回放同步中,等待下一個新生成的區(qū)塊的到來;驗證節(jié)點C收到一個新生成的區(qū)塊后,通過比較賬戶樹快照對應的區(qū)塊序號和新生成的區(qū)塊的區(qū)塊序號確定需要回放同步的序號區(qū)間,并發(fā)送相應的區(qū)塊回放同步請求給驗證節(jié)點Α;驗證節(jié)點A收到回放同步請求后,將相應區(qū)塊序號的區(qū)塊響應給驗證節(jié)點C;驗證節(jié)點C收到回放請求響應后,將收到的區(qū)塊按照區(qū)塊序號從小到大的順序確認,并將這些區(qū)塊中包含的交易信息所表示的交易應用到交易樹上,從而對賬戶樹進行更新。
[0053]這里,驗證節(jié)點C從驗證節(jié)點A同步完最新賬戶信息后,驗證節(jié)點A同時會向驗證節(jié)點C發(fā)送最新區(qū)塊,作為驗證節(jié)點C參與后續(xù)共識的基準。
[0054]迭代法
[0055]由于賬戶樹為哈希樹,通過比較兩棵哈希樹的根節(jié)點哈希值就可以判斷兩棵哈希樹是否一致,因此可以利用這一性質(zhì)進行賬戶樹的同步,直到兩棵賬戶樹一致,也就說明同步完成了。
[0056]具體地,上述同步過程可以通過以下步驟完成:驗證節(jié)點C選擇驗證節(jié)點A進行數(shù)據(jù)同步;驗證節(jié)點C給驗證節(jié)點A發(fā)送一個請求“根節(jié)點哈希和N個孩子哈希值”的請求;驗證節(jié)點A收到驗證節(jié)點C的請求后,將自己的最新賬戶樹的根節(jié)點哈希和N個孩子哈希值響應給驗證節(jié)點C;驗證節(jié)點C收到響應后,比較接收到的根節(jié)點哈希值是否和自己的當前賬戶樹的根節(jié)點哈希值一致,如果一致則同步完成;如果不一致,則比較N個孩子哈希值和當前N個孩子的哈希值,并遞歸同步哈希值不一樣的孩子子樹。
[0057]由于在遞歸同步子樹的過程中,該賬戶樹的根節(jié)點仍然有可能發(fā)生變化,因此需要多輪迭代此過程。該過程結束后,驗證節(jié)點C的賬戶樹和數(shù)字交易系統(tǒng)100中的其他驗證節(jié)點的賬戶樹達成一致。
[0058]這里,驗證節(jié)點C從驗證節(jié)點A同步完最新賬戶信息后,驗證節(jié)點A同時會向驗證節(jié)點C發(fā)送最新區(qū)塊,作為驗證節(jié)點C參與后續(xù)共識的基準。相應地,驗證節(jié)點102在接收到來自交易節(jié)點104的賬戶信息查詢請求后,將賬戶信息查詢請求中包含的賬戶地址進行哈希,從而獲得該賬戶地址對應的賬戶樹索引值,然后從賬戶樹的根節(jié)點開始按照索引值進行賬戶樹遍歷,直至遍歷到相對應的葉子節(jié)點,或者遍歷到空節(jié)點。如果遍歷到葉子節(jié)點,貝1J比較葉子節(jié)點中保存的全索引和賬戶地址哈希得到的索引是否一致,如一致則將保存在葉子節(jié)點中的賬戶信息響應給交易節(jié)點104,否則返回一個錯誤信息。
[0059]需要明確的是,本發(fā)明并不局限于上文所描述并在圖中示出的特定配置和處理。并且,為了簡明起見,這里省略了對已知方法技術的詳細描述。在上述實施例中,描述和示出了若干具體的步驟作為示例。但是,本發(fā)明的方法過程并不限于所描述和示出的具體步驟,本領域的技術人員可以在領會本發(fā)明的精神之后,作出各種改變、修改和添加,或者改變步驟之間的順序。
[0060]以上所述的結構框圖中所示的功能塊可以實現(xiàn)為硬件、軟件、固件或者它們的組合。當以硬件方式實現(xiàn)時,其可以例如是電子電路、專用集成電路(ASIC)、適當?shù)墓碳⒉寮?、功能卡等等。當以軟件方式實現(xiàn)時,本發(fā)明的元素是被用于執(zhí)行所需任務的程序或者代碼段。程序或者代碼段可以存儲在機器可讀介質(zhì)中,或者通過載波中攜帶的數(shù)據(jù)信號在傳輸介質(zhì)或者通信鏈路上傳送?!皺C器可讀介質(zhì)”可以包括能夠存儲或傳輸信息的任何介質(zhì)。機器可讀介質(zhì)的例子包括電子電路、半導體存儲器設備、R0M、閃存、可擦除ROM(EROM)、軟盤、CD-ROM、光盤、硬盤、光纖介質(zhì)、射頻(RF)鏈路,等等。代碼段可以經(jīng)由諸如因特網(wǎng)、內(nèi)聯(lián)網(wǎng)等的計算機網(wǎng)絡被下載。
[0061]本發(fā)明可以以其他的具體形式實現(xiàn),而不脫離其精神和本質(zhì)特征。例如,特定實施例中所描述的算法可以被修改,而系統(tǒng)體系結構并不脫離本發(fā)明的基本精神。因此,當前的實施例在所有方面都被看作是示例性的而非限定性的,本發(fā)明的范圍由所附權利要求而非上述描述定義,并且,落入權利要求的含義和等同物的范圍內(nèi)的全部改變從而都被包括在本發(fā)明的范圍之中。
【主權項】
1.一種數(shù)字交易系統(tǒng),包括: 驗證節(jié)點,被配置為存儲最新賬戶信息、和區(qū)塊鏈中的包含最新交易信息和最新賬戶指示信息的最新區(qū)塊,并基于所述最新賬戶信息對來自交易節(jié)點的賬戶信息查詢請求進行響應,其中,所述最新賬戶信息是所述驗證節(jié)點基于所述最新交易信息對已有賬戶信息進行更新生成的,所述最新賬戶指示信息是所述驗證節(jié)點基于所述最新賬戶信息生成的,所述最新區(qū)塊是所述驗證節(jié)點根據(jù)共識算法與所述數(shù)字交易系統(tǒng)中的其他驗證節(jié)點之間達成共識的基準;以及 所述交易節(jié)點,被配置為向所述驗證節(jié)點發(fā)送所述賬戶信息查詢請求,并接收所述驗證節(jié)點對于所述賬戶信息查詢請求的響應。2.如權利要求1所述的數(shù)字交易系統(tǒng),其中,所述已有賬戶信息被組織為賬戶樹的形式,所述最新賬戶信息是所述驗證節(jié)點基于所述最新交易信息對所述賬戶樹進行更新生成的。3.如權利要求2所述的數(shù)字交易系統(tǒng),其中,所述賬戶樹為哈希樹。4.如權利要求3所述的數(shù)字交易系統(tǒng),其中,所述賬戶樹為K叉樹結構,并且所述賬戶樹的任意一個內(nèi)部節(jié)點存儲以下字段:該節(jié)點保存的所有數(shù)據(jù)的哈希值、該節(jié)點的數(shù)據(jù)庫索弓1、指示該節(jié)點是否有孩子節(jié)點的孩子節(jié)點存在掩碼、該節(jié)點的快照編號、以及指向該節(jié)點的孩子節(jié)點的孩子指針。5.如權利要求4所述的數(shù)字交易系統(tǒng),其中,所述賬戶樹的任意一個葉子節(jié)點存儲以下字段:該節(jié)點保存的所有數(shù)據(jù)的哈希值、該節(jié)點的數(shù)據(jù)庫索引、指示該節(jié)點是否有孩子節(jié)點的孩子節(jié)點存在掩碼、該節(jié)點的快照編號、該節(jié)點保存的賬戶地址的哈希值、以及該節(jié)點保存的序列化數(shù)據(jù)。6.如權利要求1所述的數(shù)字交易系統(tǒng),其中,當所述驗證節(jié)點作為新驗證節(jié)點被添加到所述數(shù)字交易系統(tǒng)中時,所述驗證節(jié)點從所述數(shù)字交易系統(tǒng)中的任意一個老驗證節(jié)點同步所述老驗證節(jié)點存儲的當前最新賬戶信息。7.如權利要求6所述的數(shù)字交易系統(tǒng),其中,所述驗證節(jié)點還從所述老驗證節(jié)點同步在所述當前最新賬戶信息的同步開始至完成的時間段期間生成的一個或多個新區(qū)塊,并利用包含在所述一個或多個新區(qū)塊中的交易信息對所述當前最新賬戶信息進行更新以生成所述最新賬戶信息。8.如權利要求1所述的數(shù)字交易系統(tǒng),其中,當所述驗證節(jié)點作為新驗證節(jié)點被添加到所述數(shù)字交易系統(tǒng)中時,所述驗證節(jié)點通過以下處理從所述數(shù)字交易系統(tǒng)中的任意一個老驗證節(jié)點同步所述最新賬戶信息: 從所述老驗證節(jié)點同步所述老驗證節(jié)點存儲的當前最新賬戶信息; 判斷所述驗證節(jié)點自身存儲的賬戶信息與所述當前最新賬戶信息是否一致;以及 如果不一致,則重復以上處理,否則將所述當前最新賬戶信息作為所述最新賬戶信息。9.如權利要求1所述的數(shù)字交易系統(tǒng),其中,所述驗證節(jié)點還被配置為利用所述區(qū)塊鏈存儲全部的交易信息和賬戶指示信息。10.—種用于數(shù)字交易系統(tǒng)的賬戶信息查詢方法,該數(shù)字交易系統(tǒng)包括驗證節(jié)點和交易節(jié)點,該賬戶信息查詢方法包括: 所述交易節(jié)點向所述驗證節(jié)點發(fā)送賬戶信息查詢請求; 所述驗證節(jié)點基于其存儲的最新賬戶信息對所述賬戶信息查詢請求進行響應,其中 所述驗證節(jié)點還存儲有區(qū)塊鏈中的包含最新交易信息和最新賬戶指示信息的最新區(qū)塊,所述最新賬戶信息是所述驗證節(jié)點基于所述最新交易信息對已有賬戶信息進行更新生成的,所述最新賬戶指示信息是所述驗證節(jié)點基于所述最新賬戶信息生成的,所述最新區(qū)塊是所述驗證節(jié)點根據(jù)共識算法與所述數(shù)字交易系統(tǒng)中的其他驗證節(jié)點之間達成共識的基準。11.如權利要求10所述的賬戶信息查詢方法,其中,所述已有賬戶信息被組織為賬戶樹的形式,所述最新賬戶信息是所述驗證節(jié)點基于所述最新交易信息對所述賬戶樹進行更新生成的。12.如權利要求10所述的賬戶信息查詢方法,其中,所述賬戶樹為哈希樹。13.如權利要求12所述的賬戶信息查詢方法,其中,所述賬戶樹為K叉樹結構,并且所述賬戶樹的任意一個內(nèi)部節(jié)點存儲以下字段:該節(jié)點保存的所有數(shù)據(jù)的哈希值、該節(jié)點的數(shù)據(jù)庫索引、指示該節(jié)點是否有孩子節(jié)點的孩子節(jié)點存在掩碼、該節(jié)點的快照編號、以及指向該節(jié)點的孩子節(jié)點的孩子指針。14.如權利要求13所述的賬戶信息查詢方法,其中,所述賬戶樹的任意一個葉子節(jié)點存儲以下字段:該節(jié)點保存的所有數(shù)據(jù)的哈希值、該節(jié)點的數(shù)據(jù)庫索引、指示該節(jié)點是否有孩子節(jié)點的孩子節(jié)點存在掩碼、該節(jié)點的快照編號、該節(jié)點保存的賬戶地址的哈希值、以及該節(jié)點保存的序列化數(shù)據(jù)。15.如權利要求10所述的賬戶信息查詢方法,其中,當所述驗證節(jié)點作為新驗證節(jié)點被添加到所述數(shù)字交易系統(tǒng)中時,所述賬戶信息查詢方法還包括: 所述驗證節(jié)點從所述數(shù)字交易系統(tǒng)中的任意一個老驗證節(jié)點同步所述老驗證節(jié)點存儲的當前最新賬戶信息。16.如權利要求15所述的賬戶信息查詢方法,還包括: 所述驗證節(jié)點從所述老驗證節(jié)點同步在所述當前最新賬戶信息的同步開始至完成的時間段期間生成的一個或多個新區(qū)塊,并利用包含在所述一個或多個新區(qū)塊中的交易信息對所述當前最新賬戶信息進行更新以生成所述最新賬戶信息。17.如權利要求10所述的賬戶信息查詢方法,其中,當所述驗證節(jié)點作為新驗證節(jié)點被添加到所述數(shù)字交易系統(tǒng)中時,所述賬戶信息查詢方法還包括: 所述驗證節(jié)點從所述數(shù)字交易系統(tǒng)中的任意一個老驗證節(jié)點同步所述老驗證節(jié)點存儲的當前最新賬戶信息; 所述驗證節(jié)點判斷其自身存儲的賬戶信息與所述當前最新賬戶信息是否一致;以及 如果不一致,則所述驗證節(jié)點重復以上處理,否則所述驗證節(jié)點將所述當前最新賬戶信息作為所述最新賬戶信息。18.如權利要求10所述的賬戶信息查詢方法,其中,所述驗證節(jié)點還利用所述區(qū)塊鏈存儲全部的交易信息和賬戶指示信息。
【文檔編號】G06F17/30GK106055597SQ201610347324
【公開日】2016年10月26日
【申請日】2016年5月24日
【發(fā)明人】蔣海, 張建軍, 翟海濱, 王璟, 趙正涌, 胡楠, 喬肖瑞
【申請人】布比(北京)網(wǎng)絡技術有限公司