這裡將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式並不代表與本說明書一個或多個實施例相一致的所有實施方式。相反,它們僅是與如所附申請專利範圍中所詳述的、本說明書一個或多個實施例的一些方面相一致的裝置和方法的例子。
需要說明的是:在其他實施例中並不一定按照本說明書示出和描述的順序來執行相應方法的步驟。在一些其他實施例中,其方法所包括的步驟可以比本說明書所描述的更多或更少。此外,本說明書中所描述的單個步驟,在其他實施例中可能被分解為多個步驟進行描述;而本說明書中所描述的多個步驟,在其他實施例中也可能被合併為單個步驟進行描述。
圖1是一示例性實施例提供的一種基於區塊鏈的事件處理方法的流程圖。如圖1所示,該方法應用於參與方,可以包括以下步驟:
步驟102,根據所述參與方所參與的事件,產生對應的備選子交易,以使得若干備選子交易被聚合為集合交易;其中,所述備選子交易設定有對應的狀態變化量,以用於使所述參與方的狀態參數基於所述狀態變化量而發生相應的數值變化,且所述狀態參數的取值、所述狀態變化量分別為基於同態加密演算法計算得到的密文數值或基於同態承諾演算法計算得到的承諾數值。
在一實施例中,本說明書的事件可以包括任意類型、覆蓋任意場景,比如投票、簽訂協定、流量分配、轉帳、跨境匯款等,本說明書並不對此進行限制。以投票為例,描述資訊可以包括投票事由和投票選項等資訊,而各個參與方向區塊鏈中提交的觸發資訊可以包括對投票選項的選擇結果,從而觸發完成投票操作。
在一實施例中,事件可以存在多個參與方,每一參與方對應於參與物件,該參與物件可以為個人、企業、組織等,本說明書並不對此進行限制。參與物件存在對應的數位身份,使得承載該數位身份的電子設備相當於被配置為該參與物件所對應的參與方。
在一實施例中,備選子交易中包含事件的描述資訊,該描述資訊用於描述相關事件的情況,使得該備選子交易被處理時,可以根據該描述資訊實施相應的事件。例如,描述資訊可以表徵相關事件的執行邏輯、所涉及的參與方、對參與方的狀態參數的改變方式(如增大或減小狀態參數的取值)、狀態變化量等,本說明書並不對此進行限制。實際上,事件的相關內容可由各個參與方之間預先通過任意方式進行溝通,然後由所述任一參與方進行起草該事件的描述資訊,使得事件的其他參與方可以根據預先的溝通結果對該描述資訊的內容進行查看和確認;當然,所述任一參與方也可以在並未預先溝通的情況下,自行判定事件的其他參與方以及描述資訊中的其他內容,本說明書並不對此進行限制。
在一實施例中,事件的描述資訊可由該事件的任一參與方產生,並添加為該任一參與方維護的等待佇列中的備選子交易。以及,該任一參與方還將產生的描述資訊分享至其他參與方,使得其他參與方對描述資訊進行確認。
在一實施例中,任一參與方可以將描述資訊通過鏈外通道發送至事件的其他參與方。通過鏈外通道將描述資訊發送至事件的其他參與方,可以實現對描述資訊的高效傳輸。其中,鏈外通道可以為事件的各個參與方之間建立的加密通道或其他形式的秘密頻道,以避免發生資訊洩露。
在一實施例中,任一參與方可以通過向區塊鏈提交一筆交易,並將上述的描述資訊包含於該交易中,使得該交易在經過共識後可以被發送至區塊鏈中的所有區塊鏈節點;而事件的每一參與方均可以被配置為區塊鏈中的區塊鏈節點,或者每一參與方可以在區塊鏈中存在對應的區塊鏈節點,使得每一參與方可以通過自身或對應的區塊鏈節點所維護的區塊鏈帳本(區塊鏈帳本包含區塊鏈的全量交易資料),獲得上述交易及其包含的描述資訊,從而使得上述的描述資訊被同步至事件的其他參與方。
在一實施例中,任一參與方在產生描述資訊時,該描述資訊中的狀態變化量可以為密文數值或承諾數值。比如當狀態變化量的明文數值為t1時,若採用Pedersen承諾機制,可以根據該明文數值t1與亂數r1產生相應的密文承諾T1,而描述資訊中可以包含該T1、t1和r1,使得事件的其他參與方可以驗證密文承諾T1與明文數值t1、亂數r1之間的對應關係。其中,描述資訊中可以對明文數值t1和亂數r1進行加密保護,比如當描述資訊需要被發送至參與方X時,可以採用該參與方X的數位身份對應的身份公鑰進行加密,分別得到加密後的Enc_X(t1)、Enc_X(r1)並添加至描述資訊中,因而只有參與方X能夠通過自身的身份私鑰對Enc_X(t1)、Enc_X(r1)進行解密得到上述的明文數值t1和亂數r1,顯著提升了資料安全性。當然,除了採用公鑰加密方式之外,還可以採用相關技術中的其他任意加密方式,比如數位信封等,本說明書並不對此進行限制。
在一實施例中,當存在多個其他參與方時,描述資訊可以分別包含對應於各個其他參與方的加密後資料。例如,當其他參數方包括參與方X和參與方Y時,可以根據參與方X的身份公鑰對明文數值t1、亂數r1分別加密得到Enc_X(t1)、Enc_X(r1),以及根據參與方Y的身份公鑰對明文數值t1、亂數r1分別加密得到Enc_Y(t1)、Enc_Y(r1),並將Enc_X(t1)、Enc_X(r1)、Enc_Y(t1)和Enc_Y(r1)均添加至描述資訊中,使得所述任一參與方只需要準備一份描述資訊並分別發送至各個其他參與方,而無需針對每一其他參與方準備不同的描述資訊。當然,所述任一參與方可以針對每一其他參與方準備不同的描述資訊,比如在發送至參與方X的描述資訊中包含Enc_X(t1)和Enc_X(r1),而在發送至參與方Y的描述資訊中包含Enc_Y(t1)和Enc_Y(r1),本說明書並不對此進行限制。
在一實施例中,參與方可以維護有等待佇列,該等待佇列中包含該參與方所參與的各個事件對應的備選子交易;而通過從所述等待佇列中選取若干備選子交易,可以產生相應的集合交易。集合交易中可以包含多個備選子交易,每一備選子交易分別對應於上述參與方所參與的一個事件,使得該集合交易被提交至區塊鏈後,所包含的多個備選子交易均可以在區塊鏈中被處理,從而使得這些備選子交易對應的多個事件被實施。可見,通過在集合交易中包含多個備選子交易,使得這些備選子交易被批量提交至區塊鏈,可以減少向區塊鏈提交的交易數量,無需針對每一備選子交易均產生一筆區塊鏈交易,有助於降低資源消耗、提升處理效率。
在一實施例中,可以在所述等待佇列中的備選子交易達到預設數量時,選取所述等待佇列中已存在的備選子交易(即預設數量的備選子交易),以產生相應的集合交易。在另一實施例中,可以按照預設時長週期性地選取所述等待佇列中已存在的備選子交易,以產生相應的集合交易;當然,每一集合交易的容量可以存在最大限制,使得同一週期內選取的備選子交易的數量存在相應的最大值,超出的部分可以延期至下一週期進行選取。當然,還可以通過其他的預設規則來選取備選子交易,本說明書並不對此進行限制。
在一實施例中,等待佇列中的備選子交易可以按照添加時刻進行依次排列,而每次可以從前向後依次選取各個備選子交易,使得在先產生的備選子交易可以被優先選取。當然,參與方也可以根據實際需求,比如事件的緊急程度、事件的優先順序等,對等待佇列中的備選子交易實施與順序無關的選取操作;或者,等待佇列本身就可以按照上述的緊急程度、優先順序等進行排列,這樣依然可以視為依次選取。
在一實施例中,事件的描述資訊可以包括狀態變化量,而所述事件可以用於使各個參與方在區塊鏈上對應記錄的狀態參數按照所述狀態變化量發生取值變化,比如增大取值、減小取值等。其中,根據事件的類型或場景差異,相應的狀態參數也可能不同,比如轉帳或跨境匯款場景下的狀態參數可以為參與方的帳戶餘額,再比如流量分配場景下的狀態參數可以為參與方持有的剩餘流量的數額,本說明書並不對此進行限制。
步驟104,針對所述集合交易中相鄰且對應的事件均用於減小所述狀態參數的取值的多個備選子交易,產生統一證明資訊,以證明所述狀態參數在經過所述多個備選子交易後的取值處於正確取值區間。
在一實施例中,通過產生上述的統一證明資訊,使得上述的多個備選子交易可以僅產生一個統一證明資訊,而無需分別、單獨產生對應的證明資訊,有助於簡化證明資訊、提升處理效率。
在一實施例中,“針對所述集合交易中相鄰且對應的事件均用於減小所述狀態參數的取值的多個備選子交易,產生統一證明資訊”並不一定是指僅由該多個備選子交易來產生統一證明資訊,如果集合交易中還存在排列於該多個備選子交易之前的其他備選子交易,那麼該其他備選子交易同樣會對狀態參數的取值造成影響,因而統一證明資訊還跟該其他備選子交易相關。換言之,如果集合交易中存在排列於該多個備選子交易之前的其他備選子交易,那麼狀態參數在經歷該多個備選子交易之前,還需經歷該其他備選子交易所帶來的取值變化,而統一證明資訊用於證明狀態參數在該其他備選子交易和該多個備選子交易的共同作用後的取值處於正確取值區間。
例如,當集合交易包含的備選子交易依次為“減減減加加”(“減”代表用於減小狀態參數的取值的備選子交易,“加”代表用於增大狀態參數的取值的備選子交易)時,可以針對前三個連續的備選子交易產生統一證明資訊,此時由於這三個備選子交易之前並不存在其他備選子交易,因而狀態參數僅受這三個備選子交易的作用而產生取值變化,統一證明資訊用於證明該變化後的取值處於正確數值區間。
再例如,當集合交易包含的備選子交易依次為“加加減加減減減加”時,可以針對第五、第六、第七共三個連續的備選子交易產生統一證明資訊,此時由於這三個備選子交易之前存在第一、第二、第三、第四共四個其他備選子交易,因而狀態參數不僅受到三個連續的“減”的備選子交易的作用,還受到四個其他備選子交易的作用,統一證明資訊用於證明狀態參數在這七個備選子交易的作用下而產生取值變化後,該變化後的取值處於正確數值區間。
在一實施例中,上述“對應的事件均用於減小所述狀態參數的取值的多個備選子交易”可以是恰好處於相鄰位置,而並未實施特別的排序處理,這使得一些情況下,多個符合條件的備選子交易可能並未相鄰設置、導致無法採用本說明書來產生統一證明資訊,還可能使得多個符合條件的備選子交易無法完全連續排列、被進一步分割為多組,那麼每組仍然可以分別產生統一證明資訊,只是無法為多個符合條件的備選子交易產生一份統一證明資訊。
在一實施例中,當若干備選子交易被選取以用於聚合為所述集合交易時,可以識別每一被選取的備選子交易對應的事件對所述狀態參數的取值的調整方式;當至少兩個備選子交易對應的事件均用於減小所述狀態參數的取值時,可以將所述至少兩個備選子交易相鄰地排列於所述集合交易中。換言之,在聚合形成集合交易時,可以主動對各個備選子交易進行排序,並儘量將用於減小狀態參數取值的備選子交易都進行相鄰排列,從而使得這些備選子交易可以僅產生一份統一證明資訊,可以儘量減少證明資訊的數量。
在一實施例中,當採用密文數值或承諾數值時,對於集合交易中單獨存在的、對應的事件均用於減小所述狀態參數的取值的多個備選子交易,參與方可以單獨為其產生證明資訊,以證明狀態參數在經過該多個備選子交易後的取值處於正確取值區間。
在一實施例中,各個參與方對應的狀態參數的取值、所述狀態變化量分別為基於同態加密演算法計算得到的密文數值或基於同態承諾演算法計算得到的承諾數值。對於同態加密演算法而言,可以採用任意類型的同態加密演算法,只要確保該同態加密演算法能夠滿足加法同態,使得即便處於密文狀態下,仍然能夠使得狀態參數的取值增加或減少該狀態變化量;對於該同態加密演算法為加法同態加密演算法或全同態加密演算法,本說明書並不對此進行限制。對於同態承諾演算法而言,當採用相關技術中的Pedersen承諾機制時,可以為未加密資料判定一亂數,並基於該亂數與未加密資料進行計算得到相應的承諾數值。
在一實施例中,當狀態參數的取值、狀態變化量為密文數值或承諾數值時,參與方需要提供相關的證明資訊,以使得區塊鏈節點在執行相關交易時,能夠判定交易的合法有效性。例如,當事件用於使得某一參與方對應的狀態參數按照該狀態變化量發生取值減小時,即交易目的是使得該某一參與方的狀態參數的取值減小該狀態變化量,譬如上述的統一證明資訊用於證明:該參與方的狀態參數的取值足以實施上述集合交易中相鄰的多個“減小”類型的備選子交易(即狀態參數的取值不小於該相鄰的多個“減小”類型的備選子交易所對應的狀態變化量之和)。
例如,所述集合交易中可以包含分別對應於每一備選子交易的變化前狀態值、變化後狀態值,以配合於每一備選子交易中設定的狀態變化量,使得每一備選子交易被處理後,所述參與方的狀態參數由所述變化前狀態值經由所述狀態變化量而變化至所述變化後狀態值;其中,所述變化前狀態值和所述變化後狀態值分別為基於所述同態加密演算法計算得到的密文數值或基於所述同態承諾演算法計算得到的承諾數值。那麼,統一證明資訊可以用於證明:在上述相鄰的多個“減小”類型的備選子交易中,最後一個備選子交易的變化後狀態值不小於0。
在一實施例中,當採用密文數值或承諾數值時,對於集合交易中的每一備選子交易,不論其用於增大或減小狀態參數的取值,均產生相應的獨立證明資訊,所述獨立證明資訊用於證明相應的備選子交易中設定的狀態變化量處於所述正確數值區間。例如,獨立證明資訊可以用於表明相應的狀態變化量處於正確數值區間,譬如[0,264
)。
在一實施例中,可以採用相關技術中的區間證明(Range Proof)技術,譬如Bulletproofs方案或Borromean環簽名方案等,產生上述的證明資訊,本說明書並不對此進行限制。
步驟106,將所述集合交易提交至區塊鏈,以使所述集合交易中包含的備選子交易被依次處理。
在一實施例中,參與方可以按照產生順序為各個合併交易添加編號,使各個合併交易在區塊鏈中被按照對應編號的大小進行依次處理。換言之,區塊鏈交易在收到參與方提交的合併交易後,需要讀取合併交易所包含的編號;如果編號與先前處理的合併交易的編號連續,比如最新處理的合併交易的編號為99、當前收到的合併交易的編號為100,則可以對該編號為100的合併交易進行處理;如果編號之間並不連續,比如最新處理的合併交易的編號為99、當前收到的合併交易的編號為101,則區塊鏈節點需要等待並優先處理編號為100的合併交易,然後才能處理編號為101的合併交易。由於每條交易被執行後都可能導致該參與方的狀態參數發生變化,而在後交易的執行需要依賴於先前交易執行後的狀態參數的取值,因而需要確保各個合併交易被按照對應編號的大小進行依次處理,以使得各個合併交易均能夠正確執行。
在一實施例中,在事件對應的備選子交易中,包含所述參與方對所述事件的單方觸發資訊;其中,當所述事件的所有參與方分別向區塊鏈提交的針對所述事件的單方觸發資訊均通過驗證時,所述事件對應的備選子交易在區塊鏈中被觸發執行。單方觸發資訊表明相應的參與方對事件的描述資訊予以確認,希望觸發事件的執行;而事件的每一參與方都需要分別向區塊鏈提交單方觸發資訊,使得區塊鏈節點基於所有參與方分別提交的單方觸發資訊,判定是否應當執行相應的備選子交易所指示的事件。例如,事件的任一參與方產生描述資訊並提供至其他參與方後,不僅該任一參與方需要向自身維護的等待佇列中添加相應的備選子交易,每一其他參與方在對描述資訊予以確認後,也分別向自身維護的等待佇列中添加相應的備選子交易;以及,每一參與方分別基於自身維護的等待佇列產生集合交易,從而通過將集合交易提交至區塊鏈,使得上述的單方觸發資訊被提交至區塊鏈,以供區塊鏈節點進行驗證。單方觸發資訊中可以包含描述資訊和相應參與方對描述資訊產生的簽名;簽名屬於相應參與方提供的確認資訊,而如果採用密文數值或承諾數值,確認資訊還包含證明資訊,這在上文中已經詳細描述。通過由各個參與方分別向區塊鏈提交單方觸發資訊,而非某一參與方提交多方觸發資訊,不僅可以對處理壓力進行分擔、防止單個參與方的處理壓力過大,還可使各個參與方根據自身的實際情況(如處理壓力、優先順序管理等)對所參與的各個事件進行選擇性地處理甚至批量處理。
與圖1所示實施例相對應地,圖2是一示例性實施例提供的另一種基於區塊鏈的事件處理方法的流程圖。如圖2所示,該方法應用於區塊鏈節點,可以包括以下步驟:
步驟202,接收參與方提交至區塊鏈的集合交易,所述集合交易中包含若干備選子交易,所述備選子交易對應於所述參與方所參與的事件;其中,所述備選子交易設定有對應的狀態變化量,以用於使所述參與方的狀態參數基於所述狀態變化量而發生相應的數值變化,且所述狀態參數的取值、所述狀態變化量分別為基於同態加密演算法計算得到的密文數值或基於同態承諾演算法計算得到的承諾數值。
在一實施例中,本說明書的事件可以包括任意類型、覆蓋任意場景,比如投票、簽訂協定、流量分配、轉帳、跨境匯款等,本說明書並不對此進行限制。以投票為例,描述資訊可以包括投票事由和投票選項等資訊,而各個參與方向區塊鏈中提交的觸發資訊可以包括對投票選項的選擇結果,從而觸發完成投票操作。
在一實施例中,事件可以存在多個參與方,每一參與方對應於參與物件,該參與物件可以為個人、企業、組織等,本說明書並不對此進行限制。參與物件存在對應的數位身份,使得承載該數位身份的電子設備相當於被配置為該參與物件所對應的參與方。
在一實施例中,備選子交易中包含事件的描述資訊,該描述資訊用於描述相關事件的情況,使得該備選子交易被處理時,可以根據該描述資訊實施相應的事件。例如,描述資訊可以表徵相關事件的執行邏輯、所涉及的參與方、對參與方的狀態參數的改變方式(如增大或減小狀態參數的取值)、狀態變化量等,本說明書並不對此進行限制。實際上,事件的相關內容可由各個參與方之間預先通過任意方式進行溝通,然後由所述任一參與方進行起草該事件的描述資訊,使得事件的其他參與方可以根據預先的溝通結果對該描述資訊的內容進行查看和確認;當然,所述任一參與方也可以在並未預先溝通的情況下,自行判定事件的其他參與方以及描述資訊中的其他內容,本說明書並不對此進行限制。
在一實施例中,事件的描述資訊可由該事件的任一參與方產生,並添加為該任一參與方維護的等待佇列中的備選子交易。以及,該任一參與方還將產生的描述資訊分享至其他參與方,使得其他參與方對描述資訊進行確認。
在一實施例中,任一參與方可以將描述資訊通過鏈外通道發送至事件的其他參與方。通過鏈外通道將描述資訊發送至事件的其他參與方,可以實現對描述資訊的高效傳輸。其中,鏈外通道可以為事件的各個參與方之間建立的加密通道或其他形式的秘密頻道,以避免發生資訊洩露。
在一實施例中,任一參與方可以通過向區塊鏈提交一筆交易,並將上述的描述資訊包含於該交易中,使得該交易在經過共識後可以被發送至區塊鏈中的所有區塊鏈節點;而事件的每一參與方均可以被配置為區塊鏈中的區塊鏈節點,或者每一參與方可以在區塊鏈中存在對應的區塊鏈節點,使得每一參與方可以通過自身或對應的區塊鏈節點所維護的區塊鏈帳本(區塊鏈帳本包含區塊鏈的全量交易資料),獲得上述交易及其包含的描述資訊,從而使得上述的描述資訊被同步至事件的其他參與方。
在一實施例中,任一參與方在產生描述資訊時,該描述資訊中的狀態變化量可以為密文數值或承諾數值。比如當狀態變化量的明文數值為t1時,若採用Pedersen承諾機制,可以根據該明文數值t1與亂數r1產生相應的密文承諾T1,而描述資訊中可以包含該T1、t1和r1,使得事件的其他參與方可以驗證密文承諾T1與明文數值t1、亂數r1之間的對應關係。其中,描述資訊中可以對明文數值t1和亂數r1進行加密保護,比如當描述資訊需要被發送至參與方X時,可以採用該參與方X的數位身份對應的身份公鑰進行加密,分別得到加密後的Enc_X(t1)、Enc_X(r1)並添加至描述資訊中,因而只有參與方X能夠通過自身的身份私鑰對Enc_X(t1)、Enc_X(r1)進行解密得到上述的明文數值t1和亂數r1,顯著提升了資料安全性。當然,除了採用公鑰加密方式之外,還可以採用相關技術中的其他任意加密方式,比如數位信封等,本說明書並不對此進行限制。
在一實施例中,當存在多個其他參與方時,描述資訊可以分別包含對應於各個其他參與方的加密後資料。例如,當其他參數方包括參與方X和參與方Y時,可以根據參與方X的身份公鑰對明文數值t1、亂數r1分別加密得到Enc_X(t1)、Enc_X(r1),以及根據參與方Y的身份公鑰對明文數值t1、亂數r1分別加密得到Enc_Y(t1)、Enc_Y(r1),並將Enc_X(t1)、Enc_X(r1)、Enc_Y(t1)和Enc_Y(r1)均添加至描述資訊中,使得所述任一參與方只需要準備一份描述資訊並分別發送至各個其他參與方,而無需針對每一其他參與方準備不同的描述資訊。當然,所述任一參與方可以針對每一其他參與方準備不同的描述資訊,比如在發送至參與方X的描述資訊中包含Enc_X(t1)和Enc_X(r1),而在發送至參與方Y的描述資訊中包含Enc_Y(t1)和Enc_Y(r1),本說明書並不對此進行限制。
在一實施例中,參與方可以維護有等待佇列,該等待佇列中包含該參與方所參與的各個事件對應的備選子交易;而通過從所述等待佇列中選取若干備選子交易,可以產生相應的集合交易。集合交易中可以包含多個備選子交易,每一備選子交易分別對應於上述參與方所參與的一個事件,使得該集合交易被提交至區塊鏈後,所包含的多個備選子交易均可以在區塊鏈中被處理,從而使得這些備選子交易對應的多個事件被實施。可見,通過在集合交易中包含多個備選子交易,使得這些備選子交易被批量提交至區塊鏈,可以減少向區塊鏈提交的交易數量,無需針對每一備選子交易均產生一筆區塊鏈交易,有助於降低資源消耗、提升處理效率。
在一實施例中,可以在所述等待佇列中的備選子交易達到預設數量時,選取所述等待佇列中已存在的備選子交易(即預設數量的備選子交易),以產生相應的集合交易。在另一實施例中,可以按照預設時長週期性地選取所述等待佇列中已存在的備選子交易,以產生相應的集合交易;當然,每一集合交易的容量可以存在最大限制,使得同一週期內選取的備選子交易的數量存在相應的最大值,超出的部分可以延期至下一週期進行選取。當然,還可以通過其他的預設規則來選取備選子交易,本說明書並不對此進行限制。
在一實施例中,等待佇列中的備選子交易可以按照添加時刻進行依次排列,而每次可以從前向後依次選取各個備選子交易,使得在先產生的備選子交易可以被優先選取。當然,參與方也可以根據實際需求,比如事件的緊急程度、事件的優先順序等,對等待佇列中的備選子交易實施與順序無關的選取操作;或者,等待佇列本身就可以按照上述的緊急程度、優先順序等進行排列,這樣依然可以視為依次選取。
在一實施例中,事件的描述資訊可以包括狀態變化量,而所述事件可以用於使各個參與方在區塊鏈上對應記錄的狀態參數按照所述狀態變化量發生取值變化,比如增大取值、減小取值等。其中,根據事件的類型或場景差異,相應的狀態參數也可能不同,比如轉帳或跨境匯款場景下的狀態參數可以為參與方的帳戶餘額,再比如流量分配場景下的狀態參數可以為參與方持有的剩餘流量的數額,本說明書並不對此進行限制。
步驟204,獲取所述集合交易中的統一證明資訊,所述統一證明資訊對應於所述集合交易中相鄰且對應的事件均用於減小所述狀態參數的取值的多個備選子交易,以驗證所述狀態參數在經過所述多個備選子交易後的取值是否處於正確取值區間。
在一實施例中,通過產生上述的統一證明資訊,使得上述的多個備選子交易可以僅產生一個統一證明資訊,而無需分別、單獨產生對應的證明資訊,有助於簡化證明資訊、提升處理效率。
在一實施例中,“針對所述集合交易中相鄰且對應的事件均用於減小所述狀態參數的取值的多個備選子交易,產生統一證明資訊”並不一定是指僅由該多個備選子交易來產生統一證明資訊,如果集合交易中還存在排列於該多個備選子交易之前的其他備選子交易,那麼該其他備選子交易同樣會對狀態參數的取值造成影響,因而統一證明資訊還跟該其他備選子交易相關。換言之,如果集合交易中存在排列於該多個備選子交易之前的其他備選子交易,那麼狀態參數在經歷該多個備選子交易之前,還需經歷該其他備選子交易所帶來的取值變化,而統一證明資訊用於證明狀態參數在該其他備選子交易和該多個備選子交易的共同作用後的取值處於正確取值區間。
例如,當集合交易包含的備選子交易依次為“減減減加加”(“減”代表用於減小狀態參數的取值的備選子交易,“加”代表用於增大狀態參數的取值的備選子交易)時,可以針對前三個連續的備選子交易產生統一證明資訊,此時由於這三個備選子交易之前並不存在其他備選子交易,因而狀態參數僅受這三個備選子交易的作用而產生取值變化,統一證明資訊用於證明該變化後的取值處於正確數值區間。
再例如,當集合交易包含的備選子交易依次為“加加減加減減減加”時,可以針對第五、第六、第七共三個連續的備選子交易產生統一證明資訊,此時由於這三個備選子交易之前存在第一、第二、第三、第四共四個其他備選子交易,因而狀態參數不僅受到三個連續的“減”的備選子交易的作用,還受到四個其他備選子交易的作用,統一證明資訊用於證明狀態參數在這七個備選子交易的作用下而產生取值變化後,該變化後的取值處於正確數值區間。
在一實施例中,上述“對應的事件均用於減小所述狀態參數的取值的多個備選子交易”可以是恰好處於相鄰位置,而並未實施特別的排序處理,這使得一些情況下,多個符合條件的備選子交易可能並未相鄰設置、導致無法採用本說明書來產生統一證明資訊,還可能使得多個符合條件的備選子交易無法完全連續排列、被進一步分割為多組,那麼每組仍然可以分別產生統一證明資訊,只是無法為多個符合條件的備選子交易產生一份統一證明資訊。
在一實施例中,當若干備選子交易被選取以用於聚合為所述集合交易時,可以識別每一被選取的備選子交易對應的事件對所述狀態參數的取值的調整方式;當至少兩個備選子交易對應的事件均用於減小所述狀態參數的取值時,可以將所述至少兩個備選子交易相鄰地排列於所述集合交易中。換言之,在聚合形成集合交易時,可以主動對各個備選子交易進行排序,並儘量將用於減小狀態參數取值的備選子交易都進行相鄰排列,從而使得這些備選子交易可以僅產生一份統一證明資訊,可以儘量減少證明資訊的數量。
在一實施例中,當採用密文數值或承諾數值時,對於集合交易中單獨存在的、對應的事件均用於減小所述狀態參數的取值的多個備選子交易,參與方可以單獨為其產生證明資訊,以證明狀態參數在經過該多個備選子交易後的取值處於正確取值區間。
在一實施例中,各個參與方對應的狀態參數的取值、所述狀態變化量分別為基於同態加密演算法計算得到的密文數值或基於同態承諾演算法計算得到的承諾數值。對於同態加密演算法而言,可以採用任意類型的同態加密演算法,只要確保該同態加密演算法能夠滿足加法同態,使得即便處於密文狀態下,仍然能夠使得狀態參數的取值增加或減少該狀態變化量;對於該同態加密演算法為加法同態加密演算法或全同態加密演算法,本說明書並不對此進行限制。對於同態承諾演算法而言,當採用相關技術中的Pedersen承諾機制時,可以為未加密資料判定一亂數,並基於該亂數與未加密資料進行計算得到相應的承諾數值。
在一實施例中,當狀態參數的取值、狀態變化量為密文數值或承諾數值時,參與方需要提供相關的證明資訊,以使得區塊鏈節點在執行相關交易時,能夠判定交易的合法有效性。例如,當事件用於使得某一參與方對應的狀態參數按照該狀態變化量發生取值減小時,即交易目的是使得該某一參與方的狀態參數的取值減小該狀態變化量,譬如上述的統一證明資訊用於證明:該參與方的狀態參數的取值足以實施上述集合交易中相鄰的多個“減小”類型的備選子交易(即狀態參數的取值不小於該相鄰的多個“減小”類型的備選子交易所對應的狀態變化量之和)。
例如,所述集合交易中可以包含分別對應於每一備選子交易的變化前狀態值、變化後狀態值,以配合於每一備選子交易中設定的狀態變化量,使得每一備選子交易被處理後,所述參與方的狀態參數由所述變化前狀態值經由所述狀態變化量而變化至所述變化後狀態值;其中,所述變化前狀態值和所述變化後狀態值分別為基於所述同態加密演算法計算得到的密文數值或基於同態承諾演算法計算得到的承諾數值。那麼,統一證明資訊可以用於證明:在上述相鄰的多個“減小”類型的備選子交易中,最後一個備選子交易的變化後狀態值不小於0。
在一實施例中,當採用密文數值或承諾數值時,對於集合交易中的每一備選子交易,不論其用於增大或減小狀態參數的取值,均產生相應的獨立證明資訊,所述獨立證明資訊用於證明相應的備選子交易中設定的狀態變化量處於所述正確數值區間。例如,獨立證明資訊可以用於表明相應的狀態變化量處於正確數值區間,譬如[0,264
)。
在一實施例中,區塊鏈節點可以獲取所述集合交易中對應於每一備選子交易的獨立證明資訊,以驗證相應的備選子交易中設定的狀態變化量是否處於所述正確數值區間;其中,當區塊鏈節點針對統一證明資訊的驗證結果為通過驗證,且所述多個備選子交易中的任一備選子交易對應的獨立證明資訊通過驗證時,區塊鏈節點可以觸發執行所述任一備選子交易。
在一實施例中,區塊鏈節點可以在所述集合交易中的任一備選子交易對應的事件用於增大所述狀態參數的取值時,獲取所述集合交易中對應於所述任一備選子交易的獨立證明資訊;其中,當對應於所述任一備選子交易的獨立證明資訊通過驗證時,區塊鏈節點可以觸發執行所述任一備選子交易。
在一實施例中,可以採用相關技術中的區間證明(Range Proof)技術,譬如Bulletproofs方案或Borromean環簽名方案等,產生上述的證明資訊,本說明書並不對此進行限制。
步驟206,根據驗證結果判定對所述多個備選子交易的處理方式。
在一實施例中,參與方可以按照產生順序為各個合併交易添加編號,使各個合併交易在區塊鏈中被按照對應編號的大小進行依次處理。換言之,區塊鏈交易在收到參與方提交的合併交易後,需要讀取合併交易所包含的編號;如果編號與先前處理的合併交易的編號連續,比如最新處理的合併交易的編號為99、當前收到的合併交易的編號為100,則可以對該編號為100的合併交易進行處理;如果編號之間並不連續,比如最新處理的合併交易的編號為99、當前收到的合併交易的編號為101,則區塊鏈節點需要等待並優先處理編號為100的合併交易,然後才能處理編號為101的合併交易。由於每條交易被執行後都可能導致該參與方的狀態參數發生變化,而在後交易的執行需要依賴於先前交易執行後的狀態參數的取值,因而需要確保各個合併交易被按照對應編號的大小進行依次處理,以使得各個合併交易均能夠正確執行。
在一實施例中,在事件對應的備選子交易中,包含所述參與方對所述事件的單方觸發資訊;其中,當所述事件的所有參與方分別向區塊鏈提交的針對所述事件的單方觸發資訊均通過驗證時,所述事件對應的備選子交易在區塊鏈中被觸發執行。單方觸發資訊表明相應的參與方對事件的描述資訊予以確認,希望觸發事件的執行;而事件的每一參與方都需要分別向區塊鏈提交單方觸發資訊,使得區塊鏈節點基於所有參與方分別提交的單方觸發資訊,判定是否應當執行相應的備選子交易所指示的事件。例如,事件的任一參與方產生描述資訊並提供至其他參與方後,不僅該任一參與方需要向自身維護的等待佇列中添加相應的備選子交易,每一其他參與方在對描述資訊予以確認後,也分別向自身維護的等待佇列中添加相應的備選子交易;以及,每一參與方分別基於自身維護的等待佇列產生集合交易,從而通過將集合交易提交至區塊鏈,使得上述的單方觸發資訊被提交至區塊鏈,以供區塊鏈節點進行驗證。單方觸發資訊中可以包含描述資訊和相應參與方對描述資訊產生的簽名;簽名屬於相應參與方提供的確認資訊,而如果採用密文數值或承諾數值,確認資訊還包含證明資訊,這在上文中已經詳細描述。通過由各個參與方分別向區塊鏈提交單方觸發資訊,而非某一參與方提交多方觸發資訊,不僅可以對處理壓力進行分擔、防止單個參與方的處理壓力過大,還可使各個參與方根據自身的實際情況(如處理壓力、優先順序管理等)對所參與的各個事件進行選擇性地處理甚至批量處理。
為了便於理解,下面以跨境匯款場景為例,對本說明書一個或多個實施例的技術方案進行說明。基於本說明書的技術方案,每一機構可以分別對自身所參與的若干匯款交易(相當於上述的備選子交易)合併為一筆區塊鏈交易(相當於上述的集合交易),並通過向區塊鏈提交該區塊鏈交易,實現對若干匯款交易的批量提交和處理。下面將首先對單筆匯款交易的產生與處理過程進行描述,然後擴展至多筆匯款交易的批量處理。
圖3是一示例性實施例提供的一種跨境匯款的場景示意圖。如圖3所示,假定由用戶1向用戶2進行區塊鏈匯款;其中,本說明書中的“用戶”可以表現為所登錄的用戶帳號,而該用戶帳號實際可以歸屬於個人或組織,本說明書並不對此進行限制。假定用戶1在國家A的機構1處開設有客戶資金帳戶1、用戶2在國家B的機構4處開設有客戶資金帳戶2,本說明書可以在機構1與機構4之間無法直接實施跨境匯款的情況下,通過機構2與機構3的協助而在區塊鏈上實現該跨境匯款的操作。
機構1、機構2、機構3和機構4分別存在對應的設備1、設備2、設備3和設備4,並通過在設備1~4上運行區塊鏈的用戶端程式,使得設備1~4被配置為相應的區塊鏈節點;相應地,機構1~4可以通過設備1~4實現與區塊鏈相關的操作。例如,機構1~4可以分別通過設備1~4向區塊鏈提交相應的區塊鏈交易;再例如,設備1~4分別維護有區塊鏈上的全量交易資料,即區塊鏈帳本,使得機構1~4可以分別據此查詢和維護各個區塊鏈帳戶的餘額資料,比如機構1對應的區塊鏈帳戶Y1持有1000港幣,機構2對應的區塊鏈帳戶Y2持有2500港幣和4200歐元,機構3對應的區塊鏈帳戶Y3持有3000歐元和2000美元,機構4對應的區塊鏈帳戶Y4持有1500美元等。
出於隱私保護等方面的考慮,區塊鏈帳戶Y1~Y4的餘額資料往往並非以明文形式進行維護,而是採用對應的密文資料。以區塊鏈帳戶Y1為例,在區塊鏈帳本中可以被記錄為(currency_1, PC(a, r_a), Enc_A(a), Enc_A(r_a)),其中:currency_1表示貨幣類型為港幣,a表示港幣數額為1000,r_a為a對應的亂數,PC(a, r_a)是通過Pedersen承諾機制對a和r_a進行計算得到的密文形式的承諾值,Enc_A(a)、Enc_A(r_a)分別為a和r_a的密文取值(比如可以採用機構1的身份公鑰進行加密,或者可以採用其他任意形式的加密演算法)。區塊鏈帳戶Y2可以被記錄為(currency_1, PC(b1, r_b1), Enc_B(b1), Enc_B(r_b1))、(currency_2, PC(b2, r_b2), Enc_B(b2), Enc_B(r_b2)),其中:b1表示港幣數額為2500、r_b1為b1對應的亂數,currency_2表示貨幣類型為歐元,b2表示歐元數額為4200、r_b2為b2對應的亂數。區塊鏈帳戶Y3可以被記錄為(currency_2, PC(c1, r_c1), Enc_C(c1), Enc_C(r_c1))、(currency_3, PC(c2, r_c2), Enc_C(c2), Enc_C(r_c2)),其中:c1表示港幣歐元為3000、r_c1為c1對應的亂數,currency_3表示貨幣類型為美元,c2表示美元數額為2000、r_c2為c2對應的亂數。區塊鏈帳戶Y4可以被記錄為(currency_3, PC(d, r_d), Enc_D(d), Enc_D(r_d)),其中d表示美元數額為1500、r_d為d對應的亂數。
基於圖3所示的匯款場景,圖4是一示例性實施例的一種跨境匯款過程中的互動示意圖。如圖4所示,跨境匯款的互動過程可以包括以下步驟:
步驟401,設備1起草匯款交易tx_i。
在一實施例中,假定用戶1希望向用戶2匯款500港幣,該用戶1可以通過在機構1處的客戶資金帳戶1提供該500港幣,而用戶2可以通過在機構4處的客戶資金帳戶2收取按一定匯率計算後的美元。
在一實施例中,機構1可以從用戶1對應的客戶資金帳戶1中扣取500港幣;以及,機構1需要在自身與機構4之間判定出匯款路由,比如圖4中的匯款路由為“機構1→機構2→機構3→機構4”,使得機構1可以向機構2轉入500港幣、機構2可以向機構3轉入56歐元(相當於500港幣)、機構3可以向機構4轉入64美元(相當於56歐元、500港幣),並最終由機構4向用戶2對應的客戶資金帳戶2轉入64美元,從而完成匯款操作。其中,機構1從客戶資金帳戶1扣取500港幣、機構4向客戶資金帳戶2轉入64美元屬於鏈外操作,而機構1~機構4之間則通過區塊鏈實現鏈上資金轉移。
在一實施例中,在上述的匯款路由“機構1→機構2→機構3→機構4”中,機構1與機構4之間存在2個中繼方為機構3和機構4;而在其他實施例中,中繼方的數量可以為1個、3個或3個以上,本說明書並不對此進行限制。
針對已經判定的上述匯款路由,以及各個機構之間的匯款金額,設備1起草的匯款交易tx_i可以包括以下匯款交易詳情:交易id為tx_i,區塊鏈帳戶Y1的地址Z1、區塊鏈帳戶Y2的地址Z2、區塊鏈帳戶Y3的地址Z3、區塊鏈帳戶Y4的位址Z4,與交易金額相關的密文資訊{(currency_1,PC(t1, r_t1), Enc_B(t1), Enc_B(r_t1), Enc_C(t1), Enc_C (r_t1), Enc_D(t1), Enc_D(r_t1)), (currency_2, PC(t2,r_t2), Enc_B(t2), Enc_B(r_t2), Enc_C(t2), Enc_C(r_t2), Enc_D (t2), Enc_D(r_t2)), (currency_3, PC(t3,r_t3), Enc_B(t3), Enc_B(r_t3), Enc_C(t3), Enc_C(r_t3), Enc_D(t3), Enc_D (r_t3)), rate1, rate2, time, …},針對交易金額t1、t2、t3的區間證明RP_t1、RP_t2、RP_t3等。
其中,位址Z1~Z4用於表明本次匯款事件的參與方,以使得後續從該位址Z1~Z4對應的區塊鏈帳戶Y1~Y4實施轉帳匯款。
在(currency_1,PC(t1, r_t1), Enc_B(t1), Enc_B(r_t1), Enc_C(t1), Enc_C(r_t1), Enc_D(t1), Enc_D(r_t1))中,t1表示從位址Z1向位址Z2的轉帳金額(如上述的500港幣),r_t1為該金額t1對應的亂數,PC(t1,r_t1)為基於金額t1和亂數r_t1計算得到的承諾值,Enc_B(t1)表示用機構2的身份公鑰對金額t1進行加密後的密文數值、Enc_C(t1)表示用機構3的身份公鑰對金額t1進行加密後的密文數值、Enc_D(t1)表示用機構4的身份公鑰對金額t1進行加密後的密文數值;類似地,Enc_B(r_t1)、Enc_C(r_t1)、Enc_D(r_t1)分別為通過機構2、機構3、機構4的身份公鑰對金額t1進行加密後的密文數值。(currency_2, PC(t2,r_t2), Enc_B(t2), Enc_B(r_t2), Enc_C(t2), Enc_C(r_t2), Enc_D(t2), Enc_D (r_t2))和(currency_3, PC(t3,r_t3), Enc_B(t3), Enc_B(r_t3), Enc_C(t3), Enc_C(r_t3), Enc_D(t3), Enc_D(r_t3))的情況類似,此處不再贅述。rate1、rate2分別為currency_1與currency_2的匯率、currency_2與currency_3的匯率。time為交易時刻。以及,還可能存在一些其他的交易所需資料,這可以參考相關技術中的方案,此處不再一一列舉。
RP_t1、RP_t2、RP_t3分別為對應於交易金額t1、t2、t3的區間證明,以分別用於證明交易金額t1、t2、t3處於正確數值區間,比如0≤t1<264
、0≤t2<264
、0≤t3<264
。其中,設備1可以通過相關技術中的零知識證明技術產生上述的區間證明,本說明書並不對此進行限制。
步驟402a~402c,設備1將匯款交易詳情分別同步至設備2、設備3和設備4。
在一實施例中,設備1可以通過機構1的身份私鑰對匯款交易詳情進行簽名後,通過鏈外(或稱為,鏈下)通道分別發送至設備2~設備4,以實現資料同步。
在一實施例中,設備1~設備4分別運行有區塊鏈的用戶端程式,使得設備1~設備4分別被配置為區塊鏈中的區塊鏈節點;或者,設備1~設備4在區塊鏈中分別存在對應的區塊鏈節點,本說明書並不對此進行限制。其中,區塊鏈中的每一區塊鏈節點分別維護有內容統一的區塊鏈帳本,區塊鏈帳本中記錄有全量的區塊鏈資料。因此,設備1可以產生一筆交易,該交易的內容包含上述匯款交易tx_i的匯款交易詳情,並將該交易提交至區塊鏈中;相應地,當該交易通過共識後,可以被發送至區塊鏈中的各個區塊鏈節點,以供各個區塊鏈節點更新自身維護的區塊鏈帳本。因此,設備1、設備2、設備3和設備4可以分別通過自身對應的區塊鏈節點所維護的區塊鏈帳本,獲知設備1提交的上述交易,從而獲取該交易中包含的上述匯款交易tx_i的匯款交易詳情。
當然,設備1還可能通過其他方式將匯款交易資料同步至設備2~設備4,本說明書並不對此進行限制。
步驟403a,設備1將匯款交易詳情對應的匯款交易tx_i添加至自身的本地佇列1。
在一實施例中,當設備1通過鏈外通道發送匯款交易詳情時,設備1可以直接向本地佇列1添加匯款交易tx_i;當然,設備1可以等待設備2~設備4對匯款交易詳情確認完畢並返回相應的確認回應後,才向本地佇列1添加匯款交易tx_i,以確保設備2~設備4均參與至該匯款交易tx_i。
在一實施例中,當設備1通過區塊鏈將匯款交易詳情同步至設備2~設備4時,設備1同樣會收到區塊鏈上同步的該匯款交易詳情,那麼設備1既可以對該匯款交易詳情進行驗證(驗證過程可參考步驟403b),並在通過驗證後將匯款交易tx_i添加至本地佇列1,也可以在判定該匯款交易詳情對應於匯款交易tx_i、該匯款交易tx_i由該設備1自身起草並提交至區塊鏈時,略去對匯款交易詳情的驗證過程,而直接添加至本地佇列1。
步驟403b,設備2對收到的匯款交易詳情進行驗證後,將其添加至自身的本地佇列2。
在一實施例中,設備2在收到匯款交易詳情後,需要實施驗證操作,包括:設備2通過自身的身份私鑰對匯款交易詳情包含的Enc_B(t1)、Enc_B(r_t1)、Enc_B(t2)、Enc_B(r_t2)、Enc_B(t3)、Enc_B(r_t3)進行解密,得到相應的金額t1與亂數r_t1、金額t2與亂數r_t2、金額t3與亂數r_t3,並分別驗證PC(t1, r_t1)= r_t1G+t1H、PC(t2, r_t2)= r_t2G+t2H、PC(t3, r_t3)= r_t3G+t3H是否成立(其中,G、H為預設系統參數);設備2驗證currency_1與currency_2之間的匯率是否為rate1、currency_2與currency_3之間的匯率是否為rate2;設備2驗證區間證明RP_t1、RP_t2、RP_t3是否正確等。在判定匯款交易詳情通過驗證後,設備2可以向自身維護的本地佇列2添加相應的匯款交易tx_i,並且向設備1返回確認回應、以表明接受相應的匯款交易。
步驟403c-403d,設備3-4分別對收到的匯款交易詳情進行驗證後,將其添加至自身的本地佇列3-4。
在一實施例中,設備3、設備4所實施的操作與設備2相類似,此處不再一一贅述。
至此,匯款交易tx_i已經被設備1~設備4分別添加至各自維護的本地佇列1~4中。類似地,當設備1~設備4分別參與到其他的匯款交易(並不一定為設備1~設備4同時參與的匯款交易)時,同樣可以採用類似於對上述匯款交易tx_i的處理方式,向相應的本地佇列中添加匯款交易,以用於下述步驟中的交易聚合與批量處理。
步驟404a,設備1根據本地佇列1中的匯款交易,聚合產生交易TX_a,並在簽名後提交至區塊鏈。
如上文所述,與匯款交易tx_i相類似的,機構1還可以參與其他的匯款交易,比如當某一用戶需要通過機構1向另一用戶進行匯款時,設備1可以通過類似於上述步驟的方式,起草相應的匯款交易、將匯款交易詳情發送至其他各個機構進行驗證、向本地佇列1中添加相應的匯款交易tx_i。同時,機構1還可以作為一些匯款交易的中繼方(類似於機構2-3在上述實施例中的角色)或收款方(類似於機構4在上述實施例中的角色),使得該機構1可以通過設備1接收這些匯款交易的匯款方(類似於機構1在上述實施例中的角色)發送的匯款交易詳情,並在驗證通過後向本地佇列1中添加相應的匯款交易。
因此,設備1維護的本地佇列1中包含機構1所參與的諸多匯款交易。而設備1可以按照預定義的交易選擇規則,每次從本地佇列1中選取一個或多個匯款交易,並對被選取的匯款交易進行聚合,產生一筆區塊鏈交易。
例如,圖5是一示例性實施例提供的一種區塊鏈交易的內容示意圖。如圖5所示,假定設備1選取6個匯款交易並聚合為一筆區塊鏈交易,比如匯款交易tx_i-3、tx_i-2、tx_i-1、tx_i、tx_i+1、tx_i+2被聚合為區塊鏈交易TX_a,該設備1需要為各個匯款交易產生相應的證明資訊。
首先,對於區塊鏈交易TX_a中的每一匯款交易,該區塊鏈交易TX_a中需要包含針對每一匯款交易的交易額的證明資訊,比如匯款交易tx_i-3對應的證明資訊為RP_i-3、匯款交易tx_i-2對應的證明資訊為RP_i-2、匯款交易tx_i-1對應的證明資訊為RP_i-1、匯款交易tx_i對應的證明資訊為RP_i、匯款交易tx_i+1對應的證明資訊為RP_i+1、匯款交易tx_i+2對應的證明資訊為RP_i+2。
以匯款交易tx_i對應的證明資訊RP_i為例,相當於上文所述的區間證明RP_t1、RP_t2、RP_t3,分別用於證明匯款交易tx_i的交易額t1、t2、t3處於正確數值區間。類似地,對於其他非設備1所起草的匯款交易而言,可以由匯款交易的起草方產生對交易額的證明資訊、無需設備1產生;當然,即便並非設備1所起草的匯款交易,仍然可由該設備1為相應的交易額產生證明資訊,本說明書並不對此進行限制。
然後,對於機構1作為匯款方或中繼方的匯款交易,即導致機構1的區塊鏈帳戶Y1的餘額減少的匯款交易,設備1還需要產生區塊鏈帳戶Y1的餘額充足、不小於交易額的證明資訊。此時,設備1需要從上述的6個匯款交易中,挑選出所有會導致區塊鏈帳戶Y1的餘額減少的匯款交易,並使得挑選出的這些匯款交易在區塊鏈交易TX_a中相鄰排列;例如,當匯款交易tx_i-3、tx_i-2和tx_i-1會導致區塊鏈帳戶Y1的餘額增加,而匯款交易tx_i、tx_i+1、tx_i+2會導致區塊鏈帳戶Y1的餘額減少時,設備1可以將匯款交易tx_i-3、tx_i-2和tx_i-1相鄰排列,並針對這3個匯款交易產生統一證明資訊RP_(i~i+2),以證明區塊鏈帳戶Y1的餘額(指經過匯款交易tx_i、tx_i+1、tx_i+2帶來的取值變化後的餘額)足以完成匯款交易tx_i、tx_i+1和tx_i+2,而無需為匯款交易tx_i、tx_i+1和tx_i+2分別產生單獨的區間證明。
在一實施例中,考慮到設備1提交的匯款交易並不一定全部順利執行,而在先提交的匯款交易可能影響區塊鏈帳戶Y1的餘額,從而影響在後的匯款交易,因此,在產生統一證明資訊RP_(i~i+2)時,應當考慮在先提交的區塊鏈交易的影響。例如,當機構1在該區塊鏈交易中包含的若干匯款交易中作為匯款方或中繼方時,機構1會將自身對應的區塊鏈帳戶Y1的帳戶餘額減去對應的轉帳金額(匯款方僅轉出資金;中繼方既可接收轉入資金又需要轉出資金,這裡是針對轉出資金的操作而描述),並基於更新後的匯款金額繼續參與後續的匯款交易。當該區塊鏈交易被提交至區塊鏈後,如果機構1作為匯款方或中繼方的某一匯款交易成功執行,機構1無需調整區塊鏈帳戶Y1;如果機構1作為匯款方或中繼方的某一匯款交易未成功執行,機構1需要對區塊鏈帳戶Y1的帳戶餘額進行回滾調節。而當上述的區塊鏈交易中包含機構1作為收款方或中繼方(收款方僅轉入資金;中繼方既可接收轉入資金又需要轉出資金,這裡是針對轉入資金的操作而描述)的匯款交易時,如果該匯款交易成功執行,機構1需要向區塊鏈帳戶Y1中增加相應資金、實現收款,如果匯款交易未成功執行,機構1無需調整區塊鏈帳戶Y1。相應地,區塊鏈節點在收到並處理設備1提交的區塊鏈交易時,可以針對區塊鏈交易所包含的匯款交易是否能夠成功執行,對各個匯款交易進行狀態標記,比如交易為成功狀態、失敗狀態、超時狀態等。
因此,設備1在聚合產生區塊鏈交易TX_a時,並不直接通過區塊鏈帳戶Y1的餘額取值產生統一證明資訊RP_(i~i+2),而是需要先判定出設備1先前提交的區塊鏈交易中可能造成金額變化的匯款交易,包括:機構1作為中繼方或收款方的匯款交易被標記為成功狀態時產生的金額增加(收款)、機構1作為匯款方或中繼方的匯款交易被標記為失敗狀態或超時狀態時產生的金額增加(對已扣除的轉帳金額進行回滾)等。以及,設備1進一步根據區塊鏈帳戶Y1的餘額取值(已扣除先前提交的匯款交易的轉帳金額、尚未收款)與上述可能造成金額變化的匯款交易實際產生的金額變化值,對區塊鏈帳戶Y1的餘額取值進行更新,然後根據更新後的餘額取值產生統一證明資訊RP_(i~i+2)。
此外,設備1在產生各個區塊鏈交易時,還按照區塊鏈交易的產生順序,為每一區塊鏈交易添加相應的順序編號seq。比如當設備1分別產生了區塊鏈交易TX_1、TX_2和TX_3時,區塊鏈交易TX_1的seq取值為99、區塊鏈交易TX_2的seq取值為100、區塊鏈交易TX_3的seq取值為101,表明區塊鏈交易TX_1早於區塊鏈交易TX_2產生、區塊鏈交易TX_2早於區塊鏈交易TX_3產生。相應的,區塊鏈節點在收到設備1提交的各個區塊鏈交易後,會按照seq取值從小到大的順序依次對各個區塊鏈交易進行處理,比如先處理區塊鏈交易TX_1、再處理區塊鏈交易TX_2、然後處理區塊鏈交易TX_3。
步驟404b-d,設備2~4根據本地佇列2~4中的匯款交易,分別聚合產生交易TX_b、TX_c、TX_d,並在簽名後分別提交至區塊鏈。
在一實施例中,與設備1相類似的,設備2可以從本地佇列2中選取一個或多個匯款交易,以聚合產生相應的區塊鏈交易。假定設備2在某一次選取的匯款交易中包含上述的匯款交易tx_i,並據此產生了相應的區塊鏈交易TX_b;其中,導致機構2的區塊鏈帳戶Y2的餘額減少的匯款交易在TX_b中相鄰排列,以產生相應的統一證明資訊。
在一實施例中,與設備1相類似的,設備3可以從本地佇列3中選取一個或多個匯款交易,以聚合產生相應的區塊鏈交易。假定設備3在某一次選取的匯款交易中包含上述的匯款交易tx_i,並據此產生了相應的區塊鏈交易TX_c;其中,導致機構3的區塊鏈帳戶Y3的餘額減少的匯款交易在TX_c中相鄰排列,以產生相應的統一證明資訊。
在一實施例中,與設備1相類似的,設備4可以從本地佇列4中選取一個或多個匯款交易,以聚合產生相應的區塊鏈交易。假定設備4在某一次選取的匯款交易中包含上述的匯款交易tx_i,並據此產生了相應的區塊鏈交易TX_d;其中,導致機構4的區塊鏈帳戶Y4的餘額減少的匯款交易在TX_d中相鄰排列,以產生相應的統一證明資訊。
需要指出的是:設備1~設備4可以根據實際情況選擇產生相應的區塊鏈交易,而並不一定立即對匯款交易tx_i進行處理;換言之,設備1~設備4實際上是非同步地向區塊鏈提交匯款交易tx_i(被包含於相應的區塊鏈交易中),使得該匯款交易tx_i的執行被分配至由設備1~設備4分別進行觸發,促使設備1~設備4在參與大量匯款交易的情況下,可以對所參與的匯款交易進行批量產生區塊鏈交易,從而減少區塊鏈交易的產生和提交數量,有助於降低處理負擔、提升處理效率。
步驟405,區塊鏈節點對收到的區塊鏈交易進行處理,以驗證區塊鏈交易中包含的各筆匯款交易。
步驟406,標記匯款交易tx_i。
在一實施例中,由於每一機構會不斷向區塊鏈提交區塊鏈交易,而在先提交的區塊鏈交易所包含的匯款交易,會影響在後提交的區塊鏈交易所包含的匯款交易,因而區塊鏈節點在接收每一機構提交的區塊鏈交易後,需要讀取所接收到的區塊鏈交易中包含的順序編號seq,並按照順序編號seq的大小,依次處理來自相應機構的區塊鏈交易。例如,當區塊鏈節點接收到設備1提交的區塊鏈交易TX_a時,讀取其中包含的順序編號seq為100;而如果區塊鏈節點已處理的最近一筆區塊鏈交易的順序編號seq為98,那麼區塊鏈節點需要等待設備1提交的順序編號seq為99的區塊鏈交易,並在該順序編號為99的區塊鏈交易被處理後,才對上述順序編號為100的區塊鏈交易進行處理。
在一實施例中,區塊鏈節點在收到設備1~4分別提交的區塊鏈交易後,可以分別提取每一區塊鏈交易中包含的匯款交易並實施驗證。以設備1提交的區塊鏈交易TX_a為例,區塊鏈節點可以分別驗證如圖5所示的證明資訊RP_i-3、RP_i-2、RP_i-1、RP_i、RP_i+1、RP_i+2,以分別判定各個匯款交易的匯款額是否處於正確數值區間;以及,區塊鏈節點通過驗證統一證明資訊RP_(i~i+2),以判定區塊鏈帳戶Y1的帳戶餘額是否足額,以判定是否能夠順利執行區塊鏈交易TX_a中的各個匯款交易。當然,區塊鏈節點還可能實施其他的驗證操作,可以參考相關技術中對於匯款交易的驗證過程,比如驗證匯出額與匯入額是否一致、與業務數額是否一致等,此處不再一一贅述,且本說明書並不對此進行限制。
在一實施例中,如果匯款交易的執行由匯款方、中繼方、收款方等參與方同時參與觸發,因而區塊鏈節點還需要驗證匯款交易的各個參與方是否都實施了觸發(即提交了包含該匯款交易的區塊鏈交易)。例如,圖6是一示例性實施例提供的一種統計觸發情況的示意圖。如圖6所示,基於區塊鏈的原生功能或智慧合約所提供的擴展功能,區塊鏈節點可以分別記錄機構1~機構4所提交的區塊鏈交易,比如機構1提交的區塊鏈交易TX_a、TX_*,機構2提交的區塊鏈交易TX_*、TX_b、TX_#,機構3提交的區塊鏈交易TX_*、TX_c,機構4提交的區塊鏈交易TX_d等;以及,區塊鏈節點可以提取出各個區塊鏈交易中包含的匯款交易,並分別針對各個匯款交易的參與方(匯款交易詳情中包含匯款方、中繼方、收款方的資訊)進行統計:當收到相應參與方提交的區塊鏈交易中包含該匯款交易,且該匯款交易通過了上述驗證時,可以將該參與方標記為“OK”。
比如,由於設備1提交的區塊鏈交易TX_a中包含匯款交易tx_i,如果區塊鏈交易TX_a中對應於匯款交易tx_i的內容通過驗證,那麼區塊鏈節點可以標記為如圖6所示的“Y1:OK”;類似地,如果區塊鏈節點還分別針對機構2~機構4標記為“Y2:OK”、“Y3:OK”、“Y4:OK”等,那麼區塊鏈節點可以判定該匯款交易tx_i已經得到所有參與方的確認,可以將該匯款交易tx_i標記為成功狀態。
再比如,由於僅設備1、設備2和設備3提交的區塊鏈交易中包含匯款交易tx_*的相關資訊,因而即便這些資訊都已經通過單獨驗證,區塊鏈節點仍然僅能夠為該匯款交易tx_*添加標記“Y1:OK”、“Y2:OK”、“Y3:OK”,而需要繼續等待設備4提交的區塊鏈交易。
又比如,由於僅設備2提交的區塊鏈交易中包含匯款交易tx_#的相關資訊,因而即便相關資訊已經通過單獨驗證,區塊鏈節點仍然僅能夠為該匯款交易tx_#添加標記“Y2:OK”,而需要繼續等待設備1、設備3和設備4提交的區塊鏈交易。
仍以匯款交易tx_i為例,如果機構1~機構4中的任一參與方未能夠在交易時刻到達之前提交包含該匯款交易tx_i的區塊鏈交易,那麼區塊鏈節點會將該匯款交易tx_i標記為超時狀態,使其無法被成功執行。如果機構1~機構4中的任一參與方雖然提及了包含該匯款交易tx_i的區塊鏈交易,但由於金額累加詳情出錯或區間證明出錯等原因而未通過單獨驗證,那麼區塊鏈節點會將該匯款交易tx_i標記為失敗狀態,使其無法被成功執行。
當匯款交易tx_i或其他匯款交易被區塊鏈節點添加了成功狀態、失敗狀態或超時狀態等標記時,機構1~機構4在後續產生區塊鏈交易時,可以參考這些狀態產生相應的金額累加詳情、產生餘額充足的區間證明等,這與上文中在步驟404a~404d中描述的過程相類似,此處不再贅述。
在確認匯款交易tx_i被成功執行後,機構1在鏈外收取用戶1的500港幣、向機構2轉出500港幣,機構2收取機構1轉入的500港幣、向機構3轉出56歐元,機構3收取機構2轉入的56歐元、向機構4轉出64美元,機構4收取機構3轉入的64美元、在鏈外向用戶1轉入64美元,相當於機構1~4收支平衡、由用戶1向用戶2完成了500港幣的匯款操作。
而表現在區塊鏈帳本上的資料變化為:機構1對應的區塊鏈帳戶Y1更新為(currency_1, PC(a-t1, r_a-r_t1), Enc_A (a-t1), Enc_A (r_a-r_t1))、減少了500港幣;機構2對應的區塊鏈帳戶Y2更新為:(currency_1, PC(b1+t1, r_b1+r_t1), Enc_B(b1+t1), Enc_B(r_b1+r_t1))、(currency_2, PC(b2-t2, r_b2-r_t2), Enc_B(b2-t2), Enc_B(r_b2-r_t2)),增加了500港幣、減少了56歐元;機構3對應的區塊鏈帳戶Y3更新為:(currency_2, PC(c1+t2, r_c1+r_t2), Enc_C(c1+t2), Enc_C(r_c1+r_t2))、(currency_3, PC(c2-t3, r_c2-r_t3), Enc_C(c2-t3), Enc_C (r_c2-r_t3)),增加了56歐元、減少了64美元;機構4對應的區塊鏈帳戶Y4更新為:(currency_3, PC(d+t3, r_d+r_t3), Enc_D(d+t3), Enc_D(r_d+r_t3))、增加了64美元。
需要指出的是:設備1~設備4所提交的區塊鏈交易中,並不一定每條匯款交易都由所有參與方共同實施觸發操作;譬如,至少一條匯款交易可以採用相關技術中的技術方案,即由某一參與方收集所有參與方對匯款交易的交易詳情資訊的確認資訊、產生交易所需的區間證明等(即產生上述實施例中所述的多方觸發資訊),並僅由該某一參與方提交包含該匯款交易的區塊鏈交易。
圖7是一示例性實施例提供的一種設備的示意結構圖。請參考圖7,在硬體層面,該設備包括處理器702、內部匯流排704、網路介面706、記憶體708以及非揮發性記憶體710,當然還可能包括其他業務所需要的硬體。處理器702從非揮發性記憶體710中讀取對應的電腦程式到記憶體708中然後運行,在邏輯層面上形成基於區塊鏈的事件處理終端互動裝置。當然,除了軟體實現方式之外,本說明書一個或多個實施例並不排除其他實現方式,比如邏輯裝置抑或軟硬體結合的方式等等,也就是說以下處理流程的執行主體並不限定於各個邏輯單元,也可以是硬體或邏輯裝置。
請參考圖8,在軟體實施方式中,該基於區塊鏈的事件處理裝置應用於參與方,可以包括:
第一產生單元801,根據所述參與方所參與的事件,產生對應的備選子交易,以使得若干備選子交易被聚合為集合交易;其中,所述備選子交易設定有對應的狀態變化量,以用於使所述參與方的狀態參數基於所述狀態變化量而發生相應的數值變化,且所述狀態參數的取值、所述狀態變化量分別為基於同態加密演算法計算得到的密文數值或基於同態承諾演算法計算得到的承諾數值;
第二產生單元802,針對所述集合交易中相鄰且對應的事件均用於減小所述狀態參數的取值的多個備選子交易,產生統一證明資訊,以證明所述狀態參數在經過所述多個備選子交易後的取值處於正確取值區間;
提交單元803,將所述集合交易提交至區塊鏈,以使所述集合交易中包含的備選子交易被依次處理。
可選的,還包括:
識別單元804,當若干備選子交易被選取以用於聚合為所述集合交易時,識別每一被選取的備選子交易對應的事件對所述狀態參數的取值的調整方式;
排列單元805,當至少兩個備選子交易對應的事件均用於減小所述狀態參數的取值時,將所述至少兩個備選子交易相鄰地排列於所述集合交易中。
可選的,所述集合交易中包含分別對應於每一備選子交易的變化前狀態值、變化後狀態值,以配合於每一備選子交易中設定的狀態變化量,使得每一備選子交易被處理後,所述參與方的狀態參數由所述變化前狀態值經由所述狀態變化量而變化至所述變化後狀態值;其中,所述變化前狀態值和所述變化後狀態值分別為基於所述同態加密演算法計算得到的密文數值或基於所述同態承諾演算法計算得到的承諾數值。
可選的,還包括:
第三產生單元806,分別為所述集合交易中的每一備選子交易產生相應的獨立證明資訊,所述獨立證明資訊用於證明相應的備選子交易中設定的狀態變化量處於所述正確數值區間。
可選的,在所述事件對應的備選子交易中,包含所述參與方對所述事件的單方觸發資訊;其中,當所述事件的所有參與方分別向區塊鏈提交的針對所述事件的單方觸發資訊均通過驗證時,所述事件對應的備選子交易在區塊鏈中被觸發執行。
可選的,還包括:
添加單元807,按照產生順序為各個集合交易添加相應的編號,以使各個集合交易在區塊鏈中被按照對應的編號大小進行依次處理。
圖9是一示例性實施例提供的一種設備的示意結構圖。請參考圖9,在硬體層面,該設備包括處理器902、內部匯流排904、網路介面906、記憶體908以及非揮發性記憶體910,當然還可能包括其他業務所需要的硬體。處理器902從非揮發性記憶體910中讀取對應的電腦程式到記憶體908中然後運行,在邏輯層面上形成基於區塊鏈的事件處理終端互動裝置。當然,除了軟體實現方式之外,本說明書一個或多個實施例並不排除其他實現方式,比如邏輯裝置抑或軟硬體結合的方式等等,也就是說以下處理流程的執行主體並不限定於各個邏輯單元,也可以是硬體或邏輯裝置。
請參考圖10,在軟體實施方式中,該基於區塊鏈的事件處理裝置應用於區塊鏈節點,可以包括:
接收單元1001,接收參與方提交至區塊鏈的集合交易,所述集合交易中包含若干備選子交易,所述備選子交易對應於所述參與方所參與的事件;其中,所述備選子交易設定有對應的狀態變化量,以用於使所述參與方的狀態參數基於所述狀態變化量而發生相應的數值變化,且所述狀態參數的取值、所述狀態變化量分別為基於同態加密演算法計算得到的密文數值或基於同態承諾演算法計算得到的承諾數值;
第一獲取單元1002,獲取所述集合交易中的統一證明資訊,所述統一證明資訊對應於所述集合交易中相鄰且對應的事件均用於減小所述狀態參數的取值的多個備選子交易,以驗證所述狀態參數在經過所述多個備選子交易後的取值是否處於正確取值區間;
判定單元1003,根據驗證結果判定對所述多個備選子交易的處理方式。
可選的,
還包括:第二獲取單元1004,獲取所述集合交易中對應於每一備選子交易的獨立證明資訊,以驗證相應的備選子交易中設定的狀態變化量是否處於所述正確數值區間;
所述判定單元1003具體用於:當所述驗證結果為通過驗證,且所述多個備選子交易中的任一備選子交易對應的獨立證明資訊通過驗證時,觸發執行所述任一備選子交易。
可選的,還包括:
第三獲取單元1005,當所述集合交易中的任一備選子交易對應的事件用於增大所述狀態參數的取值時,獲取所述集合交易中對應於所述任一備選子交易的獨立證明資訊;
第一觸發單元1006,當對應於所述任一備選子交易的獨立證明資訊通過驗證時,觸發執行所述任一備選子交易。
可選的,在所述事件對應的備選子交易中,包含所述參與方對所述事件的單方觸發資訊;所述裝置還包括:
第二觸發單元1007,當所述事件的所有參與方分別向區塊鏈提交的針對所述事件的單方觸發資訊均通過驗證時,觸發執行所述事件對應的備選子交易。
可選的,還包括:
識別單元1008,識別所述集合交易對應的編號,所述編號被按照各個集合交易的產生順序而添加,以按照對應的編號大小對所述參與方提交的各個集合交易進行依次處理。
上述實施例闡明的系統、裝置、模組或單元,具體可以由電腦晶片或實體實現,或者由具有某種功能的產品來實現。一種典型的實現設備為電腦,電腦的具體形式可以是個人電腦、膝上型電腦、手機、相機電話、智慧型電話、個人數位助理、媒體播放機、導航設備、電子郵件收發設備、遊戲控制台、平板電腦、可穿戴設備或者這些設備中的任意幾種設備的組合。
在一個典型的配置中,電腦包括一個或多個處理器 (CPU)、輸入/輸出介面、網路介面和記憶體。
記憶體可能包括電腦可讀媒體中的非永久性記憶體,隨機存取記憶體(RAM)和/或非揮發性記憶體等形式,如唯讀記憶體(ROM)或快閃記憶體(flash RAM)。記憶體是電腦可讀媒體的示例。
電腦可讀媒體包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現資訊儲存。資訊可以是電腦可讀指令、資料結構、程式的模組或其他資料。電腦的儲存媒體的例子包括,但不限於相變記憶體(PRAM)、靜態隨機存取記憶體(SRAM)、動態隨機存取記憶體(DRAM)、其他類型的隨機存取記憶體(RAM)、唯讀記憶體(ROM)、電可擦除可程式設計唯讀記憶體(EEPROM)、快閃記憶體或其他記憶體技術、唯讀光碟唯讀記憶體(CD-ROM)、數位多功能光碟(DVD)或其他光學儲存、磁盒式磁帶、磁片儲存、量子記憶體、基於石墨烯的儲存媒體或其他磁性儲存設備或任何其他非傳輸媒體,可用於儲存可以被計算設備存取的資訊。按照本文中的界定,電腦可讀媒體不包括暫存電腦可讀媒體(transitory media),如調製的資料信號和載波。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,並不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
上述對本說明書特定實施例進行了描述。其它實施例在所附申請專利範圍的範圍內。在一些情況下,在權利要求書中記載的動作或步驟可以按照不同於實施例中的順序來執行並且仍然可以實現期望的結果。另外,在附圖中描繪的過程不一定要求示出的特定順序或者連續順序才能實現期望的結果。在某些實施方式中,多工處理和並行處理也是可以的或者可能是有利的。
在本說明書一個或多個實施例使用的術語是僅僅出於描述特定實施例的目的,而非旨在限制本說明書一個或多個實施例。在本說明書一個或多個實施例和所附申請專利範圍中所使用的單數形式的“一種”、“所述”和“該”也旨在包括多數形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“和/或”是指並包含一個或多個相關聯的列出專案的任何或所有可能組合。
應當理解,儘管在本說明書一個或多個實施例可能採用術語第一、第二、第三等來描述各種資訊,但這些資訊不應限於這些術語。這些術語僅用來將同一類型的資訊彼此區分開。例如,在不脫離本說明書一個或多個實施例範圍的情況下,第一資訊也可以被稱為第二資訊,類似地,第二資訊也可以被稱為第一資訊。取決於語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“回應於判定”。
以上所述僅為本說明書一個或多個實施例的較佳實施例而已,並不用以限制本說明書一個或多個實施例,凡在本說明書一個或多個實施例的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本說明書一個或多個實施例保護的範圍之內。
102,104,106,202,204,206,401,402a,402b,402c,403a,403b,403c,403d,404a,404b,404c,404d,405,406:步驟
702,902:處理器
704,904:內部匯流排
706,906:網路介面
708,908:記憶體
710,910:非揮發性記憶體
801:第一產生單元
802:第二產生單元
803:提交單元
804:識別單元
805:排列單元
806:第三產生單元
807:添加單元
1001:接收單元
1002:第一獲取單元
1003:判定單元
1004:第二獲取單元
1005:第三獲取單元
1006:第一觸發單元
1007:第二觸發單元
1008:識別單元
[圖1] 是一示例性實施例提供的一種基於區塊鏈的事件處理方法的流程圖。
[圖2] 是一示例性實施例提供的另一種基於區塊鏈的事件處理方法的流程圖。
[圖3] 是一示例性實施例提供的一種跨境匯款的場景示意圖。
[圖4] 是一示例性實施例的一種跨境匯款過程中的互動示意圖。
[圖5] 是一示例性實施例提供的一種區塊鏈交易的內容示意圖。
[圖6] 是一示例性實施例提供的一種統計觸發情況的示意圖。
[圖7] 是一示例性實施例提供的一種設備的結構示意圖。
[圖8] 是一示例性實施例提供的一種基於區塊鏈的事件處理裝置的方塊圖。
[圖9] 是一示例性實施例提供的另一種設備的結構示意圖。
[圖10] 是一示例性實施例提供的另一種基於區塊鏈的事件處理裝置的方塊圖。