這裡將詳細地對示例性實施例進行說明,其示例表示在圖式中。下面的描述涉及圖式時,除非另有表示,不同圖式中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式並不代表與本說明書一個或多個實施例相一致的所有實施方式。相反,它們僅是與如所附申請專利範圍中所詳述的、本說明書一個或多個實施例的一些方面相一致的裝置和方法的例子。
需要說明的是:在其他實施例中並不一定按照本說明書示出和描述的順序來執行相應方法的步驟。在一些其他實施例中,其方法所包括的步驟可以比本說明書所描述的更多或更少。此外,本說明書中所描述的單個步驟,在其他實施例中可能被分解為多個步驟進行描述;而本說明書中所描述的多個步驟,在其他實施例中也可能被合併為單個步驟進行描述。
圖1是一示例性實施例提供的一種基於區塊鏈的事件處理方法的流程圖。如圖1所示,該方法應用於任一參與方,可以包括以下步驟:
步驟102,根據所述任一參與方所參與的事件,產生所述事件的描述資訊。
在一實施例中,事件存在多個參與方,每一參與方對應於參與對象,該參與對象可以為個人、企業、組織等,本說明書並不對此進行限制。參與對象存在對應的數位身份,使得承載該數位身份的電子設備相當於被配置為該參與對象所對應的參與方。
在一實施例中,本說明書的事件可以包括任意類型、覆蓋任意場景,比如投票、簽訂協議、流量分配、轉帳、跨境匯款等,本說明書並不對此進行限制。以投票為例,描述資訊可以包括投票事由和投票選項等資訊,而各個參與方向區塊鏈中提交的觸發資訊可以包括對投票選項的選擇結果,從而觸發完成投票操作。
在一實施例中,事件的描述資訊可以包括變化量,而所述事件可以用於使各個參與方在區塊鏈上對應記錄的狀態參數按照所述變化量發生取值變化,比如增大取值、減小取值等。其中,根據事件的類型或場景差異,相應的狀態參數也可能不同,比如轉帳或跨境匯款場景下的狀態參數可以為參與方的帳戶餘額,再比如流量分配場景下的狀態參數可以為參與方持有的剩餘流量的數額,本說明書並不對此進行限制。
在一實施例中,各個參與方對應的狀態參數的取值、所述變化量可以為明文數值。區塊鏈中的區塊鏈節點分別維護有區塊鏈帳本,該區塊鏈帳本中記錄有全量交易資料,使得區塊鏈節點可以獲知各個參與方對應的狀態參數的取值;進一步地,所述任一參與方可以向區塊鏈提交一筆交易,該交易包含上述的觸發資訊,使得該交易經過共識後可以被基於所述任一參與方對應的狀態參數的取值、上述的變化量而執行,使得該任一參與方對應的狀態參數可以基於該變化量而實現取值變化。
在一實施例中,各個參與方對應的狀態參數的取值、所述變化量分別為基於同態加密演算法或承諾方案計算得到的密文數值。對於同態加密演算法而言,可以採用任意類型的同態加密演算法,只要確保該同態加密演算法能夠滿足加法同態,使得即便處於密文狀態下,仍然能夠使得狀態參數的取值增加或減少該變化量;對於該同態加密演算法為加法同態加密演算法或全同態加密演算法,本說明書並不對此進行限制。對於承諾方案而言,當採用相關技術中的Pedersen承諾機制時,可以為未加密資料確定一隨機數,並基於該隨機數與未加密資料進行計算得到相應的承諾資料,該承諾資料可以被作為上述的密文數值。
在一實施例中,當狀態參數的取值、變化量為密文數值時,參與方需要提供相關的證明資訊,以使得區塊鏈節點在執行相關交易時,能夠確定交易的合法有效性。例如,該任一參與方需要給出對變化量的證明,以表明該變化量處於正確數值區間,譬如[0,264
)。再例如,當事件用於使得所述任一參與方對應的狀態參數按照該變化量發生取值減小時,即交易目的是使得狀態參數的取值減小該變化量,該任一參與方需要給出對狀態參數的取值與變化量的證明,以表明狀態參數的取值不小於取值減小量(與上述的變化量等值)。
在一實施例中,可以採用相關技術中的區間證明(Range Proof)技術,譬如Bulletproofs方案或Borromean環簽名方案等,產生上述的證明資訊,本說明書並不對此進行限制。
步驟104,將所述描述資訊提交至區塊鏈,使所述描述資訊被同步至所述事件的其他參與方,以使所述其他參與方在確認所述描述資訊後,針對所述事件向區塊鏈提交觸發資訊。
在一實施例中,透過向區塊鏈提交一筆交易,並將上述的描述資訊包含於該交易中,使得該交易在經過共識後可以被發送至區塊鏈中的所有區塊鏈節點;而事件的每一參與方均可以被配置為區塊鏈中的區塊鏈節點,或者每一參與方可以在區塊鏈中存在對應的區塊鏈節點,使得每一參與方可以通過自身或對應的區塊鏈節點所維護的區塊鏈帳本(區塊鏈帳本包含區塊鏈的全量交易資料),獲得上述交易及其包含的描述資訊,從而使得上述的描述資訊被同步至事件的其他參與方。
在一實施例中,由於區塊鏈中的各個區塊鏈節點都維護有區塊鏈帳本,區塊鏈帳本中包含有區塊鏈的全量交易資料,因此可以透過使得描述資訊中採用密文數值(比如基於密文數值的變化量等),避免造成隱私洩露。
在一實施例中,描述資訊由所述任一參與方產生,以用於描述相關事件的情況;而透過將描述資訊發送至事件的其他參與方,可由該其他參與方進行查看和確認,從而確定是否允許該事件被執行。描述資訊可以表徵相關事件的執行邏輯、所涉及的參與方、對參與方的狀態參數的改變方式(如增大或減小狀態參數的取值)、變化量等,本說明書並不對此進行限制。實際上,事件的相關內容可由各個參與方之間預先透過任意方式進行溝通,然後由所述任一參與方進行起草該事件的描述資訊,使得事件的其他參與方可以根據預先的溝通結果對該描述資訊的內容進行查看和確認;當然,所述任一參與方也可以在並未預先溝通的情況下,自行確定事件的其他參與方以及描述資訊中的其他內容,本說明書並不對此進行限制。
在一實施例中,任一參與方在產生描述資訊時,該描述資訊中的變化量可以為密文數值。比如當變化量的明文數值為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的帳戶餘額增加了第二轉帳額(第二類型的資產)且減少了第三轉帳額(第三類型的資產)、在資產價值上相當於未發生變化。
在一實施例中,所述觸發資訊包括:所述描述資訊和提交所述觸發資訊的參與方產生的確認資訊,以表明提交所述觸發資訊的參與方對所述描述資訊予以確認。其中,在針對描述資訊予以確認時,相當於對相應的事件予以確認;而區塊鏈節點可以將描述資訊作為事件對應的唯一標識,以確定觸發資訊或其包含的確認資訊所對應的事件。例如,確認資訊可以包括:提交觸發資訊的參與方通過自身的身份私鑰對描述資訊產生的簽名資訊;或者,還可以採用其他形式的確認資訊,本說明書並不對此進行限制。
步驟106,針對所述事件向區塊鏈提交觸發資訊;其中,當所述事件的所有參與方分別針對所述事件提交的觸發資訊均通過驗證時,所述事件在區塊鏈中被基於所述描述資訊而執行。
在一實施例中,透過由任一參與方將描述資訊發送至事件的其他參與方,使得各個參與方可以獲知並確認該描述資訊的內容,並進一步由各個參與方分別向區塊鏈提交針對該事件的觸發資訊,從而由各個參與方分別、非同步實施觸發操作(即提交觸發資訊),而非由所述任一參與方或其他的某一參與方集中實施觸發操作,不僅可以對處理壓力進行分擔、防止單個參與方的處理壓力過大,還可使各個參與方根據自身的實際情況(如處理壓力、優先順序管理等)對所參與的各個事件進行選擇性地處理甚至批量處理。
在一實施例中,所述任一參與方可以將所述觸發資訊添加為等待佇列中的待提交交易,並按照預設規則從所述等待佇列中選取若干待提交交易,以聚合為合併交易;然後,向區塊鏈提交所述合併交易,使所述合併交易中的各個待提交交易在區塊鏈中被分別處理。可見,通過由事件的各個參與方分別實施觸發操作,使得每個參與方可以分別對自身所參與的事件進行批量處理,減少向區塊鏈提交的交易數量。其中,預設規則可以包括預先定義的任意規則,本說明書並不對此進行限制;例如,可以按照預設週期進行選取,每一週期的選取時刻到達後,選取等待佇列中的所有待提交交易;再例如,可以按照預設數量進行選擇,每當等待佇列中的待提交交易達到該預設數量時,選取等待佇列中的該預設數量的待提交交易。當然,如果基於預設規則僅選取了一條待提交交易,那麼合併交易就相當於該待提交交易(此時可以略去聚合操作)。與所述任一參與方相類似的,事件的每一參與方均可以按照上述方式維護等待佇列以及產生、提交合併交易,此處不再一一贅述。
在一實施例中,所述任一參與方可以按照產生順序為各個合併交易添加編號,使各個合併交易在區塊鏈中被按照對應編號的大小進行依次處理。由於每條交易被執行後都可能導致該任一參與方的狀態參數發生變化,而在後交易的執行需要依賴於先前交易執行後的狀態參數的取值,因而需要確保各個合併交易被按照對應編號的大小進行依次處理,以使得各個合併交易均能夠正確執行。與所述任一參與方相類似的,事件的每一參與方均可以按照上述方式對自身產生的合併交易進行編號,此處不再一一贅述。
在一實施例中,所述任一參與方根據自身參與的其他事件,對自身對應的狀態參數進行取值更新,以根據取值更新後的狀態參數產生所述觸發資訊。例如,當狀態參數的取值、變化量為密文數值,且所述事件用於使得所述任一參與方對應的狀態參數按照該變化量發生取值減小時,需要給出相關證明以確保狀態參數的取值不小於取值減小量(與上述的變化量等值),使得該任一參與方需要根據先前已處理的交易,確定自身對應的狀態參數的取值,從而產生正確的證明資訊,以確保相關事件能夠被順利執行。與所述任一參與方相類似的,事件的每一參與方均可以按照上述方式對自身的狀態參數進行取值更新,以確保產生的觸發資訊的有效性,此處不再一一贅述。
例如,區塊鏈節點在收到各個參與方提交的合併交易後,提取合併交易中包含的待提交交易,並針對待提交交易包含的觸發資訊進行確認和驗證。當某一事件的所有參與方均已提交了相應的觸發資訊、且觸發資訊均已通過驗證時,可以將該事件標記為成功狀態;類似地,可以將未通過驗證的事件標記為失敗狀態,將未在有效時間段內收到所有參與方提交的觸發資訊的事件標記為超時狀態等,然後將各個事件的狀態提交至區塊鏈中。以事件的任一參與方為例,該任一參與方在提交合併交易之前,可以通過查詢區塊鏈帳本上的交易記錄,確定自身參與的各個事件的狀態,比如對於失敗狀態或超時狀態的交易,需要對狀態參數的取值進行相應的恢復(比如該任一參與方為匯款方時,需要對相應的帳戶餘額進行回滾),對於成功狀態的交易需要更新狀態參數(比如該任一參與方為收款方時,需要對相應的轉帳金額進行收款、增加至帳戶餘額中),然後根據狀態參數的更新後取值,產生相關事件的證明資訊(確保證明資訊是基於狀態參數的最新取值而產生),然後產生並提交上述合併交易。
與圖1所示實施例相對應地,圖2是一示例性實施例提供的另一種基於區塊鏈的事件處理方法的流程圖。如圖2所示,該方法應用於參與方(即在事件的所有參與方中,除圖1所示的任一參與方之外的其他參與方),可以包括以下步驟:
步驟202,從所述參與方維護的區塊鏈帳本中解析得到事件的描述資訊,所述描述資訊由所述事件的另一參與方提交至區塊鏈。
在一實施例中,事件存在多個參與方,每一參與方對應於參與對象,該參與對象可以為個人、企業、組織等,本說明書並不對此進行限制。參與對象存在對應的數位身份,使得承載該數位身份的電子設備相當於被配置為該參與對象所對應的參與方。
在一實施例中,本說明書的事件可以包括任意類型、覆蓋任意場景,比如投票、簽訂協議、流量分配、轉帳、跨境匯款等,本說明書並不對此進行限制。以投票為例,描述資訊可以包括投票事由和投票選項等資訊,而各個參與方向區塊鏈中提交的觸發資訊可以包括對投票選項的選擇結果,從而觸發完成投票操作。
在一實施例中,事件的描述資訊可以包括變化量,而所述事件可以用於使各個參與方在區塊鏈上對應記錄的狀態參數按照所述變化量發生取值變化,比如增大取值、減小取值等。其中,根據事件的類型或場景差異,相應的狀態參數也可能不同,比如轉帳或跨境匯款場景下的狀態參數可以為參與方的帳戶餘額,再比如流量分配場景下的狀態參數可以為參與方持有的剩餘流量的數額,本說明書並不對此進行限制。
在一實施例中,各個參與方對應的狀態參數的取值、所述變化量可以為明文數值。區塊鏈中的區塊鏈節點分別維護有區塊鏈帳本,該區塊鏈帳本中記錄有全量交易資料,使得區塊鏈節點可以獲知各個參與方對應的狀態參數的取值;進一步地,所述參與方可以向區塊鏈提交一筆交易,該交易包含上述的觸發資訊,使得該交易經過共識後可以被基於所述參與方對應的狀態參數的取值、上述的變化量而執行,使得該參與方對應的狀態參數可以基於該變化量而實現取值變化。
在一實施例中,各個參與方對應的狀態參數的取值、所述變化量分別為基於同態加密演算法或承諾方案計算得到的密文數值。對於同態加密演算法而言,可以採用任意類型的同態加密演算法,只要確保該同態加密演算法能夠滿足加法同態,使得即便處於密文狀態下,仍然能夠使得狀態參數的取值增加或減少該變化量;對於該同態加密演算法為加法同態加密演算法或全同態加密演算法,本說明書並不對此進行限制。對於承諾方案而言,當採用相關技術中的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的帳戶餘額增加了第二轉帳額(第二類型的資產)且減少了第三轉帳額(第三類型的資產)、在資產價值上相當於未發生變化。
步驟204,在確認所述描述資訊後,針對所述事件向區塊鏈提交觸發資訊;其中,當所述事件的所有參與方分別針對所述事件提交的觸發資訊均通過驗證時,所述事件在區塊鏈中被基於所述描述資訊而執行。
在一實施例中,所述觸發資訊包括:所述描述資訊和提交所述觸發資訊的參與方產生的確認資訊,以表明提交所述觸發資訊的參與方對所述描述資訊予以確認。其中,在針對描述資訊予以確認時,相當於對相應的事件予以確認;而區塊鏈節點可以將描述資訊作為事件對應的唯一標識,以確定觸發資訊或其包含的確認資訊所對應的事件。例如,確認資訊可以包括:提交觸發資訊的參與方通過自身的身份私鑰對描述資訊產生的簽名資訊;或者,還可以採用其他形式的確認資訊,本說明書並不對此進行限制。
在一實施例中,通過由任一參與方將描述資訊發送至事件的其他參與方,使得各個參與方可以獲知並確認該描述資訊的內容,並進一步由各個參與方分別向區塊鏈提交針對該事件的觸發資訊,從而由各個參與方分別、非同步實施觸發操作(即提交觸發資訊),而非由所述任一參與方或其他的某一參與方集中實施觸發操作,不僅可以對處理壓力進行分擔、防止單個參與方的處理壓力過大,還可使各個參與方根據自身的實際情況(如處理壓力、優先順序管理等)對所參與的各個事件進行選擇性地處理甚至批量處理。
在一實施例中,所述參與方可以將所述觸發資訊添加為等待佇列中的待提交交易,並按照預設規則從所述等待佇列中選取若干待提交交易,以聚合為合併交易;然後,向區塊鏈提交所述合併交易,使所述合併交易中的各個待提交交易在區塊鏈中被分別處理。可見,通過由事件的各個參與方分別實施觸發操作,使得每個參與方可以分別對自身所參與的事件進行批量處理,減少向區塊鏈提交的交易數量。其中,預設規則可以包括預先定義的任意規則,本說明書並不對此進行限制;例如,可以按照預設週期進行選取,每一週期的選取時刻到達後,選取等待佇列中的所有待提交交易;再例如,可以按照預設數量進行選擇,每當等待佇列中的待提交交易達到該預設數量時,選取等待佇列中的該預設數量的待提交交易。當然,如果基於預設規則僅選取了一條待提交交易,那麼合併交易就相當於該待提交交易(此時可以略去聚合操作)。與所述參與方相類似的,事件的每一參與方均可以按照上述方式維護等待佇列以及產生、提交合併交易,此處不再一一贅述。
在一實施例中,所述參與方可以按照產生順序為各個合併交易添加編號,使各個合併交易在區塊鏈中被按照對應編號的大小進行依次處理。由於每條交易被執行後都可能導致該參與方的狀態參數發生變化,而在後交易的執行需要依賴於先前交易執行後的狀態參數的取值,因而需要確保各個合併交易被按照對應編號的大小進行依次處理,以使得各個合併交易均能夠正確執行。與所述參與方相類似的,事件的每一參與方均可以按照上述方式對自身產生的合併交易進行編號,此處不再一一贅述。
在一實施例中,所述參與方根據自身參與的其他事件,對自身對應的狀態參數進行取值更新,以根據取值更新後的狀態參數產生所述觸發資訊。例如,當狀態參數的取值、變化量為密文數值,且所述事件用於使得所述參與方對應的狀態參數按照該變化量發生取值減小時,需要給出相關證明以確保狀態參數的取值不小於取值減小量(與上述的變化量等值),使得該參與方需要根據先前已處理的交易,確定自身對應的狀態參數的取值,從而產生正確的證明資訊,以確保相關事件能夠被順利執行。與所述參與方相類似的,事件的每一參與方均可以按照上述方式對自身的狀態參數進行取值更新,以確保產生的觸發資訊的有效性,此處不再一一贅述。
例如,區塊鏈節點在收到各個參與方提交的合併交易後,提取合併交易中包含的待提交交易,並針對待提交交易包含的觸發資訊進行確認和驗證。當某一事件的所有參與方均已提交了相應的觸發資訊、且觸發資訊均已通過驗證時,可以將該事件標記為成功狀態;類似地,可以將未通過驗證的事件標記為失敗狀態,將未在有效時間段內收到所有參與方提交的觸發資訊的事件標記為超時狀態等,然後將各個事件的狀態提交至區塊鏈中。以事件的某一參與方為例,該參與方在提交合併交易之前,可以通過查詢區塊鏈帳本上的交易記錄,確定自身參與的各個事件的狀態,比如對於失敗狀態或超時狀態的交易,需要對狀態參數的取值進行相應的恢復(比如該參與方為匯款方時,需要對相應的帳戶餘額進行回滾),對於成功狀態的交易需要更新狀態參數(比如該參與方為收款方時,需要對相應的轉帳金額進行收款、增加至帳戶餘額中),然後根據狀態參數的更新後取值,產生相關事件的證明資訊(確保證明資訊是基於狀態參數的最新取值而產生),然後產生並提交上述合併交易。
與圖1-2所示實施例相對應地,圖3是一示例性實施例提供的又一種基於區塊鏈的事件處理方法的流程圖。如圖3所示,該方法應用於區塊鏈節點,可以包括以下步驟:
步驟302,確定事件的任一參與方將所述事件的描述資訊提交至區塊鏈,其中所述事件的各個參與方分別在區塊鏈中存在對應的節點,以從對應節點維護的區塊鏈帳本中解析得到所述描述資訊。
在一實施例中,透過由事件的任一參與方向區塊鏈提交一筆交易,並將上述的描述資訊包含於該交易中,使得該交易在經過共識後可以被發送至區塊鏈中的所有區塊鏈節點;而事件的每一參與方均可以被配置為區塊鏈中的區塊鏈節點,或者每一參與方可以在區塊鏈中存在對應的區塊鏈節點,使得每一參與方可以透過自身或對應的區塊鏈節點所維護的區塊鏈帳本(區塊鏈帳本包含區塊鏈的全量交易資料),獲得上述交易及其包含的描述資訊,從而使得上述的描述資訊被同步至事件的其他參與方。
在一實施例中,由於區塊鏈中的各個區塊鏈節點都維護有區塊鏈帳本,區塊鏈帳本中包含有區塊鏈的全量交易資料,因此可以透過使得描述資訊中採用密文數值(比如基於密文數值的變化量等),避免造成隱私洩露。
步驟304,在收到所述事件的參與方提交的觸發資訊時,對所述觸發資訊進行驗證;其中,所述觸發資訊由相應的參與方在確認所述描述資訊後提交至區塊鏈。
在一實施例中,事件存在多個參與方,每一參與方對應於參與對象,該參與對象可以為個人、企業、組織等,本說明書並不對此進行限制。參與對象存在對應的數位身份,使得承載該數位身份的電子設備相當於被配置為該參與對象所對應的參與方。
在一實施例中,本說明書的事件可以包括任意類型、覆蓋任意場景,比如投票、簽訂協議、流量分配、轉帳、跨境匯款等,本說明書並不對此進行限制。以投票為例,描述資訊可以包括投票事由和投票選項等資訊,而各個參與方向區塊鏈中提交的觸發資訊可以包括對投票選項的選擇結果,從而觸發完成投票操作。
在一實施例中,事件的描述資訊可以包括變化量,而所述事件可以用於使各個參與方在區塊鏈上對應記錄的狀態參數按照所述變化量發生取值變化,比如增大取值、減小取值等。其中,根據事件的類型或場景差異,相應的狀態參數也可能不同,比如轉帳或跨境匯款場景下的狀態參數可以為參與方的帳戶餘額,再比如流量分配場景下的狀態參數可以為參與方持有的剩餘流量的數額,本說明書並不對此進行限制。
在一實施例中,各個參與方對應的狀態參數的取值、所述變化量可以為明文數值。區塊鏈中的區塊鏈節點分別維護有區塊鏈帳本,該區塊鏈帳本中記錄有全量交易資料,使得區塊鏈節點可以獲知各個參與方對應的狀態參數的取值;進一步地,所述參與方可以向區塊鏈提交一筆交易,該交易包含上述的觸發資訊,使得該交易經過共識後可以被基於所述參與方對應的狀態參數的取值、上述的變化量而執行,使得該參與方對應的狀態參數可以基於該變化量而實現取值變化。
在一實施例中,各個參與方對應的狀態參數的取值、所述變化量分別為基於同態加密演算法或承諾方案計算得到的密文數值。對於同態加密演算法而言,可以採用任意類型的同態加密演算法,只要確保該同態加密演算法能夠滿足加法同態,使得即便處於密文狀態下,仍然能夠使得狀態參數的取值增加或減少該變化量;對於該同態加密演算法為加法同態加密演算法或全同態加密演算法,本說明書並不對此進行限制。對於承諾方案而言,當採用相關技術中的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的帳戶餘額增加了第二轉帳額(第二類型的資產)且減少了第三轉帳額(第三類型的資產)、在資產價值上相當於未發生變化。
在一實施例中,所述觸發資訊包括:所述描述資訊和提交所述觸發資訊的參與方產生的確認資訊,以表明提交所述觸發資訊的參與方對所述描述資訊予以確認。其中,在針對描述資訊予以確認時,相當於對相應的事件予以確認;而區塊鏈節點可以將描述資訊作為事件對應的唯一標識,以確定觸發資訊或其包含的確認資訊所對應的事件。例如,確認資訊可以包括:提交觸發資訊的參與方通過自身的身份私鑰對描述資訊產生的簽名資訊;或者,還可以採用其他形式的確認資訊,本說明書並不對此進行限制。
在一實施例中,區塊鏈節點可以接收所述參與方提交的合併交易,所述合併交易中包含所述參與方從本地的等待佇列中選取的若干待提交交易;其中,所述觸發資訊在所述參與方確認所述描述資訊後被添加為所述等待佇列中的待提交交易;提取所述合併交易中包含的各個待提交交易,以分別進行處理。換言之,每一參與方可以將所述觸發資訊添加為等待佇列中的待提交交易,並按照預設規則從所述等待佇列中選取若干待提交交易,以聚合為合併交易;然後,向區塊鏈提交所述合併交易,使所述合併交易中的各個待提交交易被區塊鏈節點分別處理。可見,透過由事件的各個參與方分別實施觸發操作,使得每個參與方可以分別對自身所參與的事件進行批量處理,減少向區塊鏈提交的交易數量。其中,預設規則可以包括預先定義的任意規則,本說明書並不對此進行限制;例如,可以按照預設週期進行選取,每一週期的選取時刻到達後,選取等待佇列中的所有待提交交易;再例如,可以按照預設數量進行選擇,每當等待佇列中的待提交交易達到該預設數量時,選取等待佇列中的該預設數量的待提交交易。當然,如果基於預設規則僅選取了一條待提交交易,那麼合併交易就相當於該待提交交易(此時可以略去聚合操作)。與所述參與方相類似的,事件的每一參與方均可以按照上述方式維護等待佇列以及產生、提交合併交易,此處不再一一贅述。
在一實施例中,區塊鏈節點可以提取所述合併交易中添加的編號,所述編號由所述參與方根據所述合併交易的產生順序而添加;然後,按照對應編號的大小,對收到的合併交易進行依次處理。換言之,所述參與方可以按照產生順序為各個合併交易添加編號,使各個合併交易被區塊鏈節點按照對應編號的大小進行依次處理。由於每條交易被執行後都可能導致該參與方的狀態參數發生變化,而在後交易的執行需要依賴於先前交易執行後的狀態參數的取值,因而需要確保各個合併交易被按照對應編號的大小進行依次處理,以使得各個合併交易均能夠正確執行。與所述參與方相類似的,事件的每一參與方均可以按照上述方式對自身產生的合併交易進行編號,此處不再一一贅述。
在一實施例中,所述參與方根據自身參與的其他事件,對自身對應的狀態參數進行取值更新,以根據取值更新後的狀態參數產生所述觸發資訊。例如,當狀態參數的取值、變化量為密文數值,且所述事件用於使得所述參與方對應的狀態參數按照該變化量發生取值減小時,需要給出相關證明以確保狀態參數的取值不小於取值減小量(與上述的變化量等值),使得該參與方需要根據先前已處理的交易,確定自身對應的狀態參數的取值,從而產生正確的證明資訊,以確保相關事件能夠被順利執行。與所述參與方相類似的,事件的每一參與方均可以按照上述方式對自身的狀態參數進行取值更新,以確保產生的觸發資訊的有效性,此處不再一一贅述。
例如,區塊鏈節點在收到各個參與方提交的合併交易後,提取合併交易中包含的待提交交易,並針對待提交交易包含的觸發資訊進行確認和驗證。當某一事件的所有參與方均已提交了相應的觸發資訊、且觸發資訊均已通過驗證時,可以將該事件標記為成功狀態;類似地,可以將未通過驗證的事件標記為失敗狀態,將未在有效時間段內收到所有參與方提交的觸發資訊的事件標記為超時狀態等,然後將各個事件的狀態提交至區塊鏈中。以事件的某一參與方為例,該參與方在提交合併交易之前,可以透過查詢區塊鏈帳本上的交易記錄,確定自身參與的各個事件的狀態,比如對於失敗狀態或超時狀態的交易,需要對狀態參數的取值進行相應的恢復(比如該參與方為匯款方時,需要對相應的帳戶餘額進行回滾),對於成功狀態的交易需要更新狀態參數(比如該參與方為收款方時,需要對相應的轉帳金額進行收款、增加至帳戶餘額中),然後根據狀態參數的更新後取值,產生相關事件的證明資訊(確保證明資訊是基於狀態參數的最新取值而產生),然後產生並提交上述合併交易。
步驟306,當所述事件的所有參與方分別對應的觸發資訊均通過驗證時,基於所述描述資訊執行所述事件。
在一實施例中,透過由任一參與方將描述資訊發送至事件的其他參與方,使得各個參與方可以獲知並確認該描述資訊的內容,並進一步由各個參與方分別向區塊鏈提交針對該事件的觸發資訊,從而由各個參與方分別、非同步實施觸發操作(即提交觸發資訊),而非由所述任一參與方或其他的某一參與方集中實施觸發操作,不僅可以對處理壓力進行分擔、防止單個參與方的處理壓力過大,還可使各個參與方根據自身的實際情況(如處理壓力、優先順序管理等)對所參與的各個事件進行選擇性地處理甚至批量處理。
需要指出的是:在本說明書中所描述的交易(transfer),是指用戶透過區塊鏈的客戶端創建,並需要最終發佈至區塊鏈的分散式資料庫中的一筆資料。其中,區塊鏈中的交易,存在狹義的交易以及廣義的交易之分。狹義的交易是指用戶向區塊鏈發佈的一筆價值轉移;例如,在傳統的比特幣區塊鏈網路中,交易可以是用戶在區塊鏈中發起的一筆轉帳。而廣義的交易是指用戶向區塊鏈發佈的一筆具有業務意圖的業務資料;例如,運營方可以基於實際的業務需求搭建一個聯盟鏈,依託於聯盟鏈部署一些與價值轉移無關的其它類型的線上業務(比如,租房業務、車輛調度業務、保險理賠業務、信用服務、醫療服務等),而在這類聯盟鏈中,交易可以是用戶在聯盟鏈中發佈的一筆具有業務意圖的業務消息或者業務請求。
為了便於理解,下面以跨境匯款場景為例,對本說明書一個或多個實施例的技術方案進行說明。圖4是一示例性實施例提供的一種跨境匯款的場景示意圖。如圖4所示,假定由用戶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對應的隨機數。
基於圖4所示的匯款場景,圖5是一示例性實施例的一種跨境匯款過程中的交互示意圖。如圖5所示,跨境匯款的交互過程可以包括以下步驟:
步驟501,設備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可以透過相關技術中的零知識證明技術產生上述的區間證明,本說明書並不對此進行限制。
步驟502,設備1將包含匯款交易詳情的交易提交至區塊鏈,使得相關交易資料被分別同步至設備2、設備3和設備4。
在一實施例中,設備1~設備4分別運行有區塊鏈的客戶端程式,使得設備1~設備4分別被配置為區塊鏈中的區塊鏈節點;或者,設備1~設備4在區塊鏈中分別存在對應的區塊鏈節點,本說明書並不對此進行限制。
其中,區塊鏈中的每一區塊鏈節點分別維護有內容統一的區塊鏈帳本,區塊鏈帳本中記錄有全量的區塊鏈資料。因此,設備1可以產生一筆交易,該交易的內容包含上述匯款交易tx_i的匯款交易詳情,並將該交易提交至區塊鏈中;相應地,當該交易通過共識後,可以被發送至區塊鏈中的各個區塊鏈節點,以供各個區塊鏈節點更新自身維護的區塊鏈帳本。因此,設備1、設備2、設備3和設備4可以分別通過自身對應的區塊鏈節點所維護的區塊鏈帳本,獲知設備1提交的上述交易,從而獲取該交易中包含的上述匯款交易tx_i的匯款交易詳情。
步驟503a,設備1對收到的匯款交易詳情進行驗證後,將其添加至自身的本地佇列1。
在一實施例中,當設備1確定匯款交易詳情對應於匯款交易tx_i時,由於該匯款交易tx_i由該設備1自身起草並提交至區塊鏈,因而可以略去對匯款交易詳情的驗證過程,而直接添加至本地佇列1。
當然,設備1仍然可以實施驗證操作,可以參考下述設備2的操作過程。
步驟503b,設備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是否成立;設備2驗證currency_1與currency_2之間的匯率是否為rate1、currency_2與currency_3之間的匯率是否為rate2;設備2驗證區間證明RP_t1、RP_t2、RP_t3是否正確等。在確定匯款交易詳情通過驗證後,設備2可以向自身維護的本地佇列2添加相應的匯款交易tx_i,並且向設備1返回確認回應、以表明接受相應的匯款交易。
步驟503c-503d,設備3-4分別對收到的匯款交易詳情進行驗證後,將其添加至自身的本地佇列3-4。
在一實施例中,設備3、設備4所實施的操作與設備2相類似,此處不再一一贅述。
步驟504a,設備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中選取一個或多個匯款交易,並對被選取的匯款交易進行聚合,產生一筆區塊鏈交易。
假定設備1在某一次選取的匯款交易中包含上述的匯款交易tx_i,並據此產生了相應的區塊鏈交易TX_a。該區塊鏈交易TX_a中包含順序編號seq和與被選取的每一匯款交易相關的資訊;比如,對於上述的匯款交易tx_i而言,與該匯款交易tx_i相關的資訊可以包括:上述的匯款交易詳情、機構1先前提交的區塊鏈交易所包含的匯款交易所產生的金額累加詳情、機構1餘額充足的區間證明RP_a。
以設備1產生的某一區塊鏈交易為例。當機構1在該區塊鏈交易中包含的若干匯款交易中作為匯款方或中繼方時,機構1會將自身對應的區塊鏈帳戶Y1的帳戶餘額減去對應的轉帳金額(匯款方僅轉出資金;中繼方既可接收轉入資金又需要轉出資金,這裡是針對轉出資金的操作而描述),並基於更新後的匯款金額繼續參與後續的匯款交易。當該區塊鏈交易被提交至區塊鏈後,如果機構1作為匯款方或中繼方的某一匯款交易成功執行,機構1無需調整區塊鏈帳戶Y1;如果機構1作為匯款方或中繼方的某一匯款交易未成功執行,機構1需要對區塊鏈帳戶Y1的帳戶餘額進行回滾調節。而當上述的區塊鏈交易中包含機構1作為收款方或中繼方(收款方僅轉入資金;中繼方既可接收轉入資金又需要轉出資金,這裡是針對轉入資金的操作而描述)的匯款交易時,如果該匯款交易成功執行,機構1需要向區塊鏈帳戶Y1中增加相應資金、實現收款,如果匯款交易未成功執行,機構1無需調整區塊鏈帳戶Y1。
因此,區塊鏈節點在收到並處理設備1提交的區塊鏈交易時,可以針對區塊鏈交易所包含的匯款交易是否能夠成功執行,對各個匯款交易進行狀態標記,比如交易為成功狀態、失敗狀態、超時狀態等;相應地,設備1在聚合產生上述的區塊鏈交易TX_a時,通過查詢先前提交的區塊鏈交易中的匯款交易被標記的狀態,即可相應地確定出上述的“機構1先前提交的區塊鏈交易所包含的匯款交易所產生的金額累加詳情”,該金額累加詳情包括:機構1作為中繼方或收款方的匯款交易被標記為成功狀態時產生的金額增加(收款)、機構1作為匯款方或中繼方的匯款交易被標記為失敗狀態或超時狀態時產生的金額增加(對已扣除的轉帳金額進行回滾)等。以及,設備1進一步根據機構1的區塊鏈帳戶Y1的帳戶餘額(已扣除先前提交的匯款交易的轉帳金額、尚未收款)與金額累加詳情,產生該機構1餘額充足的區間證明RP_a,以證明機構1所持有的區塊鏈資金(區塊鏈帳戶Y1的帳戶餘額與金額累加詳情對應的資金之和)不少於該機構1在匯款交易tx_i中所需轉出的資金。
步驟504b-c,設備2-3根據本地佇列2-3中的匯款交易,分別聚合產生交易TX_b、TX_c,並在簽名後分別提交至區塊鏈。
在一實施例中,與設備1相類似的,設備2可以從本地佇列2中選取一個或多個匯款交易,以聚合產生相應的區塊鏈交易。假定設備2在某一次選取的匯款交易中包含上述的匯款交易tx_i,並據此產生了相應的區塊鏈交易TX_b。該區塊鏈交易TX_b中包含順序編號seq和與被選取的每一匯款交易相關的資訊;比如,對於上述的匯款交易tx_i而言,與該匯款交易tx_i相關的資訊可以包括:上述的匯款交易詳情、機構2先前提交的區塊鏈交易所包含的匯款交易所產生的金額累加詳情、機構2餘額充足的區間證明RP_b。
在一實施例中,與設備1相類似的,設備3可以從本地佇列3中選取一個或多個匯款交易,以聚合產生相應的區塊鏈交易。假定設備3在某一次選取的匯款交易中包含上述的匯款交易tx_i,並據此產生了相應的區塊鏈交易TX_c。該區塊鏈交易TX_c中包含順序編號seq和與被選取的每一匯款交易相關的資訊;比如,對於上述的匯款交易tx_i而言,與該匯款交易tx_i相關的資訊可以包括:上述的匯款交易詳情、機構3先前提交的區塊鏈交易所包含的匯款交易所產生的金額累加詳情、機構3餘額充足的區間證明RP_c。
步驟504d,設備4根據本地佇列4中的匯款交易,分別聚合產生交易TX_d,並在簽名後提交至區塊鏈。
在一實施例中,與設備1相類似的,設備4可以從本地佇列4中選取一個或多個匯款交易,以聚合產生相應的區塊鏈交易。假定設備4在某一次選取的匯款交易中包含上述的匯款交易tx_i,並據此產生了相應的區塊鏈交易TX_d。該區塊鏈交易TX_d中包含順序編號seq和與被選取的每一匯款交易相關的資訊;比如,對於上述的匯款交易tx_i而言,與該匯款交易tx_i相關的資訊可以包括:上述的匯款交易詳情、機構4先前提交的區塊鏈交易所包含的匯款交易所產生的金額累加詳情;由於機構4在匯款交易tx_i中為收款方,因而並不需要提供餘額充足的區間證明。當然,機構4在其他匯款交易中也可能作為匯款方或中繼方,仍然需要針對相應的匯款交易產生餘額充足的區間證明。
需要指出的是:設備1~設備4可以根據實際情況選擇產生相應的區塊鏈交易,而並不一定立即對匯款交易tx_i進行處理;換言之,設備1~設備4實際上是非同步地向區塊鏈提交匯款交易tx_i(被包含於相應的區塊鏈交易中),使得該匯款交易tx_i的執行被分配至由設備1~設備4分別進行觸發,促使設備1~設備4在參與大量匯款交易的情況下,可以對所參與的匯款交易進行批量產生區塊鏈交易,從而減少區塊鏈交易的產生和提交數量,有助於降低處理負擔、提升處理效率。
步驟505,區塊鏈節點對收到的區塊鏈交易進行處理,以驗證區塊鏈交易中包含的各筆匯款交易。
步驟506,標記匯款交易tx_i。
在一實施例中,由於每一機構會不斷向區塊鏈提交區塊鏈交易,而在先提交的區塊鏈交易所包含的匯款交易,會影響在後提交的區塊鏈交易所包含的匯款交易,因而區塊鏈節點在接收每一機構提交的區塊鏈交易後,需要讀取所接收到的區塊鏈交易中包含的順序編號seq,並按照順序編號seq的大小,依次處理來自相應機構的區塊鏈交易。例如,當區塊鏈節點接收到機構1提交的區塊鏈交易TX_a時,讀取其中包含的順序編號seq為100;而如果區塊鏈節點已處理的最近一筆區塊鏈交易的順序編號seq為98,那麼區塊鏈節點需要等待機構1提交的順序編號seq為99的區塊鏈交易,並在該順序編號為99的區塊鏈交易被處理後,才對上述順序編號為100的區塊鏈交易進行處理。
在一實施例中,區塊鏈節點在收到設備1~4分別提交的區塊鏈交易後,針對每一區塊鏈交易,可以提取區塊鏈交易中包含的匯款交易,並分別針對每一匯款交易實施驗證。驗證操作可以包括:驗證簽名是否正確;驗證匯款交易對應的金額累加詳情是否正確、餘額充足的區間證明是否正確;交易金額的區間證明是否正確;資金轉移的轉出額與轉入額是否一致等,此處不再一一贅述。
在一實施例中,除了對每一區塊鏈交易中包含的匯款交易單獨實施驗證之外,由於匯款交易的執行由匯款方、中繼方、收款方等參與方同時參與觸發,因而區塊鏈節點還需要驗證匯款交易的各個參與方是否都實施了觸發(即提交了包含該匯款交易的區塊鏈交易)。例如,圖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在後續產生區塊鏈交易時,可以參考這些狀態產生相應的金額累加詳情、產生餘額充足的區間證明等,這與上文中在步驟504a~504d中描述的過程相類似,此處不再贅述。
在確認匯款交易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), Enc_A (a-t1), Enc_A (r_a))、減少了500港幣;機構2對應的區塊鏈帳戶Y2更新為:(currency_1, PC(b1+t1, r_b1), Enc_B(b1+t1), Enc_B(r_b1))、(currency_2, PC(b2-t2, r_b2), Enc_B(b2-t2), Enc_B(r_b2)),增加了500港幣、減少了56歐元;機構3對應的區塊鏈帳戶Y3更新為:(currency_2, PC(c1+t2, r_c1), Enc_C(c1+t2), Enc_C(r_c1))、(currency_3, PC(c2-t3, r_c2), Enc_C(c2-t3), Enc_C(r_c2)) ,增加了56歐元、減少了64美元;機構4對應的區塊鏈帳戶Y4更新為:(currency_3, PC(d+t3, r_d), Enc_D(d+t3), Enc_D(r_d))、增加了64美元。
圖7是一示例性實施例提供的一種設備的示意結構圖。請參考圖7,在硬體層面,該設備包括處理器702、內部匯流排704、網路介面706、記憶體708以及非易失性記憶體710,當然還可能包括其他業務所需要的硬體。處理器702從非易失性記憶體710中讀取對應的電腦程式到記憶體708中然後運行,在邏輯層面上形成基於區塊鏈的事件處理裝置。當然,除了軟體實現方式之外,本說明書一個或多個實施例並不排除其他實現方式,比如邏輯器件抑或軟硬體結合的方式等等,也就是說以下處理流程的執行主體並不限定於各個邏輯單元,也可以是硬體或邏輯器件。
請參考圖8,在軟體實施方式中,該基於區塊鏈的事件處理裝置應用於任一參與方,可以包括:
產生單元801,根據所述任一參與方所參與的事件,產生所述事件的描述資訊;
第一提交單元802,將所述描述資訊提交至區塊鏈,使所述描述資訊被同步至所述事件的其他參與方,以使所述其他參與方在確認所述描述資訊後,針對所述事件向區塊鏈提交觸發資訊;
第二提交單元803,針對所述事件向區塊鏈提交觸發資訊;其中,當所述事件的所有參與方分別針對所述事件提交的觸發資訊均通過驗證時,所述事件在區塊鏈中被基於所述描述資訊而執行。
可選的,所述觸發資訊包括:所述描述資訊和提交所述觸發資訊的參與方產生的確認資訊,以表明提交所述觸發資訊的參與方對所述描述資訊予以確認。
可選的,所述描述資訊包括變化量,所述事件用於使各個參與方在區塊鏈上對應記錄的狀態參數按照所述變化量發生取值變化。
可選的,各個參與方對應的狀態參數的取值、所述變化量分別為基於承諾方案或同態加密演算法計算得到的密文數值。
可選的,
所述描述資訊還包括:第一證明資訊,所述第一證明資訊用於證明所述變化量處於正確數值區間;
當所述事件用於使所述任一參與方對應的狀態參數按照所述變化量發生取值減小時,所述觸發資訊包括:第二證明資訊,所述第二證明資訊用於證明所述任一參與方對應的狀態參數的取值不小於取值減小量。
可選的,
當所述事件用於使所述任一參與方對應的狀態參數按照所述變化量發生取值增大時,所述觸發資訊包括:第三證明資訊,所述第三證明資訊用於證明取值增大量處於正確數值區間;
當所述事件用於使所述任一參與方對應的狀態參數按照所述變化量發生取值減小時,所述觸發資訊包括:第四證明資訊,所述第四證明資訊用於證明取值減小量處於所述正確數值區間,且所述任一參與方對應的狀態參數的取值不小於所述取值減小量。
可選的,還包括:
更新單元804,根據所述任一參與方參與的其他事件,對所述任一參與方對應的狀態參數進行取值更新,以根據取值更新後的狀態參數產生所述觸發資訊。
可選的,
當所述事件包括轉帳事件時,所述事件的參與方包括:匯款方和收款方,所述變化量包括:轉帳額,所述狀態參數包括:帳戶餘額;
當所述事件包括第一匯款事件時,所述事件的參與方包括:匯款方、中繼方、收款方,所述變化量包括:所述匯款方與所述中繼方之間基於第一類型資產的第一轉帳額、所述中繼方與所述收款方之間基於第二類型資產的第二轉帳額,所述狀態參數包括:帳戶餘額;
當所述事件包括第二匯款事件時,所述事件的參與方包括:匯款方、n個中繼方、收款方,所述變化量包括:所述匯款方與第1個中繼方之間基於第一類型資產的轉帳額、第i-1個中繼方與第i個中繼方之間基於第i類型資產的轉帳額、第n個中繼方與所述收款方之間基於第n+1類型資產的轉帳額,所述狀態參數包括:帳戶餘額,其中1<i≤n。
所述第二提交單元803具體用於:
將所述觸發資訊添加為等待佇列中的待提交交易;
按照預設規則從所述等待佇列中選取若干待提交交易,以打包產生為合併交易;
向區塊鏈提交所述合併交易,使所述合併交易中的各個待提交交易在區塊鏈中被分別處理。
可選的,還包括:
添加單元805,按照產生順序為各個合併交易添加編號,使各個合併交易在區塊鏈中被按照對應編號的大小進行依次處理。
圖9是一示例性實施例提供的一種設備的示意結構圖。請參考圖9,在硬體層面,該設備包括處理器902、內部匯流排904、網路介面906、記憶體908以及非易失性記憶體910,當然還可能包括其他業務所需要的硬體。處理器902從非易失性記憶體910中讀取對應的電腦程式到記憶體908中然後運行,在邏輯層面上形成基於區塊鏈的事件處理裝置。當然,除了軟體實現方式之外,本說明書一個或多個實施例並不排除其他實現方式,比如邏輯器件抑或軟硬體結合的方式等等,也就是說以下處理流程的執行主體並不限定於各個邏輯單元,也可以是硬體或邏輯器件。
請參考圖10,在軟體實施方式中,該基於區塊鏈的事件處理裝置應用於參與方,可以包括:
解析單元1001,從所述參與方維護的區塊鏈帳本中解析得到事件的描述資訊,所述描述資訊由所述事件的另一參與方提交至區塊鏈;
提交單元1002,在確認所述描述資訊後,針對所述事件向區塊鏈提交觸發資訊;其中,當所述事件的所有參與方分別針對所述事件提交的觸發資訊均通過驗證時,所述事件在區塊鏈中被基於所述描述資訊而執行。
可選的,所述觸發資訊包括:所述描述資訊和提交所述觸發資訊的參與方產生的確認資訊,以表明提交所述觸發資訊的參與方對所述描述資訊予以確認。
可選的,所述描述資訊包括變化量,所述事件用於使各個參與方在區塊鏈上對應記錄的狀態參數按照所述變化量發生取值變化。
可選的,各個參與方對應的狀態參數的取值、所述變化量分別為基於承諾方案或同態加密演算法計算得到的密文數值。
可選的,
所述描述資訊還包括:第一證明資訊,所述第一證明資訊用於證明所述變化量處於正確數值區間;
當所述事件用於使所述參與方對應的狀態參數按照所述變化量發生取值減小時,所述觸發資訊包括:第二證明資訊,所述第二證明資訊用於證明所述參與方對應的狀態參數的取值不小於取值減小量。
可選的,
當所述事件用於使所述參與方對應的狀態參數按照所述變化量發生取值增大時,所述觸發資訊包括:第三證明資訊,所述第三證明資訊用於證明取值增大量處於正確數值區間;
當所述事件用於使所述參與方對應的狀態參數按照所述變化量發生取值減小時,所述觸發資訊包括:第四證明資訊,所述第四證明資訊用於證明取值減小量處於所述正確數值區間,且所述參與方對應的狀態參數的取值不小於所述取值減小量。
可選的,還包括:
更新單元1003,根據所述參與方參與的其他事件,對所述參與方對應的狀態參數進行取值更新,以根據取值更新後的狀態參數產生所述觸發資訊。
可選的,
當所述事件包括轉帳事件時,所述事件的參與方包括:匯款方和收款方,所述變化量包括:轉帳額,所述狀態參數包括:帳戶餘額;
當所述事件包括第一匯款事件時,所述事件的參與方包括:匯款方、中繼方、收款方,所述變化量包括:所述匯款方與所述中繼方之間基於第一類型資產的第一轉帳額、所述中繼方與所述收款方之間基於第二類型資產的第二轉帳額,所述狀態參數包括:帳戶餘額;
當所述事件包括第二匯款事件時,所述事件的參與方包括:匯款方、n個中繼方、收款方,所述變化量包括:所述匯款方與第1個中繼方之間基於第一類型資產的轉帳額、第i-1個中繼方與第i個中繼方之間基於第i類型資產的轉帳額、第n個中繼方與所述收款方之間基於第n+1類型資產的轉帳額,所述狀態參數包括:帳戶餘額,其中1<i≤n。
可選的,所述提交單元1002具體用於:
將所述觸發資訊添加為等待佇列中的待提交交易;
按照預設規則從所述等待佇列中選取若干待提交交易,以打包產生為合併交易;
向區塊鏈提交所述合併交易,使所述合併交易中的各個待提交交易在區塊鏈中被分別處理。
可選的,還包括:
添加單元1004,按照產生順序為各個合併交易添加編號,使各個合併交易在區塊鏈中被按照對應編號的大小進行依次處理。
圖11是一示例性實施例提供的一種設備的示意結構圖。請參考圖11,在硬體層面,該設備包括處理器1102、內部匯流排1104、網路介面1106、記憶體1108以及非易失性記憶體1110,當然還可能包括其他業務所需要的硬體。處理器1102從非易失性記憶體1110中讀取對應的電腦程式到記憶體1108中然後運行,在邏輯層面上形成基於區塊鏈的事件處理裝置。當然,除了軟體實現方式之外,本說明書一個或多個實施例並不排除其他實現方式,比如邏輯器件抑或軟硬體結合的方式等等,也就是說以下處理流程的執行主體並不限定於各個邏輯單元,也可以是硬體或邏輯器件。
請參考圖12,在軟體實施方式中,該基於區塊鏈的事件處理裝置應用於區塊鏈節點,可以包括:
確定單元1201,確定事件的任一參與方將所述事件的描述資訊提交至區塊鏈,其中所述事件的各個參與方分別在區塊鏈中存在對應的節點,以從對應節點維護的區塊鏈帳本中解析得到所述描述資訊;
驗證單元1202,在收到所述事件的參與方提交的觸發資訊時,對所述觸發資訊進行驗證;其中,所述觸發資訊由相應的參與方在確認所述描述資訊後提交至區塊鏈;
執行單元1203,當所述事件的所有參與方分別對應的觸發資訊均通過驗證時,基於所述描述資訊執行所述事件。
可選的,所述觸發資訊包括:所述描述資訊和提交所述觸發資訊的參與方產生的確認資訊,以表明提交所述觸發資訊的參與方對所述描述資訊予以確認。
可選的,所述描述資訊包括變化量,所述事件用於使各個參與方在區塊鏈上對應記錄的狀態參數按照所述變化量發生取值變化。
可選的,各個參與方對應的狀態參數的取值、所述變化量分別為基於承諾方案或同態加密演算法計算得到的密文數值。
可選的,
所述描述資訊還包括:第一證明資訊,所述第一證明資訊用於證明所述變化量處於正確數值區間;
當所述事件用於使所述參與方對應的狀態參數按照所述變化量發生取值減小時,所述觸發資訊包括:第二證明資訊,所述第二證明資訊用於證明所述參與方對應的狀態參數的取值不小於取值減小量。
可選的,
當所述事件用於使所述參與方對應的狀態參數按照所述變化量發生取值增大時,所述觸發資訊包括:第三證明資訊,所述第三證明資訊用於證明取值增大量處於正確數值區間;
當所述事件用於使所述參與方對應的狀態參數按照所述變化量發生取值減小時,所述觸發資訊包括:第四證明資訊,所述第四證明資訊用於證明取值減小量處於所述正確數值區間,且所述參與方對應的狀態參數的取值不小於所述取值減小量。
可選的,還包括:
更新單元1204,根據所述任一參與方參與的其他事件,對所述任一參與方對應的狀態參數進行取值更新,以使所述任一參與方根據取值更新後的狀態參數產生所述觸發資訊。
可選的,
當所述事件包括轉帳事件時,所述事件的參與方包括:匯款方和收款方,所述變化量包括:轉帳額,所述狀態參數包括:帳戶餘額;
當所述事件包括第一匯款事件時,所述事件的參與方包括:匯款方、中繼方、收款方,所述變化量包括:所述匯款方與所述中繼方之間基於第一類型資產的第一轉帳額、所述中繼方與所述收款方之間基於第二類型資產的第二轉帳額,所述狀態參數包括:帳戶餘額;
當所述事件包括第二匯款事件時,所述事件的參與方包括:匯款方、n個中繼方、收款方,所述變化量包括:所述匯款方與第1個中繼方之間基於第一類型資產的轉帳額、第i-1個中繼方與第i個中繼方之間基於第i類型資產的轉帳額、第n個中繼方與所述收款方之間基於第n+1類型資產的轉帳額,所述狀態參數包括:帳戶餘額,其中1<i≤n。
可選的,還包括:
接收單元1205,接收所述參與方提交的合併交易,所述合併交易中包含所述參與方從本地的等待佇列中選取的若干待提交交易;其中,所述觸發資訊在所述參與方確認所述描述資訊後被添加為所述等待佇列中的待提交交易;
第一提取單元1206,提取所述合併交易中包含的各個待提交交易,以分別進行處理。
可選的,還包括:
第二提取單元1207,提取所述合併交易中添加的編號,所述編號由所述參與方根據所述合併交易的產生順序而添加;
處理單元1208,按照對應編號的大小,對收到的合併交易進行依次處理。
上述實施例闡明的系統、裝置、模組或單元,具體可以由電腦晶片或實體實現,或者由具有某種功能的產品來實現。一種典型的實現設備為電腦,電腦的具體形式可以是個人電腦、膝上型電腦、蜂窩電話、相機電話、智慧型電話、個人數位助理、媒體播放機、導航設備、電子郵件收發設備、遊戲控制台、平板電腦、可穿戴設備或者這些設備中的任意幾種設備的組合。
本說明書提出了一種電腦可讀媒體,其上儲存有電腦指令,該指令被處理器執行時實現本說明書的技術方案,比如上述任一實施例的基於區塊鏈的事件處理方法,此處不再一一贅述。
在一個典型的配置中,電腦包括一個或多個處理器(CPU)、輸入/輸出介面、網路介面和記憶體。
記憶體可能包括電腦可讀媒體中的非永久性記憶體,隨機存取記憶體(RAM)和/或非易失性記憶體等形式,如唯讀記憶體(ROM)或快閃記憶體(flash RAM)。記憶體是電腦可讀媒體的示例。
電腦可讀媒體包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現資訊儲存。資訊可以是電腦可讀指令、資料結構、程式的模組或其他資料。電腦的儲存媒體的例子包括,但不限於相變記憶體(PRAM)、靜態隨機存取記憶體(SRAM)、動態隨機存取記憶體(DRAM)、其他類型的隨機存取記憶體(RAM)、唯讀記憶體(ROM)、電可擦除可編程唯讀記憶體(EEPROM)、快閃記憶體或其他記憶體技術、唯讀光碟唯讀記憶體(CD-ROM)、數位多功能光碟(DVD)或其他光學儲存、磁盒式磁帶、磁片儲存、量子記憶體、基於石墨烯的儲存媒體或其他磁性儲存設備或任何其他非傳輸媒體,可用於儲存可以被計算設備訪問的資訊。按照本文中的界定,電腦可讀媒體不包括暫存電腦可讀媒體 (transitory media),如調變的資料信號和載波。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,並不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
上述對本說明書特定實施例進行了描述。其它實施例在所附申請專利範圍的範圍內。在一些情況下,在申請專利範圍中記載的動作或步驟可以按照不同於實施例中的順序來執行並且仍然可以實現期望的結果。另外,在圖式中描繪的過程不一定要求示出的特定順序或者連續順序才能實現期望的結果。在某些實施方式中,多工處理和並行處理也是可以的或者可能是有利的。
在本說明書一個或多個實施例使用的術語是僅僅出於描述特定實施例的目的,而非旨在限制本說明書一個或多個實施例。在本說明書一個或多個實施例和所附申請專利範圍中所使用的單數形式的“一種”、“所述”和“該”也旨在包括多數形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“和/或”是指並包含一個或多個相關聯的列出項目的任何或所有可能組合。
應當理解,儘管在本說明書一個或多個實施例可能採用術語第一、第二、第三等來描述各種資訊,但這些資訊不應限於這些術語。這些術語僅用來將同一類型的資訊彼此區分開。例如,在不脫離本說明書一個或多個實施例範圍的情況下,第一資訊也可以被稱為第二資訊,類似地,第二資訊也可以被稱為第一資訊。取決於語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“回應於確定”。
以上所述僅為本說明書一個或多個實施例的較佳實施例而已,並不用以限制本說明書一個或多個實施例,凡在本說明書一個或多個實施例的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本說明書一個或多個實施例保護的範圍之內。