一種交易數據處理方法、裝置以及可讀存儲介質與流程
2023-05-13 21:12:27 3
一種交易數據處理方法、裝置以及可讀存儲介質
1.本技術為在2021年09月24日提交中國專利局、申請號為202111125184.0、申請名稱為「一種交易數據處理方法、裝置以及可讀存儲介質」的中國專利申請的分案申請,其全部內容通過引用結合在本技術中。
技術領域
2.本技術涉及區塊鏈技術領域,尤其涉及一種交易數據處理方法、裝置以及可讀存儲介質。
背景技術:
3.隨著網絡技術的快速發展以及政府和企業對數據安全的重視,區塊鏈得到了更廣泛地應用。在傳統區塊鏈網絡中,區塊鏈網絡中的共識節點會定期從交易池獲取一批待打包的交易列表,並將獲取到的交易列表打包進提案區塊,隨後將該提案區塊廣播給區塊鏈網絡中的其他共識節點進行共識。
4.現有技術中,共識節點通常會在共識過程中執行該提案區塊所包含的交易列表,執行完成之後,共識節點會對得到的交易執行結果進行投票,在對該提案區塊達成共識後,才會將該提案區塊以及交易列表對應的交易執行結果一併寫入帳本,隨後共識節點可以從交易池獲取另一批交易列表並開始下一輪共識。由此可見,在現有技術中,由於整個共識階段需要採用串行邏輯,這意味著每一輪共識都要經過提案、預投票、預提交等三個階段,此外,由於交易的執行和共識過程耦合在一起,這意味著在共識過程中會夾雜著交易的順序執行,這勢必會導致整個共識階段需要消耗較長的共識時長,進而會導致在共識階段所佔據的系統資源在較長的共識時長內得不到釋放,以至於會降低整個區塊鏈的吞吐量。
技術實現要素:
5.本技術實施例提供了一種交易數據處理方法、裝置以及可讀存儲介質,可以提高區塊鏈的吞吐量。
6.本技術實施例一方面提供了一種交易數據處理方法,該方法由區塊鏈網絡中的第一共識節點執行,包括:
7.在接收到初始交易時,執行初始交易,得到初始交易對應的初始交易執行記錄,將初始交易對應的初始交易執行記錄添加至與第一共識節點的第一交易池相關聯的第一交易執行數據集,且將初始交易添加至第一交易池;第一交易執行數據集用於記錄第一共識節點所接收到的每個交易對應的初始交易執行記錄;
8.從第一交易池中獲取包含初始交易的交易列表,且將從第一交易執行數據集中獲取到的與交易列表中的每個交易對應的初始交易執行記錄作為與交易列表相關聯的待處理交易數據;
9.對交易列表以及待處理交易數據進行打包處理,得到待與區塊鏈網絡中的第二共識節點進行區塊共識的提案區塊,對提案區塊進行區塊共識,得到提案區塊的區塊共識結
果。
10.本技術實施例一方面提供了一種交易數據處理方法,該方法由區塊鏈網絡中的第二共識節點執行,包括:
11.接收由區塊鏈網絡中的第一共識節點所廣播的提案區塊;提案區塊是由第一共識節點對交易列表以及與交易列表相關聯的待處理交易數據進行打包處理得到的;交易列表是指由第一共識節點從第一共識節點的第一交易池中獲取到的包含初始交易的列表;待處理交易數據包括第一交易執行數據集中與交易列表中的每個交易對應的初始交易執行記錄;第一交易執行數據集與第一交易池相關聯,第一交易執行數據集用於記錄第一共識節點所接收到的每個交易對應的初始交易執行記錄;初始交易對應的初始交易執行記錄被第一共識節點添加至第一交易執行數據集,初始交易對應的初始交易執行記錄是由第一共識節點在接收到初始交易時執行初始交易得到的;
12.基於衝突檢測策略對提案區塊衝突檢測,得到提案區塊的第二共識結果,將第二共識結果返回至第一共識節點。
13.本技術實施例一方面提供了一種交易數據處理裝置,包括:
14.執行添加模塊,用於在接收到初始交易時,執行初始交易,得到初始交易對應的初始交易執行記錄,將初始交易對應的初始交易執行記錄添加至與第一共識節點的第一交易池相關聯的第一交易執行數據集,且將初始交易添加至第一交易池;第一交易執行數據集用於記錄第一共識節點所接收到的每個交易對應的初始交易執行記錄;
15.數據獲取模塊,用於從第一交易池中獲取包含初始交易的交易列表,且將從第一交易執行數據集中獲取到的與交易列表中的每個交易對應的初始交易執行記錄作為與交易列表相關聯的待處理交易數據;
16.打包共識模塊,用於對交易列表以及待處理交易數據進行打包處理,得到待與區塊鏈網絡中的第二共識節點進行區塊共識的提案區塊,對提案區塊進行區塊共識,得到提案區塊的區塊共識結果。
17.其中,該執行添加模塊包括:
18.數據讀取單元,用於在接收到初始交易時,獲取用於執行初始交易的初始業務合約,基於初始業務合約,調用第一共識節點對應的虛擬機從區塊鏈網絡中讀取初始交易對應的初始讀數據集;
19.交易執行單元,用於基於初始讀數據集,調用虛擬機執行初始交易,得到初始交易對應的初始交易執行結果,將初始交易執行結果寫入初始交易對應的初始寫數據集,將初始讀數據集以及初始寫數據集作為初始交易對應的初始交易讀寫集;
20.高度獲取單元,用於將執行初始交易時從區塊鏈網絡中獲取到的具有初始最大生成時間戳的區塊作為第一目標區塊,將第一目標區塊的區塊高度作為初始區塊高度;
21.記錄確定單元,用於將初始交易執行結果、初始交易讀寫集以及初始區塊高度作為初始交易對應的初始交易執行記錄。
22.其中,該打包共識模塊包括:
23.哈希運算單元,用於將交易列表中的交易作為待驗證交易,對待驗證交易和待處理交易數據進行哈希運算,得到與待驗證交易相關聯的交易哈希值,基於交易哈希值確定待驗證交易對應的默克爾樹根;
24.區塊生成單元,用於從區塊鏈網絡中獲取具有目標最大生成時間戳的區塊作為第二目標區塊,將第二目標區塊的區塊哈希值作為第二目標區塊的下一區塊的父區塊哈希值,基於待驗證交易、待處理交易數據、默克爾樹根以及父區塊哈希值,生成第二目標區塊的下一區塊,將第二目標區塊的下一區塊作為待與區塊鏈網絡中的第二共識節點進行區塊共識的提案區塊。
25.其中,該打包共識模塊包括:
26.衝突檢測單元,用於基於衝突檢測策略對提案區塊進行衝突檢測,得到第一共識結果;
27.區塊廣播單元,用於將提案區塊廣播至第二共識節點,以使第二共識節點基於衝突檢測策略對提案區塊進行衝突檢測,得到第二共識結果;
28.共識確定單元,用於接收第二共識節點所返回的第二共識結果,將第一共識結果和第二共識結果作為提案區塊的區塊共識結果;
29.其中,該裝置還包括:
30.區塊添加模塊,用於若區塊共識結果指示共識成功,則確定達成對提案區塊的共識,將共識達成後的提案區塊作為第三目標區塊寫入區塊鏈網絡對應的區塊鏈;
31.版本更新模塊,用於對與交易列表相關聯的交易對象所對應的帳戶狀態版本號進行更新。
32.其中,該裝置還包括:
33.有效檢驗模塊,用於對初始交易進行有效性校驗,得到有效性校驗結果;若有效性校驗結果指示交易有效,則確定初始交易通過有效性校驗,將通過有效性校驗的初始交易廣播至第二共識節點,以使第二共識節點執行通過有效性校驗的初始交易。
34.其中,該有效檢驗模塊包括:
35.籤名驗證單元,用於獲取初始交易的交易籤名信息以及發送初始交易的終端設備的設備公鑰,基於設備公鑰對交易籤名信息進行交易籤名驗證,得到交易驗籤結果;交易籤名信息為終端設備通過設備公鑰對應的設備私鑰對初始交易進行籤名後所得到的;
36.雙花驗證單元,用於對初始交易進行雙重花費驗證,得到雙花驗證結果;
37.結果確定單元,用於將交易驗籤結果以及雙花驗證結果作為初始交易對應的有效性校驗結果;當交易驗籤結果指示驗籤成功且雙花驗證結果指示不存在雙花攻擊時,確定有效性校驗結果指示交易有效。
38.本技術實施例一方面提供了一種交易數據處理裝置,包括:
39.接收模塊,用於接收由區塊鏈網絡中的第一共識節點所廣播的提案區塊;提案區塊是由第一共識節點對交易列表以及與交易列表相關聯的待處理交易數據進行打包處理得到的;交易列表是指由第一共識節點從第一共識節點的第一交易池中獲取到的包含初始交易的列表;待處理交易數據包括第一交易執行數據集中與交易列表中的每個交易對應的初始交易執行記錄;第一交易執行數據集與第一交易池相關聯,第一交易執行數據集用於記錄第一共識節點所接收到的每個交易對應的初始交易執行記錄;初始交易對應的初始交易執行記錄被第一共識節點添加至第一交易執行數據集,初始交易對應的初始交易執行記錄是由第一共識節點在接收到初始交易時執行初始交易得到的;
40.檢測模塊,用於基於衝突檢測策略對提案區塊衝突檢測,得到提案區塊的第二共
識結果,將第二共識結果返回至第一共識節點。
41.其中,該檢測模塊包括:
42.數據獲取單元,用於將交易列表中的交易作為待驗證交易,將從第二交易執行數據集中獲取到的與待驗證交易對應的本地交易執行記錄作為與待驗證交易相關聯的本地交易數據;第二交易執行數據集與第二共識節點的第二交易池相關聯;第二交易執行數據集用於記錄第二共識節點所接收到的每個交易對應的本地交易記錄;待驗證交易對應的本地交易執行記錄是由第二共識節點執行待驗證交易所得到的;
43.本地校驗單元,用於基於本地交易數據,對提案區塊中的待處理交易數據進行本地校驗,得到本地校驗結果;基於本地校驗結果確定提案區塊對應的第二共識結果。
44.其中,待處理交易數據包括待驗證交易對應的目標交易執行結果、目標交易讀寫集以及第一區塊高度;第一區塊高度是第一共識節點在執行待驗證交易時從區塊鏈網絡中所獲取到的具有第一最大生成時間戳的第一區塊的區塊高度;本地交易數據包括待驗證交易對應的本地交易執行結果、本地交易讀寫集以及第二區塊高度;第二區塊高度是第二共識節點在執行待驗證交易時從區塊鏈網絡中所獲取到的具有第二最大生成時間戳的第二區塊的區塊高度;
45.該本地校驗單元,包括:
46.第一比對子單元,用於將目標交易執行結果與本地交易執行結果進行比對,得到第一比對結果;
47.第二比對子單元,用於若第一比對結果指示目標交易執行結果與本地交易執行結果相同,則將第一區塊高度與第二區塊高度進行比對,得到第二比對結果;
48.結果確定子單元,用於基於第二比對結果確定提案區塊對應的本地校驗結果。
49.其中,第一最大生成時間戳與第二最大生成時間戳相同;
50.該結果確定子單元,具體用於當第二比對結果指示第一區塊高度與第二區塊高度相同時,將目標交易讀寫集與本地交易讀寫集進行比對,得到第三比對結果;基於第三比對結果確定提案區塊對應的本地校驗結果。
51.其中,第一最大生成時間戳不同於第二最大生成時間戳;目標交易讀寫集包括第一帳戶狀態版本號,第一帳戶狀態版本號是指第一共識節點在執行待驗證交易時從區塊鏈網絡中所獲取到的與待驗證交易相關聯且具有第一最大更新時間戳的帳戶狀態版本號;本地交易讀寫集包括第二帳戶狀態版本號,第二帳戶狀態版本號是指第二共識節點在執行待驗證交易時從區塊鏈網絡中所獲取到的與待驗證交易相關聯且具有第二最大更新時間戳的帳戶狀態版本號;
52.該結果確定子單元,具體用於當第二比對結果指示第一區塊高度與第二區塊高度不相同時,將第一帳戶狀態版本號與第二帳戶狀態版本號進行比對,得到第四比對結果;若第四比對結果指示第一帳戶狀態版本號與第二帳戶狀態版本號不相同,則從區塊鏈網絡中獲取與待驗證交易相關聯且具有第三最大更新時間戳的第三帳戶狀態版本號,將第一帳戶狀態版本號與第三帳戶狀態版本號進行比對,得到第五比對結果;若第五比對結果指示第三帳戶狀態版本號低於第一帳戶狀態版本號,則重新執行待驗證交易,得到更新交易執行結果,將目標交易執行結果與更新交易執行結果進行比對,得到第六比對結果;基於第六比對結果確定提案區塊對應的本地校驗結果。
53.其中,該檢測模塊包括:
54.關聯校驗單元,用於對交易列表進行關聯性校驗,得到關聯性校驗結果;基於關聯性校驗結果,從交易列表中獲取至少兩個具有關聯關係的關聯交易,從待處理交易數據中獲取至少兩個關聯交易分別對應的交易讀寫集;
55.讀寫檢測單元,用於基於至少兩個關聯交易分別對應的交易執行順序,對每個交易讀寫集進行讀寫集衝突檢測,得到讀寫集衝突檢測結果;基於讀寫集衝突檢測結果確定提案區塊對應的第二共識結果。
56.本技術實施例一方面提供了一種計算機設備,包括:處理器和存儲器;
57.處理器與存儲器相連,其中,存儲器用於存儲電腦程式,電腦程式被處理器執行時,使得該計算機設備執行本技術實施例提供的方法。
58.本技術實施例一方面提供了一種計算機可讀存儲介質,計算機可讀存儲介質存儲有電腦程式,該電腦程式適於由處理器加載並執行,以使得具有該處理器的計算機設備執行本技術實施例提供的方法。
59.本技術實施例一方面提供了一種電腦程式產品或電腦程式,該電腦程式產品或電腦程式包括計算機指令,該計算機指令存儲在計算機可讀存儲介質中。計算機設備的處理器從計算機可讀存儲介質讀取該計算機指令,處理器執行該計算機指令,使得該計算機設備執行本技術實施例提供的方法。
60.在本技術實施例中,當區塊鏈網絡中的第一共識節點接收到初始交易時,可以先執行該初始交易,得到該初始交易對應的初始交易執行記錄,進而可以將該初始交易對應的初始交易執行記錄添加至與第一共識節點的第一交易池相關聯的第一交易執行數據集,同時可以將該初始交易添加至第一交易池,進而第一共識節點可以從第一交易池獲取包含初始交易的交易列表,且可以從第一交易執行數據集中獲取與交易列表中的每個交易對應的初始交易執行記錄,即獲取與交易列表相關聯的待處理交易數據,進而可以對交易列表和待處理交易數據進行打包處理,得到提案區塊,隨後可以將提案區塊廣播至區塊鏈網絡中的第二共識節點,以使第二共識節點與第一共識節點分別對提案區塊進行區塊共識,最終得到提案區塊的區塊共識結果。由此可知,在本技術實施例中,對於區塊鏈網絡中的每一個共識節點,每次接收到交易時,均可以先執行該交易,且交易的接收和執行均可採用並行邏輯,交易執行結束後才將該交易加入交易池,同時將相應的交易執行記錄加入到與該交易池相關聯的交易執行數據集,後續再由第一共識節點將待打包的交易和對應的交易執行記錄一併打包成區塊進行共識,也就是說,本技術實施例將交易執行過程提前到將交易加入交易池之前,解耦了交易執行和共識過程,這樣可以減少共識過程所消耗的共識時長,從而不會在共識階段長期佔據系統資源,同時可以充分利用共識節點對交易並發接收和並發執行的特性提高系統資源的利用率,從而提高區塊鏈的吞吐量。
附圖說明
61.為了更清楚地說明本技術實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本技術的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
62.圖1是本技術實施例提供的一種區塊鏈節點系統的結構示意圖;
63.圖2是本技術實施例提供的一種交易數據處理的場景示意圖;
64.圖3是本技術實施例提供的一種交易數據處理方法的流程示意圖;
65.圖4是本技術實施例提供的一種生成提案區塊的場景示意圖;
66.圖5是本技術實施例提供的一種交易數據處理方法的流程示意圖;
67.圖6是本技術實施例提供的一種交易數據處理方法的流程示意圖;
68.圖7是本技術實施例提供的一種區塊鏈交易過程的交互示意圖;
69.圖8是本技術實施例提供的一種交易數據處理裝置的結構示意圖;
70.圖9是本技術實施例提供的一種交易數據處理裝置的結構示意圖;
71.圖10是本技術實施例提供的一種計算機設備的結構示意圖。
具體實施方式
72.下面將結合本技術實施例中的附圖,對本技術實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本技術一部分實施例,而不是全部的實施例。基於本技術中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬於本技術保護的範圍。
73.請參見圖1,圖1是本技術實施例提供的一種區塊鏈節點系統的結構示意圖。區塊鏈是一種分布式數據存儲、點對點傳輸、共識機制以及加密算法等計算機技術的新型應用模式,主要用於對數據按時間順序進行整理,並加密成帳本,使其不可被篡改和偽造,同時可進行數據的驗證、存儲和更新。區塊鏈本質上是一個去中心化的資料庫,該資料庫中的每個節點均存儲一條相同的區塊鏈,區塊鏈網絡中包括共識節點,共識節點負責區塊鏈全網的共識。
74.可以理解的是,區塊(block)是在區塊鏈網絡上承載交易數據(即交易業務)的數據包,是一種被標記上時間戳和之前一個區塊的哈希值的數據結構,區塊經過網絡的共識機制驗證並確定區塊中的交易。
75.可以理解的是,區塊鏈系統中可以包括有智能合約,該智能合約可以是指一種區塊鏈各節點(包括共識節點)可以理解並執行的代碼,可以執行任意邏輯並得到結果。應當理解,區塊鏈中可以包括一個或多個智能合約,這些智能合約可以通過標識號(identity document,id)或名稱來進行區分,而交易業務請求中可以攜帶智能合約的標識號或名稱,以此指定區塊鏈需要運行的智能合約。
76.如圖1所示的區塊鏈節點系統可以對應於區塊鏈網絡,該區塊鏈網絡可以包括但不限於聯盟鏈所對應的區塊鏈網絡。區塊鏈節點系統是指用於進行區塊鏈節點與區塊鏈節點之間數據共享的系統,該區塊鏈節點系統中可以包括多個節點,多個節點具體可以包括節點10a、節點10b、節點10c、節點10d、
…
、節點10n,這裡的節點10a、節點10b、節點10c、節點10d、
…
、節點10n可以統稱為區塊鏈節點。可以理解的是,區塊鏈節點可以為接入區塊鏈網絡中的伺服器,也可以為接入區塊鏈網絡中的終端設備,這裡對區塊鏈節點的具體形式不做限定。
77.其中,每個節點在進行正常工作時可以接收到外界發送的數據,並基於接收到的數據進行區塊上鏈處理,也可以向外界發送數據。為了保證各個節點之間的數據互通,每個
節點之間可以存在數據連接,例如節點10a和節點10b之間存在數據連接,節點10a和節點10c之間存在數據連接,節點10b和節點10c之間存在數據連接。
78.可以理解的是,上述的數據連接不限定連接方式,可以通過有線通信方式進行直接或間接地連接,也可以通過無線通信方式進行直接或間接地連接,還可以通過其他連接方式,本技術在此不做限制。
79.可以理解的是,節點之間可以通過上述數據連接進行數據或者區塊傳輸。區塊鏈網絡可以基於節點標識實現節點之間的數據連接,對於區塊鏈網絡中的每個節點,均具有與其對應的節點標識,而且上述每個節點均可以存儲與自身有相連關係的其他節點的節點標識,以便後續根據其他節點的節點標識,將獲取到的數據或生成的區塊廣播至其他節點,例如節點10a中可以維護一個如表1所示的節點標識列表,該節點標識列表保存著其他節點的節點名稱和節點標識:
80.表1
81.節點名稱節點標識節點10a117.114.151.174節點10b117.116.189.145節點10c117.114.151.183節點10d117.117.125.169
……
節點10n117.116.189.125
82.其中,節點標識可為ip(internet protocol,網絡之間互聯的協議)地址以及其他任意一種能夠用於標識區塊鏈網絡中節點的信息,表1中僅以ip地址為例進行說明。例如,節點10a可以通過節點標識117.116.189.145向節點10b發送信息(例如,區塊),且節點10b可以通過節點標識117.114.151.174確定該信息是由節點10a所發送的。
83.需要說明的是,本技術實施例中的區塊鏈網絡可以是分層結構,也可以是單層結構,本技術對區塊鏈網絡的具體結構不進行限定。
84.可選的,對於具有分層結構的區塊鏈網絡,圖1所示的區塊鏈節點系統可以包括第一區塊鏈系統、第二區塊鏈系統以及代理節點(也可稱為路由節點),其中,第一區塊鏈系統和第二區塊鏈系統均可以包括一個或者多個節點,這裡將不對節點的數量進行限制。例如,第一區塊鏈系統可以包括節點10a、節點10b,第二區塊鏈系統可以包括節點10c、節點10d,代理節點可以為節點10n。其中,第一區塊鏈系統對應的區塊鏈網絡可以稱之為業務網絡(即見證網絡),處於業務網絡中的節點可以稱之為業務節點,該業務節點主要用於執行交易業務,以得到與該交易業務相關聯的交易數據。可以理解的是,這裡的業務節點不需要參與記帳共識,但能夠通過身份認證的方式從核心共識網絡中獲得區塊頭數據和部分授權可見的區塊數據。第二區塊鏈系統對應的區塊鏈網絡可以為稱之為核心共識網絡。處於該核心共識網絡中的節點可以稱之為共識節點(即記帳節點),該共識節點可以運行有區塊鏈共識協議。代理節點可以用於對上述業務網絡和核心共識網絡進行網絡隔離,該代理節點可以將點對點(peer to peer,簡稱p2p)網絡進行網絡分層,以形成「業務網絡—核心共識網絡」這樣的分層結構,進而能夠提高區塊鏈上數據的保密性和安全性。
85.可選的,對於具有單層結構的區塊鏈網絡,圖1所示的區塊鏈節點系統可以包括共
識節點和非共識節點,共識節點參與共識,而非共識節點不參與共識,但可以幫助傳播區塊和投票消息,以及相互同步狀態等。例如,可以將圖1中的節點10a、節點10b、節點10c以及節點10d作為共識節點,其餘節點則作為非共識節點。
86.可以理解的是,本技術實施例所提供的交易數據處理方法可以由計算機設備執行,計算機設備包括但不限於上述共識節點(可以為終端設備或伺服器)。上述伺服器可以是獨立的物理伺服器,也可以是多個物理伺服器構成的伺服器集群或者分布式系統,還可以是提供雲服務、雲資料庫、雲計算、雲函數、雲存儲、網絡服務、雲通信、中間件服務、域名服務、安全服務、cdn、以及大數據和人工智慧平臺等基礎雲計算服務的雲伺服器。上述終端設備可以是智慧型手機、平板電腦、筆記本電腦、掌上電腦、智能音響、移動網際網路設備(mid,mobile internet device)、pos(point of sales,銷售點)機、可穿戴設備(例如智能手錶、智能手環等)等。
87.應當理解,在區塊鏈中,在將一個區塊(可稱為提案區塊、提議區塊或待上鏈區塊)進行上鏈之前,該區塊必須經過區塊鏈網絡中的共識節點進行共識,在共識通過後才能將該區塊添加到區塊鏈上。可以理解的是,當區塊鏈被用於政府或者商業機構的一些場景中時,並非區塊鏈中的所有參與節點(即上述區塊鏈節點系統中的區塊鏈節點)都有足夠的資源和必要性成為區塊鏈的共識節點。例如,在圖1所示的區塊鏈節點系統中,可以將節點10a、節點10b、節點10c和節點10d作為該區塊鏈節點系統中的共識節點。區塊鏈節點系統中的共識節點參與共識,也就是對區塊(包含一批交易)進行共識,包括生成提案區塊,對提案區塊進行投票;而非共識節點不參與共識,但會幫助傳播區塊和投票消息,以及相互同步狀態等。
88.為便於理解,在圖1所示的區塊鏈節點系統中,本技術實施例可以將用於打包生成提案區塊的共識節點作為第一共識節點(也可稱為打包節點、提議節點),第一共識節點可以向區塊鏈網絡中的其他共識節點廣播提案區塊,且本技術實施例可以將用於對提案區塊進行區塊共識的其他共識節點作為第二共識節點。需要說明的是,提議節點也屬於共識節點,也需要對提案區塊進行區塊共識。例如,第一共識節點可以為圖1所示的區塊鏈節點系統中的節點10a,第二共識節點可以為圖1所示的區塊鏈節點系統中的節點10b、節點10c和節點10d。此外,第一共識節點和第二共識節點均可以執行接收到的交易,且每個共識節點都有自己的交易池,以用於添加待打包的交易,每個交易池還與一個交易執行數據集相關聯,交易執行數據集可用於記錄相應的共識節點所接收到的每個交易對應的交易執行記錄,其中,交易執行數據集和交易池可以位於單獨的存儲區域,也可以位於相同的存儲區域,本技術實施例對此不進行限定,例如,可選的,交易執行數據集可以位於與其相關聯的交易池中。為便於區分,在本技術實施例中,可以將第一共識節點的交易池稱為第一交易池,將與第一交易池相關聯的交易執行數據集稱為第一交易執行數據集,且可以將第二共識節點的交易池稱為第二交易池,將與第二交易池相關聯的交易執行數據集稱為第二交易執行數據集。
89.可以理解的是,在本技術實施例中,第一共識節點接收到初始交易時,可以先執行該初始交易,得到該初始交易對應的初始交易執行記錄,進而可以將該初始交易對應的初始交易執行記錄添加至與第一共識節點的第一交易池相關聯的第一交易執行數據集,同時可以將該初始交易添加至第一交易池,進而第一共識節點可以從第一交易池獲取包含初始
交易的交易列表,且可以從第一交易執行數據集中獲取與交易列表中的每個交易對應的初始交易執行記錄,即獲取與交易列表相關聯的待處理交易數據,進而可以對交易列表和待處理交易數據進行打包處理,得到提案區塊,隨後可以將提案區塊廣播至第二共識節點,以使第二共識節點與第一共識節點分別對提案區塊進行區塊共識,最終得到提案區塊的區塊共識結果。由此可知,本技術實施例將交易執行過程提前到將交易加入交易池之前,解耦了交易執行和共識過程,這樣可以減少共識過程所消耗的共識時長,從而不會在共識階段長期佔據系統資源,同時可以充分利用共識節點對交易並發接收和並發執行的特性提高系統資源的利用率,由此可以提升出塊效率,從而提高區塊鏈的吞吐量。
90.為便於理解,進一步地,請參見圖2,圖2是本技術實施例提供的一種交易數據處理的場景示意圖。如圖2所示,本技術實施例中的共識節點20a可以為區塊鏈網絡中用於對交易列表以及待處理交易數據進行打包處理的共識節點(即第一共識節點),該共識節點20a可以為上述圖1所示的區塊鏈節點系統中的任意一個共識節點,例如,節點10a。本技術實施例中的共識節點20b可以為區塊鏈網絡中待與第一共識節點進行區塊共識的共識節點(即第二共識節點),例如,該共識節點20b可以為上述圖1所示的區塊鏈節點系統中的節點10b。
91.應當理解,在本技術實施例中,區塊鏈網絡中的共識節點在將收到的交易加入交易池之前,可以先執行該交易,並保存該交易對應的交易執行記錄,後續可以將該交易以及該交易對應的交易執行記錄打包進提案區塊進行共識。其中,交易也可稱為交易請求、用戶請求,可以由終端設備上的應用客戶端發起,用於指示用戶期望執行的交易業務,例如,這裡的交易業務可以為資產轉移業務,其中,資產轉移業務可以用於轉移遊戲金幣、遊戲鑽石、電子票據等虛擬資產,這裡將不對虛擬資產的類型進行限定。
92.為便於理解和區分,本技術實施例可以將第一共識節點接收的任意一個交易稱為初始交易,例如,可以將在一個打包周期內接收到的最後一個交易作為初始交易,第一共識節點執行完該初始交易後,可以立即開始對相關數據進行打包處理。其中,打包周期是指相鄰兩次打包處理之間的時長,例如,可以將打包周期設置為10秒,則第一共識節點會每10秒就進行一次打包處理。本技術實施例對打包周期的具體時長不進行限定。
93.如圖2所示,共識節點20a可以持續且並發地接收應用客戶端發送的交易,在成功接收後,共識節點20a可以預先執行這些交易,得到這些交易分別對應的初始交易執行記錄。以初始交易為交易200a為例進行說明,共識節點20a接收到交易200a後,可以對交易200a進行有效性校驗,得到有效性校驗結果,在有效性校驗結果指示交易有效,即交易200a通過有效性校驗時,共識節點20a可以將交易200a廣播至第二共識節點(例如,共識節點20b),以使第二共識節點執行交易200a。同時,共識節點20a可以調用虛擬機按照當前帳本狀態(例如,剩餘資產量,即帳戶餘額)執行交易200a,從而得到交易200a對應的交易執行記錄201a(即初始交易對應的初始交易執行記錄),進而可以將交易200a添加至共識節點20a的交易池200(即第一交易池),將交易執行記錄201a添加至與交易池200相關聯的交易執行數據集201(即第一交易執行數據集)。其中,第一交易執行數據集可用於記錄第一共識節點所接收到的每個交易對應的初始交易執行記錄。可選的,每個交易對應的初始交易執行記錄均可以包括該交易對應的交易執行結果、交易讀寫集以及執行該交易時帳本最新的區塊高度(即第一共識節點所在區塊鏈網絡對應的區塊鏈上具有最大生成時間戳的區塊對應的區塊高度)。
94.同理,對於共識節點20a接收到的其它交易,例如,交易200b、交易200c、
…
、交易200n,其處理過程與對交易200a的處理過程一致,最終共識節點20a可以生成並保存每個交易對應的初始交易執行記錄。應當理解,共識節點20b也可以對接收到的所有交易進行預先執行,其處理過程與共識節點20a對交易200a的處理過程類似,這裡不再進行贅述。需要說明的是,在本技術實施例中,每個共識節點均可以並發接收多個交易,也可以並發執行多個交易,因此可以提高cpu(central processing unit,中央處理器)計算資源和i/o(input/output,輸入/輸出)資源的利用率。
95.如圖2所示,假設共識節點20a執行交易200b後得到交易執行記錄201b,執行交易200c後得到交易執行記錄201c,
…
,執行交易200n後得到交易執行記錄201n,則當前交易池200中存在有交易200a、交易200b、交易200c、
…
、交易200n,交易執行數據集201中存在有交易執行記錄201a、交易執行記錄201b、交易執行記錄201c、
…
、交易執行記錄201n。應當理解,共識節點20a可以根據相關的打包策略(例如,基於交易時間優先的策略或交易手續費優先的策略)定期地從交易池200獲取一批待打包的交易列表,例如,可以從交易池200中獲取交易200a、交易200b以及交易200c作為待打包的交易列表202,相應的,可以從交易執行數據集201中獲取與交易列表202中的每個交易(即交易200a、交易200b、交易200c)對應的初始交易執行記錄作為與交易列表202相關聯的待處理交易數據203,此時待處理交易數據203具體包括交易執行記錄201a、交易執行記錄201b以及交易執行記錄201c。
96.進一步,共識節點20a可以對交易列表202和待處理交易數據203進行打包處理,得到待與第二共識節點(例如,共識節點20b)進行區塊共識的提案區塊204,進而可以將提案區塊204廣播至共識節點20b,隨後共識節點20a和共識節點20b可以共同對提案區塊204進行區塊共識,最終得到提案區塊204的區塊共識結果。其中,每個接收到提案區塊204的共識節點可以基於衝突檢測策略對提案區塊204進行衝突檢測並投票,進而可以基於每個共識節點的投票結果得到最終的區塊共識結果。當區塊共識結果指示共識成功時,共識節點20a可以將共識達成後的提案區塊204寫入共識節點20a所在區塊鏈網絡對應的區塊鏈。其中,提案區塊204可以包括區塊頭信息以及區塊主體,區塊頭信息可以包括該提案區塊204的父區塊哈希值、區塊高度、版本號、時間戳、難度值、隨機數以及默克爾樹根等信息。該區塊主體可以包括打包至提案區塊204的交易列表202中的交易、待處理交易數據203中的交易執行記錄以及由該交易和該交易執行記錄對應的交易哈希值所構成的默克爾路徑。
97.上述可知,在本技術實施例中,對於區塊鏈網絡中的每一個共識節點,每次接收到交易時,均可以先執行該交易,且交易的接收和執行均可採用並行邏輯,交易執行結束後才將該交易加入交易池,同時將相應的交易執行記錄加入到與該交易池相關聯的交易執行數據集,後續再由第一共識節點將待打包的交易和對應的交易執行記錄一併打包成區塊進行共識,也就是說,本技術實施例將交易執行過程提前到將交易加入交易池之前,解耦了交易執行和共識過程,這樣可以減少共識過程所消耗的共識時長,從而不會在共識階段長期佔據系統資源,同時可以充分利用共識節點對交易並發接收和並發執行的特性提高系統資源的利用率,並提高共識節點的出塊效率,最終提高區塊鏈的吞吐量。
98.進一步地,請參見圖3,圖3是本技術實施例提供的一種交易數據處理方法的流程示意圖。如圖3所示,該方法可以由區塊鏈網絡中的第一共識節點執行,該第一共識節點可以為接入至區塊鏈網絡中的伺服器,也可以為接入至該區塊鏈網絡中的終端設備,這裡對
第一共識節點的具體形式不做限定。該第一共識節點可以為上述圖1所示的區塊鏈節點系統中的任意一個共識節點,例如,節點10a。該方法至少可以包括以下步驟s101-步驟s103:
99.步驟s101,在接收到初始交易時,執行初始交易,得到初始交易對應的初始交易執行記錄,將初始交易對應的初始交易執行記錄添加至與第一共識節點的第一交易池相關聯的第一交易執行數據集,且將初始交易添加至第一交易池;
100.具體的,第一共識節點在接收到初始交易時,可以獲取用於執行該初始交易的初始業務合約,進而可以調用該初始業務合約執行該初始交易,從而得到該初始交易對應的初始交易執行結果,還可以獲取交易執行後得到的初始交易讀寫集以及執行該初始交易時在區塊鏈網絡中獲取到的具有最大生成時間戳的區塊對應的區塊高度(即初始區塊高度),隨後可以將該初始交易對應的初始交易執行結果、初始交易讀寫集以及初始區塊高度作為該初始交易對應的初始交易執行記錄。其中,初始業務合約為部署在區塊鏈網絡中的智能合約,可用於執行初始交易。
101.應當理解,初始交易是由終端設備上的應用客戶端發起的交易請求,這裡的應用客戶端可以為直播應用、社交應用、即時通信應用、遊戲應用、短視頻應用、視頻應用、音樂應用、購物應用、小說應用、支付應用等具有交易功能的客戶端。可選的,當第一共識節點所在的區塊鏈網絡具有單層結構時,終端設備可以直接將初始交易發送至該區塊鏈網絡,該區塊鏈網絡中的節點接收到該初始交易後可以互相廣播,最終該區塊鏈網絡中的所有共識節點(包括第一共識節點)均可以接收到該初始交易,因此,第一共識節點接收到的初始交易可能是由終端設備直接發送的,也可能是由其他節點廣播的。可選的,當第一共識節點所在的區塊鏈網絡具有分層結構時,可以將該區塊鏈網絡劃分為業務網絡和核心共識網絡,可選的,該區塊鏈網絡還可以包括路由網絡(或稱為代理網絡),用於對業務網絡和核心共識網絡進行網絡隔離。應當理解,發起初始交易的終端設備可以作為業務網絡中的某個業務節點,或者,也可以作為獨立於該區塊鏈網絡的終端,本技術實施例對此不做限定。因此,業務節點可以將初始交易直接發送至核心共識網絡,或者,業務節點可以先將初始交易發送至路由網絡中的路由節點,然後再通過路由節點將該初始交易轉發至核心共識網絡。核心共識網絡中的共識節點接收到該初始交易後可以互相廣播,最終該核心共識網絡中的所有共識節點(包括第一共識節點)均可以接收到該初始交易。本技術實施例對區塊鏈網絡的具體結構不進行限定。
102.應當理解,第一共識節點獲取到用於執行初始交易的初始業務合約後,可以基於初始業務合約,調用第一共識節點對應的虛擬機從區塊鏈網絡中讀取初始交易對應的初始讀數據集,進而可以基於初始讀數據集,調用虛擬機執行初始交易,從而得到初始交易對應的初始交易執行結果,隨後可以將初始交易執行結果寫入初始交易對應的初始寫數據集,進而可以將初始讀數據集以及初始寫數據集作為初始交易對應的初始交易讀寫集。其中,初始讀數據集可以存儲在第一共識節點的存儲層中,應當理解,區塊鏈網絡中的每個節點的存儲層均可以包括本地緩存和本地存儲,本地緩存的讀寫速度相對較快,因此區塊鏈節點可以優先在本地緩存中進行讀/寫操作,這樣可以提高區塊鏈網絡的整體性能;而本地存儲用於數據(例如區塊)的持久化存儲,區塊鏈節點可以先將需要存儲的數據寫入對應的本地緩存中,但考慮到本地緩存的局限性(例如掉電會導致數據丟失),後續可以通過異步寫操作逐漸將相關數據寫入本地存儲(例如,本地資料庫),以最終保障數據的可靠性和持久
化。因此,第一共識節點可以先基於初始業務合約,調用第一共識節點對應的虛擬機從第一共識節點的本地緩存中讀取該初始交易對應的初始讀數據集,若在第一共識節點的本地緩存中讀取失敗,則可以進一步嘗試從第一共識節點的本地存儲中讀取該初始交易對應的初始讀數據集。
103.進一步,第一共識節點可以基於獲取到的初始讀數據集,調用第一共識節點對應的虛擬機執行初始交易,得到初始交易對應的初始交易執行結果,進而可以將初始交易執行結果寫入初始交易對應的初始寫數據集,最終可以將該初始讀數據集以及該初始寫數據集作為初始交易對應的初始交易讀寫集。其中,第一共識節點可以預先創建一個空的初始寫數據集,在執行初始交易得到對應的初始交易執行結果時,再將該初始交易執行結果寫入初始寫數據集。應當理解,初始寫數據集也可以與初始讀數據集關聯存儲在第一共識節點的存儲層中。可選的,基於第一共識節點的本地緩存可以為第一共識節點接收到的每個交易創建對應的交易讀緩存和交易寫緩存,一個交易對應一個交易寫緩存和一個交易讀緩存,也就是說,第一共識節點可以從初始交易對應的交易讀緩存中獲取該初始交易對應的初始讀數據集,然後可以將執行該初始交易所得到的初始交易執行結果添加至該初始交易對應的交易寫緩存,基於該交易寫緩存中所存儲的數據構建得到初始交易對應的初始寫數據集。
104.此外,在執行上述初始交易時,第一共識節點可以將從區塊鏈網絡中獲取到的具有初始最大生成時間戳的區塊作為第一目標區塊,將第一目標區塊的區塊高度作為初始區塊高度,也就是說,第一共識節點可以將初始交易執行時所讀取到的帳本最新的區塊高度作為初始區塊高度。這裡的第一目標區塊特指第一共識節點執行初始交易時從第一共識節點的本地緩存中讀取到的具有最大生成時間戳的區塊,為了便於後續區分,可以將該最大生成時間戳稱為初始最大生成時間戳。
105.應當理解,區塊高度是區塊的標示符,用來丈量區塊鏈中某一個區塊到第一個區塊之間的距離,通過區塊高度可以準確地了解到某一區塊在鏈上的位置,相當於給區塊定位了一個坐標。例如,假設第一共識節點存儲的區塊鏈中有五個區塊,第一個區塊的區塊高度為0,第二個區塊的區塊高度為1
……
依此類推,第五個區塊的區塊高度為4,由於此時該區塊鏈中具有初始最大生成時間戳的區塊為第五個區塊,因此,第五個區塊即為第一目標區塊,相應的,當前最新的區塊高度(即初始區塊高度)為4。
106.可選的,特殊情況下區塊鏈可能會出現分叉,則第一共識節點可以選取具有最長分支的區塊鏈作為有效的區塊鏈,數據的讀取(例如,獲取初始區塊高度)還是在有效的區塊鏈上進行。
107.需要說明的是,在需要讀取數據時,雖然區塊鏈網絡中的每個共識節點均可以從共同維護的區塊鏈(或帳本)上獲取到相應的數據,例如交易執行結果、讀數據集、區塊等,但由於數據的廣播容易受到網絡傳輸延遲的影響,因此每個共識節點的存儲層的數據更新(例如,新區塊的添加)會存在時間差,也就是說,先進的、計算能力強、傳輸延遲小的共識節點,其數據更新速度快,因此該節點的存儲層中的數據相對較新;而落後的、計算能力弱、傳輸延遲大的共識節點,其數據更新速度慢,因此該節點的存儲層中的數據相對較舊。由此可知,不同的共識節點執行同一個交易時,從對應的存儲層中所獲取到的最新的區塊高度也可能是不一致的。例如,對於共識節點1,在執行交易a時,共識節點1從其本地緩存中讀取到
的最新區塊高度為4,對於共識節點2,在執行交易a時,共識節點2從其本地緩存中讀取到的最新區塊高度為3,可以看出此時共識節點2的區塊更新落後於共識節點1。
108.進一步,第一共識節點可以將初始交易對應的初始交易執行結果、初始交易讀寫集以及初始區塊高度作為初始交易對應的初始交易執行記錄,隨後可以將該初始交易對應的初始交易執行記錄添加至第一交易執行數據集,且將該初始交易添加至第一共識節點的第一交易池。可選的,也可以將初始交易執行結果、初始交易讀寫集、初始區塊高度中的任意一個或多個數據作為初始交易對應的初始交易執行記錄。其中,第一交易執行數據集與第一交易池相關聯,第一交易執行數據集用於記錄第一共識節點所接收到的每個交易對應的初始交易執行記錄。例如,可以再次參見圖2,如圖2所示,若將交易200a作為初始交易,則共識節點20a執行交易200a後得到的交易執行記錄201a將作為初始交易對應的初始交易執行記錄,該交易執行記錄201a可以包括交易200a對應的初始交易執行結果、初始交易讀寫集以及初始區塊高度,同理,共識節點20a執行接收到的其它交易(例如,交易200b、交易200c、交易200n等)後也可得到相應的交易執行記錄(例如,交易執行記錄201b、交易執行記錄201c、交易執行記錄201n)。
109.應當理解,本技術實施例僅以初始交易的執行為例進行說明,第一共識節點還可以接收其他的交易,對於這些交易的處理過程與對初始交易的處理過程一致,這裡不再進行贅述。其中,第一共識節點可以並發接收多個交易,也可以並發執行多個交易,需要說明的是,除了第一共識節點外,區塊鏈網絡中的其他共識節點(如第二共識節點)同樣可以並發接收和並發執行多個交易,因此,通過充分利用交易並發接收處理邏輯,可以提高cpu計算資源和i/o資源的利用率,從而提高系統資源的整體利用率。
110.步驟s102,從第一交易池中獲取包含初始交易的交易列表,且將從第一交易執行數據集中獲取到的與交易列表中的每個交易對應的初始交易執行記錄作為與交易列表相關聯的待處理交易數據;
111.具體的,除了初始交易之外,第一交易池中還可以包含其他待打包的交易,因此,第一共識節點可以從第一交易池獲取待打包的交易列表,其中,該交易列表中可以包括一個或多個交易,本技術實施例對交易列表所包含的具體交易數量不做限定。可選的,該交易列表可以包括初始交易。同時,第一共識節點還可以從第一交易執行數據集中獲取與該交易列表中的每個交易對應的初始交易執行記錄,並可將這些初始交易執行記錄作為與交易列表相關聯的待處理交易數據。
112.應當理解,由於一個區塊所能包含的交易容量有限,因此,當第一交易池中的待打包交易數量過多,導致一個區塊打包不完時,第一共識節點可以基於配置的打包策略從第一交易池獲取交易列表。其中,打包策略可以為基於交易時間優先的策略,即根據每個交易對應的交易時間戳進行排序,交易時間戳小的交易被優先打包進區塊;可選的,打包策略可以為基於交易手續費優先的策略,即根據每個交易所支付的手續費進行排序,手續費高的交易被優先打包進區塊;可選的,還可以綜合交易時間和交易手續費進行排序,綜合排名靠前的交易被優先打包進區塊。當然,還可以採用其他打包策略來進行打包處理,本技術實施例對採用的打包策略的具體內容不做限定。
113.步驟s103,對交易列表以及待處理交易數據進行打包處理,得到待與區塊鏈網絡中的第二共識節點進行區塊共識的提案區塊,對提案區塊進行區塊共識,得到提案區塊的
區塊共識結果。
114.具體的,第一共識節點可以將交易列表中的交易作為待驗證交易,進而可以對待驗證交易和待處理交易數據進行哈希運算,得到與待驗證交易相關聯的交易哈希值,且可以基於交易哈希值確定待驗證交易對應的默克爾樹根。與此同時,第一共識節點可以從區塊鏈網絡中獲取具有目標最大生成時間戳的區塊作為第二目標區塊,並可以將第二目標區塊的區塊哈希值作為第二目標區塊的下一區塊的父區塊哈希值,隨後第一共識節點可以基於待驗證交易、待處理交易數據、默克爾樹根以及父區塊哈希值,生成第二目標區塊的下一區塊,並將第二目標區塊的下一區塊作為待與區塊鏈網絡中的第二共識節點進行區塊共識的提案區塊。這裡的第二目標區塊特指第一共識節點進行打包處理時,從區塊鏈網絡對應的區塊鏈上讀取到的具有最大生成時間戳的區塊,該最大生成時間戳可稱為目標最大生成時間戳,可以理解,提案區塊的生成時間戳可以用於更新區塊鏈上的最大生成時間戳。
115.應當理解,第二目標區塊與第一目標區塊可能是同一個區塊,也可能是不同的區塊。
116.其中,需要說明的是,第一共識節點可以對待驗證交易進行哈希運算,得到第一哈希值,同時可以對待處理交易數據進行哈希運算,得到第二哈希值,隨後可以對第一哈希值和第二哈希值再次進行哈希運算,從而得到與待驗證交易相關聯的交易哈希值。可選的,第一共識節點也可以直接對待驗證交易和待處理交易數據進行哈希運算,從而得到與待驗證交易相關聯的交易哈希值。最終,第一共識節點可以基於交易哈希值確定待驗證交易對應的默克爾樹根。
117.可選的,第一共識節點也可以僅對待驗證交易進行哈希運算,得到與待驗證交易相關聯的交易哈希值,進而可以基於該交易哈希值確定待驗證交易對應的默克爾樹根。
118.為便於理解,請一併參見圖4,圖4是本技術實施例提供的一種生成提案區塊的場景示意圖。如圖4所示,本技術實施例中的共識節點40a可以為區塊鏈網絡中的第一共識節點,該共識節點40a可以為上述圖1所示的區塊鏈節點系統中的任意一個共識節點,例如,節點10a。
119.應當理解,如圖4所示的區塊鏈4可以為上述圖1所示的區塊鏈網絡中的區塊鏈,該區塊鏈4可以為共識節點40a所屬區塊鏈網絡中每個共識節點均共享的一條相同的區塊鏈,每個共識節點均可以在區塊鏈4中獲取該區塊鏈所存儲的信息。其中,區塊鏈4中包括區塊40a、區塊40b、
…
、區塊40m,該區塊40a可以稱為區塊鏈4的創世區塊。
120.應當理解,圖4所示的交易池400(即第一交易池)中可以存儲有共識節點40a接收到的多個交易,這多個交易具體可以包括交易1、交易2、交易3、交易4、
…
、交易n,這裡的n為正整數。其中,交易2可以為某個終端設備上的應用客戶端發起的初始交易。
121.可以理解的是,在將交易放入交易池之前,共識節點40a可以執行接收到的每個交易,得到每個交易分別對應的初始交易執行記錄,並將這些初始交易執行記錄添加至與交易池400相關聯的交易執行數據集401(即第一交易執行數據集),這些初始交易執行記錄具體可以包括交易1對應的交易執行記錄1、交易2對應的交易執行記錄2、交易3對應的交易執行記錄3、
…
、交易n對應的交易執行記錄n。
122.進一步,共識節點40a可以從交易池400獲取用於進行打包處理的交易列表,並將該交易列表中的交易作為待驗證交易,例如,交易列表402中的交易1、交易2、交易3、交易4
均可以統稱為待驗證交易。同時,共識節點40a可以從交易執行數據集401獲取與交易列表中的每個交易對應的初始交易執行記錄,並將這些初始交易執行記錄作為與該交易列表相關聯的待處理交易數據,例如,待處理交易數據403中的交易執行記錄1、交易執行記錄2、交易執行記錄3、交易執行記錄4均可以統稱為待處理交易數據。進一步,共識節點40a可以分別對交易列表402中的每個交易以及待處理交易數據403中該交易對應的初始交易執行記錄進行哈希運算,以得到相應的交易哈希值。例如,對交易1和交易執行記錄1進行哈希運算,可以得到交易哈希值1;可選的,也可以對交易1進行哈希運算,得到第一哈希值1,同時對交易執行記錄1進行哈希運算,得到第二哈希值1,隨後對第一哈希值1和第二哈希值1進行哈希運算,得到交易哈希值1;對交易2和交易執行記錄2進行哈希運算,可以得到交易哈希值2;可選的,也可以對交易2進行哈希運算,得到第一哈希值2,同時對交易執行記錄2進行哈希運算,得到第二哈希值2,隨後對第一哈希值2和第二哈希值2進行哈希運算,得到交易哈希值2;對交易3和交易執行記錄3進行哈希運算,可以得到交易哈希值3;可選的,也可以對交易3進行哈希運算,得到第一哈希值3,同時對交易執行記錄3進行哈希運算,得到第二哈希值3,隨後對第一哈希值3和第二哈希值3進行哈希運算,得到交易哈希值3;對交易4和交易執行記錄4進行哈希運算,可以得到交易哈希值4;可選的,也可以對交易4進行哈希運算,得到第一哈希值4,同時對交易執行記錄4進行哈希運算,得到第二哈希值4,隨後對第一哈希值4和第二哈希值4進行哈希運算,得到交易哈希值4。
123.進一步,共識節點40a可以基於交易哈希值1、交易哈希值2、交易哈希值3以及交易哈希值4,確定待驗證交易對應的默克爾樹根。例如,共識節點40a可以對交易哈希值1和交易哈希值2進行哈希運算,得到包含這兩個交易哈希值的路徑哈希值12;對交易哈希值3和交易哈希值4進行哈希運算,得到包含這兩個交易哈希值的路徑哈希值34;最後,可以對路徑哈希值12和路徑哈希值34進行哈希運算,得到包含這兩個路徑哈希值的樹根哈希值1234,進而可以將樹根哈希值1234作為待驗證交易對應的默克爾樹根。
124.進一步,共識節點40a可以從圖4所示的區塊鏈4上,獲取具有目標最大生成時間戳的區塊作為第二目標區塊(例如,區塊40m),進而可以將該區塊40m的區塊哈希值作為該區塊40m的下一區塊的父區塊哈希值,此時,共識節點40a可以基於待驗證交易、待處理交易數據、默克爾樹根以及父區塊哈希值,生成區塊40m的下一區塊,並將生成的第二目標區塊的下一區塊作為待寫入區塊鏈4的提案區塊(例如,提案區塊40x),這裡的提案區塊40x可以用於更新區塊鏈4上的最大生成時間戳。如圖4所示,該提案區塊可以包括區塊頭信息和區塊主體。其中,區塊頭信息中可以包括父區塊哈希值、版本號、時間戳、難度值、隨機數以及默克爾樹根等,區塊主體中可以存儲有共識節點40a所打包的待驗證交易、待處理交易數據,以及基於待驗證交易和待處理交易數據所得到的交易哈希值所構成的默克爾路徑。
125.進一步,第一共識節點可以基於衝突檢測策略對提案區塊進行衝突檢測,得到第一共識結果。同時,第一共識節點可以將提案區塊廣播至第二共識節點,以使第二共識節點可以同樣基於衝突檢測策略對提案區塊進行衝突檢測,得到第二共識結果。最終,第一共識節點可以接收第二共識節點所返回的第二共識結果,並將第一共識結果和第二共識結果作為提案區塊的區塊共識結果。其中,衝突檢測的具體過程可以參見後續圖6所對應實施例中的描述。
126.上述可知,本技術實施例將交易執行過程提前到將交易加入交易池之前,解耦了
交易執行和共識過程,這樣可以減少共識過程所消耗的共識時長,且可以充分利用共識節點對交易並發接收和並發執行的特性提高系統資源的利用率,並提高共識節點生成區塊的效率。同時,在滿足共識數據一致性的前提下,可以減少共識過程中因全量執行區塊中的交易所帶來的時間損耗,最終可以提升區塊鏈網絡整體對外的吞吐量。
127.進一步地,請參見圖5,圖5是本技術實施例提供的一種交易數據處理方法的流程示意圖。如圖5所示,該方法可以由區塊鏈網絡中的第一共識節點執行,該第一共識節點可以為接入至區塊鏈網絡中的伺服器,也可以為接入至該區塊鏈網絡中的終端設備,這裡對第一共識節點的具體形式不做限定。該第一共識節點可以為上述圖1所示的區塊鏈節點系統中的任意一個共識節點,例如,節點10a。該方法至少可以包括以下步驟:
128.步驟s201,在接收到初始交易時,對初始交易進行有效性校驗,得到有效性校驗結果;
129.具體的,第一共識節點可以對接收到的每一個交易進行有效性檢驗,以初始交易為例,第一共識節點接收到初始交易後,可以獲取該初始交易的交易籤名信息以及發送該初始交易的終端設備的設備公鑰,進而可以基於設備公鑰對交易籤名信息進行交易籤名驗證,得到交易驗籤結果。其中,交易籤名信息為該終端設備通過設備公鑰對應的設備私鑰對初始交易進行籤名後所得到的。
130.進一步,第一共識節點可以對初始交易進行雙重花費驗證(也可稱為雙重支付判斷),得到雙花驗證結果。其中,雙重花費驗證用於驗證同一筆虛擬資產是否被重複使用,即驗證是否存在雙花攻擊。例如,第一共識節點可以獲取初始交易對應的交易時間戳,然後可以在第一交易池中搜索是否存在位於該交易時間戳之前的重複交易,如果不存在,則可以在待上鏈的區塊中進行搜索,若還不存在,則可以在區塊鏈中繼續進行搜索,直到最終獲得雙花驗證結果。
131.進一步,第一共識節點可以將交易驗籤結果以及雙花驗證結果作為初始交易對應的有效性校驗結果。當交易驗籤結果指示驗籤成功且雙花驗證結果指示不存在雙花攻擊時,確定有效性校驗結果指示交易有效。可選的,當交易驗籤結果指示驗籤失敗或雙花驗證結果指示存在雙花攻擊時,可以確定有效性校驗結果指示交易無效,則第一共識節點可以生成交易失敗通知,並返回至發送初始交易的終端設備。
132.步驟s202,若有效性校驗結果指示交易有效,則確定初始交易通過有效性校驗,將通過有效性校驗的初始交易廣播至第二共識節點,以使第二共識節點執行通過有效性校驗的初始交易;
133.具體的,若得到的有效性校驗結果指示交易有效,則可以確定初始交易通過有效性校驗,因此第一共識節點可以將通過有效性校驗的初始交易廣播至第二共識節點,以使第二共識節點執行通過有效性校驗的初始交易。可以理解,第二共識節點對交易的處理過程與第一共識節點對交易的處理過程是一致的,因此第二共識節點也可以通過上述步驟s201所描述的過程對接收到的交易進行有效性校驗。
134.步驟s203,執行初始交易,得到初始交易對應的初始交易執行記錄,將初始交易對應的初始交易執行記錄添加至與第一共識節點的第一交易池相關聯的第一交易執行數據集,且將初始交易添加至第一交易池;
135.具體的,當初始交易通過有效性校驗時,第一共識節點可以執行通過有效性校驗
的初始交易,具體實現過程可以參見上述圖3所對應實施例中的步驟s101,這裡不再進行贅述。
136.步驟s204,從第一交易池中獲取包含初始交易的交易列表,且將從第一交易執行數據集中獲取到的與交易列表中的每個交易對應的初始交易執行記錄作為與交易列表相關聯的待處理交易數據;
137.該步驟的具體實現過程可以參見上述圖3所對應實施例中的步驟s102,這裡不再進行贅述。
138.步驟s205,對交易列表以及待處理交易數據進行打包處理,得到待與區塊鏈網絡中的第二共識節點進行區塊共識的提案區塊;
139.該步驟的具體實現過程可以參見上述圖3所對應實施例中的步驟s103,這裡不再進行贅述。
140.步驟s206,對提案區塊進行區塊共識,得到提案區塊的區塊共識結果;
141.該步驟的具體實現過程可以參見上述圖3所對應實施例中的步驟s103,這裡不再進行贅述。
142.步驟s207,若區塊共識結果指示共識成功,則確定達成對提案區塊的共識,將共識達成後的提案區塊作為第三目標區塊寫入區塊鏈網絡對應的區塊鏈;
143.具體的,若區塊共識結果指示共識成功,則確定達成對提案區塊的共識,第一共識節點可以將共識達成後的提案區塊作為第三目標區塊寫入區塊鏈網絡對應的區塊鏈。例如,可以再次參見圖4,如圖4所示,當提案區塊40x通過區塊共識後,共識節點40a可以將提案區塊40x作為第三目標區塊,並可以將提案區塊40x寫入區塊鏈4,即提案區塊40x會作為區塊40m的下一個區塊添加至區塊鏈4。可以理解,共識達成後的提案區塊和對應的交易執行結果可以寫入每個共識節點的本地緩存和本地存儲。
144.可選的,若區塊共識結果指示共識失敗,則可以捨棄該提案區塊,進而可以在區塊鏈網絡中重新選取共識節點作為打包節點(即第一共識節點)進行打包處理,然後可以對新得到的提案區塊開始新一輪區塊共識。
145.步驟s208,對與交易列表相關聯的交易對象所對應的帳戶狀態版本號進行更新。
146.具體的,第一共識節點可以對與交易列表中的每個交易相關聯的交易對象所對應的帳戶狀態版本號進行更新,即更新帳本層受待驗證交易影響的相關交易對象所對應的帳戶狀態版本號。需要說明的是,執行某個交易時,第一共識節點會將該交易相關聯的交易對象所對應的帳戶狀態版本號寫入該交易對應的寫數據集。應當理解,交易對象可以指參與交易的用戶,帳戶狀態版本號可用於表徵交易對象對應的帳戶狀態,在某個區塊高度下,同一交易對象對應的帳戶狀態版本號是相同的,而每次成功執行一次交易並將相關數據上鏈後,都需要對該交易相關聯的帳戶狀態版本號進行更新。應當理解,記錄相關的帳戶狀態版本號,就可以知道對應的交易是在什麼狀態(例如,以當前區塊鏈中最新的區塊高度為基準)做了執行操作,因此可以基於記錄的帳戶狀態版本號進行衝突檢測。在本技術實施例中,每個共識節點預先執行一個交易時,均可以獲取與該交易相關聯的帳戶狀態版本號,並將其寫入該交易對應的寫數據集。可選的,帳戶狀態版本號可以是一串遞增的整數,每次更新就會對其加1。例如,假設交易1指示交易對象a向交易對象b進行虛擬資產轉移,則第一共識節點(如節點c)執行交易1時,會將交易對象a對應的帳戶狀態版本號以及交易對象b對應
的帳戶狀態版本號均寫入交易1對應的寫數據集,在後續通過相關的衝突檢測後,第一共識節點可以對交易對象a對應的帳戶狀態版本號以及交易對象b對應的帳戶狀態版本號均進行更新,例如,將交易對象a對應的帳戶狀態版本號加1,同時將交易對象b對應的帳戶狀態版本號加1。
147.上述可知,在本技術實施例中,對於區塊鏈網絡中的每一個共識節點,每次接收到交易時,均可以先執行該交易,且交易的接收和執行均可採用並行邏輯,即可以同時接收或同時執行多個交易,交易執行結束後才將該交易加入交易池,同時將相應的交易執行記錄加入到與該交易池相關聯的交易執行數據集,後續再由第一共識節點將待打包的交易和對應的交易執行記錄一併打包成區塊進行共識,也就是說,本技術實施例將交易執行過程提前到將交易加入交易池之前,解耦了交易執行和共識過程,這樣可以減少共識過程所消耗的共識時長,同時可以充分利用共識節點對交易並發接收和並發執行的特性提高系統資源的利用率,從而提高區塊鏈的吞吐量。
148.進一步地,請參見圖6,圖6是本技術實施例提供的一種交易數據處理方法的流程示意圖。如圖6所示,該方法可以由區塊鏈網絡中的第一共識節點和第二共識節點共同執行,該第一共識節點和第二共識節點可以為接入至區塊鏈網絡中的伺服器,也可以為接入至該區塊鏈網絡中的終端設備,這裡對第一共識節點和第二共識節點的具體形式不做限定。該第一共識節點可以為上述圖1所示的區塊鏈節點系統中的任意一個共識節點,例如,節點10a。該第二共識節點可以為上述圖1所示的區塊鏈節點系統中的待廣播的一個共識節點,例如,節點10b。該方法至少可以包括以下步驟:
149.步驟s301,第一共識節點接收初始交易,並對初始交易進行有效性校驗,得到有效性校驗結果,具體過程可以參見上述圖5所對應實施例中的步驟s201。
150.步驟s302,若有效性校驗結果指示交易有效,則確定初始交易通過有效性校驗,第一共識節點將通過有效性校驗的初始交易廣播至第二共識節點。可以理解,第一共識節點對於接收到的其他交易也進行類似處理。
151.步驟s303,第一共識節點執行初始交易,得到初始交易對應的初始交易執行記錄,進而可以將初始交易對應的初始交易執行記錄添加至與第一共識節點的第一交易池相關聯的第一交易執行數據集,且將初始交易添加至第一交易池。進一步,可以對包含初始交易的交易列表以及與交易列表相關聯的待處理交易數據進行打包處理,得到待與區塊鏈網絡中的第二共識節點進行區塊共識的提案區塊,具體過程可以參見上述圖3所對應實施例中的步驟s101-步驟s103。
152.步驟s304,第一共識節點將提案區塊廣播至第二共識節點。
153.步驟s305,第一共識節點基於衝突檢測策略對提案區塊進行衝突檢測,得到第一共識結果。
154.具體的,第一共識節點可以基於衝突檢測策略對提案區塊進行衝突檢測並投票,從而得到第一共識結果。其中,衝突檢測可以包括但不限於以下列舉的一種或多種方式:校驗提案區塊的區塊籤名信息、校驗提案區塊中的默克爾樹根、校驗提案區塊是否符合區塊鏈鏈式原則、校驗提案區塊是否符合提案規則、對提案區塊中的交易列表進行有效性校驗、對提案區塊中的每一個交易對應的交易執行記錄(即待處理交易數據)進行本地校驗、對提案區塊中的交易列表進行關聯性校驗以及讀寫集衝突檢測。
155.可以理解,第一共識節點對提案區塊進行衝突檢測的過程與第二共識節點對提案區塊進行衝突檢測的過程一致,因此可以本步驟的具體過程可以參見下述步驟s306。
156.步驟s306,第二共識節點接收由第一共識節點所廣播的提案區塊,且基於衝突檢測策略對提案區塊進行衝突檢測,得到第二共識結果。
157.具體的,第二共識節點可以接收由區塊鏈網絡中的第一共識節點所廣播的提案區塊,進而可以基於衝突檢測策略對提案區塊衝突檢測,得到提案區塊的第二共識結果。
158.可選的,第二共識節點可以校驗提案區塊的區塊籤名信息,具體過程可以為:第二共識節點可以獲取提案區塊的區塊籤名信息,其中,區塊籤名信息是由第一共識節點通過第一共識節點的節點私鑰對提案區塊進行籤名後所得到的。進一步,第二共識節點可以獲取該節點私鑰對應的節點公鑰,並基於節點公鑰對區塊籤名信息進行區塊籤名驗證,得到區塊驗籤結果,進而可以基於區塊驗籤結果確定提案區塊對應的第二共識結果。可以理解,當區塊驗籤結果指示驗籤失敗,即區塊籤名校驗不通過時,第二共識節點可以對該提案區塊投反對票。
159.可選的,第二共識節點可以校驗提案區塊中的默克爾樹根,即校驗提案區塊中的默克爾樹根是否由交易列表中的交易以及對應的初始交易執行記錄計算得到,具體過程可以為:第二共識節點可以對提案區塊交易列表中的交易和待處理交易數據進行哈希運算,得到待校驗哈希值,隨後可以基於待校驗哈希值確定待驗證樹根。進一步,第二共識節點可以將待驗證樹根與提案區塊中的默克爾樹根進行比對,得到樹根比對結果,進而可以基於樹根比對結果確定提案區塊對應的第二共識結果。可以理解,當樹根比對結果指示待驗證樹根與默克爾樹根不相同時,第二共識節點可以對該提案區塊投反對票。
160.可選的,第二共識節點可以校驗提案區塊是否符合區塊鏈鏈式原則,即校驗提案區塊的前序區塊是否是第二共識節點當前最新的區塊,具體過程可以為:第二共識節點可以從區塊鏈中獲取提議區塊的父區塊(即前序區塊)的區塊哈希值,作為目標父區塊哈希值,進而可以從提案區塊中獲取父區塊哈希值,將目標父區塊哈希值與父區塊哈希值進行比對,得到哈希值比對結果,進而可以基於哈希值比對結果確定提案區塊對應的第二共識結果。可以理解,當哈希值比對結果指示目標父區塊哈希值與父區塊哈希值不相同時,第二共識節點可以對該提案區塊投反對票。
161.可選的,第二共識節點可以校驗提案區塊是否符合提案規則,例如,可以校驗第一共識節點是否是正確的主節點(即提案節點),基於得到的節點校驗結果可以確定提案區塊對應的第二共識結果。可以理解,當節點校驗結果指示第一共識節點不是正確的提案節點時,第二共識節點可以對該提案區塊投反對票。
162.可選的,第二共識節點可以對提案區塊中的交易列表進行有效性校驗,即對交易列表中的每一個交易均進行有效性校驗,包括交易籤名驗證和雙重花費驗證,從而得到目標有效性校驗結果,基於目標有效性校驗結果可以確定提案區塊對應的第二共識結果。具體過程可以參見上述圖5所對應實施例中的步驟s201。可以理解,當目標有效性校驗結果指示交易列表中存在驗籤失敗的交易或存在雙花攻擊的交易時,第二共識節點可以對該提案區塊投反對票。
163.可選的,第二共識節點可以對提案區塊中的每一個交易對應的初始交易執行記錄(即待處理交易數據)進行本地校驗。由於提案區塊中的交易被第一共識節點執行之前廣播
給了第二共識節點,因此第二共識節點本地大概率存在該交易,並且可能已經預執行了,因此第二共識節點可以比對相關交易執行後的數據,例如比對交易執行結果、交易執行後的交易讀寫集和執行交易時的帳本最新區塊高度,具體過程可以為:第二共識節點可以將交易列表中的交易作為待驗證交易,並將從第二交易執行數據集中獲取到的與待驗證交易對應的本地交易執行記錄作為與待驗證交易相關聯的本地交易數據。其中,第二交易執行數據集與第二共識節點的第二交易池相關聯,可以理解,第二交易池也可以存儲待打包的交易(包括待驗證交易)。第二交易執行數據集則用於記錄第二共識節點所接收到的每個交易對應的本地交易記錄。其中,待驗證交易對應的本地交易執行記錄是由第二共識節點執行待驗證交易所得到的。可以理解,受到網絡傳輸延遲的影響,一些共識節點存儲的數據可能滯後於其他共識節點,因此可能導致不同節點執行同一交易所得到的交易執行記錄不一致。進一步,第二共識節點可以基於本地交易數據,對提案區塊中的待處理交易數據進行本地校驗,得到本地校驗結果,進而可以基於本地校驗結果確定提案區塊對應的第二共識結果。
164.例如,假設某個提案區塊中的交易列表包括交易1、交易2、交易3,則交易1、交易2、交易3均可以統稱為待驗證交易,同時,交易1對應的初始交易執行記錄為交易執行記錄a1,交易2對應的初始交易執行記錄為交易執行記錄a2,交易3對應的初始交易執行記錄為交易執行記錄a3,則交易執行記錄a1、交易執行記錄a2、交易執行記錄a3均可以統稱為待處理交易數據,且這些初始交易執行記錄是由第一共識節點分別執行交易1、交易2、交易3後所得到的。同理,第二共識節點執行交易1後,得到交易1對應的本地交易執行記錄為交易執行記錄b1;執行交易2後,得到交易2對應的本地交易執行記錄為交易執行記錄b2;執行交易3後,得到交易3對應的本地交易執行記錄為交易執行記錄b3,則交易執行記錄b1、交易執行記錄b2、交易執行記錄b3均可以統稱為本地交易數據。因此,第二共識節點可以基於交易執行記錄b1,對交易執行記錄a1進行本地校驗,得到本地校驗結果c1;基於交易執行記錄b2,對交易執行記錄a2進行本地校驗,得到本地校驗結果c2;基於交易執行記錄b3,對交易執行記錄a3進行本地校驗,得到本地校驗結果c3,最終可以基於本地校驗結果c1、本地校驗結果c2以及本地校驗結果c3確定該提案區塊對應的第二共識結果。
165.在一種可選的實施方式中,待處理交易數據可以包括待驗證交易對應的目標交易執行結果、目標交易讀寫集以及第一區塊高度,其中,第一區塊高度是第一共識節點在執行待驗證交易時從區塊鏈網絡中所獲取到的具有第一最大生成時間戳的第一區塊的區塊高度,可以理解,待驗證交易包括初始交易,因此目標交易執行結果包括初始交易對應的初始交易執行結果,目標交易讀寫集包括初始交易對應的初始交易讀寫集,第一區塊高度包括初始區塊高度;同理,本地交易數據可以包括待驗證交易對應的本地交易執行結果、本地交易讀寫集以及第二區塊高度,其中,第二區塊高度是第二共識節點在執行待驗證交易時從區塊鏈網絡中所獲取到的具有第二最大生成時間戳的第二區塊的區塊高度。應當理解,第二共識節點可以將目標交易執行結果與本地交易執行結果進行比對,得到第一比對結果。若第一比對結果指示目標交易執行結果與本地交易執行結果相同,則可以進一步將第一區塊高度與第二區塊高度進行比對,得到第二比對結果,進而可以基於第二比對結果確定提案區塊對應的本地校驗結果。
166.可選的,當第一最大生成時間戳與第二最大生成時間戳相同時,第二比對結果會
指示第一區塊高度與第二區塊高度相同,則第二共識節點可以進一步將目標交易讀寫集與本地交易讀寫集進行比對,得到第三比對結果,最終可以基於第三比對結果確定提案區塊對應的本地校驗結果。
167.可選的,當第一最大生成時間戳不同於第二最大生成時間戳時,第二比對結果會指示第一區塊高度與第二區塊高度不相同,則第二共識節點可以進一步將第一帳戶狀態版本號與第二帳戶狀態版本號進行比對,得到第四比對結果。進一步,若第四比對結果指示第一帳戶狀態版本號與第二帳戶狀態版本號不相同,則可以從區塊鏈網絡中獲取與待驗證交易相關聯且具有第三最大更新時間戳的第三帳戶狀態版本號,進而可以將第一帳戶狀態版本號與第三帳戶狀態版本號進行比對,得到第五比對結果。若第五比對結果指示第三帳戶狀態版本號低於第一帳戶狀態版本號,則可以重新執行待驗證交易,得到更新交易執行結果,進而可以將目標交易執行結果與更新交易執行結果進行比對,得到第六比對結果,最終可以基於第六比對結果確定提案區塊對應的本地校驗結果。
168.其中,目標交易讀寫集包括第一帳戶狀態版本號,第一帳戶狀態版本號是指第一共識節點在執行待驗證交易時從區塊鏈網絡中(例如,第一共識節點的本地緩存)所獲取到的與待驗證交易相關聯且具有第一最大更新時間戳的帳戶狀態版本號;同理,本地交易讀寫集包括第二帳戶狀態版本號,第二帳戶狀態版本號是指第二共識節點在執行待驗證交易時從區塊鏈網絡中(例如,第二共識節點的本地緩存)所獲取到的與待驗證交易相關聯且具有第二最大更新時間戳的帳戶狀態版本號。
169.應當理解,本地校驗結果指示本地校驗失敗時,第二共識節點可以對該提案區塊投反對票。可選的,當交易執行結果不匹配,即第一比對結果指示目標交易執行結果與本地交易執行結果不相同時,第二共識節點可以對該提案區塊投反對票;可選的,當交易執行時的帳本最新高度一致但是執行後的交易讀寫集不一致,即第二比對結果指示第一區塊高度與第二區塊高度相同,但第三比對結果指示目標交易讀寫集與本地交易讀寫集不相同時,第二共識節點可以對該提案區塊投反對票;可選的,當交易執行時的帳本最新高度不一致,可以比較帳戶狀態版本號是否一致,如果不一致,則比較當前第二共識節點在本地緩存中相關聯的最新帳戶狀態版本號(即第三帳戶狀態版本號)是否和提案區塊中的帳戶狀態版本號(即第一帳戶狀態版本號)一致,如果本地緩存中相關帳戶狀態版本號比提案區塊中的帳戶狀態版本號低,說明第二共識節點落後於第一共識節點,則明第二共識節點可以基於從其本地緩存中讀取到的最新數據來重新執行該交易,並將本地重新執行後的交易執行結果與提案區塊中的交易執行結果進行比對,如果不一致(即第六比對結果指示目標交易執行結果與更新交易執行結果不相同),則第二共識節點可以對該提案區塊投反對票。可以理解,數據被篡改、運行代碼出錯、數據滯後等原因均可能導致目標交易執行結果與更新交易執行結果不相同。
170.可選的,第二共識節點可以對提案區塊中的交易列表進行關聯性校驗以及讀寫集衝突檢測,即對提案區塊裡的交易列表按順序進行關聯性校驗以及讀寫集衝突檢測,具體過程可以為:第二共識節點可以對交易列表進行關聯性校驗,得到關聯性校驗結果,進而可以基於關聯性校驗結果,從交易列表中獲取至少兩個具有關聯關係的關聯交易,並從待處理交易數據中獲取至少兩個關聯交易分別對應的交易讀寫集。進一步,可以基於至少兩個關聯交易分別對應的交易執行順序,對每個交易讀寫集進行讀寫集衝突檢測,得到讀寫集
衝突檢測結果,最終可以基於讀寫集衝突檢測結果確定提案區塊對應的第二共識結果。應當理解,當讀寫集衝突檢測結果指示檢查失敗時,第二共識節點可以對提案區塊投反對票。例如,在交易列表x中,交易1和交易3存在關聯關係,例如,交易1為用戶a將其剩餘資產(例如,200元)中的第一待轉移資產(例如,100元)轉移給用戶b,交易3為用戶a將其剩餘資產中的第二待轉移資產(例如,70元)轉移給用戶b,則交易1和交易3可作為關聯交易,若交易1的交易時間戳小於交易3的交易時間戳,則可以獲取交易1的寫數據集以及交易3的讀數據集,將交易1的寫數據集與交易3的讀數據集進行比對,得到讀寫集衝突檢測結果,若其中的關鍵數據不一致,例如,交易1的寫數據集中記錄的執行交易1後用戶a的剩餘資產為100元,而交易3的讀數據集記錄的執行交易3時所讀取到的用戶a的剩餘資產仍為執行交易1之前的200元,則相關讀寫數據集衝突,讀寫集衝突檢測結果指示檢查失敗。
171.應當理解,可選的,第二共識節點可以基於區塊驗籤結果、樹根比對結果、哈希值比對結果、節點校驗結果、目標有效性校驗結果、本地校驗結果以及讀寫集衝突檢測結果共同確定提案區塊對應的第二共識結果,也就是說,只有當上述校驗均通過後,第二共識節點才對提案區塊投贊成票。
172.本技術實施例中的衝突檢測還可以包括其它檢測內容,這裡不再一一列舉。
173.步驟s307,第二共識節點將第二共識結果返回至第一共識節點。也就是說,第二共識節點可以將投票結果進行廣播。
174.步驟s308,第一共識節點接收第二共識節點所返回的第二共識結果,將第一共識結果和第二共識結果作為提案區塊的區塊共識結果。
175.具體的,第一共識節點可以將第一共識結果和第二共識結果作為提案區塊的區塊共識結果,可選的,區塊共識結果可以基於贊成票或反對票的數量得到,例如,當贊成票數量大於第一投票閾值(例如,贊成票數量的佔比超過投票總數的2/3)時,區塊共識結果指示共識成功,即可以確定達成對提案區塊的共識。反之,若反對票數量大於第二投票閾值(例如,反對票數量的佔比超過投票總數的2/3)時,區塊共識結果指示共識失敗,即可以確定不能達成對提案區塊的共識。其中,第一投票閾值和第二投票閾值可以根據需要進行設置。
176.步驟s309,第一共識節點基於區塊共識結果,將共識達成後的提案區塊寫入區塊鏈網絡對應的區塊鏈,對與交易列表相關聯的交易對象所對應的帳戶狀態版本號進行更新,具體過程可以參見上述圖5所對應實施例中的步驟s207-步驟s208。
177.進一步,請參見圖7,圖7是本技術實施例提供的一種區塊鏈交易過程的交互示意圖。如圖7所示,應用客戶端70a運行在某個終端設備上,該應用客戶端70a和共識節點70b中運行的伺服器71存在數據連接,可選的,應用客戶端70a和伺服器71可以採用websocket協議進行通信,其中,websocket是一種在單個tcp(transmission control protocol,傳輸控制協議)連接上進行全雙工通信的協議,websocket使得應用客戶端和伺服器之間的數據交換變得更加簡單,且允許服務端主動向客戶端推送數據。應當理解,共識節點70b可以為區塊鏈網絡中的任意一個共識節點,例如,可以為圖1所示的節點10a。共識節點70c與共識節點70b處於同一個區塊鏈網絡中,彼此可以進行數據交互,例如互相廣播區塊或交易等數據。其中,每個共識節點的內部結構都是相同的,本技術實施例僅以共識節點70b為例進行說明。當共識節點70b通過伺服器71接收到應用客戶端70a發來的交易後,可以對該交易進行有效性校驗,包括交易籤名驗證和雙重花費驗證。當該交易通過有效性校驗時,共識節點
70b可以在執行模塊75中調用虛擬機74執行該交易,此時虛擬機74可以從存儲模塊76(即存儲層)讀取相應的數據(即讀數據集)來執行該交易,以得到相應的交易執行記錄,進而可以將該交易執行記錄添加至存儲模塊76,將該交易添加至交易池72。進一步,共識模塊73可以按照共識節奏定期地從交易池72中獲取一批待打包的交易列表,且從存儲模塊76中獲取與交易列表相關聯的待處理交易數據,進而可以將交易列表和待處理交易數據一併打包成提案區塊,並將提案區塊廣播至其他共識節點(例如共識節點70c)進行共識。在共識過程中,共識節點會對提案區塊進行衝突檢測並投票,從而得到區塊共識結果。當對提案區塊達成共識後,共識節點可以將該提案區塊以及相關的交易執行結果一併寫入存儲模塊76,隨後開始新一輪的打包和共識。其中,日誌管理器77可以對伺服器71、交易池72、識模塊73以及執行模塊75進行相應的事件監聽。
178.請參見圖8,是本技術實施例提供的一種交易數據處理裝置的結構示意圖。該交易數據處理裝置可以是運行於計算機設備的一個電腦程式(包括程序代碼),例如該交易數據處理裝置為一個應用軟體;該裝置可以用於執行本技術實施例提供的交易數據處理方法中的相應步驟。如圖8所示,該交易數據處理裝置1可以運行於區塊鏈網絡中的第一共識節點,該第一共識節點可以為上述圖2所對應實施例中的共識節點20a。該交易數據處理裝置1可以包括:執行添加模塊11、數據獲取模塊12、打包共識模塊13;
179.執行添加模塊11,用於在接收到初始交易時,執行初始交易,得到初始交易對應的初始交易執行記錄,將初始交易對應的初始交易執行記錄添加至與第一共識節點的第一交易池相關聯的第一交易執行數據集,且將初始交易添加至第一交易池;第一交易執行數據集用於記錄第一共識節點所接收到的每個交易對應的初始交易執行記錄;
180.數據獲取模塊12,用於從第一交易池中獲取包含初始交易的交易列表,且將從第一交易執行數據集中獲取到的與交易列表中的每個交易對應的初始交易執行記錄作為與交易列表相關聯的待處理交易數據;
181.打包共識模塊13,用於對交易列表以及待處理交易數據進行打包處理,得到待與區塊鏈網絡中的第二共識節點進行區塊共識的提案區塊,對提案區塊進行區塊共識,得到提案區塊的區塊共識結果。
182.其中,執行添加模塊11、數據獲取模塊12、打包共識模塊13的具體實現方式可以參見上述圖3所對應實施例中對步驟s101-步驟s103的描述,這裡將不再進行贅述。另外,對採用相同方法的有益效果描述,也不再進行贅述。
183.請再次參見圖8,該交易數據處理裝置1還可以包括:區塊添加模塊14、版本更新模塊15、有效檢驗模塊16;
184.區塊添加模塊14,用於若區塊共識結果指示共識成功,則確定達成對提案區塊的共識,將共識達成後的提案區塊作為第三目標區塊寫入區塊鏈網絡對應的區塊鏈;
185.版本更新模塊15,用於對與交易列表相關聯的交易對象所對應的帳戶狀態版本號進行更新;
186.有效檢驗模塊16,用於對初始交易進行有效性校驗,得到有效性校驗結果;若有效性校驗結果指示交易有效,則確定初始交易通過有效性校驗,將通過有效性校驗的初始交易廣播至第二共識節點,以使第二共識節點執行通過有效性校驗的初始交易。
187.其中,區塊添加模塊14、版本更新模塊15、有效檢驗模塊16的具體實現方式可以參
見上述圖5所對應實施例中對步驟s207-步驟s208以及步驟s201的描述,這裡將不再進行贅述。
188.請再次參見圖8,執行添加模塊11可以包括:數據讀取單元111、交易執行單元112、高度獲取單元113、記錄確定單元114;
189.數據讀取單元111,用於在接收到初始交易時,獲取用於執行初始交易的初始業務合約,基於初始業務合約,調用第一共識節點對應的虛擬機從區塊鏈網絡中讀取初始交易對應的初始讀數據集;
190.交易執行單元112,用於基於初始讀數據集,調用虛擬機執行初始交易,得到初始交易對應的初始交易執行結果,將初始交易執行結果寫入初始交易對應的初始寫數據集,將初始讀數據集以及初始寫數據集作為初始交易對應的初始交易讀寫集;
191.高度獲取單元113,用於將執行初始交易時從區塊鏈網絡中獲取到的具有初始最大生成時間戳的區塊作為第一目標區塊,將第一目標區塊的區塊高度作為初始區塊高度;
192.記錄確定單元114,用於將初始交易執行結果、初始交易讀寫集以及初始區塊高度作為初始交易對應的初始交易執行記錄。
193.其中,數據讀取單元111、交易執行單元112、高度獲取單元113、記錄確定單元114的具體實現方式可以參見上述圖3所對應實施例中對步驟s101的描述,這裡將不再進行贅述。
194.其中,打包共識模塊13可以包括:哈希運算單元131、區塊生成單元132、衝突檢測單元133、區塊廣播單元134、共識確定單元135;
195.哈希運算單元131,用於將交易列表中的交易作為待驗證交易,對待驗證交易和待處理交易數據進行哈希運算,得到與待驗證交易相關聯的交易哈希值,基於交易哈希值確定待驗證交易對應的默克爾樹根;
196.區塊生成單元132,用於從區塊鏈網絡中獲取具有目標最大生成時間戳的區塊作為第二目標區塊,將第二目標區塊的區塊哈希值作為第二目標區塊的下一區塊的父區塊哈希值,基於待驗證交易、待處理交易數據、默克爾樹根以及父區塊哈希值,生成第二目標區塊的下一區塊,將第二目標區塊的下一區塊作為待與區塊鏈網絡中的第二共識節點進行區塊共識的提案區塊;
197.衝突檢測單元133,用於基於衝突檢測策略對提案區塊進行衝突檢測,得到第一共識結果;
198.區塊廣播單元134,用於將提案區塊廣播至第二共識節點,以使第二共識節點基於衝突檢測策略對提案區塊進行衝突檢測,得到第二共識結果;
199.共識確定單元135,用於接收第二共識節點所返回的第二共識結果,將第一共識結果和第二共識結果作為提案區塊的區塊共識結果。
200.其中,哈希運算單元131、區塊生成單元132、衝突檢測單元133、區塊廣播單元134、共識確定單元135的具體實現方式可以參見上述圖3所對應實施例中對步驟s103的描述,這裡將不再進行贅述。
201.其中,有效檢驗模塊16可以包括:籤名驗證單元161、雙花驗證單元162、結果確定單元163;
202.籤名驗證單元161,用於獲取初始交易的交易籤名信息以及發送初始交易的終端
設備的設備公鑰,基於設備公鑰對交易籤名信息進行交易籤名驗證,得到交易驗籤結果;交易籤名信息為終端設備通過設備公鑰對應的設備私鑰對初始交易進行籤名後所得到的;
203.雙花驗證單元162,用於對初始交易進行雙重花費驗證,得到雙花驗證結果;
204.結果確定單元163,用於將交易驗籤結果以及雙花驗證結果作為初始交易對應的有效性校驗結果;當交易驗籤結果指示驗籤成功且雙花驗證結果指示不存在雙花攻擊時,確定有效性校驗結果指示交易有效。
205.其中,籤名驗證單元161、雙花驗證單元162、結果確定單元163的具體實現方式可以參見上述圖5所對應實施例中對步驟s201的描述,這裡將不再進行贅述。
206.進一步地,請參見圖9,是本技術實施例提供的一種交易數據處理裝置的結構示意圖。該交易數據處理裝置可以是運行於計算機設備的一個電腦程式(包括程序代碼),例如該交易數據處理裝置為一個應用軟體;該裝置可以用於執行本技術實施例提供的交易數據處理方法中的相應步驟。如圖9所示,該交易數據處理裝置2可以運行於區塊鏈網絡中的第二共識節點,該第二共識節點可以為上述圖2所對應實施例中的共識節點20b。該交易數據處理裝置2可以包括:接收模塊21、檢測模塊22;
207.接收模塊21,用於接收由區塊鏈網絡中的第一共識節點所廣播的提案區塊;提案區塊是由第一共識節點對交易列表以及與交易列表相關聯的待處理交易數據進行打包處理得到的;交易列表是指由第一共識節點從第一共識節點的第一交易池中獲取到的包含初始交易的列表;待處理交易數據包括第一交易執行數據集中與交易列表中的每個交易對應的初始交易執行記錄;第一交易執行數據集與第一交易池相關聯,第一交易執行數據集用於記錄第一共識節點所接收到的每個交易對應的初始交易執行記錄;初始交易對應的初始交易執行記錄被第一共識節點添加至第一交易執行數據集,初始交易對應的初始交易執行記錄是由第一共識節點在接收到初始交易時執行初始交易得到的;
208.檢測模塊22,用於基於衝突檢測策略對提案區塊衝突檢測,得到提案區塊的第二共識結果,將第二共識結果返回至第一共識節點。
209.其中,接收模塊21、檢測模塊22的具體實現方式可以參見上述圖6所對應實施例中對步驟s306的描述,這裡將不再進行贅述。另外,對採用相同方法的有益效果描述,也不再進行贅述。
210.請再次參見圖9,該檢測模塊22可以包括:數據獲取單元221、本地校驗單元222、關聯校驗單元223、讀寫檢測單元224;
211.數據獲取單元221,用於將交易列表中的交易作為待驗證交易,將從第二交易執行數據集中獲取到的與待驗證交易對應的本地交易執行記錄作為與待驗證交易相關聯的本地交易數據;第二交易執行數據集與第二共識節點的第二交易池相關聯;第二交易執行數據集用於記錄第二共識節點所接收到的每個交易對應的本地交易記錄;待驗證交易對應的本地交易執行記錄是由第二共識節點執行待驗證交易所得到的;
212.本地校驗單元222,用於基於本地交易數據,對提案區塊中的待處理交易數據進行本地校驗,得到本地校驗結果;基於本地校驗結果確定提案區塊對應的第二共識結果;
213.關聯校驗單元223,用於對交易列表進行關聯性校驗,得到關聯性校驗結果;基於關聯性校驗結果,從交易列表中獲取至少兩個具有關聯關係的關聯交易,從待處理交易數據中獲取至少兩個關聯交易分別對應的交易讀寫集;
214.讀寫檢測單元224,用於基於至少兩個關聯交易分別對應的交易執行順序,對每個交易讀寫集進行讀寫集衝突檢測,得到讀寫集衝突檢測結果;基於讀寫集衝突檢測結果確定提案區塊對應的第二共識結果。
215.其中,數據獲取單元221、本地校驗單元222、關聯校驗單元223、讀寫檢測單元224的具體實現方式可以參見上述圖6所對應實施例中對步驟s306的描述,這裡將不再進行贅述。
216.其中,待處理交易數據包括待驗證交易對應的目標交易執行結果、目標交易讀寫集以及第一區塊高度;第一區塊高度是第一共識節點在執行待驗證交易時從區塊鏈網絡中所獲取到的具有第一最大生成時間戳的第一區塊的區塊高度;本地交易數據包括待驗證交易對應的本地交易執行結果、本地交易讀寫集以及第二區塊高度;第二區塊高度是第二共識節點在執行待驗證交易時從區塊鏈網絡中所獲取到的具有第二最大生成時間戳的第二區塊的區塊高度;
217.本地校驗單元222可以包括:第一比對子單元2221、第二比對子單元2222、結果確定子單元2223;
218.第一比對子單元2221,用於將目標交易執行結果與本地交易執行結果進行比對,得到第一比對結果;
219.第二比對子單元2222,用於若第一比對結果指示目標交易執行結果與本地交易執行結果相同,則將第一區塊高度與第二區塊高度進行比對,得到第二比對結果;
220.結果確定子單元2223,用於基於第二比對結果確定提案區塊對應的本地校驗結果。
221.其中,第一最大生成時間戳與第二最大生成時間戳相同;
222.該結果確定子單元2223,具體用於當第二比對結果指示第一區塊高度與第二區塊高度相同時,將目標交易讀寫集與本地交易讀寫集進行比對,得到第三比對結果;基於第三比對結果確定提案區塊對應的本地校驗結果。
223.其中,第一最大生成時間戳不同於第二最大生成時間戳;目標交易讀寫集包括第一帳戶狀態版本號,第一帳戶狀態版本號是指第一共識節點在執行待驗證交易時從區塊鏈網絡中所獲取到的與待驗證交易相關聯且具有第一最大更新時間戳的帳戶狀態版本號;本地交易讀寫集包括第二帳戶狀態版本號,第二帳戶狀態版本號是指第二共識節點在執行待驗證交易時從區塊鏈網絡中所獲取到的與待驗證交易相關聯且具有第二最大更新時間戳的帳戶狀態版本號;
224.該結果確定子單元2223,具體用於當第二比對結果指示第一區塊高度與第二區塊高度不相同時,將第一帳戶狀態版本號與第二帳戶狀態版本號進行比對,得到第四比對結果;若第四比對結果指示第一帳戶狀態版本號與第二帳戶狀態版本號不相同,則從區塊鏈網絡中獲取與待驗證交易相關聯且具有第三最大更新時間戳的第三帳戶狀態版本號,將第一帳戶狀態版本號與第三帳戶狀態版本號進行比對,得到第五比對結果;若第五比對結果指示第三帳戶狀態版本號低於第一帳戶狀態版本號,則重新執行待驗證交易,得到更新交易執行結果,將目標交易執行結果與更新交易執行結果進行比對,得到第六比對結果;基於第六比對結果確定提案區塊對應的本地校驗結果。
225.其中,第一比對子單元2221、第二比對子單元2222、結果確定子單元2223的具體實
現方式可以參見上述圖6所對應實施例中對步驟s306的描述,這裡將不再進行贅述。
226.請參見圖10,是本技術實施例提供的一種計算機設備的結構示意圖。如圖10所示,該計算機設備1000可以包括:處理器1001,網絡接口1004和存儲器1005,此外,上述計算機設備1000還可以包括:用戶接口1003,和至少一個通信總線1002。其中,通信總線1002用於實現這些組件之間的連接通信。其中,用戶接口1003可以包括顯示屏(display)、鍵盤(keyboard),可選用戶接口1003還可以包括標準的有線接口、無線接口。網絡接口1004可選的可以包括標準的有線接口、無線接口(如wi-fi接口)。存儲器1004可以是高速ram存儲器,也可以是非不穩定的存儲器(non-volatile memory),例如至少一個磁碟存儲器。存儲器1005可選的還可以是至少一個位於遠離前述處理器1001的存儲裝置。如圖10所示,作為一種計算機可讀存儲介質的存儲器1005中可以包括作業系統、網絡通信模塊、用戶接口模塊以及設備控制應用程式。
227.在如圖10所示的計算機設備1000中,網絡接口1004可提供網絡通訊功能;而用戶接口1003主要用於為用戶提供輸入的接口;而處理器1001可以用於調用存儲器1005中存儲的設備控制應用程式,以執行前文圖3、圖5、圖6任一個所對應實施例中對該交易數據處理方法的描述,在此不再贅述。另外,對採用相同方法的有益效果描述,也不再進行贅述。
228.此外,這裡需要指出的是:本技術實施例還提供了一種計算機可讀存儲介質,且計算機可讀存儲介質中存儲有前文提及的交易數據處理裝置1或交易數據處理裝置2所執行的電腦程式,且電腦程式包括程序指令,當處理器執行程序指令時,能夠執行前文圖3、圖5、圖6任一個所對應實施例中對交易數據處理方法的描述,因此,這裡將不再進行贅述。另外,對採用相同方法的有益效果描述,也不再進行贅述。對於本技術所涉及的計算機可讀存儲介質實施例中未披露的技術細節,請參照本技術方法實施例的描述。
229.上述計算機可讀存儲介質可以是前述任一實施例提供的交易數據處理裝置或者上述計算機設備的內部存儲單元,例如計算機設備的硬碟或內存。該計算機可讀存儲介質也可以是該計算機設備的外部存儲設備,例如該計算機設備上配備的插接式硬碟,智能存儲卡(smart media card,smc),安全數字(secure digital,sd)卡,快閃記憶體卡(flash card)等。進一步地,該計算機可讀存儲介質還可以既包括該計算機設備的內部存儲單元也包括外部存儲設備。該計算機可讀存儲介質用於存儲該電腦程式以及該計算機設備所需的其他程序和數據。該計算機可讀存儲介質還可以用於暫時地存儲已經輸出或者將要輸出的數據。
230.此外,這裡需要指出的是:本技術實施例還提供了一種電腦程式產品或電腦程式,該電腦程式產品或電腦程式包括計算機指令,該計算機指令存儲在計算機可讀存儲介質中。計算機設備的處理器從計算機可讀存儲介質讀取該計算機指令,處理器執行該計算機指令,使得該計算機設備執行前文圖3、圖5、圖6任一個所對應實施例提供的方法。另外,對採用相同方法的有益效果描述,也不再進行贅述。對於本技術所涉及的電腦程式產品或者電腦程式實施例中未披露的技術細節,請參照本技術方法實施例的描述。
231.本技術實施例的說明書和權利要求書及附圖中的術語「第一」、「第二」等是用於區別不同對象,而非用於描述特定順序。此外,術語「包括」以及它們任何變形,意圖在於覆蓋不排他的包含。例如包含了一系列步驟或單元的過程、方法、裝置、產品或設備沒有限定於已列出的步驟或模塊,而是可選地還包括沒有列出的步驟或模塊,或可選地還包括對於這
些過程、方法、裝置、產品或設備固有的其他步驟單元。
232.本領域普通技術人員可以意識到,結合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬體、計算機軟體或者二者的結合來實現,為了清楚地說明硬體和軟體的可互換性,在上述說明中已經按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬體還是軟體方式來執行,取決於技術方案的特定應用和設計約束條件。專業技術人員可以對每個特定的應用來使用不同方法來實現所描述的功能,但是這種實現不應認為超出本技術的範圍。
233.以上所揭露的僅為本技術較佳實施例而已,當然不能以此來限定本技術之權利範圍,因此依本技術權利要求所作的等同變化,仍屬本技術所涵蓋的範圍。