這裡將詳細地對示例性實施例進行說明,其示例表示在圖式中。下面的描述涉及圖式時,除非另有表示,不同圖式中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式並不代表與本發明一個或多個實施例相一致的所有實施方式。相反,它們僅是與如所附申請專利範圍中所詳述的、本發明一個或多個實施例的一些方面相一致的裝置和方法的例子。
需要說明的是:在其他實施例中並不一定按照本發明示出和描述的順序來執行相應方法的步驟。在一些其他實施例中,其方法所包括的步驟可以比本發明所描述的更多或更少。此外,本發明中所描述的單個步驟,在其他實施例中可能被分解為多個步驟進行描述;而本發明中所描述的多個步驟,在其他實施例中也可能被合併為單個步驟進行描述。
圖1是一示例性實施例提供的一種示例環境的示意圖。如圖1所示,示例環境100允許實體參與區塊鏈網路102。區塊鏈網路102可以為公有類型、私有類型或聯盟類型的區塊鏈網路。示例環境100可以包括計算設備104、106、108、110、112和網路114;在一實施例中,網路114可以包括區域網(Local Area Network,LAN)、廣域網路(Wide Area Network,WAN)、網際網路或其組合,並連接至網站、用戶設備(例如計算設備)和後端系統。在一實施例中,可以通過有線和/或無線通訊方式存取網路114。
在某些情況下,計算設備106、108可以是雲計算系統的節點(未顯示),或者每個計算設備106、108可以是單獨的雲計算系統,包括由網路互連並作為分散式處理系統工作的多台電腦。
在一實施例中,計算設備104~108可以運行任何適當的計算系統,使其能夠作為區塊鏈網路102中的節點;例如,計算設備104~108可以包括但不限於伺服器、桌上型電腦、筆記型電腦、平板電腦計算設備和智慧手機。在一實施例中,計算設備104~108可以歸屬於相關實體並用於實現相應的服務,例如該服務可以用於對某一實體或多個實體之間的交易進行管理。
在一實施例中,計算設備104~108分別儲存有區塊鏈網路102對應的區塊鏈帳本。計算設備104可以是(或包含)用於提供瀏覽器功能的網路服務器,該網路服務器可基於網路114提供與區塊鏈網路102相關的視覺化資訊。在一些情況下,計算設備104可以不參與區塊驗證,而是監控區塊鏈網路102以確定其他節點(譬如可以包括計算設備106-108)何時達成共識,並據此產生相應的區塊鏈視覺化用戶介面。
在一實施例中,計算設備104可接收用戶端設備(例如計算設備110或計算設備112)針對區塊鏈視覺化用戶介面發起的請求。在一些情況下,區塊鏈網路102的節點也可以作為用戶端設備,比如計算設備108的用戶可以使用運行在計算設備108上的瀏覽器向計算設備104發送上述請求。
回應於上述請求,計算設備104可以基於儲存的區塊鏈帳本產生區塊鏈視覺化用戶介面(如網頁),並將產生的區塊鏈視覺化用戶介面發送給請求的用戶端設備。如果區塊鏈網路102是私有類型或聯盟類型的區塊鏈網路,對區塊鏈視覺化用戶介面的請求可以包括用戶授權資訊,在產生區塊鏈視覺化用戶介面併發送給請求的用戶端設備之前,可以由計算設備104對該用戶授權資訊進行驗證,並在驗證通過後返回相應的區塊鏈視覺化用戶介面。
區塊鏈視覺化用戶介面可以顯示在用戶端設備上(例如可顯示在圖1所示的用戶介面116中)。當區塊鏈帳本發生更新時,用戶介面116的顯示內容也可以隨之發生更新。此外,用戶與用戶介面116的交互可能導致對其他用戶介面的請求,例如顯示區塊清單、區塊詳情、交易清單、交易詳情、帳戶清單、帳戶詳情、合約列表、合約詳情或者用戶對區塊鏈網路實施搜索而產生的搜索結果頁面等。
圖2是一示例性實施例提供的一種概念架構的示意圖。如圖2所示,該概念架構200包括實體層202、託管服務層204和區塊鏈網路層206。例如,實體層202可以包括三個實體:實體1、實體2和實體3,每個實體都有各自的交易管理系統208。
在一實施例中,託管服務層204可以包括每個事務管理系統208對應的介面210。例如,各個事務管理系統208使用協定(例如超文字傳輸協定安全(HTTPS)等)通過網路(例如圖1中的網路114)與各自的介面210通信。在一些例子中,每個介面210可以提供各自對應的交易管理系統208與區塊鏈網路層206之間的通信連接;更具體地,介面210可與區塊鏈網路層206的區塊鏈網路212通信。在一些例子中,介面210和區塊鏈網路層206之間的通信可以使用遠端程序呼叫(Remote Procedure Call,RPC)而實現。在一些例子中,介面210可以向交易管理系統208提供用於存取區塊鏈網路212的API介面。
如本文所述,區塊鏈網路212以對等網路的形式提供,該對等網路包括多個節點214,這些節點214分別用於對塊鏈資料所形成的區塊鏈帳本216進行持久化;其中,圖2中僅示出了一份區塊鏈帳本216,但區塊鏈網路212中可以存在多份區塊鏈帳本216或其副本,比如每一節點214可以分別維護一份區塊鏈帳本216或其副本。
區塊鏈一般被劃分為三種類型:公有鏈(Public
Blockchain),私有鏈(Private Blockchain)和聯盟鏈(
Consortium Blockchain)。此外,還有多種類型的結合,比如私有鏈+聯盟鏈、聯盟鏈+公有鏈等不同組合形式。其中去中心化程度最高的是公有鏈。公有鏈以比特幣、乙太坊為代表,加入公有鏈的參與者可以讀取鏈上的資料記錄、參與交易以及競爭新區塊的記帳權等。而且,各參與者(即節點)可自由加入以及退出網路,並進行相關操作。私有鏈則相反,該網路的寫入許可權由某個組織或者機構控制,資料讀取許可權受組織規定。簡單來說,私有鏈可以為一個弱中心化系統,參與節點具有嚴格限制且少。這種類型的區塊鏈更適合於特定機構內部使用。聯盟鏈則是介於公有鏈以及私有鏈之間的區塊鏈,可實現“部分去中心化”。聯盟鏈中各個節點通常有與之相對應的實體機構或者組織;參與者通過授權加入網路並組成利益相關聯盟,共同維護區塊鏈運行。
區塊鏈網路中通常採用兩種交易模型,即UTXO (Unspent Transaction Output,未花費的交易輸出)模型和帳戶模型。UTXO模型的典型應用場景為比特幣區塊鏈,該模型下的鏈上資產以交易輸出的形式存在,當一筆交易存在未花費的交易輸出時,該未花費的交易輸出歸私密金鑰持有者所有;在使用時,可以將一個或多個未花費的交易輸出作為輸入,並指定一個或多個輸出,從而形成新的一筆或多筆未花費的交易輸出。雖然UTXO模型被多種區塊鏈網路所採用,但對智慧合約的支援很弱,從而對應用場景造成了較大限制。而帳戶模型的典型應用場景為乙太坊區塊鏈,該模型下通過創建帳戶,將帳戶持有的鏈上資產表現為帳戶位址對應的餘額,每筆轉帳交易可以將資產從一個帳戶位址轉移至另一個帳戶位址,且交易的金額直接更新至帳戶位址對應的餘額。相比於UTXO模型而言,帳戶模型能夠支援完備的智慧合約功能,具有較好的場景擴展性。
通過區塊鏈網路所採用的分散式架構,以及區塊所採用的鏈式結構,使得資訊可以永久、無篡改地記錄在各個區塊鏈節點統一維護的區塊鏈帳本中。但是,由於區塊鏈帳本完全公開,導致資訊隱私性無法得到保障。例如,任意用戶可以在任意區塊鏈節點上查詢區塊鏈帳本,以獲知某一用戶持有的資產、某一交易的轉帳額等資訊,而這些可能都是敏感的、需要隱藏的資訊。因此,相關技術中提出了基於承諾的機密交易(Confidential Transaction)方案,可以將區塊鏈帳本中記錄的帳戶餘額、資產額、交易的匯款額等敏感性資料均轉換為相應的承諾數額,而避免在區塊鏈帳本中直接記載這些敏感性資料的明文數額。例如,當採用Pedersen承諾機制時,假定原始數額為t,相應的承諾數額可以為PC(r, t)=r×G+t×H,其中G、H為橢圓曲線的產生元,r為亂數,並且r的取值僅由私人(如帳戶擁有者、資產持有者、交易參與者等)掌握,使得無關人員僅根據PC(r, t)的取值將無法反推出原始數額t。同時,承諾數額還具有同態特性,譬如PC(r1, t1)-PC(r2, t2)=PC(r1-r2, t1-t2),使得承諾數額之間可以直接參與交易過程中的計算。
具體的,在UTXO模型下,可以通過同態加密或同態承諾技術對交易金額進行保護,以及利用區間證明技術保證交易的輸出非負等。而在帳戶模型下,可以通過同態加密或同態承諾技術對交易金額進行保護,以及利用區間證明技術保證交易額非負且帳戶餘額足夠支付。
在UTXO模型下,將一個或多個交易輸出作為一筆轉帳交易的輸入,並在轉帳完成後形成一個或多個新的交易輸出。可見,一個交易輸出只會在一筆轉帳交易中被花費,無法被多筆轉帳交易所花費,使得針對一筆轉帳交易產生的區間證明僅與該轉帳交易輸入相關,與其他轉帳交易的輸入無關,因而UTXO模型天然地具有高的交易併發性。但是,UTXO模型會導致區塊鏈網路中的資產數量遠大於用戶數量,可能對區塊鏈儲存造成極大的挑戰;同時,如前所述,UTXO模型對智慧合約的支援很弱,限制了UTXO模型能夠使用的場景。
雖然帳戶模型可以解決UTXO模型對區塊鏈儲存造成的挑戰,以及通過對智慧合約的支持而擴展更多的應用場景,但是:在帳戶模型下,每筆交易的輸入均為帳戶的餘額,每筆交易的區間證明都與帳戶的餘額相關,而帳戶的餘額在每筆交易後都會發生更新,使得同一帳戶下的所有交易需要按順序串列執行,即一筆交易結束並導致帳戶的餘額發生更新後,才能夠針對下一筆交易產生區間證明、觸發實施下一筆交易,否則交易會因為區間證明不合法而被共識節點拒絕執行。因此,在帳戶模型下使用帶有區間證明的隱私保護技術時,會嚴重地阻礙交易的輸送量。
為了解決帳戶模型下的併發性問題,確保對智慧合約功能的充分支持,本發明針對相關技術中的帳戶模型提出了改進,以使其能夠適應於高輸送量的併發交易。下面結合實施例對本發明的相關方案進行介紹。
圖3是一示例性實施例提供的一種區塊鏈網路中實現機密交易的方法的流程圖。如圖3所示,該方法應用於匯款方設備,可以包括以下步驟:
步驟302,確定匯款方與收款方之間的匯款額,所述匯款方在區塊鏈帳本上存在對應的匯款方帳戶,所述匯款方帳戶包括被記錄為收入餘額承諾的收入餘額、相應資產額被記錄為資產額承諾的資產和各個取值的資產額承諾的統計數量,其中相同資產額的資產具有相同的資產額承諾。
匯款額可以由匯款方與收款方之間協商確定,也可以由匯款方自行確定。基於已確定的匯款額,可以從匯款方帳戶中選取恰當的資產,以用於支付該匯款額。
匯款方對應於匯款方帳戶、收款方對應於收款方帳戶,匯款方帳戶與收款方帳戶均記錄於區塊鏈帳本中。區塊鏈網路中的每一區塊鏈節點分別維護有一份區塊鏈帳本,而基於共識機制可以確保所有區塊鏈節點維護的區塊鏈帳本的內容一致,因而可以認為所有區塊鏈節點共同維護了一份區塊鏈帳本。
如前所述,本發明針對相關技術中的帳戶模型進行了改進。例如,圖4是一示例性實施例提供的一種區塊鏈帳戶結構的示意圖。假定匯款方帳戶為如圖4所示的帳戶A,該帳戶A包括收入餘額和資產資訊。其中,收入餘額的明文數額為Au,而出於保密的目的,在區塊鏈帳本上具體記錄為相應的收入餘額承諾PC(Au, r_Au),其中r_Au為亂數。
資產資訊用於記錄匯款方所持有的資產,該資產是基於匯款方所持有的餘額而產生,區別於UTXO模型中的交易輸出。比如,基於匯款方持有的明文數額為t_a_1的餘額,可以結合亂數r_a_1產生相應的承諾數額PC(t_a_1, r_a_1),相當於匯款方持有一份資產額為t_a_1、資產額承諾為PC(t_a_1, r_a_1)的資產;類似地,可以基於匯款方持有的明文數額為t_a_2的餘額和亂數r_a_2產生相應的承諾數額PC(t_a_2, r_a_2),相當於匯款方持有一份資產額為t_a_2、資產額承諾為PC(t_a_2, r_a_2)的資產;以此類推,可以產生其他的具有相同或不同資產額的資產。
對於具有相同資產額的不同資產而言,本發明中可以限定同一取值的資產額必然選取相同的亂數,譬如上述資產額t_a_1必然對應於亂數r_a_1、資產額t_a_2必然對應於亂數r_a_2,使得同一取值的資產額必然對應於相同取值的資產額承諾,比如資產額t_a_1必然對應於資產額承諾PC(t_a_1, r_a_1)、資產額t_a_2必然對應於資產額承諾PC(t_a_2, r_a_2)。因此,匯款方帳戶所含的資產資訊可以具體包含各個取值的資產額承諾和每一取值的資產額承諾的統計數量,比如圖4所示的帳戶A中,資產額承諾PC(t_a_1, r_a_1)對應的統計數量為n1、資產額承諾PC(t_a_2, r_a_2)對應的統計數量為n2,即匯款方持有n1個取值為PC(t_a_1, r_a_1)的資產額承諾、n2個取值為PC(t_a_2, r_a_2)的資產額承諾。這樣,相當於將匯款方帳戶所含的資產進行了組別劃分,每一資產組的所有資產對應於同一預設取值的資產額(或資產額承諾),且不同資產組的資產對應於不同預設取值的資產額(或資產額承諾);當然,所有資產可以對應於同一預設取值的資產額(或資產額承諾),相當於僅存在一個資產組。
基於上述方式記錄匯款方帳戶所含的資產,只需要記錄各個資產組對應的資產額承諾和每一資產組對應的統計數量,譬如圖4中的一個資產組對應的資產額承諾為PC(t_a_1, r_a_1)、統計數量為n1,另一個資產組對應的資產額承諾為PC(t_a_2, r_a_2)、統計數量為n2,而無需分別記錄每一資產的詳細資訊,使得資產發生增減變化時僅需調整對應的統計數量的取值,可以極大地降低資產資訊的維護成本,有助於緩解儲存壓力。
與匯款方帳戶相類似的,收款方帳戶同樣包含收入餘額和資產資訊,收入餘額被記錄為收入餘額承諾,資產資訊包括資產額承諾的各個取值及其統計數量,其中相同資產額的資產具有相同的資產額承諾,此處不再贅述。
步驟304,根據所述匯款方帳戶中被選取的資產額承諾和每一被選取的資產額承諾對應的指定數量創建匯款交易,所述匯款交易包含所述匯款額對應的匯款額承諾、每一被選取的資產額承諾和相應的指定數量、用於證明所述匯款額非負且不大於資產總額的區間證明,所述資產總額為每一被選取的資產額承諾對應的資產額與相應的指定數量的加權和。
根據匯款方與收款方之間的匯款額,可以選取匯款方帳戶所含的一個或多個資產額承諾,以及每一被選取的資產額承諾對應的指定數量。比如,當匯款額為t時,如果選取的資產額承諾分別為PC(t_a_1, r_a_1)和PC(t_a_2, r_a_2),且對應的指定數量分別為x1和x2,那麼可以確定資產總額為(t_a_1*x1+t_a_2*x2),並且應當確保0≤t≤ (t_a_1*x1+t_a_2*x2);具體的,可以產生用於證明匯款額非負且不大於資產總額的區間證明,從而在不暴露匯款額和資產總額的明文數值的情況下,即可基於該區間證明來驗證是否滿足0≤t≤(t_a_1*x1+t_a_2*x2)。
步驟306,向區塊鏈提交所述匯款交易,使得每一被選取的資產額承諾對應的統計數量在交易完成後減去相應的指定數量、所述匯款方帳戶的收入餘額在交易完成後增加找零額承諾、所述收款方在區塊鏈帳本上對應的收款方帳戶的收入餘額在交易完成後增加所述匯款額承諾。
匯款交易被提交至區塊鏈後,可由某一區塊鏈節點將該匯款交易打包至區塊中,該區塊在經過共識後被添加至區塊鏈中,使得該區塊所含的上述匯款交易在所有區塊鏈節點上被執行。當然,區塊鏈節點可以針對匯款交易進行驗證,比如驗證匯款方、收款方的簽名、驗證上述的區間證明等,從而在通過驗證後允許執行該匯款交易,否則可以解決執行。
匯款交易的輸入來自匯款方帳戶中的資產,而輸出包括兩個部分:一部分的輸出目標為收款方帳戶、輸出額為匯款額(實際記錄為匯款額承諾),另一部分的輸出目標為收款方帳戶、輸出額為找零額(實際記錄為找零額承諾)。其中,找零額為上述的資產總額與匯款額之差;比如,當資產總額為(t_a_1*x1+t_a_2*x2)、匯款額為t時,可以確定找零額t’=t_a_1*x1+t_a_2*x2-t,找零額承諾為PC(t’, r’),r’為亂數。
可見,基於本發明改進後的帳戶模型,收入餘額專用於實現收款(作為匯款方時用於匯入找零額,作為收款方時用於匯入匯款額)、資產專用於實現匯款,可以實現同一帳戶的收款與匯款之間的解耦,因而可使一個用戶作為匯款交易TX1的匯款方、作為匯款交易TX2的收款方而同時參與至匯款交易TX1和TX2中,實現了帳戶模型下的交易併發,可以提升區塊鏈網路中的交易執行效率。
同時,由於在產生上述匯款額與資產總額之間的區間證明時,資產總額的取值僅與被選取的資產額承諾及其指定數量相關,並不涉及區塊鏈帳本上記錄的各個資產額承諾的統計數量,使得不同匯款交易可以分別產生相應的區間證明且互不影響。進一步的,由於在區塊鏈帳本上對各個取值的資產額承諾的統計數量採用明文形式進行記錄,使得區塊鏈節點可以對匯款交易中包含的指定數量與區塊鏈帳本上記錄的統計數量進行直接比較:若指定數量不大於統計數量,則允許執行相應的匯款交易,否則不允許執行。因此,同一用戶可以同時作為多個匯款交易的匯款方,以實現帳戶模型下的交易併發,可以提升區塊鏈網路中的交易執行效率;以及,當在後產生的匯款交易優先到達區塊鏈節點時,區塊鏈節點可以優先處理該在後產生的匯款交易,而無需等待在先產生的匯款交易執行完成,避免了區塊鏈節點處的交易阻塞。
下面以作為匯款方的用戶A、作為收款方的用戶B為例,對本發明的匯款交易的實施過程進行描述。圖5是一示例性實施例提供的一種隱私保護的匯款交易的流程圖;如圖5所示,匯款方、收款方和區塊鏈節點之間的交互過程可以包括以下步驟:
步驟501,匯款方確定匯款額t。
在起草匯款交易時,匯款額t可由匯款方與收款方之間進行協商。當然,匯款方也可以自行確定匯款額t,由收款方在後續步驟中予以確認。其中,匯款方是指匯款交易中對款項、資產等資源進行匯出的角色,相應地收款方是指匯款交易中對款項、資產等資源進行接收的角色。例如,用戶A向用戶B進行匯款時,用戶A為匯款方、用戶B為收款方;同時,當用戶B向用戶A進行匯款時,用戶B為匯款方、用戶A為收款方。因此,匯款方、收款方的角色與用戶之間並不存在綁定關係,需要根據實際的匯款關係來確定。
假定用戶A作為匯款方、用戶B作為收款方,由用戶A向用戶B進行匯款。圖6是一示例性實施例提供的一種匯款前後的帳戶變化的示意圖。如圖6所示,假定用戶A在區塊鏈帳本上存在相應的帳戶A、用戶B在區塊鏈帳本上存在相應的帳戶B。如前所述,帳戶A可以包括收入餘額和資產資訊,其中收入餘額被記錄為PC(Au, r_Au)、資產資訊被記錄為[n1, PC(t_a_1, r_a_1)]和[n2, PC(t_a_2, r_a_2)]等,表明帳戶A中對應於資產額承諾PC(t_a_1, r_a_1)的資產的統計數量為n1、對應於資產額承諾PC(t_a_2, r_a_2)的資產的統計數量為n2等。類似地,帳戶B可以包括收入餘額和資產資訊,其中收入餘額被記錄為PC(Bu, r_Bu)、資產資訊被記錄為[m1, PC(t_b_1, r_b_1)]和[m2, PC(t_b_2, r_b_2)]等,表明帳戶B中對應於資產額承諾PC(t_b_1, r_b_1)的資產的統計數量為m1、對應於資產額承諾PC(t_b_2, r_b_2)的資產的統計數量為m2等。
步驟502,匯款方確定匯款額t對應的亂數r。
匯款方為匯款額t產生亂數r後,可以根據亂數r對匯款額t進行處理得到相應的匯款額承諾T=PC(t,r)。例如,當採用Pedersen承諾機制時,T=PC(t,r)=r*G+t*H。
步驟503,匯款方通過鏈下通道將(r,t,T)發送至收款方。
通過將(r,t,T)由鏈下通道而非區塊鏈網路進行發送,可以避免匯款亂數r和匯款額t被記錄至區塊鏈帳本中,確保匯款額t除匯款方和收款方之外不可知。
步驟504,收款方對收到的(r,t,T)進行驗證。
收款方可以對匯款額t進行驗證,以確定為希望收取的匯款數額。例如,當匯款額承諾T是基於Perdersen承諾機制而產生時,收款方可以對匯款額承諾T進行驗證的過程,即收款方可以通過Perdersen承諾機制對亂數r和匯款額t進行計算,以驗證匯款額承諾T= PC(t,r)是否正確,若正確則表明驗證通過,否則驗證不通過。
步驟505,收款方在驗證通過後,產生簽名並返回至匯款方。
在驗證通過後,收款方可以利用收款方私密金鑰對(A,B:T)進行簽名,產生簽名SigB並返回至匯款方。該簽名SigB表明收款方同意由匯款方對應的帳戶A向收款方對應的帳戶B實施匯款額承諾為T的匯款交易。
步驟506,在收到簽名SigB後,匯款方根據選取的資產額承諾和指定數量產生區間證明PR。
如前所述,諸如圖6所示的帳戶A中包含若干資產額承諾及其對應的統計數量,比如資產額承諾PC(t_a_1, r_a_1)對應的統計數量為n1、資產額承諾PC(t_a_2, r_a_2)對應的統計數量為n2。與匯款額t相類似的,資產額承諾PC (t_a_1, r_a_1)是根據資產額t_a_1和亂數r_a_1進行計算得到、資產額承諾PC(t_a_2, r_a_2)是根據資產額t_a_2和亂數r_a_2進行計算得到。同時,本發明中在計算資產額對應的資產額承諾時,限定為:當不同資產的資產額相同時,相應選取的亂數也相同,以確保這些資產額相同的多份資產可以對應產生相同的資產額承諾,因而使得同一帳戶記憶體在多份對應於同一資產額承諾的資產,並且不需要具體關注、記錄和區分這些資產,只需要記錄資產額承諾的取值和資產數量(即統計數量)即可。而花費這些資產時,只需要確定被花費的資產對應的資產額承諾,並基於花費情況對相應的統計數量進行調整即可,下文將對此進行詳述。
根據匯款額t的取值,可以選取恰當的資產組合,以滿足匯款需求。假定匯款額t=215,t_a_1=20、t_a_2= 100,那麼可以選取1份資產額為t_a_1的資產、2份資產額為t_a_2的資產,組合得到t_a_1+t_a_2*2=220>t=215,可以滿足匯款需求。因此,匯款方可以選取資產額承諾PC (t_a_1, r_a_1)和資產額承諾PC(t_a_2, r_a_2),並設置資產額承諾PC(t_a_1, r_a_1)對應的指定數量為x1=1、資產額承諾PC(t_a_2, r_a_2)對應的指定數量為x2=2。
而相應地,匯款方可以根據被選取的資產額承諾PC (t_a_1, r_a_1)和資產額承諾PC(t_a_2, r_a_2)、對應的指定數量x1和x2,以及匯款額t,產生區間證明PR,該區間證明PR用於證明:0≤t≤(t_a_1*x1+t_a_2*x2)。本發明中可以採用相關技術中的Bulletproofs方案、Borromean環簽名方案等產生上述的區間證明,本發明並不對此進行限制;而區塊鏈節點可以在密文狀態下驗證上述的“0≤t≤(t_a_1*x1
+t_a_2*x2)”是否成立,既可以確保匯款交易符合條件,又可以避免暴露匯款額t、資產額t_a_1、資產額t_a_2等的明文取值。
同時,根據上述區間證明PR的產生過程,可以確定:區間證明PR與帳戶A中各個資產額承諾的統計數量無關,因而除了上述的匯款交易之外,帳戶A還可以同時參與其他匯款交易,並且均能夠順利產生區間證明而不會相互影響,從而實現併發交易。
步驟507,匯款方對交易內容{A, B:T, [PC(t_a_1, r_a_1), x1; PC(t_a_2, r_a_2), x2], PR;SigB}進行簽名,產生簽名SigA。
匯款方可以利用匯款方私密金鑰對交易內容{A, B:T, [PC(t_a_1, r_a_1), x1; PC(t_a_2, r_a_2), x2], PR;SigB}進行簽名,產生簽名SigA。
步驟508,匯款方向區塊鏈提交交易。
匯款方可以將匯款交易提交至區塊鏈網路中的某一區塊鏈節點,該匯款交易還可以進而被傳輸至區塊鏈網路中的所有區塊鏈節點,並由各個區塊鏈節點分別對該匯款交易進行驗證,以在驗證通過時執行匯款操作、在驗證未通過時拒絕匯款。
步驟509,區塊鏈節點檢查交易是否執行過。
此處的區塊鏈節點可以表示區塊鏈網路中的任意一個區塊鏈節點,即區塊鏈網路中的每一區塊鏈節點均會收到上述匯款交易,並通過步驟509~512等實施驗證等操作。
區塊鏈節點在收到上述匯款交易後,可以利用相關技術中的防雙花或防重放機制,驗證該匯款交易是否已經執行過;如果已經執行過,可以拒絕執行該匯款交易,否則轉入步驟510。
步驟510,區塊鏈節點檢查簽名。
在一實施例中,區塊鏈節點可以檢查該匯款交易中包含的簽名SigA、SigB是否正確;如果不正確,可以拒絕執行該匯款交易,否則轉入步驟511。
步驟511,區塊鏈節點檢查區間證明PR。
在一實施例中,區塊鏈節點可以基於區間證明技術對該匯款交易包含的區間證明PR進行檢查,以確定是否滿足0≤t≤(t_a_1*x1+t_a_2*x2)。如果不滿足,可以拒絕執行該匯款交易,否則轉入步驟512。
步驟512,區塊鏈節點檢查統計數量是否不小於指定數量。
由於帳戶A中各個資產額承諾對應的統計數量以明文形式記錄於區塊鏈帳本上,且指定數量也以明文形式記錄於匯款交易中,使得區塊鏈節點可以直接將統計數量與指定數量進行比較,以確定帳戶A是否足夠支付。以圖6所示,由於資產額承諾PC(t_a_1, r_a_1)的統計數量為n1、資產額承諾PC(t_a_2, r_a_2)的統計數量為n2,而匯款交易中資產額承諾PC(t_a_1, r_a_1)對應的指定數量為x1、資產額承諾PC(t_a_2, r_a_2)對應的指定數量為x2,因而只要確定n1≥x1、n2≥x2,即表明帳戶A足夠支付,可以完成匯款交易。
同時,由於採用明文比較,因而不需要在匯款交易中添加帳戶A足夠支付的區間證明,這樣既可以省去區間證明的產生過程、提升交易的產生效率,又可以省去區間證明的驗證過程、提升交易的執行效率。
步驟513,區塊鏈節點在維護的區塊鏈帳本中更新用戶A、用戶B分別對應的帳戶。
在通過步驟509~512的驗證後,區塊鏈節點可以分別對區塊鏈帳本中記載的帳戶A、帳戶B進行更新,如圖6所示:
在帳戶A中,交易前的收入餘額為Au、在區塊鏈帳本中被記錄為相應的收入餘額承諾PC(Au, r_Au),交易前資產額承諾PC(t_a_1, r_a_1)對應的統計數量為n1、資產額承諾PC(t_a_2, r_a_2)對應的統計數量為n2。在交易完成後,資產額承諾PC(t_a_1, r_a_1)對應的統計數量減小x1、更新為n1-x1,而資產額承諾PC(t_a_2, r_a_2)對應的統計數量減小x2、更新為n2-x2;同時,收入餘額增加了找零額t’、對應於找零額承諾PC(t’, r’),因而在區塊鏈帳本中記錄的收入餘額承諾更新為PC(Au, r_Au)+PC(t’, r’)。需要指出的是:雖然上文中並未具體描述,但找零額承諾PC(t’, r’)也被包含於上述的匯款交易中,使得區塊鏈節點在執行該匯款交易時,可以根據找零額承諾PC(t’, r’)對帳戶A的收入餘額進行更新。
在帳戶B中,交易前的收入餘額為Bu、在區塊鏈帳本中被記錄為相應的收入餘額承諾PC(Bu, r_Bu),交易前資產額承諾PC(t_b_1, r_b_1)對應的統計數量為m1、資產額承諾PC(t_b_2, r_b_2)對應的統計數量為m2。在交易完成後,統計數量m1和m2不變,而收入餘額Bu則增加了匯款額t,因而在區塊鏈帳本中被記錄為相應的收入餘額承諾PC(Bu, r_Bu)+PC(t,r)。
如上文所述,當帳戶包含上述的收入餘額和資產資訊時,可以在保障交易隱私的情況下,實現帳戶的輸入與輸出解耦,實現帳戶模型下的高併發轉帳。但是,由於匯入帳戶的資金都記入收入餘額、而匯出的資金都從資產資訊中扣除(減小統計數量的取值),因而統計數量的取值(即帳戶內的資產)在不斷下降,可能小於匯款交易中的指定數量而影響到匯款交易的執行。為了確保統計數量的數額總是能夠處於充足狀態、足夠完成交易,可以定期或隨時通過儲值調整統計數量的數額。
以匯款方帳戶的儲值過程為例。可以創建儲值交易,該儲值交易包含至少一個指定取值的資產額承諾和相應的儲值數量、用於證明匯款方帳戶的收入餘額不小於儲值額的區間證明,該儲值額為指定取值的資產額承諾對應的資產額與儲值數量的加權和(如果僅涉及到一個指定取值的資產額承諾,則儲值額為該資產額承諾對應的資產額與儲值數量的乘積);向區塊鏈提交儲值交易,使得匯款方帳戶中對應於上述指定取值的資產額承諾的統計數量在交易完成後增加相應的儲值數量、匯款方帳戶的收入餘額在交易完成後減少上述指定的至少一個取值的資產額承諾與相應的儲值數量的加權和。換言之,可以將匯款方帳戶中的收入餘額劃分出至少一部分,將這部分餘額轉換為相應的資產,這些資產可使對應的資產額承諾的統計數量實現取值增大。當然,收款方帳戶也可以採用上述方式進行儲值。
雖然可以按照上述方式實現基於收入餘額的資產儲值操作,但是當帳戶參與的匯款交易較為頻繁、匯款額較大時,可能導致頻繁儲值,造成收入餘額頻繁參與資金的匯入與匯出(儲值),甚至使得匯入交易(其他帳戶向該帳戶進行匯款的交易)與儲值交易之間相應影響,反而造成效率下降。
因此,本發明針對圖4所示的帳戶結構提出了進一步改進。例如,圖7是一示例性實施例提供的另一種區塊鏈帳戶結構的示意圖。仍以帳戶A為例,在圖4所示帳戶結構的基礎上,除了包含收入餘額和資產資訊之外,圖7所示的帳戶A可以進一步包含主餘額,即帳戶A總共包含三部分:主餘額、收入餘額和資產資訊。其中,收入餘額專用於收取匯入交易的交易額、資產資訊專用於參與匯出交易,而主餘額用於對資產資訊進行儲值,從而避免由收入餘額承擔儲值任務,防止產生上文所述的影響。
以匯款方為例。匯款方可以創建儲值交易,該儲值交易包含指定的至少一個取值的資產額承諾和相應的儲值數量、用於證明主餘額不小於儲值額的區間證明,儲值額為上述指定的至少一個取值的資產額承諾對應的資產額與相應的儲值數量的加權和;向區塊鏈提交儲值交易,使得匯款方帳戶中對應於上述指定的至少一個取值的資產額承諾的統計數量在交易完成後增加相應的儲值數量、匯款方帳戶的主餘額在交易完成後減少上述指定的至少一個取值的資產額承諾與相應的儲值數量的加權和。例如,圖8是一示例性實施例提供的一種通過主餘額進行資產儲值的交互示意圖。如圖8所示,該交互過程可以包括以下步驟:
步驟801,匯款方確定指定取值的資產額和儲值數量。
匯款方可以設置指定取值的資產額和儲值數量,比如取值為100的資產額對應的儲值數量為3、取值為20的資產額對應的儲值數量為5,那麼可以確定本次總共的儲值額h=100*3+20*5=400。
匯款方可以確定帳戶中已存在的資產額承諾對應的資產額,並將其中的一個或多個資產額作為上述的指定取值的資產額,使得這些已存在的資產額承諾對應的統計數量在完成儲值後可以相應增加。或者,匯款方可以設置與已有資產額承諾所對應的資產額不同的其他資產額,比如當帳戶中已存在取值為100的資產對應的資產額承諾、取值為20的資產對應的資產額承諾時,可以設定上述的指定取值為50,從而儲值得到取值為50的資產對應的資產額承諾,而帳戶所含的資產資訊中可以新增該取值為50的資產對應的資產額承諾的統計數量。
雖然匯款方可以手動發起儲值交易,但是在一實施例中可以實現自動化的儲值操作。例如,可以為帳戶中各個取值的資產額承諾的統計數量設定水位值,當某一取值的資產額承諾對應的統計數量低於相應的水位值時,可以自動發起儲值交易,對該取值的資產額承諾進行儲值,以使得相應的統計數量上升至不低於水位值。
步驟802,匯款方產生區間證明PR。
在一實施例中,由於主餘額的取值Az在區塊鏈帳本中記錄為相應的承諾數額PC(Az, r_Az),其中r_Az為亂數,因而需要通過產生區間證明PR,以用於驗證主餘額的取值Az≥儲值額h≥0。
步驟803,匯款方對交易簽名後,提交至區塊鏈。
基於上述步驟,匯款方產生的儲值交易的交易內容可以為
Topup{A: [PC(t_a_1, r_a_1),y1;PC(t_a_2, r_a_2),y2],PR},“A”代表該帳戶A的帳戶地址,
[PC(t_a_1, r_a_1),y1;PC(t_a_2, r_a_2),y2]表明儲值目標為帳戶A所含的資產額承諾PC(t_a_1, r_a_1)的儲值數量為y1、資產額承諾PC(t_a_2, r_a_2)的儲值數量為y2。
同時,交易中可以增加一類型欄位,而匯款方在創建每一交易時,可以通過對類型欄位進行賦值,以標注所提交的交易的類型,從而對本發明中所涉及的匯款交易、儲值交易以及下文所述的合併交易、主餘額匯款交易等進行區分。例如,可以通過取值“Transfer”來標注匯款交易,並可以通過取值“Topup”來標注儲值交易。
匯款方採用持有的匯款方私密金鑰對上述的交易內容Topup{A:[PC(t_a_1, r_a_1),y1;PC(t_a_2, r_a_2),y2],PR}進行簽名,並將簽名後創建的儲值交易提交至區塊鏈網路,以由所有區塊鏈節點進行驗證和執行。
步驟804,區塊鏈節點驗證交易。
區塊鏈節點可以驗證上述儲值交易的簽名是否正確;如果不正確,可以拒絕執行該交易。
區塊鏈節點可以驗證上述儲值交易所含的區間證明PR,以確定是否滿足0≤(t_a_1*y1+t_a_2*y2)≤Az;如果不正確,可以拒絕執行該交易。
當所有驗證均通過後,可以轉入步驟805。
步驟805,區塊鏈節點更新帳戶。
在通過步驟804的驗證後,區塊鏈節點可以對區塊鏈帳本中記載的帳戶A進行更新。例如,圖9是一示例性實施例提供的一種儲值前後的帳戶變化情況的示意圖。如圖9所示:
交易前的主餘額為Az、在區塊鏈帳本中被記錄為相應的承諾數額PC(Az, r_Az),交易前的收入餘額為Au、在區塊鏈帳本中被記錄為相應的承諾數額PC(Au, r_Au),交易前的資產額承諾PC(t_a_1, r_a_1)對應於統計數量n1、資產額承諾PC(t_a_2, r_a_2)對應於統計數量n2。
在交易完成後,主餘額被扣除了(t_a_1*y1+t_a_2*y2),即前述各個取值的資產額與儲值數量的加權和,因而在區塊鏈帳本中被記錄為PC(Az, r_Az)-PC(t_a_1, r_a_1)*y1- PC(t_a_2, r_a_2)*y2,而資產資訊中的統計數量n1增加了儲值數量y1、統計數量n2增加了儲值數量y2,因而在區塊鏈帳本中以明文形式記錄為[n1+y1, PC(t_a_1, r_a_1)]和[n2+y2, PC(t_a_2, r_a_2)];同時,收入餘額的取值不變。
隨著帳戶中的資產資訊不斷參與匯出交易,而主餘額不斷向資產資訊進行儲值,會導致主餘額逐步減少;當主餘額減少至一定程度或減少至0時,將無法繼續儲值,因而可以將收入餘額中獲得的資金轉入主餘額中,以便於維持帳戶不斷地參與匯出交易。
以匯款方為例。匯款方可以創建合併交易,該合併交易包含指定的至少一個取值的資產額承諾和相應的合併數量;然後,向區塊鏈提交該合併交易,使得匯款方帳戶中對應於上述指定的至少一個取值的資產額承諾的統計數量在交易完成後減少相應的合併數量、主餘額在交易完成後增加合併額承諾,和/或匯款方帳戶的收入餘額在交易完成後清零、匯款方帳戶的主餘額在交易完成後增加相應的收入餘額承諾;其中,合併額承諾為上述指定的至少一個取值的資產額承諾與相應的合併數量的加權和。換言之,合併交易可以將收入餘額所含的資金全部併入主餘額,或者在一些情況下可以將至少一部分資產以資金形式併入主餘額,或者還可以同時將收入餘額所含的資金併入主餘額、將至少一部分資產以資金形式併入主餘額。例如,圖10是一示例性實施例提供的一種合併操作的交互示意圖。如圖10所示,該交互過程可以同時將收入餘額中的全部資金和指定數額的資產併入主餘額,具體包括以下步驟:
步驟1001,匯款方確定資產額承諾和合併數量。
通過選取一種或多種取值的資產額承諾以及每種資產額承諾對應的合併數量,可以確定匯款方希望合併至主餘額的資產額。例如,當被選取的資產額承諾分別為PC(t_a_1, r_a_1)和PC(t_a_2, r_a_2)時,如果資產額承諾PC(t_a_1, r_a_1)對應的合併數量為z1、資產額承諾PC(t_a_2, r_a_2) 對應的合併數量為z2,那麼可以確定相應的合併額為k=t_a_1*z1+t_a_2*z2。
步驟1002,匯款方對交易簽名後,提交至區塊鏈。
基於上述步驟,匯款方產生的合併交易的交易內容可以為
Merge{A: [PC(t_a_1, r_a_1),z1;PC(t_a_2, r_a_2),z2]},“A”代表該帳戶A的帳戶位址,表明需要對該帳戶A實施合併操作,[PC(t_a_1, r_a_1),z1;PC(t_a_2, r_a_2),z2]表明需要將z1數量且相應承諾為PC(t_a_1, r_a_1)的資產、z2數量且相應承諾為PC(t_a_2, r_a_2)的資產合併至主餘額。而Merge表明當前的交易類型為合併交易,以用於針對帳戶A實施合併操作。
由於收入餘額的全部資金都將轉入主餘額,因而不需要針對收入餘額的資金轉移產生區間證明;同時,由於資產資訊中採用明文形式記錄各個統計數量,合併交易中同樣以明文形式記錄合併數量,因而區塊鏈節點可以直接將統計數量與合併數量進行比較,從而在統計數量不小於合併數量時促成交易完成、否則不允許交易執行,同樣不需要產生區間證明。
匯款方採用持有的匯款方私密金鑰對上述的交易內容Merge{A: [PC(t_a_1, r_a_1),z1;PC(t_a_2, r_a_2),z2]}進行簽名,並將簽名後創建的儲值交易提交至區塊鏈網路,以由所有區塊鏈節點進行驗證和執行。
步驟1003,區塊鏈節點驗證交易。
區塊鏈節點可以驗證上述合併交易的簽名是否正確;如果不正確,可以拒絕執行該交易。
區塊鏈節點可以驗證上述合併交易中對應於各個資產額承諾的合併數量是否不大於相應的統計數量。比如,以資產額承諾PC(t_a_1, r_a_1)為例,假定合併交易中記錄的合併數量為z1=2,而區塊鏈帳本上記錄的統計數量為n1=5,那麼由於z1<n1,允許執行該合併交易;而如果合併數量為z1=4、統計數量為n1=3,那麼由於z1>n1,不允許執行該合併交易。
當所有驗證均通過後,可以轉入步驟1004。
步驟1004,區塊鏈節點更新帳戶。
在通過步驟1003的驗證後,區塊鏈節點可以對區塊鏈帳本中記載的帳戶A進行更新。例如,圖11是一示例性實施例提供的一種合併前後的帳戶變化情況的示意圖。如圖11所示:
交易前的主餘額為Az、在區塊鏈帳本中被記錄為相應的承諾數額PC(Az, r_Az),交易前的收入餘額為Au、在區塊鏈帳本中被記錄為相應的承諾數額PC(Au, r_Au),交易前的資產額承諾PC(t_a_1, r_a_1)對應於統計數量n1、資產額承諾PC(t_a_2, r_a_2)對應於統計數量n2。
在交易完成後,收入餘額變為0;資產額承諾PC(t_a_1, r_a_1)對應的統計數量n1減少了合併數量z1、更新為n1-z1,而資產額承諾PC(t_a_2, r_a_2)對應的統計數量n2減少了合併數量z2、更新為n2-z2;主餘額增加了收入餘額的全部資金、z1數量的資產額承諾PC(t_a_1, r_a_1)、z2數量的資產額承諾PC(t_a_2, r_a_2),因而在區塊鏈帳本中記錄的主餘額承諾更新為PC(Az, r_Az)+PC(Au, r_Au)+ PC(t_a_1, r_a_1)*z1+ PC(t_a_2, r_a_2)*z2。
雖然在本發明提供的實施例中,針對帳戶所含的主餘額、收入餘額、資產資訊,可以通過由資產資訊參與匯出交易、收入餘額參與匯入交易(收入餘額也在匯出交易中收取找零額)、主餘額參與上述的儲值交易和合併交易,但是並不意味著每一餘額僅能夠參與上述類型的交易。例如,本發明的帳戶結構,還可以相容:由主餘額參與匯出資金的主餘額轉帳交易等,下文分別予以介紹。
對於主餘額轉帳交易而言,可以根據匯款方與收款方之間的主餘額交易額,產生主餘額匯款交易,該主餘額匯款交易包含主餘額交易額對應的主餘額交易額承諾、用於證明主餘額交易額非負且不大於主餘額的區間證明;然後,匯款方可以向區塊鏈提交主餘額匯款交易,使得主餘額在交易完成後扣除主餘額交易額承諾、收款方帳戶的收入餘額在交易完成後增加主餘額交易額承諾。圖12是一示例性實施例提供的一種主餘額轉帳交易的流程圖。如圖12所示,匯款方、收款方和區塊鏈節點之間的交互過程可以包括以下步驟:
步驟1201,匯款方確定匯款額t_z。
在起草匯款交易時,匯款額t_z可由匯款方與收款方之間進行協商。當然,匯款方也可以自行確定匯款額t_z,由收款方在後續步驟中予以確認。
步驟1202,匯款方確定匯款額t_z對應的亂數r_z。
匯款方可以為該匯款額t_z產生亂數r_z,則譬如基於Pedersen承諾機制可以計算出匯款額t_z對應的匯款承諾T=PC(t_z, r_z)。
步驟1203,匯款方通過鏈下通道將(r_z,t_z,T)發送至收款方。
通過將(r_z,t_z,T)由鏈下通道而非區塊鏈網路進行發送,可以避免匯款亂數r_z和匯款額t_z被記錄至區塊鏈帳本中,確保匯款額t_z除匯款方和收款方之外不可知。
步驟1204,收款方對收到的(r_z,t_z,T)進行驗證。
收款方可以對匯款額t_z進行驗證,以確定為希望收取的匯款數額。以及,收款方可以對匯款承諾T進行驗證,即收款方可以通過Perdersen承諾機制對亂數r_z和匯款額t_z進行計算,以驗證匯款承諾T= PC(t_z,r_z)是否正確,若正確則表明驗證通過,否則驗證不通過。
步驟1205,收款方在驗證通過後,產生簽名並返回至匯款方。
在一實施例中,在驗證通過後,收款方可以利用收款方私密金鑰對(A,B:T)進行簽名,產生簽名SigB並返回至匯款方。該簽名SigB表明收款方同意由匯款方對應的帳戶A向收款方對應的帳戶B實施承諾為T的匯款交易。
步驟1206,在收到簽名SigB後,匯款方根據主餘額Az產生區間證明RP。
在一實施例中,為了確保匯款交易順利完成,區塊鏈節點需要確定匯款額t_z、主餘額Az滿足下述條件:0≤t_z≤Az,因而匯款方可以利用區間證明技術產生區間證明RP,以供後續過程中由區塊鏈節點進行驗證,使得區塊鏈節點在密文狀態下即可驗證交易是否符合上述條件。
步驟1207,匯款方對交易內容PrimaryTransfer (A,B:T,RP;SigB)進行簽名,產生簽名SigA。
匯款方可以利用匯款方私密金鑰對交易內容PrimaryTransfer (A,B:T,RP;SigB)進行簽名,產生簽名SigA。其中,PrimaryTransfer用於表明交易類型為主餘額轉帳交易,使得匯款額t_z從帳戶A的主餘額中扣除。
步驟1208,匯款方向區塊鏈提交交易。
匯款方將匯款交易提交至區塊鏈網路中的某一區塊鏈節點,並進而被傳輸至區塊鏈網路中的所有區塊鏈節點,並由各個區塊鏈節點分別對該匯款交易進行驗證,以在驗證通過時執行匯款操作、在驗證未通過時拒絕匯款。
步驟1209,區塊鏈節點檢查交易是否執行過。
此處的區塊鏈節點可以表示區塊鏈網路中的任意一個區塊鏈節點,即區塊鏈網路中的每一區塊鏈節點均會收到上述匯款交易,並通過步驟1209~1211等實施驗證等操作。
區塊鏈節點在收到上述匯款交易後,可以利用相關技術中的防雙花或防重放機制,驗證該匯款交易是否已經執行過;如果已經執行過,可以拒絕執行該匯款交易,否則轉入步驟1210。
步驟1210,區塊鏈節點檢查簽名。
區塊鏈節點可以檢查該匯款交易中包含的簽名SigA、SigB是否正確;如果不正確,可以拒絕執行該匯款交易,否則轉入步驟1211。
步驟1211,區塊鏈節點檢查區間證明RP。
區塊鏈節點可以基於區間證明技術對該匯款交易包含的區間證明RP進行檢查,以確定是否滿足0≤t_z≤Az。如果不滿足,可以拒絕執行該匯款交易,否則轉入步驟1212。
步驟1212,區塊鏈節點在維護的區塊鏈帳本中更新匯款方、收款方分別對應的帳戶A、帳戶B。
在一實施例中,在通過步驟1209~1211的驗證後,區塊鏈節點可以分別對區塊鏈帳本中記載的區塊鏈帳戶1、區塊鏈帳戶2進行更新。圖13是一示例性實施例提供的一種主餘額匯款前後的帳戶變化情況的示意圖。如圖13所示:
在帳戶A中,交易前的主餘額為Az、在區塊鏈帳本中被記錄為相應的承諾數額PC(Az, r_Az),交易前的收入餘額為Au、在區塊鏈帳本中被記錄為相應的承諾數額PC(Au, r_Au),交易前的資產額承諾PC(t_a_1, r_a_1)對應於統計數量n1、資產額承諾PC(t_a_2, r_a_2)對應於統計數量n2。在交易完成後,主餘額被扣除了上述的交易額t_z,因而在區塊鏈帳本中被記錄為相應的承諾數額PC(Az, r_Az)-PC(t_z,r_z),而收入餘額Au、統計數量n1-n2不變。
在帳戶B中,交易前的主餘額為Bz、在區塊鏈帳本中被記錄為相應的承諾數額PC(Bz, r_Bz),交易前的收入餘額為Bu、在區塊鏈帳本中被記錄為相應的承諾數額PC(Bu, r_Bu),交易前的資產額承諾PC(t_b_1, r_b_1)對應於統計數量m1、資產額承諾PC(t_b_2, r_b_2)對應於統計數量m2。在交易完成後,主餘額為Bz、統計數量n1-n2不變,而收入餘額則增加了匯款額t_z,因而在區塊鏈帳本中被記錄為相應的承諾數額PC(Bu, r_Bu)+PC(t_z,r_z)。
圖14是一示例性實施例提供的另一種區塊鏈網路中實現機密交易的方法的流程圖。如圖14所示,該方法應用於區塊鏈節點,可以包括以下步驟:
步驟1402,接收匯款交易,所述匯款交易包含匯款方與收款方之間的匯款額對應的匯款額承諾、至少一個資產額承諾和相應的指定數量、用於證明所述匯款額非負且不大於資產總額的區間證明,所述資產總額為所述至少一個資產額承諾對應的資產額與相應的指定數量的加權和;其中,所述匯款方在區塊鏈帳本上對應的匯款方帳戶包括被記錄為收入餘額承諾的收入餘額、相應資產額被記錄為資產額承諾的資產和各個取值的資產額承諾的統計數量,其中相同資產額的資產具有相同的資產額承諾。
匯款額可以由匯款方與收款方之間協商確定,也可以由匯款方自行確定。基於已確定的匯款額,可以從匯款方帳戶中選取恰當的資產,以用於支付該匯款額。
匯款方對應於匯款方帳戶、收款方對應於收款方帳戶,匯款方帳戶與收款方帳戶均記錄於區塊鏈帳本中。區塊鏈網路中的每一區塊鏈節點分別維護有一份區塊鏈帳本,而基於共識機制可以確保所有區塊鏈節點維護的區塊鏈帳本的內容一致,因而可以認為所有區塊鏈節點共同維護了一份區塊鏈帳本。
如前所述,本發明針對相關技術中的帳戶模型進行了改進。譬如圖4所示,帳戶A包括收入餘額和資產資訊。其中,收入餘額的明文數額為Au,而出於保密的目的,在區塊鏈帳本上具體記錄為相應的收入餘額承諾PC(Au, r_Au),其中r_Au為亂數。資產資訊用於記錄匯款方所持有的資產,該資產是基於匯款方所持有的餘額而產生,區別於UTXO模型中的交易輸出。比如,基於匯款方持有的明文數額為t_a_1的餘額,可以結合亂數r_a_1產生相應的承諾數額PC(t_a_1, r_a_1),相當於匯款方持有一份資產額為t_a_1、資產額承諾為PC(t_a_1, r_a_1)的資產;類似地,可以基於匯款方持有的明文數額為t_a_2的餘額和亂數r_a_2產生相應的承諾數額PC(t_a_2, r_a_2),相當於匯款方持有一份資產額為t_a_2、資產額承諾為PC(t_a_2, r_a_2)的資產;以此類推,可以產生其他的具有相同或不同資產額的資產。
對於具有相同資產額的不同資產而言,本發明中可以限定同一取值的資產額必然選取相同的亂數,譬如上述資產額t_a_1必然對應於亂數r_a_1、資產額t_a_2必然對應於亂數r_a_2,使得同一取值的資產額必然對應於相同取值的資產額承諾,比如資產額t_a_1必然對應於資產額承諾PC(t_a_1, r_a_1)、資產額t_a_2必然對應於資產額承諾PC(t_a_2, r_a_2)。因此,匯款方帳戶所含的資產資訊可以具體包含各個取值的資產額承諾和每一取值的資產額承諾的統計數量,比如圖4所示的帳戶A中,資產額承諾PC(t_a_1, r_a_1)對應的統計數量為n1、資產額承諾PC(t_a_2, r_a_2)對應的統計數量為n2,即匯款方持有n1個取值為PC(t_a_1, r_a_1)的資產額承諾、n2個取值為PC(t_a_2, r_a_2)的資產額承諾。這樣,相當於將匯款方帳戶所含的資產進行了組別劃分,每一資產組的所有資產對應於同一預設取值的資產額(或資產額承諾),且不同資產組的資產對應於不同預設取值的資產額(或資產額承諾);當然,所有資產可以對應於同一預設取值的資產額(或資產額承諾),相當於僅存在一個資產組。
基於上述方式記錄匯款方帳戶所含的資產,只需要記錄各個資產組對應的資產額承諾和每一資產組對應的統計數量,譬如圖4中的一個資產組對應的資產額承諾為PC(t_a_1, r_a_1)、統計數量為n1,另一個資產組對應的資產額承諾為PC(t_a_2, r_a_2) 、統計數量為n2,而無需分別記錄每一資產的詳細資訊,使得資產發生增減變化時僅需調整對應的統計數量的取值,可以極大地降低資產資訊的維護成本,有助於緩解儲存壓力。
與匯款方帳戶相類似的,收款方帳戶同樣包含收入餘額和資產資訊,收入餘額被記錄為收入餘額承諾,資產資訊包括資產額承諾的各個取值及其統計數量,其中相同資產額的資產具有相同的資產額承諾,此處不再贅述。
如前所述,匯款交易添加了匯款方帳戶中被選取的一個或多個資產額承諾,以及每一被選取的資產額承諾對應的指定數量。比如,當匯款額為t時,如果選取的資產額承諾分別為PC(t_a_1, r_a_1)和PC(t_a_2, r_a_2),且對應的指定數量分別為x1和x2,那麼可以確定資產總額為(t_a_1*x1+t_a_2*x2),並且應當確保0≤t≤(t_a_1*x1+ t_a_2*x2);具體的,可以產生用於證明匯款額非負且不大於資產總額的區間證明,從而在不暴露匯款額和資產總額的明文數值的情況下,即可基於該區間證明來驗證是否滿足0≤t≤(t_a_1*x1+t_a_2*x2)。
步驟1404,執行所述匯款交易,使得所述匯款交易所含每一資產額承諾對應的統計數量在交易完成後減去相應的指定數量、所述匯款方帳戶的收入餘額在交易完成後增加找零額承諾、所述收款方在區塊鏈帳本上對應的收款方帳戶的收入餘額在交易完成後增加所述匯款額承諾。
匯款交易被提交至區塊鏈後,可由某一區塊鏈節點將該匯款交易打包至區塊中,該區塊在經過共識後被添加至區塊鏈中,使得該區塊所含的上述匯款交易在所有區塊鏈節點上被執行。當然,區塊鏈節點可以針對匯款交易進行驗證,比如驗證匯款方、收款方的簽名、驗證上述的區間證明等,從而在通過驗證後允許執行該匯款交易,否則可以解決執行。
匯款交易的輸入來自匯款方帳戶中的資產,而輸出包括兩個部分:一部分的輸出目標為收款方帳戶、輸出額為匯款額(實際記錄為匯款額承諾),另一部分的輸出目標為收款方帳戶、輸出額為找零額(實際記錄為找零額承諾)。其中,找零額為上述的資產總額與匯款額之差;比如,當資產總額為(t_a_1*x1+t_a_2*x2)、匯款額為t時,可以確定找零額t’=t_a_1*x1+t_a_2*x2-t,找零額承諾為PC(t’, r’),r’為亂數。
可見,基於本發明改進後的帳戶模型,收入餘額專用於實現收款(作為匯款方時用於匯入找零額,作為收款方時用於匯入匯款額)、資產專用於實現匯款,可以實現同一帳戶的收款與匯款之間的解耦,因而可使一個用戶作為匯款交易TX1的匯款方、作為匯款交易TX2的收款方而同時參與至匯款交易TX1和TX2中,實現了帳戶模型下的交易併發,可以提升區塊鏈網路中的交易執行效率。
同時,由於在產生上述匯款額與資產總額之間的區間證明時,資產總額的取值僅與被選取的資產額承諾及其指定數量相關,並不涉及區塊鏈帳本上記錄的各個資產額承諾的統計數量,使得不同匯款交易可以分別產生相應的區間證明且互不影響。進一步的,由於在區塊鏈帳本上對各個取值的資產額承諾的統計數量採用明文形式進行記錄,使得區塊鏈節點可以對匯款交易中包含的指定數量與區塊鏈帳本上記錄的統計數量進行直接比較:若指定數量不大於統計數量,則允許執行相應的匯款交易,否則不允許執行。因此,同一用戶可以同時作為多個匯款交易的匯款方,以實現帳戶模型下的交易併發,可以提升區塊鏈網路中的交易執行效率;以及,當在後產生的匯款交易優先到達區塊鏈節點時,區塊鏈節點可以優先處理該在後產生的匯款交易,而無需等待在先產生的匯款交易執行完成,避免了區塊鏈節點處的交易阻塞。
如上文所述,當帳戶包含上述的收入餘額和資產資訊時,可以在保障交易隱私的情況下,實現帳戶的輸入與輸出解耦,實現帳戶模型下的高併發轉帳。但是,由於匯入帳戶的資金都記入收入餘額、而匯出的資金都從資產資訊中扣除(減小統計數量的取值),因而統計數量的取值(即帳戶內的資產)在不斷下降,可能小於匯款交易中的指定數量而影響到匯款交易的執行。為了確保統計數量的數額總是能夠處於充足狀態、足夠完成交易,可以定期或隨時通過儲值調整統計數量的數額。
以匯款方帳戶的儲值過程為例。區塊鏈節點可以接收儲值交易,該儲值交易包含至少一個指定取值的資產額承諾和相應的儲值數量、用於證明匯款方帳戶的收入餘額不小於儲值額的區間證明,儲值額為上述指定取值的資產額承諾對應的資產額與儲值數量的加權和;區塊鏈節點執行儲值交易,使得匯款方帳戶中對應於上述指定取值的資產額承諾的統計數量在交易完成後增加相應的儲值數量、匯款方帳戶的收入餘額在交易完成後減少上述指定的至少一個取值的資產額承諾與相應的儲值數量的加權和。換言之,可以將匯款方帳戶中的收入餘額劃分出至少一部分,將這部分餘額轉換為相應的資產,這些資產可使對應的資產額承諾的統計數量實現取值增大。當然,收款方帳戶也可以採用上述方式進行儲值。
雖然可以按照上述方式實現基於收入餘額的資產儲值操作,但是當帳戶參與的匯款交易較為頻繁、匯款額較大時,可能導致頻繁儲值,造成收入餘額頻繁參與資金的匯入與匯出(儲值),甚至使得匯入交易(其他帳戶向該帳戶進行匯款的交易)與儲值交易之間相應影響,反而造成效率下降。因此,本發明中可以針對圖4所示的帳戶結構實施進一步改進,得到如圖7所示的帳戶結構,其在圖4所示帳戶結構的基礎上,除了包含收入餘額和資產資訊之外,進一步包含主餘額,即帳戶A總共包含三部分:主餘額、收入餘額和資產資訊。其中,收入餘額專用於收取匯入交易的交易額、資產資訊專用於參與匯出交易,而主餘額用於對資產資訊進行儲值,從而避免由收入餘額承擔儲值任務,防止產生上文所述的影響。
以匯款方為例。區塊鏈節點可以接收儲值交易,該儲值交易包含指定的至少一個取值的資產額承諾和相應的儲值數量、用於證明主餘額不小於儲值額的區間證明,儲值額為上述指定的至少一個取值的資產額承諾對應的資產額與相應的儲值數量的加權和;區塊鏈節點執行儲值交易,使得匯款方帳戶中對應於上述指定的至少一個取值的資產額承諾的統計數量在交易完成後增加相應的儲值數量、匯款方帳戶的主餘額在交易完成後減少上述指定的至少一個取值的資產額承諾與相應的儲值數量的加權和。具體的交互過程可以參考圖8所示的實施例,以及圖9還示出了帳戶儲值前後的變化情況,此處不再贅述。
隨著帳戶中的資產資訊不斷參與匯出交易,而主餘額不斷向資產資訊進行儲值,會導致主餘額逐步減少;當主餘額減少至一定程度或減少至0時,將無法繼續儲值,因而可以將收入餘額中獲得的資金轉入主餘額中,以便於維持帳戶不斷地參與匯出交易。
以匯款方為例。區塊鏈節點可以接收合併交易,該合併交易包含指定的至少一個取值的資產額承諾和相應的合併數量;區塊鏈節點執行合併交易,使得匯款方帳戶中對應於上述指定的至少一個取值的資產額承諾的統計數量在交易完成後減少相應的合併數量、主餘額在交易完成後增加合併額承諾,和/或匯款方帳戶的收入餘額在交易完成後清零、匯款方帳戶的主餘額在交易完成後增加相應的收入餘額承諾;其中,合併額承諾為上述指定的至少一個取值的資產額承諾與相應的合併數量的加權和。換言之,合併交易可以將收入餘額所含的資金全部併入主餘額,或者在一些情況下可以將至少一部分資產以資金形式併入主餘額,或者還可以同時將收入餘額所含的資金併入主餘額、將至少一部分資產以資金形式併入主餘額。具體的交互過程可以參考圖10所示的實施例,以及圖11還示出了帳戶在合併前後的變化情況,此處不再贅述。
雖然在本發明提供的實施例中,針對帳戶所含的主餘額、收入餘額、資產資訊,可以通過由資產資訊參與匯出交易、收入餘額參與匯入交易(收入餘額也在匯出交易中收取找零額)、主餘額參與上述的儲值交易和合併交易,但是並不意味著每一餘額僅能夠參與上述類型的交易。例如,本發明的帳戶結構,還可以相容:由主餘額參與匯出資金的主餘額轉帳交易等。
例如,區塊鏈節點可以接收主餘額匯款交易,該主餘額匯款交易包含匯款方與收款方之間的主餘額交易額對應的主餘額交易額承諾、用於證明主餘額交易額非負且不大於主餘額的區間證明;區塊鏈節點執行主餘額匯款交易,使得主餘額在交易完成後扣除主餘額交易額承諾、收款方帳戶的收入餘額在交易完成後增加主餘額交易額承諾。具體的交互過程可以參考圖12所示的實施例,以及圖13還示出了帳戶在交易前後的變化情況,此處不再贅述。
圖15是一示例性實施例提供的一種設備的示意結構圖。請參考圖15,在硬體層面,該設備包括處理器1502、內部匯流排1504、網路介面1506、記憶體1508以及非揮發性記憶體1510,當然還可能包括其他業務所需要的硬體。處理器1502從非揮發性記憶體1510中讀取對應的電腦程式到記憶體1508中然後運行,在邏輯層面上形成區塊鏈網路中實現機密交易的裝置。當然,除了軟體實現方式之外,本發明一個或多個實施例並不排除其他實現方式,比如邏輯裝置抑或軟硬體結合的方式等等,也就是說以下處理流程的執行主體並不限定於各個邏輯單元,也可以是硬體或邏輯裝置。
請參考圖16,在軟體實施方式中,該區塊鏈網路中實現機密交易的裝置應用於匯款方設備(匯款方設備的硬體結構如圖15所示),可以包括:
確定單元1601,確定匯款方與收款方之間的匯款額,所述匯款方在區塊鏈帳本上存在對應的匯款方帳戶,所述匯款方帳戶包括被記錄為收入餘額承諾的收入餘額、相應資產額被記錄為資產額承諾的資產和各個取值的資產額承諾的統計數量,其中相同資產額的資產具有相同的資產額承諾;
匯款交易創建單元1602,根據所述匯款方帳戶中被選取的資產額承諾和每一被選取的資產額承諾對應的指定數量創建匯款交易,所述匯款交易包含所述匯款額對應的匯款額承諾、每一被選取的資產額承諾和相應的指定數量、用於證明所述匯款額非負且不大於資產總額的區間證明,所述資產總額為每一被選取的資產額承諾對應的資產額與相應的指定數量的加權和;
匯款交易提交單元1603,向區塊鏈提交所述匯款交易,使得每一被選取的資產額承諾對應的統計數量在交易完成後減去相應的指定數量、所述匯款方帳戶的收入餘額在交易完成後增加找零額承諾、所述收款方在區塊鏈帳本上對應的收款方帳戶的收入餘額在交易完成後增加所述匯款額承諾。
可選的,
所述匯款方帳戶所含的所有資產對應於同一預設取值的資產額;或,
所述匯款方帳戶包含多個資產組,每一資產組的所有資產對應於同一預設取值的資產額,且不同資產組的資產對應於不同預設取值的資產額。
可選的,所述匯款方帳戶還包括被記錄為主餘額承諾的主餘額;所述裝置還包括:
第一儲值交易創建單元,創建儲值交易,所述儲值交易包含指定的至少一個取值的資產額承諾和相應的儲值數量、用於證明所述主餘額不小於儲值額的區間證明,所述儲值額為所述指定的至少一個取值的資產額承諾對應的資產額與相應的儲值數量的加權和;
第一儲值交易提交單元,向區塊鏈提交所述儲值交易,使得所述匯款方帳戶中對應於所述指定的至少一個取值的資產額承諾的統計數量在交易完成後增加相應的儲值數量、所述匯款方帳戶的主餘額在交易完成後減少所述指定的至少一個取值的資產額承諾與相應的儲值數量的加權和。
可選的,還包括:
合併交易創建單元,創建合併交易,所述合併交易包含指定的至少一個取值的資產額承諾和相應的合併數量;
合併交易提交單元,向區塊鏈提交所述合併交易,使得所述匯款方帳戶中對應於所述指定的至少一個取值的資產額承諾的統計數量在交易完成後減少相應的合併數量、所述主餘額在交易完成後增加合併額承諾,和/或所述匯款方帳戶的收入餘額在交易完成後清零、所述匯款方帳戶的主餘額在交易完成後增加相應的收入餘額承諾;其中,所述合併額承諾為所述指定的至少一個取值的資產額承諾與相應的合併數量的加權和。
可選的,還包括:
主餘額匯款交易創建單元,根據所述匯款方與所述收款方之間的主餘額交易額,產生主餘額匯款交易,所述主餘額匯款交易包含所述主餘額交易額對應的主餘額交易額承諾、用於證明所述主餘額交易額非負且不大於所述主餘額的區間證明;
主餘額匯款交易提交單元,向區塊鏈提交所述主餘額匯款交易,使得所述主餘額在交易完成後扣除所述主餘額交易額承諾、所述收款方帳戶的收入餘額在交易完成後增加所述主餘額交易額承諾。
可選的,還包括:
第二儲值交易創建單元,創建儲值交易,所述儲值交易包含至少一個指定取值的資產額承諾和相應的儲值數量、用於證明所述匯款方帳戶的收入餘額不小於儲值額的區間證明,所述儲值額為所述指定取值的資產額承諾對應的資產額與儲值數量的加權和;
第二儲值交易提交單元,向區塊鏈提交所述儲值交易,使得所述匯款方帳戶中對應於所述指定取值的資產額承諾的統計數量在交易完成後增加相應的儲值數量、所述匯款方帳戶的收入餘額在交易完成後減少所述指定的至少一個取值的資產額承諾與相應的儲值數量的加權和。
圖17是一示例性實施例提供的一種設備的示意結構圖。請參考圖17,在硬體層面,該設備包括處理器1702、內部匯流排1704、網路介面1706、記憶體1708以及非揮發性記憶體1710,當然還可能包括其他業務所需要的硬體。處理器1702從非揮發性記憶體1710中讀取對應的電腦程式到記憶體1708中然後運行,在邏輯層面上形成區塊鏈網路中實現機密交易的裝置。當然,除了軟體實現方式之外,本發明一個或多個實施例並不排除其他實現方式,比如邏輯裝置抑或軟硬體結合的方式等等,也就是說以下處理流程的執行主體並不限定於各個邏輯單元,也可以是硬體或邏輯裝置。
請參考圖18,在軟體實施方式中,該區塊鏈網路中實現機密交易的裝置應用於區塊鏈節點(該區塊鏈節點的硬體結構如圖17所示),可以包括:
匯款交易接收單元1801,接收匯款交易,所述匯款交易包含匯款方與收款方之間的匯款額對應的匯款額承諾、至少一個資產額承諾和相應的指定數量、用於證明所述匯款額非負且不大於資產總額的區間證明,所述資產總額為所述至少一個資產額承諾對應的資產額與相應的指定數量的加權和;其中,所述匯款方在區塊鏈帳本上對應的匯款方帳戶包括被記錄為收入餘額承諾的收入餘額、相應資產額被記錄為資產額承諾的資產和各個取值的資產額承諾的統計數量,其中相同資產額的資產具有相同的資產額承諾;
匯款交易執行單元1802,執行所述匯款交易,使得所述匯款交易所含每一資產額承諾對應的統計數量在交易完成後減去相應的指定數量、所述匯款方帳戶的收入餘額在交易完成後增加找零額承諾、所述收款方在區塊鏈帳本上對應的收款方帳戶的收入餘額在交易完成後增加所述匯款額承諾。
可選的,
所述匯款方帳戶所含的所有資產對應於同一預設取值的資產額;或,
所述匯款方帳戶包含多個資產組,每一資產組的所有資產對應於同一預設取值的資產額,且不同資產組的資產對應於不同預設取值的資產額。
可選的,所述匯款方帳戶還包括被記錄為主餘額承諾的主餘額;所述裝置還包括:
第一儲值交易接收單元,接收儲值交易,所述儲值交易包含指定的至少一個取值的資產額承諾和相應的儲值數量、用於證明所述主餘額不小於儲值額的區間證明,所述儲值額為所述指定的至少一個取值的資產額承諾對應的資產額與相應的儲值數量的加權和;
第一儲值交易執行單元,執行所述儲值交易,使得所述匯款方帳戶中對應於所述指定的至少一個取值的資產額承諾的統計數量在交易完成後增加相應的儲值數量、所述匯款方帳戶的主餘額在交易完成後減少所述指定的至少一個取值的資產額承諾與相應的儲值數量的加權和。
可選的,還包括:
合併交易接收單元,接收合併交易,所述合併交易包含指定的至少一個取值的資產額承諾和相應的合併數量;
合併交易執行單元,執行所述合併交易,使得所述匯款方帳戶中對應於所述指定的至少一個取值的資產額承諾的統計數量在交易完成後減少相應的合併數量、所述主餘額在交易完成後增加合併額承諾,和/或所述匯款方帳戶的收入餘額在交易完成後清零、所述匯款方帳戶的主餘額在交易完成後增加相應的收入餘額承諾;其中,所述合併額承諾為所述指定的至少一個取值的資產額承諾與相應的合併數量的加權和。
可選的,還包括:
主餘額匯款交易接收單元,接收主餘額匯款交易,所述主餘額匯款交易包含所述匯款方與所述收款方之間的主餘額交易額對應的主餘額交易額承諾、用於證明所述主餘額交易額非負且不大於所述主餘額的區間證明;
主餘額匯款交易執行單元,執行所述主餘額匯款交易,使得所述主餘額在交易完成後扣除所述主餘額交易額承諾、所述收款方帳戶的收入餘額在交易完成後增加所述主餘額交易額承諾。
可選的,還包括:
第二儲值交易接收單元,接收儲值交易,所述儲值交易包含至少一個指定取值的資產額承諾和相應的儲值數量、用於證明所述匯款方帳戶的收入餘額不小於儲值額的區間證明,所述儲值額為所述指定取值的資產額承諾對應的資產額與儲值數量的加權和;
第二儲值交易執行單元,執行所述儲值交易,使得所述匯款方帳戶中對應於所述指定取值的資產額承諾的統計數量在交易完成後增加相應的儲值數量、所述匯款方帳戶的收入餘額在交易完成後減少所述指定的至少一個取值的資產額承諾與相應的儲值數量的加權和。
上述實施例闡明的系統、裝置、模組或單元,具體可以由電腦晶片或實體實現,或者由具有某種功能的產品來實現。一種典型的實現設備為電腦,電腦的具體形式可以是個人電腦、筆記型型電腦、蜂巢式電話、相機電話、智慧型電話、個人數位助理、媒體播放機、導航設備、電子郵件收發設備、遊戲控制台、平板電腦、可穿戴設備或者這些設備中的任意幾種設備的組合。
在一個典型的配置中,電腦包括一個或多個處理器 (CPU)、輸入/輸出介面、網路介面和記憶體。
記憶體可能包括電腦可讀介質中的非永久性記憶體,隨機存取記憶體(RAM)和/或非揮發性記憶體等形式,如唯讀記憶體(ROM)或快閃記憶體(flash RAM)。記憶體是電腦可讀介質的示例。
電腦可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現資訊儲存。資訊可以是電腦可讀指令、資料結構、程式的模組或其他資料。電腦的儲存介質的例子包括,但不限於相變記憶體(PRAM)、靜態隨機存取記憶體(SRAM)、動態隨機存取記憶體(DRAM)、其他類型的隨機存取記憶體 (RAM)、唯讀記憶體(ROM)、電可擦除可程式設計唯讀記憶體(EEPROM)、快閃記憶體或其他記憶體技術、唯讀光碟唯讀記憶體(CD-ROM)、數位多功能光碟(DVD)或其他光學儲存、磁盒式磁帶、磁片儲存、量子記憶體、基於石墨烯的儲存介質或其他磁性存放裝置或任何其他非傳輸介質,可用於儲存可以被計算設備存取的資訊。按照本文中的界定,電腦可讀介質不包括暫存電腦可讀媒體(transitory media),如調變的資料信號和載波。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,並不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
上述對本發明特定實施例進行了描述。其它實施例在所附申請專利範圍的範圍內。在一些情況下,在申請專利範圍中記載的動作或步驟可以按照不同於實施例中的順序來執行並且仍然可以實現期望的結果。另外,在圖式中描繪的過程不一定要求示出的特定順序或者連續順序才能實現期望的結果。在某些實施方式中,多工處理和並行處理也是可以的或者可能是有利的。
在本發明一個或多個實施例使用的術語是僅僅出於描述特定實施例的目的,而非旨在限制本發明一個或多個實施例。在本發明一個或多個實施例和所附申請專利範圍中所使用的單數形式的“一種”、“所述”和“該”也旨在包括多數形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“和/或”是指並包含一個或多個相關聯的列出專案的任何或所有可能組合。
應當理解,儘管在本發明一個或多個實施例可能採用術語第一、第二、第三等來描述各種資訊,但這些資訊不應限於這些術語。這些術語僅用來將同一類型的資訊彼此區分開。例如,在不脫離本發明一個或多個實施例範圍的情況下,第一資訊也可以被稱為第二資訊,類似地,第二資訊也可以被稱為第一資訊。取決於語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“回應於確定”。
以上所述僅為本發明一個或多個實施例的較佳實施例而已,並不用以限制本發明一個或多個實施例,凡在本發明一個或多個實施例的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發明一個或多個實施例保護的範圍之內。