這裡將詳細地對示例性實施例進行說明,其示例表示在圖式中。下面的描述涉及圖式時,除非另有表示,不同圖式中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式並不代表與本說明書一個或多個實施例相一致的所有實施方式。相反,它們僅是與如所附申請專利範圍中所詳述的、本說明書一個或多個實施例的一些方面相一致的裝置和方法的例子。
需要說明的是:在其他實施例中並不一定按照本說明書示出和描述的順序來執行相應方法的步驟。在一些其他實施例中,其方法所包括的步驟可以比本說明書所描述的更多或更少。此外,本說明書中所描述的單個步驟,在其他實施例中可能被分解為多個步驟進行描述;而本說明書中所描述的多個步驟,在其他實施例中也可能被合併為單個步驟進行描述。
圖1是一示例性實施例提供的一種基於區塊鏈的事件處理方法的流程圖。如圖1所示,該方法應用於參與方,可以包括以下步驟:
步驟102,根據所述參與方所參與的事件,向所述參與方維護的等待佇列中添加對應的備選子交易。
在一實施例中,事件存在多個參與方,每一參與方對應於參與物件,該參與物件可以為個人、企業、組織等,本說明書並不對此進行限制。參與物件存在對應的數位身份,使得承載該數位身份的電子設備相當於被配置為該參與物件所對應的參與方。
在一實施例中,本說明書的事件可以包括任意類型、覆蓋任意場景,比如投票、簽訂協定、流量分配、轉帳、跨境匯款等,本說明書並不對此進行限制。以投票為例,描述資訊可以包括投票事由和投票選項等資訊,而各個參與方向區塊鏈中提交的觸發資訊可以包括對投票選項的選擇結果,從而觸發完成投票操作。
在一實施例中,備選子交易中包含事件的描述資訊,該描述資訊用於描述相關事件的情況,使得該備選子交易被處理時,可以根據該描述資訊實施相應的事件。例如,描述資訊可以表徵相關事件的執行邏輯、所涉及的參與方、對參與方的狀態參數的改變方式(如增大或減小狀態參數的取值)、變化量等,本說明書並不對此進行限制。實際上,事件的相關內容可由各個參與方之間預先通過任意方式進行溝通,然後由所述任一參與方進行起草該事件的描述資訊,使得事件的其他參與方可以根據預先的溝通結果對該描述資訊的內容進行查看和確認;當然,所述任一參與方也可以在並未預先溝通的情況下,自行判定事件的其他參與方以及描述資訊中的其他內容,本說明書並不對此進行限制。
在一實施例中,事件的描述資訊可由該事件的任一參與方產生,並添加為該任一參與方維護的等待佇列中的備選子交易。以及,該任一參與方還將產生的描述資訊分享至其他參與方,使得其他參與方對描述資訊進行確認。
在一實施例中,任一參與方可以將描述資訊通過鏈外通道發送至事件的其他參與方。通過鏈外通道將描述資訊發送至事件的其他參與方,可以實現對描述資訊的高效傳輸。其中,鏈外通道可以為事件的各個參與方之間建立的加密通道或其他形式的秘密頻道,以避免發生資訊洩露。
在一實施例中,任一參與方可以通過向區塊鏈提交一筆交易,並將上述的描述資訊包含於該交易中,使得該交易在經過共識後可以被發送至區塊鏈中的所有區塊鏈節點;而事件的每一參與方均可以被配置為區塊鏈中的區塊鏈節點,或者每一參與方可以在區塊鏈中存在對應的區塊鏈節點,使得每一參與方可以通過自身或對應的區塊鏈節點所維護的區塊鏈帳本(區塊鏈帳本包含區塊鏈的全量交易資料),獲得上述交易及其包含的描述資訊,從而使得上述的描述資訊被同步至事件的其他參與方。
步驟104,根據從所述等待佇列中選取的若干備選子交易,產生相應的集合交易。
在一實施例中,集合交易中可以包含多個備選子交易,每一備選子交易分別對應於上述參與方所參與的一個事件,使得該集合交易被提交至區塊鏈後,所包含的多個備選子交易均可以在區塊鏈中被處理,從而使得這些備選子交易對應的多個事件被實施。可見,通過在集合交易中包含多個備選子交易,使得這些備選子交易被批量提交至區塊鏈,可以減少向區塊鏈提交的交易數量,無需針對每一備選子交易均產生一筆區塊鏈交易,有助於降低資源消耗、提升處理效率。
在一實施例中,可以在所述等待佇列中的備選子交易達到預設數量時,選取所述等待佇列中已存在的備選子交易(即預設數量的備選子交易),以產生相應的集合交易。在另一實施例中,可以按照預設時長週期性地選取所述等待佇列中已存在的備選子交易,以產生相應的集合交易;當然,每一集合交易的容量可以存在最大限制,使得同一週期內選取的備選子交易的數量存在相應的最大值,超出的部分可以延期至下一週期進行選取。當然,還可以通過其他的預設規則來選取備選子交易,本說明書並不對此進行限制。
在一實施例中,等待佇列中的備選子交易可以按照添加時刻進行依次排列,而每次可以從前向後依次選取各個備選子交易,使得在先產生的備選子交易可以被優先選取。當然,參與方也可以根據實際需求,比如事件的緊急程度、事件的優先順序等,對等待佇列中的備選子交易實施與順序無關的選取操作;或者,等待佇列本身就可以按照上述的緊急程度、優先順序等進行排列,這樣依然可以視為依次選取。
在一實施例中,參與方可以按照產生順序為各個合併交易添加編號,使各個合併交易在區塊鏈中被按照對應編號的大小進行依次處理。換言之,區塊鏈交易在收到參與方提交的合併交易後,需要讀取合併交易所包含的編號;如果編號與先前處理的合併交易的編號連續,比如最新處理的合併交易的編號為99、當前收到的合併交易的編號為100,則可以對該編號為100的合併交易進行處理;如果編號之間並不連續,比如最新處理的合併交易的編號為99、當前收到的合併交易的編號為101,則區塊鏈節點需要等待並優先處理編號為100的合併交易,然後才能處理編號為101的合併交易。由於每條交易被執行後都可能導致該參與方的狀態參數發生變化,而在後交易的執行需要依賴於先前交易執行後的狀態參數的取值,因而需要確保各個合併交易被按照對應編號的大小進行依次處理,以使得各個合併交易均能夠正確執行。
步驟106,將所述集合交易提交至區塊鏈,使所述集合交易中的備選子交易被分別予以處理。
在一實施例中,在所述事件對應的備選子交易中,包含所述事件的所有參與方對所述事件的多方觸發資訊;其中,當所述多方觸發資訊通過驗證時,所述事件對應的備選子交易在區塊鏈中被觸發執行。多方觸發資訊代表了事件的所有參與方對於描述資訊的認可,並希望觸發事件的執行。例如,事件的任一參與方產生描述資訊並發送至其他參與方後,其他參與方可以確認描述資訊的內容、通過自身的身份金鑰對描述資訊產生簽名並將該簽名返回至該任一參與方,而多方觸發資訊中可以包含描述資訊和事件的各個參與方分別產生的簽名;每一簽名屬於相應的參與方提供的確認資訊,而如果採用密文數值,該確認資訊還將包含對密文數值的證明資訊,這在下文中將詳細描述。總之,本實施例中由事件的任一參與方組織形成多方觸發資訊後,只需要將任一參與方向自身維護的等待佇列中添加相應的備選子交易,並向區塊鏈提交包含該備選子交易的集合交易,而其他參與方則不需要實施類似處理;相應地,區塊鏈節點可以在多方觸發資訊通過驗證後,針對該任一參與方提交的備選子交易進行處理。
在一實施例中,在事件對應的備選子交易中,包含所述參與方對所述事件的單方觸發資訊;其中,當所述事件的所有參與方分別向區塊鏈提交的針對所述事件的單方觸發資訊均通過驗證時,所述事件對應的備選子交易在區塊鏈中被觸發執行。單方觸發資訊表明相應的參與方對事件的描述資訊予以確認,希望觸發事件的執行;而事件的每一參與方都需要分別向區塊鏈提交單方觸發資訊,使得區塊鏈節點基於所有參與方分別提交的單方觸發資訊,判定是否應當執行相應的備選子交易所指示的事件。例如,事件的任一參與方產生描述資訊並提供至其他參與方後,不僅該任一參與方需要向自身維護的等待佇列中添加相應的備選子交易,每一其他參與方在對描述資訊予以確認後,也分別向自身維護的等待佇列中添加相應的備選子交易;以及,每一參與方分別基於自身維護的等待佇列產生集合交易,從而通過將集合交易提交至區塊鏈,使得上述的單方觸發資訊被提交至區塊鏈,以供區塊鏈節點進行驗證。單方觸發資訊中可以包含描述資訊和相應參與方對描述資訊產生的簽名;簽名屬於相應參與方提供的確認資訊,而如果採用密文數值,確認資訊還包含證明資訊,這在下文中將詳細描述。通過由各個參與方分別向區塊鏈提交單方觸發資訊,而非某一參與方提交多方觸發資訊,不僅可以對處理壓力進行分擔、防止單個參與方的處理壓力過大,還可使各個參與方根據自身的實際情況(如處理壓力、優先順序管理等)對所參與的各個事件進行選擇性地處理甚至批量處理。
在一實施例中,事件的描述資訊可以包括變化量,而所述事件可以用於使各個參與方在區塊鏈上對應記錄的狀態參數按照所述變化量發生取值變化,比如增大取值、減小取值等。其中,根據事件的類型或場景差異,相應的狀態參數也可能不同,比如轉帳或跨境匯款場景下的狀態參數可以為參與方的帳戶餘額,再比如流量分配場景下的狀態參數可以為參與方持有的剩餘流量的數額,本說明書並不對此進行限制。
在一實施例中,各個參與方對應的狀態參數的取值、所述變化量可以為明文數值。區塊鏈中的區塊鏈節點分別維護有區塊鏈帳本,該區塊鏈帳本中記錄有全量交易資料,使得區塊鏈節點可以獲知各個參與方對應的狀態參數的取值;進一步地,所述任一參與方可以向區塊鏈提交一筆交易,該交易包含上述的觸發資訊,使得該交易經過共識後可以被基於所述任一參與方對應的狀態參數的取值、上述的變化量而執行,使得該任一參與方對應的狀態參數可以基於該變化量而實現取值變化。
在一實施例中,各個參與方對應的狀態參數的取值、所述變化量分別為基於同態加密演算法或同態承諾演算法計算得到的密文數值。對於同態加密演算法而言,可以採用任意類型的同態加密演算法,只要確保該同態加密演算法能夠滿足加法同態,使得即便處於密文狀態下,仍然能夠使得狀態參數的取值增加或減少該變化量;對於該同態加密演算法為加法同態加密演算法或全同態加密演算法,本說明書並不對此進行限制。對於同態承諾演算法而言,當採用相關技術中的Pedersen承諾機制時,可以為未加密資料判定一亂數,並基於該亂數與未加密資料進行計算得到相應的承諾資料,該承諾資料可以被作為上述的密文數值。
在一實施例中,當狀態參數的取值、變化量為密文數值時,參與方需要提供相關的證明資訊,以使得區塊鏈節點在執行相關交易時,能夠判定交易的合法有效性。例如,參與方需要給出對變化量的證明,以表明該變化量處於正確數值區間,譬如[0,264
)。再例如,當事件用於使得某一參與方對應的狀態參數按照該變化量發生取值減小時,即交易目的是使得該某一參與方的狀態參數的取值減小該變化量,該某一參與方需要給出對狀態參數的取值與變化量的證明,以表明狀態參數的取值不小於取值減小量(該取值減小量與上述的變化量等值)。
在一實施例中,可以採用相關技術中的區間證明(Range Proof)技術,譬如Bulletproofs方案或Borromean環簽名方案等,產生上述的證明資訊,本說明書並不對此進行限制。
在一實施例中,任一參與方在產生描述資訊時,該描述資訊中的變化量可以為密文數值。比如當變化量的明文數值為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),本說明書並不對此進行限制。
在一實施例中,針對描述資訊中包含的密文狀態的變化量,集合交易中可以包括第一證明資訊,該第一證明資訊用於證明所述變化量處於正確數值區間。當任一參與方產生事件的描述資訊時,該任一參與方還可以產生第一證明資訊,使得無論是產生多方觸發資訊或單方觸發資訊,均不需要其他參與方針對該變化量的取值而產生其他的證明資訊。當然,每一參與方也可以分別為對應的變化量(各個參與方對應的變化量可能不同;例如在跨境匯款場景中,可能基於不同貨幣類型而導致變化量的取值存在差異)產生第一證明資訊,本說明書並不對此進行限制。
在一實施例中,如果所述事件用於使事件的某一參與方(可能存在多個類似的參與方)對應的狀態參數按照所述變化量發生取值減小,那麼集合交易中需要包含第二證明資訊,該第二證明資訊用於證明該某一參與方對應的狀態參數的取值不小於取值減小量。對於多方觸發資訊而言,事件的每一參與方可以在判定自身的狀態參數會按照所述變化量發生取值減小的情況下,分別產生相應的第二證明資訊並提供至上述的任一參與方,由該任一參與方組織形成多方觸發資訊;或者,可以統一由該任一參與方產生第二證明資訊,無需各個參與方單獨產生。對於單方觸發資訊而言,可由產生該單方觸發資訊的參與方為自身產生第二證明資訊。
在一實施例中,當某一參與方為自身產生第二證明資訊時,該參與方首先根據自身參與的其他事件,對自身對應的狀態參數進行取值更新,然後根據取值更新後的狀態參數產生第二證明資訊。例如,當狀態參數的取值、變化量為密文數值,且所述事件用於使得該參與方對應的狀態參數按照該變化量發生取值減小時,該參與方需要根據先前已處理的交易,判定自身對應的狀態參數的取值,從而產生正確的第二證明資訊,以確保相關事件能夠被順利執行。
例如,區塊鏈節點在收到各個參與方提交的集合交易後,提取集合交易中包含的備選子交易,並針對備選子交易包含的觸發資訊(多方觸發資訊或單方觸發資訊)進行確認和驗證。當多方觸發資訊包含事件的所有參與方分別對應的確認資訊,或者該事件的所有參與方均已提交了相應的單方觸發資訊(每一單方觸發資訊分別包含相應參與方的確認資訊)時,如果該多方觸發資訊或所有的單方觸發資訊均已通過驗證,那麼可以將該事件標記為成功狀態;類似地,可以將未通過驗證的事件標記為失敗狀態,將未在有效時間段內收到所有參與方對應的確認資訊的事件標記為超時狀態等,然後將各個事件的狀態提交至區塊鏈中。以事件的某一參與方為例,該參與方在提交集合交易之前,可以通過查詢區塊鏈帳本上的交易記錄,判定自身參與的各個事件的狀態,比如對於失敗狀態或超時狀態的交易,需要對狀態參數的取值進行相應的恢復(比如該參與方為匯款方時,需要對相應的帳戶餘額進行回滾),對於成功狀態的交易需要更新狀態參數(比如該參與方為收款方時,需要對相應的轉帳金額進行收款、增加至帳戶餘額中),然後根據狀態參數的更新後取值,產生相關事件的第二證明資訊(確保第二證明資訊是基於狀態參數的最新取值而產生),然後產生並提交上述集合交易。
在一實施例中,當所述事件包括轉帳事件時,所述事件的參與方包括:匯款方和收款方,所述變化量包括:轉帳額,所述狀態參數包括:帳戶餘額;換言之,相當於從匯款方向收款方實施轉帳操作,使得匯款方的帳戶餘額減少相應的轉帳額、收款方的帳戶餘額增加相應的轉帳額。例如,描述資訊中可以包含匯款方的帳戶位址、收款方的帳戶地址、轉帳額(承諾值)、轉帳額明文(加密狀態)、亂數(加密狀態)等,以表明從匯款方的帳戶地址向收款方的帳戶地址轉移該轉帳額。
在一實施例中,當所述事件包括第一匯款事件時,所述事件的參與方包括:匯款方、中繼方、收款方,所述變化量包括:所述匯款方與所述中繼方之間基於第一類型資產的第一轉帳額、所述中繼方與所述收款方之間基於第二類型資產的第二轉帳額,所述狀態參數包括:帳戶餘額;換言之,相當於在匯款方與中繼方之間轉移第一類型的資產(如港幣)、資產額為第一轉帳額,並且在中繼方與收款方之間轉移第二類型的資產(如美元)、資產額為第二轉帳額,且根據第一類型與第二類型的資產之間的匯率,使得第一轉帳額與第二轉帳額對應的資產價值基本一致,那麼最終相當於匯款方的帳戶餘額減少了第一轉帳額(第一類型的資產)、收款方的帳戶餘額增加了第二轉帳額(第二類型的資產),而中繼方的帳戶餘額增加了第一轉帳額(第一類型的資產)且減少了第二轉帳額(第二類型的資產)、在資產價值上相當於未發生變化。
在一實施例中,當所述事件包括第二匯款事件時,所述事件的參與方包括:匯款方、n個中繼方、收款方,所述變化量包括:所述匯款方與第1個中繼方之間基於第一類型資產的轉帳額、第i-1個中繼方與第i個中繼方之間基於第i類型資產的轉帳額、第n個中繼方與所述收款方之間基於第n+1類型資產的轉帳額,所述狀態參數包括:帳戶餘額;其中,1<i≤n。當n=1時,本實施例的第二匯款事件相當於上述實施例的第一匯款事件,此處不再贅述。當n>1時,由於存在多個中繼方,因而相比於上述實施例的第一匯款事件而言,還包含多個中繼方之間的資產轉移過程;以n=2為例,事件的參與方包括匯款方、中繼方1、中繼方2、收款方,其中:在匯款方與中繼方1之間轉移第一類型的資產(如港幣)、資產額為第一轉帳額,在中繼方1與中繼方2之間轉移第二類型的資產(如歐元)、資產額為第二轉帳額,在中繼方2與收款方之間轉移第三類型的資產(如美元)、資產額為第三轉帳額,且根據第一類型與第二類型的資產之間的匯率1、第二類型與第三類型的資產之間的匯率2,使得第一轉帳額、第二轉帳額與第三轉帳額對應的資產價值基本一致,那麼最終相當於匯款方的帳戶餘額減少了第一轉帳額(第一類型的資產)、收款方的帳戶餘額增加了第三轉帳額(第三類型的資產),而中繼方1的帳戶餘額增加了第一轉帳額(第一類型的資產)且減少了第二轉帳額(第二類型的資產)、在資產價值上相當於未發生變化,中繼方2的帳戶餘額增加了第二轉帳額(第二類型的資產)且減少了第三轉帳額(第三類型的資產)、在資產價值上相當於未發生變化。
在一實施例中,當狀態參數的取值、變化量採用密文數值時,所述集合交易中包含的備選子交易還設定有變化前狀態值、變化後狀態值,使得所述備選子交易被處理後,所述參與方的狀態參數由所述變化前狀態值經由所述狀態變化量而變化至所述變化後狀態值;其中,所述狀態變化量、所述變化前狀態值和所述變化後狀態值分別為基於同態加密演算法或同態承諾演算法計算得到的密文數值。相應地,當區塊鏈節點對集合交易中包含的各個備選子交易進行驗證時,需要確保相鄰的備選子交易滿足:前一備選子交易對應的變化後狀態值與後一備選子交易對應的變化前狀態值相同,否則將判定為驗證失敗。
與圖1所示實施例相對應地,圖2是一示例性實施例提供的另一種基於區塊鏈的事件處理方法的流程圖。如圖2所示,該方法應用於區塊鏈節點,可以包括以下步驟:
步驟202,接收參與方提交至區塊鏈的集合交易,所述集合交易中包含從所述參與方維護的等待佇列中選取的若干備選子交易,所述備選子交易對應於所述參與方所參與的事件。
在一實施例中,事件存在多個參與方,每一參與方對應於參與物件,該參與物件可以為個人、企業、組織等,本說明書並不對此進行限制。參與物件存在對應的數位身份,使得承載該數位身份的電子設備相當於被配置為該參與物件所對應的參與方。
在一實施例中,本說明書的事件可以包括任意類型、覆蓋任意場景,比如投票、簽訂協定、流量分配、轉帳、跨境匯款等,本說明書並不對此進行限制。以投票為例,描述資訊可以包括投票事由和投票選項等資訊,而各個參與方向區塊鏈中提交的觸發資訊可以包括對投票選項的選擇結果,從而觸發完成投票操作。
在一實施例中,備選子交易中包含事件的描述資訊,該描述資訊用於描述相關事件的情況,使得該備選子交易被處理時,可以根據該描述資訊實施相應的事件。例如,描述資訊可以表徵相關事件的執行邏輯、所涉及的參與方、對參與方的狀態參數的改變方式(如增大或減小狀態參數的取值)、變化量等,本說明書並不對此進行限制。實際上,事件的相關內容可由各個參與方之間預先通過任意方式進行溝通,然後由所述任一參與方進行起草該事件的描述資訊,使得事件的其他參與方可以根據預先的溝通結果對該描述資訊的內容進行查看和確認;當然,所述任一參與方也可以在並未預先溝通的情況下,自行判定事件的其他參與方以及描述資訊中的其他內容,本說明書並不對此進行限制。
在一實施例中,事件的描述資訊可由該事件的任一參與方產生,並添加為該任一參與方維護的等待佇列中的備選子交易。以及,該任一參與方還將產生的描述資訊分享至其他參與方,使得其他參與方對描述資訊進行確認。
在一實施例中,任一參與方可以將描述資訊通過鏈外通道發送至事件的其他參與方。通過鏈外通道將描述資訊發送至事件的其他參與方,可以實現對描述資訊的高效傳輸。其中,鏈外通道可以為事件的各個參與方之間建立的加密通道或其他形式的秘密頻道,以避免發生資訊洩露。
在一實施例中,任一參與方可以通過向區塊鏈提交一筆交易,並將上述的描述資訊包含於該交易中,使得該交易在經過共識後可以被發送至區塊鏈中的所有區塊鏈節點;而事件的每一參與方均可以被配置為區塊鏈中的區塊鏈節點,或者每一參與方可以在區塊鏈中存在對應的區塊鏈節點,使得每一參與方可以通過自身或對應的區塊鏈節點所維護的區塊鏈帳本(區塊鏈帳本包含區塊鏈的全量交易資料),獲得上述交易及其包含的描述資訊,從而使得上述的描述資訊被同步至事件的其他參與方。
在一實施例中,集合交易中可以包含多個備選子交易,每一備選子交易分別對應於上述參與方所參與的一個事件,使得該集合交易被提交至區塊鏈後,所包含的多個備選子交易均可以在區塊鏈中被處理,從而使得這些備選子交易對應的多個事件被實施。可見,通過在集合交易中包含多個備選子交易,使得這些備選子交易被批量提交至區塊鏈,可以減少向區塊鏈提交的交易數量,無需針對每一備選子交易均產生一筆區塊鏈交易,有助於降低資源消耗、提升處理效率。
在一實施例中,可以在所述等待佇列中的備選子交易達到預設數量時,選取所述等待佇列中已存在的備選子交易(即預設數量的備選子交易),以產生相應的集合交易。在另一實施例中,可以按照預設時長週期性地選取所述等待佇列中已存在的備選子交易,以產生相應的集合交易;當然,每一集合交易的容量可以存在最大限制,使得同一週期內選取的備選子交易的數量存在相應的最大值,超出的部分可以延期至下一週期進行選取。當然,還可以通過其他的預設規則來選取備選子交易,本說明書並不對此進行限制。
在一實施例中,等待佇列中的備選子交易可以按照添加時刻進行依次排列,而每次可以從前向後依次選取各個備選子交易,使得在先產生的備選子交易可以被優先選取。當然,參與方也可以根據實際需求,比如事件的緊急程度、事件的優先順序等,對等待佇列中的備選子交易實施與順序無關的選取操作;或者,等待佇列本身就可以按照上述的緊急程度、優先順序等進行排列,這樣依然可以視為依次選取。
在一實施例中,參與方可以按照產生順序為各個合併交易添加編號,使各個合併交易在區塊鏈中被按照對應編號的大小進行依次處理。換言之,區塊鏈交易在收到參與方提交的合併交易後,需要讀取合併交易所包含的編號;如果編號與先前處理的合併交易的編號連續,比如最新處理的合併交易的編號為99、當前收到的合併交易的編號為100,則可以對該編號為100的合併交易進行處理;如果編號之間並不連續,比如最新處理的合併交易的編號為99、當前收到的合併交易的編號為101,則區塊鏈節點需要等待並優先處理編號為100的合併交易,然後才能處理編號為101的合併交易。由於每條交易被執行後都可能導致該參與方的狀態參數發生變化,而在後交易的執行需要依賴於先前交易執行後的狀態參數的取值,因而需要確保各個合併交易被按照對應編號的大小進行依次處理,以使得各個合併交易均能夠正確執行。
步驟204,執行所述集合交易,以對所述集合交易中的備選子交易分別予以處理。
在一實施例中,在所述事件對應的備選子交易中,包含所述事件的所有參與方對所述事件的多方觸發資訊;其中,當所述多方觸發資訊通過驗證時,所述事件對應的備選子交易在區塊鏈中被觸發執行。多方觸發資訊代表了事件的所有參與方對於描述資訊的認可,並希望觸發事件的執行。例如,事件的任一參與方產生描述資訊並發送至其他參與方後,其他參與方可以確認描述資訊的內容、通過自身的身份金鑰對描述資訊產生簽名並將該簽名返回至該任一參與方,而多方觸發資訊中可以包含描述資訊和事件的各個參與方分別產生的簽名;每一簽名屬於相應的參與方提供的確認資訊,而如果採用密文數值,該確認資訊還將包含對密文數值的證明資訊,這在下文中將詳細描述。總之,本實施例中由事件的任一參與方組織形成多方觸發資訊後,只需要將任一參與方向自身維護的等待佇列中添加相應的備選子交易,並向區塊鏈提交包含該備選子交易的集合交易,而其他參與方則不需要實施類似處理;相應地,區塊鏈節點可以在多方觸發資訊通過驗證後,針對該任一參與方提交的備選子交易進行處理。
在一實施例中,在事件對應的備選子交易中,包含所述參與方對所述事件的單方觸發資訊;其中,當所述事件的所有參與方分別向區塊鏈提交的針對所述事件的單方觸發資訊均通過驗證時,所述事件對應的備選子交易在區塊鏈中被觸發執行。單方觸發資訊表明相應的參與方對事件的描述資訊予以確認,希望觸發事件的執行;而事件的每一參與方都需要分別向區塊鏈提交單方觸發資訊,使得區塊鏈節點基於所有參與方分別提交的單方觸發資訊,判定是否應當執行相應的備選子交易所指示的事件。例如,事件的任一參與方產生描述資訊並提供至其他參與方後,不僅該任一參與方需要向自身維護的等待佇列中添加相應的備選子交易,每一其他參與方在對描述資訊予以確認後,也分別向自身維護的等待佇列中添加相應的備選子交易;以及,每一參與方分別基於自身維護的等待佇列產生集合交易,從而通過將集合交易提交至區塊鏈,使得上述的單方觸發資訊被提交至區塊鏈,以供區塊鏈節點進行驗證。單方觸發資訊中可以包含描述資訊和相應參與方對描述資訊產生的簽名;簽名屬於相應參與方提供的確認資訊,而如果採用密文數值,確認資訊還包含證明資訊,這在下文中將詳細描述。通過由各個參與方分別向區塊鏈提交單方觸發資訊,而非某一參與方提交多方觸發資訊,不僅可以對處理壓力進行分擔、防止單個參與方的處理壓力過大,還可使各個參與方根據自身的實際情況(如處理壓力、優先順序管理等)對所參與的各個事件進行選擇性地處理甚至批量處理。
在一實施例中,事件的描述資訊可以包括變化量,而所述事件可以用於使各個參與方在區塊鏈上對應記錄的狀態參數按照所述變化量發生取值變化,比如增大取值、減小取值等。其中,根據事件的類型或場景差異,相應的狀態參數也可能不同,比如轉帳或跨境匯款場景下的狀態參數可以為參與方的帳戶餘額,再比如流量分配場景下的狀態參數可以為參與方持有的剩餘流量的數額,本說明書並不對此進行限制。
在一實施例中,各個參與方對應的狀態參數的取值、所述變化量可以為明文數值。區塊鏈中的區塊鏈節點分別維護有區塊鏈帳本,該區塊鏈帳本中記錄有全量交易資料,使得區塊鏈節點可以獲知各個參與方對應的狀態參數的取值;進一步地,所述任一參與方可以向區塊鏈提交一筆交易,該交易包含上述的觸發資訊,使得該交易經過共識後可以被基於所述任一參與方對應的狀態參數的取值、上述的變化量而執行,使得該任一參與方對應的狀態參數可以基於該變化量而實現取值變化。
在一實施例中,各個參與方對應的狀態參數的取值、所述變化量分別為基於同態加密演算法或同態承諾演算法計算得到的密文數值。對於同態加密演算法而言,可以採用任意類型的同態加密演算法,只要確保該同態加密演算法能夠滿足加法同態,使得即便處於密文狀態下,仍然能夠使得狀態參數的取值增加或減少該變化量;對於該同態加密演算法為加法同態加密演算法或全同態加密演算法,本說明書並不對此進行限制。對於同態承諾演算法而言,當採用相關技術中的Pedersen承諾機制時,可以為未加密資料判定一亂數,並基於該亂數與未加密資料進行計算得到相應的承諾資料,該承諾資料可以被作為上述的密文數值。
在一實施例中,當狀態參數的取值、變化量為密文數值時,參與方需要提供相關的證明資訊,以使得區塊鏈節點在執行相關交易時,能夠判定交易的合法有效性。例如,參與方需要給出對變化量的證明,以表明該變化量處於正確數值區間,譬如[0,264
)。再例如,當事件用於使得某一參與方對應的狀態參數按照該變化量發生取值減小時,即交易目的是使得該某一參與方的狀態參數的取值減小該變化量,該某一參與方需要給出對狀態參數的取值與變化量的證明,以表明狀態參數的取值不小於取值減小量(該取值減小量與上述的變化量等值)。
在一實施例中,可以採用相關技術中的區間證明(Range Proof)技術,譬如Bulletproofs方案或Borromean環簽名方案等,產生上述的證明資訊,本說明書並不對此進行限制。
在一實施例中,任一參與方在產生描述資訊時,該描述資訊中的變化量可以為密文數值。比如當變化量的明文數值為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),本說明書並不對此進行限制。
在一實施例中,針對描述資訊中包含的密文狀態的變化量,集合交易中可以包括第一證明資訊,該第一證明資訊用於證明所述變化量處於正確數值區間。當任一參與方產生事件的描述資訊時,該任一參與方還可以產生第一證明資訊,使得無論是產生多方觸發資訊或單方觸發資訊,均不需要其他參與方針對該變化量的取值而產生其他的證明資訊。當然,每一參與方也可以分別為對應的變化量(各個參與方對應的變化量可能不同;例如在跨境匯款場景中,可能基於不同貨幣類型而導致變化量的取值存在差異)產生第一證明資訊,本說明書並不對此進行限制。
在一實施例中,如果所述事件用於使事件的某一參與方(可能存在多個類似的參與方)對應的狀態參數按照所述變化量發生取值減小,那麼集合交易中需要包含第二證明資訊,該第二證明資訊用於證明該某一參與方對應的狀態參數的取值不小於取值減小量。對於多方觸發資訊而言,事件的每一參與方可以在判定自身的狀態參數會按照所述變化量發生取值減小的情況下,分別產生相應的第二證明資訊並提供至上述的任一參與方,由該任一參與方組織形成多方觸發資訊;或者,可以統一由該任一參與方產生第二證明資訊,無需各個參與方單獨產生。對於單方觸發資訊而言,可由產生該單方觸發資訊的參與方為自身產生第二證明資訊。
在一實施例中,當某一參與方為自身產生第二證明資訊時,該參與方首先根據自身參與的其他事件,對自身對應的狀態參數進行取值更新,然後根據取值更新後的狀態參數產生第二證明資訊。例如,當狀態參數的取值、變化量為密文數值,且所述事件用於使得該參與方對應的狀態參數按照該變化量發生取值減小時,該參與方需要根據先前已處理的交易,判定自身對應的狀態參數的取值,從而產生正確的第二證明資訊,以確保相關事件能夠被順利執行。
例如,區塊鏈節點在收到各個參與方提交的集合交易後,提取集合交易中包含的備選子交易,並針對備選子交易包含的觸發資訊(多方觸發資訊或單方觸發資訊)進行確認和驗證。當多方觸發資訊包含事件的所有參與方分別對應的確認資訊,或者該事件的所有參與方均已提交了相應的單方觸發資訊(每一單方觸發資訊分別包含相應參與方的確認資訊)時,如果該多方觸發資訊或所有的單方觸發資訊均已通過驗證,那麼可以將該事件標記為成功狀態;類似地,可以將未通過驗證的事件標記為失敗狀態,將未在有效時間段內收到所有參與方對應的確認資訊的事件標記為超時狀態等,然後將各個事件的狀態提交至區塊鏈中。以事件的某一參與方為例,該參與方在提交集合交易之前,可以通過查詢區塊鏈帳本上的交易記錄,判定自身參與的各個事件的狀態,比如對於失敗狀態或超時狀態的交易,需要對狀態參數的取值進行相應的恢復(比如該參與方為匯款方時,需要對相應的帳戶餘額進行回滾),對於成功狀態的交易需要更新狀態參數(比如該參與方為收款方時,需要對相應的轉帳金額進行收款、增加至帳戶餘額中),然後根據狀態參數的更新後取值,產生相關事件的第二證明資訊(確保第二證明資訊是基於狀態參數的最新取值而產生),然後產生並提交上述集合交易。
在一實施例中,當所述事件包括轉帳事件時,所述事件的參與方包括:匯款方和收款方,所述變化量包括:轉帳額,所述狀態參數包括:帳戶餘額;換言之,相當於從匯款方向收款方實施轉帳操作,使得匯款方的帳戶餘額減少相應的轉帳額、收款方的帳戶餘額增加相應的轉帳額。例如,描述資訊中可以包含匯款方的帳戶位址、收款方的帳戶地址、轉帳額(承諾值)、轉帳額明文(加密狀態)、亂數(加密狀態)等,以表明從匯款方的帳戶地址向收款方的帳戶地址轉移該轉帳額。
在一實施例中,當所述事件包括第一匯款事件時,所述事件的參與方包括:匯款方、中繼方、收款方,所述變化量包括:所述匯款方與所述中繼方之間基於第一類型資產的第一轉帳額、所述中繼方與所述收款方之間基於第二類型資產的第二轉帳額,所述狀態參數包括:帳戶餘額;換言之,相當於在匯款方與中繼方之間轉移第一類型的資產(如港幣)、資產額為第一轉帳額,並且在中繼方與收款方之間轉移第二類型的資產(如美元)、資產額為第二轉帳額,且根據第一類型與第二類型的資產之間的匯率,使得第一轉帳額與第二轉帳額對應的資產價值基本一致,那麼最終相當於匯款方的帳戶餘額減少了第一轉帳額(第一類型的資產)、收款方的帳戶餘額增加了第二轉帳額(第二類型的資產),而中繼方的帳戶餘額增加了第一轉帳額(第一類型的資產)且減少了第二轉帳額(第二類型的資產)、在資產價值上相當於未發生變化。
在一實施例中,當所述事件包括第二匯款事件時,所述事件的參與方包括:匯款方、n個中繼方、收款方,所述變化量包括:所述匯款方與第1個中繼方之間基於第一類型資產的轉帳額、第i-1個中繼方與第i個中繼方之間基於第i類型資產的轉帳額、第n個中繼方與所述收款方之間基於第n+1類型資產的轉帳額,所述狀態參數包括:帳戶餘額;其中,1<i≤n。當n=1時,本實施例的第二匯款事件相當於上述實施例的第一匯款事件,此處不再贅述。當n>1時,由於存在多個中繼方,因而相比於上述實施例的第一匯款事件而言,還包含多個中繼方之間的資產轉移過程;以n=2為例,事件的參與方包括匯款方、中繼方1、中繼方2、收款方,其中:在匯款方與中繼方1之間轉移第一類型的資產(如港幣)、資產額為第一轉帳額,在中繼方1與中繼方2之間轉移第二類型的資產(如歐元)、資產額為第二轉帳額,在中繼方2與收款方之間轉移第三類型的資產(如美元)、資產額為第三轉帳額,且根據第一類型與第二類型的資產之間的匯率1、第二類型與第三類型的資產之間的匯率2,使得第一轉帳額、第二轉帳額與第三轉帳額對應的資產價值基本一致,那麼最終相當於匯款方的帳戶餘額減少了第一轉帳額(第一類型的資產)、收款方的帳戶餘額增加了第三轉帳額(第三類型的資產),而中繼方1的帳戶餘額增加了第一轉帳額(第一類型的資產)且減少了第二轉帳額(第二類型的資產)、在資產價值上相當於未發生變化,中繼方2的帳戶餘額增加了第二轉帳額(第二類型的資產)且減少了第三轉帳額(第三類型的資產)、在資產價值上相當於未發生變化。
在一實施例中,當狀態參數的取值、變化量採用密文數值時,所述集合交易中包含的備選子交易還設定有變化前狀態值、變化後狀態值,使得所述備選子交易被處理後,所述參與方的狀態參數由所述變化前狀態值經由所述狀態變化量而變化至所述變化後狀態值;其中,所述狀態變化量、所述變化前狀態值和所述變化後狀態值分別為基於同態加密演算法或同態承諾演算法計算得到的密文數值。相應地,當區塊鏈節點對集合交易中包含的各個備選子交易進行驗證時,需要確保相鄰的備選子交易滿足:前一備選子交易對應的變化後狀態值與後一備選子交易對應的變化前狀態值相同,否則將判定為驗證失敗。
為了便於理解,下面以跨境匯款場景為例,對本說明書一個或多個實施例的技術方案進行說明。基於本說明書的技術方案,每一機構可以分別對自身所參與的若干匯款交易(相當於上述的備選子交易)合併為一筆區塊鏈交易(相當於上述的集合交易),並通過向區塊鏈提交該區塊鏈交易,實現對若干匯款交易的批量提交和處理。下面將首先對單筆匯款交易的產生與處理過程進行描述,然後擴展至多筆匯款交易的批量處理。
圖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處於正確數值區間,比如1≤t1<264
、1≤t2<264
、1≤t3<264
。其中,設備1可以通過相關技術中的零知識證明技術產生上述的區間證明,本說明書並不對此進行限制。
而如果採用明文數值,那麼在匯款交易tx_i的匯款交易詳情中,上述與交易金額相關的密文資訊可以被替換為與交易金額相關的明文資訊,比如{(currency_1, t1), (currency_2, t2), (currency_3, t3), rate1, rate2, time, …},且無需包含上述的區間證明RP_t1、RP_t2、RP_t3等內容。
步驟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返回確認回應、以表明接受相應的匯款交易。
當然,如果採用明文數值,那麼可以省略上述的解密、承諾值驗證、區間證明驗證等操作,比如僅對各個參與方的區塊鏈帳戶的地址、t1、t2、t3、rate1、rate2的取值進行核對。
步驟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每次選取4個匯款交易並聚合為一筆區塊鏈交易,比如匯款交易tx_11、tx_12、tx_13、tx_14被聚合為區塊鏈交易TX_1,匯款交易tx_21、tx_22、tx_23、tx_24被聚合為區塊鏈交易TX_2,匯款交易tx_31、tx_32、tx_33、tx_34被聚合為區塊鏈交易TX_3。在設備1產生的每一區塊鏈交易中,分別包含設備1設定的順序編號seq和與各個匯款交易相關的資訊。
順序編號seq與各個區塊鏈交易的產生順序相關。比如區塊鏈交易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。
與各個匯款交易相關的資訊可以包括:區塊鏈交易的起始狀態餘額、區塊鏈交易的結束狀態餘額、每一匯款交易的起始狀態餘額、每一匯款交易的交易額、每一匯款交易的結束狀態(即臨時狀態)餘額、每一匯款交易的證明資訊等。
以區塊鏈交易TX_1為例。區塊鏈交易TX_1的起始狀態餘額為PC(100)、區塊鏈交易TX_1結束狀態餘額為PC(80)、匯款交易tx_11的起始狀態餘額為PC(100)、匯款交易tx_11的交易額為待匯入的PC(10)、匯款交易tx_11的結束狀態餘額為PC(110)、匯款交易tx_11的證明資訊包括PC(10)、PC(110)分別屬於正確數值區間的區間證明,匯款交易tx_12~tx_14的相關內容可以參考圖5,此處不再一一例舉。
需要指出的是:當機構1在該區塊鏈交易中包含的若干匯款交易中作為匯款方或中繼方時,機構1會將自身對應的區塊鏈帳戶Y1的帳戶餘額減去對應的轉帳金額(匯款方僅轉出資金;中繼方既可接收轉入資金又需要轉出資金,這裡是針對轉出資金的操作而描述),並基於更新後的匯款金額繼續參與後續的匯款交易。當該區塊鏈交易被提交至區塊鏈後,如果機構1作為匯款方或中繼方的某一匯款交易成功執行,機構1無需調整區塊鏈帳戶Y1;如果機構1作為匯款方或中繼方的某一匯款交易未成功執行,機構1需要對區塊鏈帳戶Y1的帳戶餘額進行回滾調節。而當上述的區塊鏈交易中包含機構1作為收款方或中繼方(收款方僅轉入資金;中繼方既可接收轉入資金又需要轉出資金,這裡是針對轉入資金的操作而描述)的匯款交易時,如果該匯款交易成功執行,機構1需要向區塊鏈帳戶Y1中增加相應資金、實現收款,如果匯款交易未成功執行,機構1無需調整區塊鏈帳戶Y1。相應地,區塊鏈節點在收到並處理設備1提交的區塊鏈交易時,可以針對區塊鏈交易所包含的匯款交易是否能夠成功執行,對各個匯款交易進行狀態標記,比如交易為成功狀態、失敗狀態、超時狀態等。
因此,對於上述“區塊鏈交易TX_1的起始狀態餘額為PC(100)”而言,設備1在聚合產生區塊鏈交易TX_1時,並不直接將區塊鏈帳戶Y1的餘額取值設定為區塊鏈交易TX_1的起始狀態餘額,而是需要先判定出設備1先前提交的區塊鏈交易中可能造成金額變化的匯款交易,包括:機構1作為中繼方或收款方的匯款交易被標記為成功狀態時產生的金額增加(收款)、機構1作為匯款方或中繼方的匯款交易被標記為失敗狀態或超時狀態時產生的金額增加(對已扣除的轉帳金額進行回滾)等。以及,設備1進一步根據區塊鏈帳戶Y1的餘額取值(已扣除先前提交的匯款交易的轉帳金額、尚未收款)與上述可能造成金額變化的匯款交易實際產生的金額變化值,計算得到相應的起始狀態餘額為PC(100);同樣,設備1應當基於該起始狀態餘額PC(100),分別為區塊鏈交易TX_1包含的各個匯款交易產生相應的區間證明。
再例如,圖6是一示例性實施例提供的一種基於明文數值的區塊鏈交易內容的示意圖。如圖6所示,假定設備1每次選取4個匯款交易並聚合為一筆區塊鏈交易,比如匯款交易tx_11、tx_12、tx_13、tx_14被聚合為區塊鏈交易TX_1,匯款交易tx_21、tx_22、tx_23、tx_24被聚合為區塊鏈交易TX_2,匯款交易tx_31、tx_32、tx_33、tx_34被聚合為區塊鏈交易TX_3。在設備1產生的每一區塊鏈交易中,分別包含設備1設定的順序編號seq和與各個匯款交易相關的資訊。
其中,順序編號seq的作用與圖5所示實施例相同,此處不再贅述。與各個匯款交易相關的資訊可以包括:區塊鏈交易的起始狀態餘額、區塊鏈交易的結束狀態餘額、每一匯款交易的交易額;而由於採用明文資料的原因,因此不再需要圖5所示實施例中的每一匯款交易的起始狀態餘額、每一匯款交易的結束狀態(即臨時狀態)餘額、每一匯款交易的證明資訊等內容,區塊鏈節點直接根據各個明文數值進行比較或計算即可。
步驟404b-c,設備2-3根據本地佇列2-3中的匯款交易,分別聚合產生交易TX_b、TX_c,並在簽名後分別提交至區塊鏈。
在一實施例中,與設備1相類似的,設備2可以從本地佇列2中選取一個或多個匯款交易,以聚合產生相應的區塊鏈交易。假定設備2在某一次選取的匯款交易中包含上述的匯款交易tx_i,並據此產生了相應的區塊鏈交易TX_b。
在一實施例中,與設備1相類似的,設備3可以從本地佇列3中選取一個或多個匯款交易,以聚合產生相應的區塊鏈交易。假定設備3在某一次選取的匯款交易中包含上述的匯款交易tx_i,並據此產生了相應的區塊鏈交易TX_c。
步驟404d,設備4根據本地佇列4中的匯款交易,分別聚合產生交易TX_d,並在簽名後提交至區塊鏈。
在一實施例中,與設備1相類似的,設備4可以從本地佇列4中選取一個或多個匯款交易,以聚合產生相應的區塊鏈交易。假定設備4在某一次選取的匯款交易中包含上述的匯款交易tx_i,並據此產生了相應的區塊鏈交易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分別提交的區塊鏈交易後,可以分別提取每一區塊鏈交易中包含的匯款交易,並分別針對每一匯款交易實施單獨驗證。驗證操作可以包括:驗證簽名是否正確;驗證匯款交易中對於上述“可能造成金額變化的匯款交易”實際產生的金額變化值的計算是否正確、區間證明是否正確;資金轉移的轉出額與轉入額是否一致等,此處不再一一贅述。
在一實施例中,除了對每一區塊鏈交易中包含的匯款交易單獨實施驗證之外,如果匯款交易的執行由匯款方、中繼方、收款方等參與方同時參與觸發,因而區塊鏈節點還需要驗證匯款交易的各個參與方是否都實施了觸發(即提交了包含該匯款交易的區塊鏈交易)。例如,圖7是一示例性實施例提供的一種統計觸發情況的示意圖。如圖7所示,基於區塊鏈的原生功能或智慧合約所提供的擴展功能,區塊鏈節點可以分別記錄機構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所提交的區塊鏈交易中,並不一定每條匯款交易都由所有參與方共同實施觸發操作;譬如,至少一條匯款交易可以採用相關技術中的技術方案,即由某一參與方收集所有參與方對匯款交易的交易詳情資訊的確認資訊、產生交易所需的區間證明等(即產生上述實施例中所述的多方觸發資訊),並僅由該某一參與方提交包含該匯款交易的區塊鏈交易。
圖8是一示例性實施例提供的一種設備的示意結構圖。請參考圖8,在硬體層面,該設備包括處理器802、內部匯流排804、網路介面806、記憶體808以及非揮發性記憶體810,當然還可能包括其他業務所需要的硬體。處理器802從非揮發性記憶體810中讀取對應的電腦程式到記憶體808中然後運行,在邏輯層面上形成基於區塊鏈的事件處理裝置。當然,除了軟體實現方式之外,本說明書一個或多個實施例並不排除其他實現方式,比如邏輯裝置抑或軟硬體結合的方式等等,也就是說以下處理流程的執行主體並不限定於各個邏輯單元,也可以是硬體或邏輯裝置。
請參考圖9,在軟體實施方式中,該基於區塊鏈的事件處理裝置應用於參與方,可以包括:
添加單元901,根據所述參與方所參與的事件,向所述參與方維護的等待佇列中添加對應的備選子交易;
產生單元902,根據從所述等待佇列中選取的若干備選子交易,產生相應的集合交易;
提交單元903,將所述集合交易提交至區塊鏈,使所述集合交易中的備選子交易被分別予以處理。
可選的,所述產生單元902具體用於:
當所述等待佇列中的備選子交易達到預設數量時,選取所述等待佇列中已存在的備選子交易,以產生相應的集合交易;
或者,按照預設時長週期性地選取所述等待佇列中已存在的備選子交易,以產生相應的集合交易。
可選的,還包括:
添加單元904,按照產生順序為各個集合交易添加相應的編號,以使各個集合交易在區塊鏈中被按照對應的編號大小進行依次處理。
可選的,所述集合交易中包含的備選子交易設定有對應的狀態變化量,使得所述備選子交易被處理後,所述參與方的狀態參數基於所述狀態變化量而發生相應的數值變化。
可選的,所述狀態變化量為明文數值。
可選的,所述集合交易中包含的備選子交易還設定有變化前狀態值、變化後狀態值,使得所述備選子交易被處理後,所述參與方的狀態參數由所述變化前狀態值經由所述狀態變化量而變化至所述變化後狀態值;
其中,所述狀態變化量、所述變化前狀態值和所述變化後狀態值分別為基於同態加密演算法或同態承諾演算法計算得到的密文數值。
可選的,
當被選取的備選子交易用於使所述參與方的狀態值增大時,所述集合交易還包含:第一證明資訊,所述第一證明資訊用於證明狀態值增大量處於正確數值區間;
當被選取的備選子交易用於使所述參與方的狀態值減小時,所述集合交易還包含:第二證明資訊,所述第二證明資訊用於證明狀態值減小量、所述被選取的備選子交易對應的變化後狀態值均處於所述正確數值區間。
可選的,當所述集合交易包含多個備選子交易時,相鄰的備選子交易滿足:前一備選子交易對應的變化後狀態值與後一備選子交易對應的變化前狀態值相同。
可選的,在所述事件對應的備選子交易中,包含所述參與方對所述事件的單方觸發資訊;其中,當所述事件的所有參與方分別向區塊鏈提交的針對所述事件的單方觸發資訊均通過驗證時,所述事件對應的備選子交易在區塊鏈中被觸發執行。
可選的,在所述事件對應的備選子交易中,包含所述事件的所有參與方對所述事件的多方觸發資訊;其中,當所述多方觸發資訊通過驗證時,所述事件對應的備選子交易在區塊鏈中被觸發執行。
圖10是一示例性實施例提供的一種設備的示意結構圖。請參考圖10,在硬體層面,該設備包括處理器1002、內部匯流排1004、網路介面1006、記憶體1008以及非揮發性記憶體1010,當然還可能包括其他業務所需要的硬體。處理器1002從非揮發性記憶體1010中讀取對應的電腦程式到記憶體1008中然後運行,在邏輯層面上形成基於區塊鏈的事件處理裝置。當然,除了軟體實現方式之外,本說明書一個或多個實施例並不排除其他實現方式,比如邏輯裝置抑或軟硬體結合的方式等等,也就是說以下處理流程的執行主體並不限定於各個邏輯單元,也可以是硬體或邏輯裝置。
請參考圖11,在軟體實施方式中,該基於區塊鏈的事件處理裝置應用於區塊鏈節點,可以包括:
接收單元1101,接收參與方提交至區塊鏈的集合交易,所述集合交易中包含從所述參與方維護的等待佇列中選取的若干備選子交易,所述備選子交易對應於所述參與方所參與的事件;
執行單元1102,執行所述集合交易,以對所述集合交易中的備選子交易分別予以處理。
可選的,還包括:
提取單元1103,提取所述集合交易中包含的編號,所述編號由所述參與方按照產生順序而添加;
處理單元1104,按照對應的編號大小對所述參與方提交的各個集合交易進行依次處理。
可選的,所述集合交易中包含的備選子交易設定有對應的狀態變化量,使得所述備選子交易被處理後,所述參與方的狀態參數基於所述狀態變化量而發生相應的數值變化。
可選的,所述狀態變化量為明文數值。
可選的,所述集合交易中包含的備選子交易還設定有變化前狀態值、變化後狀態值,使得所述備選子交易被處理後,所述參與方的狀態參數由所述變化前狀態值經由所述狀態變化量而變化至所述變化後狀態值;
其中,所述狀態變化量、所述變化前狀態值和所述變化後狀態值分別為基於同態加密演算法或同態承諾演算法計算得到的密文數值。
可選的,
當被選取的備選子交易用於使所述參與方的狀態值增大時,所述集合交易還包含:第一證明資訊,所述第一證明資訊用於證明狀態值增大量處於正確數值區間;
當被選取的備選子交易用於使所述參與方的狀態值減小時,所述集合交易還包含:第二證明資訊,所述第二證明資訊用於證明狀態值減小量、所述被選取的備選子交易對應的變化後狀態值均處於所述正確數值區間。
可選的,當所述集合交易包含多個備選子交易時,相鄰的備選子交易滿足:前一備選子交易對應的變化後狀態值與後一備選子交易對應的變化前狀態值相同。
可選的,在所述事件對應的備選子交易中,包含所述參與方對所述事件的單方觸發資訊;其中,當所述事件的所有參與方分別向區塊鏈提交的針對所述事件的單方觸發資訊均通過驗證時,所述事件對應的備選子交易在區塊鏈中被觸發執行。
可選的,在所述事件對應的備選子交易中,包含所述事件的所有參與方對所述事件的多方觸發資訊;其中,當所述多方觸發資訊通過驗證時,所述事件對應的備選子交易在區塊鏈中被觸發執行。
上述實施例闡明的系統、裝置、模組或單元,具體可以由電腦晶片或實體實現,或者由具有某種功能的產品來實現。一種典型的實現設備為電腦,電腦的具體形式可以是個人電腦、膝上型電腦、蜂巢式電話、相機電話、智慧型電話、個人數位助理、媒體播放機、導航設備、電子郵件收發設備、遊戲控制台、平板電腦、可穿戴設備或者這些設備中的任意幾種設備的組合。
本說明書提出了一種電腦可讀媒體,其上儲存有電腦指令,該指令被處理器執行時實現本說明書的技術方案,比如上述任一實施例的基於區塊鏈的事件處理方法,此處不再一一贅述。
在一個典型的配置中,電腦包括一個或多個處理器(CPU)、輸入/輸出介面、網路介面和記憶體。
記憶體可能包括電腦可讀媒體中的非永久性記憶體,隨機存取記憶體(RAM)和/或非揮發性記憶體等形式,如唯讀記憶體(ROM)或快閃記憶體(flash RAM)。記憶體是電腦可讀媒體的示例。
電腦可讀媒體包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現資訊儲存。資訊可以是電腦可讀指令、資料結構、程式的模組或其他資料。電腦的儲存媒體的例子包括,但不限於相變記憶體(PRAM)、靜態隨機存取記憶體(SRAM)、動態隨機存取記憶體(DRAM)、其他類型的隨機存取記憶體(RAM)、唯讀記憶體(ROM)、電可擦除可程式設計唯讀記憶體(EEPROM)、快閃記憶體或其他記憶體技術、唯讀光碟唯讀記憶體(CD-ROM)、數位多功能光碟(DVD)或其他光學儲存、磁盒式磁帶、磁片儲存、量子記憶體、基於石墨烯的儲存媒體或其他磁性儲存設備或任何其他非傳輸媒體,可用於儲存可以被計算設備存取的資訊。按照本文中的界定,電腦可讀媒體不包括暫存電腦可讀媒體(transitory media),如調變的資料信號和載波。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,並不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
上述對本說明書特定實施例進行了描述。其它實施例在所附申請專利範圍的範圍內。在一些情況下,在申請專利範圍中記載的動作或步驟可以按照不同於實施例中的順序來執行並且仍然可以實現期望的結果。另外,在圖式中描繪的過程不一定要求示出的特定順序或者連續順序才能實現期望的結果。在某些實施方式中,多工處理和並行處理也是可以的或者可能是有利的。
在本說明書一個或多個實施例使用的術語是僅僅出於描述特定實施例的目的,而非旨在限制本說明書一個或多個實施例。在本說明書一個或多個實施例和所附申請專利範圍中所使用的單數形式的“一種”、“所述”和“該”也旨在包括多數形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“和/或”是指並包含一個或多個相關聯的列出專案的任何或所有可能組合。
應當理解,儘管在本說明書一個或多個實施例可能採用術語第一、第二、第三等來描述各種資訊,但這些資訊不應限於這些術語。這些術語僅用來將同一類型的資訊彼此區分開。例如,在不脫離本說明書一個或多個實施例範圍的情況下,第一資訊也可以被稱為第二資訊,類似地,第二資訊也可以被稱為第一資訊。取決於語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“回應於判定”。
以上所述僅為本說明書一個或多個實施例的較佳實施例而已,並不用以限制本說明書一個或多個實施例,凡在本說明書一個或多個實施例的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本說明書一個或多個實施例保護的範圍之內。
102,104,106,202,204,401,402a,402b,402c,403a,403b,403c,403d,404a,404b,404c,404d,405,406:步驟
802,1002:處理器
804,1004:內部匯流排
806,1006:網路介面
808,1008:記憶體
810,1010:非揮發性記憶體
901:添加單元
902:產生單元
903:提交單元
904:添加單元
1101:接收單元
1102:執行單元
1103:提取單元
1104:處理單元
[圖1]是一示例性實施例提供的一種基於區塊鏈的事件處理方法的流程圖。
[圖2]是一示例性實施例提供的另一種基於區塊鏈的事件處理方法的流程圖。
[圖3]是一示例性實施例提供的一種跨境匯款的場景示意圖。
[圖4]是一示例性實施例的一種跨境匯款過程中的互動示意圖。
[圖5]是一示例性實施例提供的一種基於密文數值的區塊鏈交易內容的示意圖。
[圖6]是一示例性實施例提供的一種基於明文數值的區塊鏈交易內容的示意圖。
[圖7]是一示例性實施例提供的一種統計觸發情況的示意圖。
[圖8]是一示例性實施例提供的一種設備的結構示意圖。
[圖9]是一示例性實施例提供的一種基於區塊鏈的事件處理裝置的方塊圖。
[圖10]是一示例性實施例提供的另一種設備的結構示意圖。
[圖11]是一示例性實施例提供的另一種基於區塊鏈的事件處理裝置的方塊圖。