交易調度方法及裝置
本說明書一個或多個實施例涉及區塊鏈技術領域,尤其涉及一種交易調度方法及裝置。
區塊鏈技術構建在傳輸網路(例如點對點網路)之上。傳輸網路中的網路節點利用鏈式資料結構來驗證與儲存資料,並採用分散式節點共識演算法來產生和更新資料。
目前企業級的區塊鏈平臺技術上最大的兩個挑戰就是隱私和性能,往往這兩個挑戰很難同時解決。大多解決方案都是藉由損失性能換取隱私,或者不大考慮隱私去追求性能。常見的解決隱私問題的加密技術,如同態加密(Homomorphic encryption)和零知識證明(Zero-knowledge proof)等複雜度高,通用性差,而且還可能帶來嚴重的性能損失。
可信執行環境(Trusted Execution Environment, TEE)是另一種解決隱私問題的方式。TEE可以達到硬體中的黑箱作用,在TEE中執行的程式碼和資料作業系統層都無法偷窺,只有程式碼中預先定義的介面才能對其進行操作。在效率方面,由於TEE的黑箱性質,在TEE中進行運算的是明文資料,而不是同態加密中的複雜密碼學運算,計算過程效率沒有損失,因此與TEE相結合可以在性能損失較小的前提下很大程度上提升區塊鏈的安全性和隱私性。目前業界十分關注TEE的方案,幾乎所有主流的晶片和軟體聯盟都有自己的TEE解決方案,包括軟體方面的TPM(Trusted Platform Module,可信賴平臺模組)以及硬體方面的Intel SGX(Software Guard Extensions, 軟體防護延伸)、ARM Trustzone(信任區)和AMD PSP(Platform Security Processor,平臺安全處理器)。
有鑑於此,本說明書一個或多個實施例提供一種交易調度方法及裝置。
為實現上述目的,本說明書一個或多個實施例提供技術方案如下:
根據本說明書一個或多個實施例的第一方面,提出了一種交易調度方法,包括:
區塊鏈節點確定收到的隱私交易的資料量;
所述區塊鏈節點藉由單次函數調用將資料量之和不大於預設閾值的多筆隱私交易封裝傳入可信執行環境;
其中,在傳入資料量不大於所述預設閾值的情況下,所述單次函數調用產生的第一開銷量與傳入資料量無關,在傳入資料量大於所述預設閾值的情況下,所述單次函數調用產生的第二開銷量大於所述第一開銷量且正相關於傳入資料量。
根據本說明書一個或多個實施例的第二方面,提出了一種交易調度裝置,包括:
確定單元,使區塊鏈節點確定收到的隱私交易的資料量;
傳輸單元,使所述區塊鏈節點藉由單次函數調用將資料量之和不大於預設閾值的多筆隱私交易封裝傳入可信執行環境;
其中,在傳入資料量不大於所述預設閾值的情況下,所述單次函數調用產生的第一開銷量與傳入資料量無關,在傳入資料量大於所述預設閾值的情況下,所述單次函數調用產生的第二開銷量大於所述第一開銷量且正相關於傳入資料量。
根據本說明書一個或多個實施例的第三方面,提出了一種電子設備,包括:
處理器;
用於儲存處理器可執行指令的記憶體;
其中,所述處理器藉由運行所述可執行指令以實現如第一方面所述的方法。
根據本說明書一個或多個實施例的第四方面,提出了一種電腦可讀儲存媒體,其上儲存有電腦指令,該指令被處理器執行時實現如第一方面所述方法的步驟。
這裡將詳細地對示例性實施例進行說明,其示例表示在圖式中。下面的描述涉及圖式時,除非另有表示,不同圖式中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式並不代表與本說明書一個或多個實施例相一致的所有實施方式。相反,它們僅是與如所附申請專利範圍中所詳述的、本說明書一個或多個實施例的一些方面相一致的裝置和方法的例子。
需要說明的是:在其他實施例中並不一定按照本說明書示出和描述的順序來執行相應方法的步驟。在一些其他實施例中,其方法所包括的步驟可以比本說明書所描述的更多或更少。此外,本說明書中所描述的單個步驟,在其他實施例中可能被分解為多個步驟進行描述;而本說明書中所描述的多個步驟,在其他實施例中也可能被合併為單個步驟進行描述。
區塊鏈一般被劃分為三種類型:公有鏈(Public Blockchain),私有鏈(Private Blockchain)和聯盟鏈(Consortium Blockchain)。此外,還有多種類型的結合,比如私有鏈+聯盟鏈、聯盟鏈+公有鏈等不同組合形式。其中去中心化程度最高的是公有鏈。公有鏈以比特幣、以太坊為代表,加入公有鏈的參與者可以讀取鏈上的資料記錄、參與交易以及競爭新區塊的記帳權等。而且,各參與者(即節點)可自由加入以及退出網路,並進行相關操作。私有鏈則相反,該網路的寫入權限由某個組織或者機構控制,資料讀取權限受組織規定。簡單來說,私有鏈可以為一個弱中心化系統,參與節點具有嚴格限制且少。這種類型的區塊鏈更適合於特定機構內部使用。聯盟鏈則是介於公有鏈以及私有鏈之間的區塊鏈,可實現“部分去中心化”。聯盟鏈中各個節點通常有與之相對應的實體機構或者組織;參與者藉由授權加入網路並組成利益相關聯盟,共同維護區塊鏈運行。
不論是公有鏈、私有鏈還是聯盟鏈,區塊鏈網路中的節點出於隱私保護的目的,均可能藉由區塊鏈與TEE(Trusted Execution Environment,可信執行環境)相結合的解決方案,在TEE內執行收到的交易。例如圖1所示,區塊鏈節點包括左側的常規執行環境和右側的可信執行環境(以下簡稱TEE),客戶端(或其他來源)提交的交易首先進入常規執行環境中的“交易調度”介面進行類型識別,將識別出的明文交易留在常規執行環境中進行處理(對應於左側的“交易執行”環節),而將識別出的隱私交易傳遞至TEE中進行處理(對應於右側的“交易執行”環節)。
TEE是基於CPU硬體的安全延伸,且與外部完全隔離的可信執行環境。TEE最早是由Global Platform提出的概念,用於解決行動設備上資源的安全隔離,平行於作業系統為應用程式提供可信安全的執行環境。ARM的Trust Zone技術最早實現了真正商用的TEE技術。伴隨著網際網路的高速發展,安全的需求越來越高,不僅限於行動設備,雲端設備,資料中心都對TEE提出了更多的需求。TEE的概念也得到了高速的發展和擴充。現在所說的TEE相比與最初提出的概念已經是更加廣義的TEE。例如,伺服器晶片廠商Intel,AMD等都先後推出了硬體輔助的TEE並豐富了TEE的概念和特性,在工業界得到了廣泛的認可。現在提起的TEE通常更多指這類硬體輔助的TEE技術。不同於行動端,雲端存取需要遠端存取,終端用戶對硬體平臺不可見,因此使用TEE的第一步就是要確認TEE的真實可信。因此現在的TEE技術都引入了遠端證明機制,由硬體廠商(主要是CPU廠商) 背書並藉由數位簽名技術確保用戶對TEE狀態可驗證。同時僅僅是安全的資源隔離也無法滿足的安全需求,進一步的資料隱私保護也被提出。包括Intel SGX,AMD SEV在內的商用TEE也都提供了內部儲存器加密技術,將可信硬體限定在CPU內部,匯流排和內部儲存器的資料均是密文防止惡意用戶進行窺探。例如,英特爾的軟體防護延伸(SGX)等TEE技術隔離了程式碼執行、遠端證明、安全配置、資料的安全儲存以及用於執行程式碼的可信路徑。在TEE中運行的應用程式受到安全保護,幾乎不可能被第三方存取。
以Intel SGX技術為例,SGX提供了圍圈(enclave,也稱為飛地),即內部儲存器中一個加密的可信執行區域,由CPU保護資料不被竊取。以第一區塊鏈節點採用支持SGX的CPU為例,利用新增的處理器指令,在內部儲存器中可以分配一部分區域 EPC(Enclave Page Cache,圍圈頁面快取或飛地頁面快取),藉由CPU內的加密引擎 MEE(Memory Encryption Engine)對其中的資料進行加密。EPC 中加密的內容只有進入CPU後才會被解密成明文。因此,在SGX中,用戶可以不信任作業系統、VMM(Virtual Machine Monitor,虛擬機監控器)、甚至 BIOS(Basic Input Output System,基本輸入輸出系統),只需要信任CPU便能確保隱私資料不會洩漏。實際應用中,可以將隱私資料加密後以密文形式傳遞至圍圈中,並藉由遠端證明將對應的秘鑰也傳入圍圈。然後,在CPU的加密保護下利用資料進行運算,結果會以密文形式返回。這種模式下,既可以利用強大的計算力,又不用擔心資料洩漏。
在相關技術中,區塊鏈節點可以藉由ECall操作對enclave內部實現函數調用,從而將隱私交易從常規執行環境傳遞至TEE中。那麼,當區塊鏈節點頻繁收到交易時,每一交易均需單獨藉由ECall操作傳遞至TEE中,可能形成相對較大的開銷,影響區塊鏈節點的交易處理效率。
以下結合實施例說明本說明書提供的一種交易調度方法,可以相對減小對隱私交易進行傳遞時產生的開銷。
圖2是一示例性實施例提供的一種交易調度方法的流程圖。如圖2所示,該方法可以包括以下步驟:
步驟202,區塊鏈節點確定收到的隱私交易的資料量。
隱私交易可以理解為存在隱私需求的交易;除了隱私交易之外,區塊鏈節點可能接收到明文交易,明文交易為不存在隱私需求的交易。隱私需求可以藉由多種方式予以表達,本說明書並不對此進行限制。例如,每筆交易可以包含類型欄位,該類型欄位用於標注相應的交易屬於隱私交易還是明文交易。如前所述,區塊鏈節點可以在如圖1所示的常規執行環境中的“交易調度”介面識別交易類型。在相關技術中,例如在以太坊網路中,交易通常包含to、value、data等欄位;而本實施例在相關技術的基礎上,在交易中增加一類型欄位,比如表徵為type欄位,並基於該類型欄位的取值,表明相關交易的類型:例如,當類型欄位為第一取值時,表明相關交易為明文交易,當類型欄位為第二取值時,表明相關交易為隱私交易。再例如,用戶可以在創建交易的過程中在交易內添加加密標識,以表達上述的隱私需求。那麼,當檢查到交易中包含加密標識時,區塊鏈節點可以判定該交易為隱私交易,否則判定該交易為明文交易。又例如,區塊鏈節點可以識別交易所需調用的智慧合約的類型,當被調用的智慧合約屬於隱私類型(比如智慧合約包含隱私標識,或者智慧合約的程式碼中包括隱私標識標注的合約狀態等)時,可以判定該交易屬於隱私交易,否則判定該交易為明文交易。
區塊鏈節點收到的交易可以來自於客戶端;例如,用戶可以在客戶端產生該交易後,藉由客戶端將該交易提交至上述區塊鏈節點。或者,交易可由其他區塊鏈節點轉發至上述區塊鏈節點;例如,用戶可以在客戶端上產生該交易後,藉由客戶端將該交易提交至其他區塊鏈節點,以由其他區塊鏈節點將該交易轉發至上述區塊鏈節點。或者,用戶可以直接在區塊鏈節點處產生上述交易。
譬如在採用工作量證明(Proof of Work, POW)以及股權證明(Proof of Stake,POS)、委任權益證明(Delegated Proof of Stake,DPOS)等共識演算法的區塊鏈網路中,每一區塊鏈節點在收到客戶端提交的該交易後,立即擴散(如廣播)至以太坊網路中的其餘區塊鏈節點。因此,上述區塊鏈節點收到的交易可以包括其他區塊鏈節點在區塊鏈網路中擴散的交易。
譬如在採用實用拜占庭容錯(Practical Byzantine Fault Tolerance,PBFT)等機制的區塊鏈網路中,記帳節點在本輪記帳前已經商定好。假定上述區塊鏈節點被確定為記帳節點,使得其他區塊鏈節點在收到客戶端提交的該交易後,由於自身並非記帳節點,因而需要將該交易發送至已確定的記帳節點,使得該記帳節點在進一步的共識階段將交易(包括該交易)封裝發送至各個驗證節點。而當上述區塊鏈節點之外的另一區塊鏈節點為已確定的記帳節點時,其餘區塊鏈節點收到客戶端提交的交易後,可以將交易轉發至該另一區塊鏈節點;然後,該另一區塊鏈節點可以在共識階段將上述交易(或還包括其他交易)封裝發送至各個驗證節點,而當上述區塊鏈節點為驗證節點時,即可收到該另一區塊鏈節點所轉發的交易。
隱私交易的資料量可以理解為該隱私交易的大小,即該隱私交易所需佔用的內部儲存器大小,比如5位元組(byte)或其他任意大小,這取決於隱私交易自身所含內容的多少。類似地,明文交易同樣存在相應的資料量,但由於明文交易可以直接在區塊鏈節點的常規執行環境內被處理、無需藉由函數調用傳遞至TEE,因而在本實施例中尚未關注於明文交易的資料量。
步驟204,所述區塊鏈節點藉由單次函數調用將資料量之和不大於預設閾值的多筆隱私交易封裝傳入可信執行環境。
區塊鏈節點藉由函數調用將隱私交易傳入TEE中,比如藉由前述的ECall操作實現該函數調用。在相關技術中,區塊鏈節點每次執行函數調用僅將一筆隱私交易傳入TEE中;而在本實施例中,區塊鏈節點僅執行一次函數調用,即上述的單次函數調用,即可將多筆隱私交易封裝傳入TEE中,減少了函數調用的執行次數。
藉由試驗測試區塊鏈節點採用函數調用將隱私交易傳入TEE的過程,本說明書中發現了傳入資料量與開銷的關係:在傳入資料量不大於預設閾值的情況下,單次函數調用產生的第一開銷量與傳入資料量無關,在傳入資料量大於預設閾值的情況下,單次函數調用產生的第二開銷量大於第一開銷量且正相關於傳入資料量。因此,本說明書中藉由單次函數調用將多筆隱私交易封裝傳入TEE中,並確保傳入資料量(即多筆隱私交易的資料量之和)不大於預設閾值,可使該單次函數調用的開銷僅為第一開銷量;假定隱私交易的數量為N,上述單次函數調用的開銷僅為第一開銷量S,而分別藉由N次函數調用將N筆隱私交易傳入TEE時,所產生的開銷為S×N,即本說明書的技術方案節省了S×(N-1)的開銷量。至少在一部分實施例中,上述預設閾值可以不大於區塊鏈節點上的EPC的預分配空間大小,因而可以根據EPC的預分配空間大小來確定出上述預設閾值的取值;當然,可以藉由實際測試確定出預設閾值的取值,該取值可能與EPC的預分配空間大小有關或無關,本說明書並不對此進行限制。
其中,在傳入資料量滿足不大於預設閾值的情況下,在傳入資料量發生變化時,第一開銷量的取值不變或基本不變(變化較小,比如小於或遠小於第二開銷量的變化情況;其中,第一開銷量的變化屬於非規律性的偶然變化)。
區塊鏈節點可以採用緩衝機制對收到的隱私交易進行管理,以形成由隱私交易構成的緩衝佇列,這些隱私交易可以按照接收時刻從早到晚的順序依次排列於緩衝佇列中,等待區塊鏈節點藉由函數調用將這些隱私交易傳入TEE中。其中,區塊鏈節點在收到任一隱私交易後,可以將該任一隱私交易的資料量與緩衝佇列中的所有隱私交易的資料量相加,並將得到的相加值與上述的預設閾值進行比較:在相加值不大於預設閾值的情況下,表明單次函數調用能夠承載的傳入資料量還可以更大,因而區塊鏈節點可以將任一隱私交易添加至緩衝佇列中,等待與後續收到的隱私交易一併封裝傳入TEE中;在相加值大於預設閾值的情況下,表明單次函數調用無法將區塊鏈節點已收到且尚未傳入TEE的所有隱私交易(即緩衝佇列中的所有隱私交易和最近收到的上述任一隱私交易)均傳入TEE中,但由上文所述可以確定單次函數調用必然能夠承載緩衝佇列中的所有隱私交易,因而區塊鏈節點可以將緩衝佇列中的所有隱私交易封裝傳入可信執行環境、使得緩衝佇列被清空,然後將上述的任一隱私交易添加至已清空的緩衝佇列中,該任一隱私交易被作為緩衝佇列的首個隱私交易,並等待與後續收到的隱私交易一併封裝傳入TEE中。
藉由上述方式,區塊鏈節點可以在每次實施單次函數調用時,都盡可能地向TEE內傳入更多的隱私交易,從而最大程度上降低區塊鏈節點由此產生的開銷。但在一些較為特殊的情況下,區塊鏈節點的開銷可能無法總是達成上述的最優情況。例如,當區塊鏈節點收到的任一隱私交易的資料量超出上述的預設閾值時,區塊鏈節點需要藉由單次函數調用而單獨將該任一隱私交易傳入TEE中,此時產生的開銷而上述的第二開銷量而無法維持於第一開銷量;如果收到該任一隱私交易時,緩衝佇列中還包含其他隱私交易,那麼如前所述:區塊鏈節點需要執行單次函數調用以將緩衝佇列中的所有隱私交易傳入TEE中,而無論緩衝佇列中的隱私交易的數量為一個或多個、資料量之和與預設閾值相差多少。再例如,區塊鏈節點可以記錄緩衝佇列內的首條隱私交易的等待時間長度(可以從該首條隱私交易的接收時刻或添加至緩衝佇列的時刻開始計算),並在該等待時間長度達到預設時間長度的情況下,將緩衝佇列中的所有隱私交易封裝傳入可信執行環境,可以避免隱私交易的資料量普遍較小或隱私交易的產生頻率較低等原因而導致等待時間長度過長,反而耽擱了針對首條隱私交易的及時處理。又例如,區塊鏈節點可能穿插接收到隱私交易和明文交易,那麼在收到明文交易時,區塊鏈節點可以隨即將緩衝佇列中的所有隱私交易封裝傳入可信執行環境,而區塊鏈節點可以在TEE之外執行收到的上述明文交易,使得所有交易可以被依次執行、避免發生混亂。
交易發起方在創建隱私交易時,可以對隱私交易的交易內容進行加密,使得即便該隱私交易被包含於所屬的區塊、該區塊被添加至可被公開查詢的區塊鏈上,無關者也僅能夠獲得加密後的交易內容、無法獲知明文的交易內容。而區塊鏈節點可以在可信執行環境中對隱私交易進行解密,得到明文的交易內容,並進而在可信執行環境中執行該明文的交易內容。
交易發起方可以持有對稱加密的金鑰,並基於該金鑰、採用對稱加密的方式對交易內容進行加密,隱私交易包含加密得到的密文的交易內容;相應地,區塊鏈節點在TEE中保存有該對稱加密的金鑰,並基於該金鑰、採用對稱加密的方式實施解密,從而得到明文的交易內容。
或者,交易發起方可以持有非對稱加密的公鑰,並基於該公鑰、採用非對稱加密的方式對交易內容進行加密,隱私交易包含加密得到的密文的交易內容;相應地,區塊鏈節點在TEE中保存有該非對稱加密的私鑰,並基於該私鑰、採用非對稱加密的方式實施解密,從而得到明文的交易內容。
或者,交易發起方可以持有對稱加密的金鑰和非對稱加密的公鑰,交易發起方可以基於對稱加密的金鑰、採用對稱加密的方式對交易內容進行加密,並進而基於非對稱加密的公鑰、採用非對稱加密的方式加密上述對稱加密的金鑰,隱私交易包含加密得到的密文的交易內容和加密後的金鑰;相應地,區塊鏈節點在TEE中保存有該非對稱加密的私鑰,並基於該私鑰、採用非對稱加密的方式對加密後的金鑰實施解密得到對稱加密的金鑰,進而基於對稱加密的金鑰、採用對稱加密的方式對密文的交易內容進行解密,得到明文的交易內容。上述過程採用的加密方式即數位包封加密。
對應於採用加密處理的隱私交易,區塊鏈節點在TEE中解密得到交易內容並執行後,可以在TEE中對交易執行結果進行加密,並進而將加密後的交易執行結果提供至交易發起方,且交易發起方具備對加密後的交易執行結果的解密能力。例如,區塊鏈節點可以在TEE中採用上述對稱加密的金鑰對交易執行結果進行加密,而交易發起方的客戶端可以相應解密。再例如,區塊鏈節點可以在TEE中採用非對稱加密的公鑰對交易執行結果進行加密,而交易發起方的客戶端可以藉由相應非對稱加密的私鑰進行解密。又例如,區塊鏈節點可以在TEE中採用對稱加密的金鑰對交易執行結果進行加密、採用非對稱加密的公鑰對該對稱加密的金鑰進行加密,而交易發起方的客戶端可以藉由相應非對稱加密的私鑰解密得到對稱加密的金鑰,進而基於該金鑰對交易執行結果進行解密。
上述加解密過程中採用的對稱加密的金鑰、非對稱加密的公私鑰等,可以由交易發起方的客戶端與區塊鏈節點之間協商確定,或者可以由KMS(Key Management Service,金鑰管理服務)伺服器在區塊鏈節點上的TEE藉由遠端證明後分別發放至交易發起方的客戶端與區塊鏈節點。其中,對稱加密採用的加密演算法,例如是DES演算法,3DES演算法,TDEA演算法,Blowfish演算法,RC5演算法,IDEA演算法等;非對稱加密演算法,例如是RSA、Elgamal、背包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)等。
本說明書中的交易可以用於實現相對簡單的處理邏輯,比如類似於相關技術中的轉帳邏輯。此時無論是上述的明文交易或隱私交易,均可與智慧合約無關。
本說明書中的交易還可以用於實現相對複雜的處理邏輯,這裡可以借助於上述的智慧合約來實現。以以太坊為例,支持用戶在以太坊網路中創建和/或調用一些複雜的邏輯,這是以太坊區別於比特幣區塊鏈技術的最大挑戰。以太坊作為一個可程式化區塊鏈的核心是以太坊虛擬機(EVM),每個以太坊節點都可以運行EVM。EVM是一個圖靈完備的虛擬機,這意味著可以藉由它實現各種複雜的邏輯。用戶在以太坊中發佈和調用智慧合約就是在EVM上運行的。如圖1所示,藉由在常規執行環境中部署EVM,可以藉由該EVM執行明文交易發佈或調用的智慧合約,以實現常規執行環境中的“交易執行”環節;以及,藉由在TEE中部署EVM,可以藉由該EVM執行隱私交易發佈或調用的智慧合約,以實現TEE中的“交易執行”環節。
例如圖3所示,Bob將一個包含創建智慧合約資訊的交易發送到以太坊網路後,節點1的EVM可以執行這個交易並產生對應的合約實例。交易的data欄位保存的可以是智慧合約的程式碼(如位元組碼),交易的to欄位為一個空的帳戶。節點間藉由共識機制達成一致後,這個合約成功創建,後續用戶可以調用這個合約。合約創建後,區塊鏈上出現一個與該智慧合約對應的合約帳戶,並擁有一個特定的位址,合約程式碼和帳戶儲存將保存在該合約帳戶中。智慧合約的行為由合約程式碼控制,而智慧合約的帳戶儲存則保存了合約的狀態。換句話說,智慧合約使得區塊鏈上產生包含合約程式碼和帳戶儲存(Storage)的虛擬帳戶。
進一步地,如圖4所示,仍以以太坊為例,Bob將一個調用智慧合約的交易發送到以太坊網路後,節點1的EVM可以執行這個交易並產生對應的合約實例。圖中4中交易的from欄位是發起調用智慧合約的帳戶的位址,to欄位中的“0x692a70d2…”代表了被調用的智慧合約的位址,value欄位在以太坊中是以太幣的值,交易的data欄位保存的調用智慧合約的方法和參數。調用智慧合約後,balance的值可能改變。後續,某個客戶端可以藉由某一區塊鏈節點查看balance的當前值。智慧合約可以藉由規定的方式在區塊鏈網路中的每個節點獨立地執行,所有執行記錄和資料都保存在區塊鏈上,所以當這樣的交易完成後,區塊鏈上就保存了無法篡改、不會丟失的交易憑證。
對於上述的隱私交易而言,區塊鏈節點在TEE中解密得到上述明文的交易內容後,如果該明文的交易內容與智慧合約相關,比如該明文的交易內容用於發佈或調用智慧合約,那麼該智慧合約可以稱為該明文的交易內容對應的關聯智慧合約。如果該明文的交易內容用於發佈上述的關聯智慧合約,那麼該關聯智慧合約的程式碼包含於該明文的交易內容中,比如位於該明文的交易內容的data欄位。如果該明文的交易內容用於調用上述的關聯智慧合約,那麼該關聯智慧合約的程式碼位於區塊鏈節點維護的資料庫中。相應地,區塊鏈節點可以在TEE中執行明文的交易內容對應的關聯智慧合約,即在TEE中部署的EVM內執行上述關聯智慧合約的程式碼,以實現對關聯智慧合約的發佈或調用。其中,智慧合約之間可以實現多重嵌套結構;例如智慧合約1中的程式碼調用了智慧合約2,而智慧合約2中的程式碼指向了經創建智慧合約程式碼產生的合約位址3,從而當隱私交易調用智慧合約1中的程式碼時,直接調用在智慧合約2的程式碼並且間接調用了所述合約位址3中的智慧合約程式碼,那麼智慧合約1、智慧合約2和智慧合約3的程式碼均會在TEE內部署的EVM中予以執行。
與圖4所示實施例中的合約狀態balance相類似的,關聯智慧合約被EVM執行後,可能使得一個或多個合約狀態發生取值變化。相應地,區塊鏈節點可以將關聯智慧合約對應的至少一個合約狀態在TEE中加密,並將得到的加密後合約狀態寫入資料庫。上述的寫入資料庫,一般指儲存於儲存媒體之中,更多見的是持久性儲存媒體,該持久性儲存媒體可以是磁碟、軟碟,也可以是通電後可恢復資料從而可以持久儲存的內部儲存器之類。
區塊鏈節點可以採用對稱加密的金鑰對合約狀態進行加密,以得到上述的加密後合約狀態。例如,上述的KMS伺服器在區塊鏈節點上的TEE藉由遠端證明後,可以將上述對稱加密的金鑰發放至區塊鏈節點;或者,KMS伺服器發放的金鑰可以被作為根金鑰,而區塊鏈節點可以基於該根金鑰衍生出上述對稱加密的金鑰。再例如,上述對稱加密的金鑰可由區塊鏈網路中的各個區塊鏈節點之間協商得到。當然,除了對稱加密的金鑰之外,還可以採用非對稱加密的公鑰對合約狀態進行加密,而區塊鏈節點持有非對稱加密的私鑰、以用於對加密後合約狀態進行解密。用於對合約狀態進行加密的金鑰可以被儲存於區塊鏈節點的TEE內的圍圈中,以確保該金鑰的安全性。
圖5是一示例性實施例提供的一種傳入資料量與開銷量之間的變化關係示意圖。假定開銷量隨傳入資料量的變化符合函數y=f(x),其中y為開銷量、x為區塊鏈節點藉由單次ECall調用將隱私交易傳入TEE內的傳入資料量;如圖5所示,函數f(x)屬於分段函數:當傳入資料量屬於[0, 64KB]時,開銷量y的取值基本維持於約10μs,當傳入資料量大於64KB時,開銷量y的取值基本呈現出線性增大的變化規律。
因此,基於上述函數f(x)的取值變化規律,區塊鏈節點在需要將隱私交易傳入TEE時,可以藉由單次ECall調用將盡可能多的隱私交易封裝傳入TEE,相比於每次僅傳入一筆或較少隱私交易而言,能夠減少ECall調用次數,從而降低區塊鏈節點在傳入隱私交易時所產生的開銷。
基於圖5所示的函數f(x),區塊鏈節點在收到一條交易後將存在多種處理方式,下面對其中可能出現的幾種情形進行列舉:
區塊鏈節點可能接收到一條隱私交易。區塊鏈節點可以計算該隱私交易與緩衝佇列中已有隱私交易的資料量之和:如果資料量之和未超出64KB,那麼區塊鏈節點將該隱私交易添加至緩衝佇列中,並繼續等待後續收到的其他隱私交易,使得批量傳入TEE的隱私交易的資料量之和盡可能地接近64KB的極限,從而在單次ECall向TEE內傳入盡可能多的隱私交易(在64KB的傳入資料量以內);如果資料量之和超出64KB,那麼區塊鏈節點可以將緩衝佇列中原本已有的所有隱私交易藉由單次ECall調用傳入TEE、清空緩衝佇列,而將最近收到的上述隱私交易添加至清空後的緩衝佇列中。
區塊鏈節點可能接收到一條明文交易。區塊鏈節點為了確保所有交易依次執行,無需關注於緩衝佇列中已有隱私交易的資料量之和是否接近64KB的極限,立即將緩衝佇列中已有的所有隱私交易藉由單次ECall調用傳入TEE,以及區塊鏈節點將最近收到的上述明文交易在常規執行環境中予以處理。
此外,當區塊鏈網路上的交易頻率較低時,區塊鏈節點在緩衝佇列中添加的隱私交易可能需要等待較長時間後,才會組成接近64KB傳入資料量的隱私交易。因此,區塊鏈節點可以記錄緩衝佇列中的首條隱私交易的接收時刻或添加時刻(添加至緩衝佇列的時刻)等,從而在確定該首條隱私交易的等待時間長度達到預設時間長度後,不論緩衝佇列中已有隱私交易的資料量之和是否接近64KB的極限,均應立即將緩衝佇列中已有的所有隱私交易藉由單次ECall調用傳入TEE,以確保交易執行的及時性。
圖6是一示例性實施例提供的一種設備的示意結構圖。請參考圖6,在硬體層面,該設備包括處理器602、內部匯流排604、網路介面606、內部儲存器608以及非易失性記憶體610,當然還可能包括其他業務所需要的硬體。處理器602從非易失性記憶體610中讀取對應的電腦程式到內部儲存器608中然後運行,在邏輯層面上形成交易調度裝置。當然,除了軟體實現方式之外,本說明書一個或多個實施例並不排除其他實現方式,比如邏輯裝置抑或軟硬體結合的方式等等,也就是說以下處理流程的執行主體並不限定於各個邏輯單元,也可以是硬體或邏輯裝置。
請參考圖7,在軟體實施方式中,該交易調度裝置可以包括:
確定單元701,使區塊鏈節點確定收到的隱私交易的資料量;
第一傳輸單元702,使所述區塊鏈節點藉由單次函數調用將資料量之和不大於預設閾值的多筆隱私交易封裝傳入可信執行環境;
其中,在傳入資料量不大於所述預設閾值的情況下,所述單次函數調用產生的第一開銷量與傳入資料量無關,在傳入資料量大於所述預設閾值的情況下,所述單次函數調用產生的第二開銷量大於所述第一開銷量且正相關於傳入資料量。
可選的,所述第一傳輸單元702具體用於:
使所述區塊鏈節點在收到任一隱私交易後,將該任一隱私交易的資料量與緩衝佇列中的所有隱私交易的資料量相加;
使所述區塊鏈節點在相加值不大於所述預設閾值的情況下,將所述任一隱私交易添加至所述緩衝佇列中;
使所述區塊鏈節點在相加值大於所述預設閾值的情況下,將所述緩衝佇列中的所有隱私交易封裝傳入可信執行環境,並將所述任一隱私交易添加至已清空的緩衝佇列中。
可選的,還包括:
記錄單元703,使所述區塊鏈節點記錄緩衝佇列內的首條隱私交易的等待時間長度;
第二傳輸單元704,在所述等待時間長度達到預設時間長度的情況下,使所述區塊鏈節點將緩衝佇列中的所有隱私交易封裝傳入可信執行環境。
可選的,還包括:
第三傳輸單元705,使所述區塊鏈節點在收到明文交易時,將緩衝佇列中的所有隱私交易封裝傳入可信執行環境;
第一執行單元706,使所述區塊鏈節點在可信執行環境之外執行所述明文交易。
可選的,還包括:
識別單元707,使所述區塊鏈節點根據交易所含的類型欄位,識別收到的交易屬於隱私交易或明文交易。
可選的,在傳入資料量發生變化時,所述第一開銷量的取值不變或基本不變。
可選的,所述預設閾值不大於所述區塊鏈節點上的飛地頁面快取的預分配空間大小。
可選的,所述隱私交易的交易內容被交易發起方加密;所述裝置還包括:
解密單元708,使所述區塊鏈節點在可信執行環境中對所述隱私交易進行解密,得到明文的交易內容;
第二執行單元709,使所述區塊鏈節點在可信執行環境中執行所述明文的交易內容。
可選的,還包括:
加密單元710,使所述區塊鏈節點在可信執行環境中對交易執行結果進行加密;
提供單元711,使所述區塊鏈節點將加密後的交易執行結果提供至所述交易發起方,所述交易發起方具備對所述加密後的交易執行結果的解密能力。
可選的,
所述明文的交易內容與智慧合約相關;所述第二執行單元709具體用於:使所述區塊鏈節點在可信執行環境中執行所述明文的交易內容對應的關聯智慧合約;
所述裝置還包括:加密儲存單元712,使所述區塊鏈節點將所述關聯智慧合約對應的至少一個合約狀態在可信執行環境中加密,並將得到的加密後合約狀態寫入資料庫。
上述實施例闡明的系統、裝置、模組或單元,具體可以由電腦晶片或實體實現,或者由具有某種功能的產品來實現。一種典型的實現設備為電腦,電腦的具體形式可以是個人電腦、筆記型電腦、行動電話、相機電話、智慧電話、個人數位助理、媒體播放器、導航設備、電子郵件收發設備、遊戲控制台、平板電腦、可穿戴設備或者這些設備中的任意幾種設備的組合。
在一個典型的配置中,電腦包括一個或多個處理器 (CPU)、輸入/輸出介面、網路介面和內部儲存器。
內部儲存器可能包括電腦可讀媒體中的非永久性記憶體,隨機存取記憶體(RAM)和/或非易失性內部儲存器等形式,如唯讀記憶體(ROM)或快閃記憶體(flash RAM)。內部儲存器是電腦可讀媒體的示例。
電腦可讀媒體包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現資訊儲存。資訊可以是電腦可讀指令、資料結構、程式的模組或其他資料。電腦的儲存媒體的例子包括,但不限於相變內部儲存器(PRAM)、靜態隨機存取記憶體(SRAM)、動態隨機存取記憶體(DRAM)、其他類型的隨機存取記憶 (RAM)、唯讀記憶體(ROM)、電可抹除可程式化唯讀記憶體(EEPROM)、快閃記憶體或其他內部儲存器技術、唯讀光碟(CD-ROM)、數位化多功能光碟(DVD)或其他光學儲存、磁盒式磁帶、磁碟儲存、量子記憶體、基於石墨烯的儲存媒體或其他磁性儲存設備或任何其他非傳輸媒體,可用於儲存可以被計算設備存取的資訊。按照本文中的界定,電腦可讀媒體不包括暫存電腦可讀媒體(transitory media),如調變的資料信號和載波。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,並不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
上述對本說明書特定實施例進行了描述。其它實施例在所附申請專利範圍的範圍內。在一些情況下,在申請專利範圍中記載的動作或步驟可以按照不同於實施例中的順序來執行並且仍然可以實現期望的結果。另外,在圖式中描繪的過程不一定要求示出的特定順序或者連續順序才能實現期望的結果。在某些實施方式中,多任務處理和並行處理也是可以的或者可能是有利的。
在本說明書一個或多個實施例使用的術語是僅僅出於描述特定實施例的目的,而非旨在限制本說明書一個或多個實施例。在本說明書一個或多個實施例和所附申請專利範圍中所使用的單數形式的“一種”、“所述”和“該”也旨在包括多數形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“和/或”是指並包含一個或多個相關聯的列出項目的任何或所有可能組合。
應當理解,儘管在本說明書一個或多個實施例可能採用術語第一、第二、第三等來描述各種資訊,但這些資訊不應限於這些術語。這些術語僅用來將同一類型的資訊彼此區分開。例如,在不脫離本說明書一個或多個實施例範圍的情況下,第一資訊也可以被稱為第二資訊,類似地,第二資訊也可以被稱為第一資訊。取決於語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“響應於確定”。
以上所述僅為本說明書一個或多個實施例的較佳實施例而已,並不用以限制本說明書一個或多個實施例,凡在本說明書一個或多個實施例的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本說明書一個或多個實施例保護的範圍之內。
202~204:步驟
602:處理器
604:內部匯流排
606:網路介面
608:內部儲存器
610:非易失性記憶體
701:確定單元
702:第一傳輸單元
703:記錄單元
704:第二傳輸單元
705:第三傳輸單元
706:第一執行單元
707:識別單元
708:解密單元
709:第二執行單元
710:加密單元
711:提供單元
712:加密儲存單元
[圖1]是一示例性實施例提供的一種區塊鏈節點對交易進行處理的示意圖。
[圖2]是一示例性實施例提供的一種交易調度方法的流程圖。
[圖3]是一示例性實施例提供的一種創建智慧合約的示意圖。
[圖4]是一示例性實施例提供的一種調用智慧合約的示意圖。
[圖5]是一示例性實施例提供的一種傳入資料量與開銷量之間的變化關係示意圖。
[圖6]是一示例性實施例提供的一種設備的結構示意圖。
[圖7]是一示例性實施例提供的一種交易調度裝置的方塊圖。