基於區塊鏈的智能合約管理方法及裝置、電子設備
本說明書一個或多個實施例係關於區塊鏈技術領域,尤其關於一種基於區塊鏈的智能合約管理方法及裝置、電子設備。
區塊鏈技術,也被稱之為分散式帳本技術,是一種由若干台計算設備共同參與“記帳”,共同維護一份完整的分散式資料庫的新興技術。由於區塊鏈技術具有去中心化、公開透明、每台計算設備可以參與資料庫記錄、並且各計算設備之間可以快速的進行資料同步的特性,使得區塊鏈技術已在眾多的領域中廣泛的進行應用。
本說明書提出一種基於區塊鏈的智能合約管理方法,應用於區塊鏈中的節點設備;其中,所述節點設備搭載了可信執行環境;所述方法包括:
回應於客戶端發起的針對目標智能合約的調用交易,獲取所述區塊鏈的分散式帳本中儲存的加密後的所述目標智能合約的合約代碼,並將加密後的所述目標智能合約的合約代碼發送至所述可信執行環境;
獲取智能合約管理規則,並在可信執行環境中基於所述智能合約管理規則確定所述目標智能合約是否為被管理智能合約;
如果所述目標智能合約不是被管理智能合約,提取所述可信執行環境中儲存的與所述目標智能合約的合約代碼對應的解密密鑰,並基於提取到的所述解密密鑰對所述目標智能合約的合約代碼進行解密;
在所述可信執行環境中執行解密後的所述目標智能合約的合約代碼,並將執行結果加密後發送至所述區塊鏈的分散式帳本進行儲存。
可選的,所述可信執行環境中儲存了與所述區塊鏈的分散式帳本中儲存的加密後的智能合約的合約代碼對應的解密密鑰;
其中,所述可信執行環境中儲存的與被管理智能合約對應的解密密鑰被設置為禁止提取;或者,所述可信執行環境中儲存的解密密鑰不包括與被管理智能合約對應的解密密鑰。
可選的,所述方法還包括:
如果所述目標智能合約是被管理智能合約,向所述客戶端返回所述目標智能合約調用失敗的提示消息。
可選的,所述方法還包括:
接收客戶端發起的針對目標智能合約的創建交易;其中,所述創建交易包括加密後的所述目標智能合約的合約代碼;
回應於所述創建交易,在所述可信執行環境中執行智能合約創建代碼,在所述區塊鏈中創建與所述目標智能合約對應的合約帳戶,並將加密後的所述目標智能合約的合約代碼發送至所述區塊鏈的分散式帳本進行儲存。
可選的,所述獲取智能合約管理規則,包括:
從管理區塊鏈的分散式帳本中獲取智能合約管理規則;其中,所述智能合約管理規則由管理方調用部署在所述管理區塊鏈上的智能合約,生成的智能合約管理規則。
可選的,所述智能合約管理規則包括:由被管理智能合約的合約位址構成的智能合約黑名單;
所述基於所述智能合約管理規則確定所述目標智能合約是否為被管理智能合約,包括:
獲取所述調用交易中的所述目標智能合約的合約位址;
將所述目標智能合約的合約位址與所述智能合約黑名單中的合約位址進行匹配;
如果所述目標智能合約的合約位址與所述智能合約黑名單中的任一合約位址匹配,確定所述目標智能合約為被管理智能合約;反之,確定所述目標智能合約不是被管理智能合約。
可選的,對所述目標智能合約的合約代碼採用的加密方式,包括以下示出的加密方式中的任意一種:對稱加密方式、非對稱加密方式、對稱加密結合非對稱加密的方式;
對所述目標智能合約的合約代碼的執行結果採用的加密方式,包括:對稱加密方式;或者,非對稱加密方式。
可選的,其中,所述對稱加密結合非對稱加密的方式,包括數位信封加密方式。
可選的,其中,所述可信執行環境包括Intel SGX。
本說明書還提出一種基於區塊鏈的智能合約管理裝置,應用於區塊鏈中的節點設備;其中,所述節點設備搭載了可信執行環境;所述裝置包括:
獲取模組,回應於客戶端發起的針對目標智能合約的調用交易,獲取所述區塊鏈的分散式帳本中儲存的加密後的所述目標智能合約的合約代碼,並將加密後的所述目標智能合約的合約代碼發送至所述可信執行環境;
確定模組,獲取智能合約管理規則,並在可信執行環境中基於所述智能合約管理規則確定所述目標智能合約是否為被管理智能合約;
解密模組,如果所述目標智能合約不是被管理智能合約,提取所述可信執行環境中儲存的與所述目標智能合約的合約代碼對應的解密密鑰,並基於提取到的所述解密密鑰對所述目標智能合約的合約代碼進行解密;
執行模組,在所述可信執行環境中執行解密後的所述目標智能合約的合約代碼,並將執行結果加密後發送至所述區塊鏈的分散式帳本進行儲存。
可選的,所述可信執行環境中儲存了與所述區塊鏈的分散式帳本中儲存的加密後的智能合約的合約代碼對應的解密密鑰;
其中,所述可信執行環境中儲存的與被管理智能合約對應的解密密鑰被設置為禁止提取;或者,所述可信執行環境中儲存的解密密鑰不包括與被管理智能合約對應的解密密鑰。
可選的,所述裝置還包括:
返回模組,如果所述目標智能合約是被管理智能合約,向所述客戶端返回所述目標智能合約調用失敗的提示消息。
可選的,所述裝置還包括:
接收模組,接收客戶端發起的針對目標智能合約的創建交易;其中,所述創建交易包括加密後的所述目標智能合約的合約代碼;
創建模組,回應於所述創建交易,在所述可信執行環境中執行智能合約創建代碼,在所述區塊鏈中創建與所述目標智能合約對應的合約帳戶,並將加密後的所述目標智能合約的合約代碼發送至所述區塊鏈的分散式帳本進行儲存。
可選的,所述獲取模組:
從管理區塊鏈的分散式帳本中獲取智能合約管理規則;其中,所述智能合約管理規則由管理方調用部署在所述管理區塊鏈上的智能合約,生成的智能合約管理規則。
可選的,所述智能合約管理規則包括:由被管理智能合約的合約位址構成的智能合約黑名單;
所述確定模組:
獲取所述調用交易中的所述目標智能合約的合約位址;
將所述目標智能合約的合約位址與所述智能合約黑名單中的合約位址進行匹配;
如果所述目標智能合約的合約位址與所述智能合約黑名單中的任一合約位址匹配,確定所述目標智能合約為被管理智能合約;反之,確定所述目標智能合約不是被管理智能合約。
可選的,對所述目標智能合約的合約代碼採用的加密方式,包括以下示出的加密方式中的任意一種:對稱加密方式、非對稱加密方式、對稱加密結合非對稱加密的方式;
對所述目標智能合約的合約代碼的執行結果採用的加密方式,包括:對稱加密方式;或者,非對稱加密方式。
可選的,其中,所述對稱加密結合非對稱加密的方式,包括數位信封加密方式。
可選的,其中,所述可信執行環境包括Intel SGX。
本說明書還提出一種基於區塊鏈的智能合約管理方法,應用於區塊鏈中的節點設備;其中,所述節點設備搭載了可信執行環境;所述可信執行環境中儲存了與所述區塊鏈的分散式帳本中儲存的加密後的智能合約的合約代碼對應的解密密鑰;所述方法包括:
回應於客戶端發起的針對目標智能合約的調用交易,獲取所述區塊鏈的分散式帳本中儲存的加密後的所述目標智能合約的合約代碼,並將加密後的所述目標智能合約的合約代碼發送至所述可信執行環境;
提取所述可信執行環境中儲存的與所述目標智能合約的合約代碼對應的解密密鑰,基於提取到的所述解密密鑰對所述目標智能合約的合約代碼進行解密,並在所述可信執行環境中執行解密後的所述目標智能合約的合約代碼;
獲取智能合約管理規則,並在可信執行環境中基於所述智能合約管理規則確定所述目標智能合約是否為被管理智能合約;
如果所述目標智能合約不是被管理智能合約,則將所述目標智能合約的合約代碼的執行結果加密後發送至所述區塊鏈的分散式帳本進行儲存。
可選的,所述方法還包括:
如果所述目標智能合約是被管理智能合約,刪除所述目標智能合約的合約代碼的執行結果,並向所述客戶端返回所述目標智能合約調用失敗的提示消息;或者,
如果所述目標智能合約是被管理智能合約,在所述可信執行環境中儲存所述目標智能合約的合約代碼的執行結果,並將所述可信執行環境中儲存的所述執行結果設置為禁止提取;以及,向所述客戶端返回所述目標智能合約調用失敗的提示消息。
本說明書還提出一種基於區塊鏈的智能合約管理裝置,應用於區塊鏈中的節點設備;其中,所述節點設備搭載了可信執行環境;所述可信執行環境中儲存了與所述區塊鏈的分散式帳本中儲存的加密後的智能合約的合約代碼對應的解密密鑰;所述裝置包括:
第二獲取模組,回應於客戶端發起的針對目標智能合約的調用交易,獲取所述區塊鏈的分散式帳本中儲存的加密後的所述目標智能合約的合約代碼,並將加密後的所述目標智能合約的合約代碼發送至所述可信執行環境;
第二解密模組,提取所述可信執行環境中儲存的與所述目標智能合約的合約代碼對應的解密密鑰,基於提取到的所述解密密鑰對所述目標智能合約的合約代碼進行解密;
第二執行模組,在所述可信執行環境中執行解密後的所述目標智能合約的合約代碼;
第二確定模組,獲取智能合約管理規則,並在可信執行環境中基於所述智能合約管理規則確定所述目標智能合約是否為被管理智能合約;如果所述目標智能合約不是被管理智能合約,則將所述目標智能合約的合約代碼的執行結果加密後發送至所述區塊鏈的分散式帳本進行儲存。
可選的,所述裝置還包括:
第二返回模組,如果所述目標智能合約是被管理智能合約,刪除所述目標智能合約的合約代碼的執行結果,並向所述客戶端返回所述目標智能合約調用失敗的提示消息;或者,
如果所述目標智能合約是被管理智能合約,在所述可信執行環境中儲存所述目標智能合約的合約代碼的執行結果,並將所述可信執行環境中儲存的所述執行結果設置為禁止提取;以及,向所述客戶端返回所述目標智能合約調用失敗的提示消息。
透過以上技術方案,由於區塊鏈中的節點設備在搭載的可信執行環境中執行加密後的智能合約的合約代碼時,只有不受管理的智能合約的合約代碼可以進行解密和執行;因此,可以在對智能合約進行充分的隱私保護的基礎上,透過技術手段對一些被管理智能合約進行內容屏蔽,來實現對智能合約的監管。
這裡將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式並不代表與本說明書一個或多個實施例相一致的所有實施方式。相反,它們僅是與如所附申請專利範圍中所詳述的、本說明書一個或多個實施例的一些方面相一致的裝置和方法的例子。
需要說明的是:在其他實施例中並不一定按照本說明書示出和描述的順序來執行相應方法的步驟。在一些其他實施例中,其方法所包括的步驟可以比本說明書所描述的更多或更少。此外,本說明書中所描述的單個步驟,在其他實施例中可能被分解為多個步驟進行描述;而本說明書中所描述的多個步驟,在其他實施例中也可能被合併為單個步驟進行描述。
區塊鏈一般被劃分為三種類型:公有鏈(Public
Blockchain),私有鏈(Private Blockchain)和聯盟鏈(
Consortium Blockchain)。此外,還有多種類型的結合,比如私有鏈+聯盟鏈、聯盟鏈+公有鏈等不同組合形式。其中去中心化程度最高的是公有鏈。公有鏈以比特幣、以太坊為代表,加入公有鏈的參與者可以讀取鏈上的資料記錄、參與交易以及競爭新區塊的記帳權等。而且,各參與者(即節點)可自由加入以及退出網路,並進行相關操作。私有鏈則相反,該網路的寫入權限由某個組織或者機構控制,資料讀取權限受組織規定。簡單來說,私有鏈可以為一個弱中心化系統,參與節點具有嚴格限制且少。這種類型的區塊鏈更適合於特定機構內部使用。
聯盟鏈則是介於公有鏈以及私有鏈之間的區塊鏈,可實現“部分去中心化”。聯盟鏈中各個節點通常有與之相對應的實體機構或者組織;參與者通過授權加入網路並組成利益相關聯盟,共同維護區塊鏈運行。
不論是公有鏈、私有鏈還是聯盟鏈,都可能提供智能合約(Smart contract )的功能。區塊鏈上的智能合約是在區塊鏈系統上可以被交易觸發執行的合約。智能合約可以透過代碼的形式定義。
以以太坊為例,支持用戶在以太坊網路中創建並調用一些複雜的邏輯,這是以太坊區別於比特幣區塊鏈技術的最大挑戰。以太坊作為一個可程式化區塊鏈的核心是以太坊虛擬機(EVM),每個以太坊節點都可以運行EVM。EVM是一個圖靈完備的虛擬機,這意味著可以透過它實現各種複雜的邏輯。用戶在以太坊中發佈和調用智能合約就是在EVM上運行的。實際上,虛擬機直接運行的是虛擬機代碼(虛擬機位元組碼,下簡稱“位元組碼”)。部署在區塊鏈上的智能合約可以是位元組碼的形式。
如圖1所示,Bob將一個包含創建智能合約資訊的交易(Transaction)發送到以太坊網路後,節點1的EVM可以執行這個交易並生成對應的合約實例。圖1中的
“0x68e12cf284…”代表了這個合約的位址,交易的data欄位保存的可以是位元組碼,交易的to欄位為一個空的帳戶。節點間透過共識機制達成一致後,這個合約成功創建,後續用戶可以調用這個合約。
合約創建後,區塊鏈上出現一個與該智能合約對應的合約帳戶,並擁有一個特定的位址,合約代碼和帳戶儲存將保存在該合約帳戶中。智能合約的行為由合約代碼控制,而智能合約的帳戶儲存(Storage)則保存了合約的狀態。換句話說,智能合約使得區塊鏈上產生包含合約代碼和帳戶儲存的虛擬帳戶。
前述提到,包含創建智能合約的交易的data欄位保存的可以是該智能合約的位元組碼。位元組碼由一連串的位元組組成,每一位元組可以標識一個操作。基於開發效率、可讀性等多方面考慮,開發者可以不直接書寫位元組碼,而是選擇一門高階語言編寫智能合約代碼。例如,採用諸如Solidity、Serpent、LLL語言等高階語言。對於採用高階語言編寫的智能合約代碼,可以經過編譯器編譯,生成可以部署到區塊鏈上的位元組碼。
以Solidity語言為例,用其編寫的合約與物件導向程式語言中的類(Class)很相似,在一個合約中可以聲明多種成員,包括狀態變數、函數、函數修改器、事件等。狀態變數是永久儲存在智能合約的帳戶儲存中的值,用於保存合約的狀態。
一般的,當一個智能合約部署在區塊鏈後,智能合約的合約代碼中的狀態變數對應的儲存狀態是明文,任何人都可以看到其狀態,無隱私保護的設置和能力。
如圖2所示,仍以以太坊為例,Bob將一個包含調用智能合約資訊的交易發送到以太坊網路後,節點1的EVM可以執行這個交易並生成對應的合約實例。圖2中交易的from欄位是發起調用智能合約的帳戶的位址,to欄位中的“0x692a70d2…”代表了被調用的智能合約的位址,value欄位在以太坊中是以太幣的值,交易的data欄位保存的調用智能合約的方法和參數。調用智能合約後,balance的值可能改變。後續,某個客戶端可以透過某一區塊鏈節點(例如圖1中的節點6)查看balance的當前值。
智能合約可以以規定的方式在區塊鏈網路中每個節點獨立的執行,所有執行記錄和資料都保存在區塊鏈上,所以當這樣的交易完成後,區塊鏈上就保存了無法篡改、不會丟失的交易憑證。
創建智能合約和調用智能合約的示意圖如圖3所示。以太坊中要創建一個智能合約,需要經過編寫智能合約、變成位元組碼、部署到區塊鏈等過程。以太坊中調用智能合約,是發起一筆指向智能合約位址的交易,智能合約代碼分散式的運行在以太坊網路中每個節點的虛擬機中。
目前企業級的區塊鏈平台技術上最大的兩個挑戰就是隱私和性能,往往這兩個挑戰很難同時解決。大多解決方案都是透過損失性能換取隱私,或者不大考慮隱私去追求性能。常見的解決隱私問題的加密技術,如同態加密(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,平台安全處理器)。
在傳統的區塊鏈與TEE相結合的解決方案中,為了實現隱私保護,智能合約整體被當作需要隱私保護的資料在TEE中進行調用執行,並將全部合約狀態加密儲存在區塊鏈上。透過這種方式,雖然在某種程度上可以提升隱私保護的安全等級,但也對資料的管理造成困難。
例如,在示出的一種管理場景下,作為智能合約的監管一方,可能具有對智能合約的合約代碼的執行過程以及對應的執行結果,進行內容監管的需求;但在傳統的區塊鏈與TEE相結合的解決方案中,智能合約執行的安全等級較高,智能合約的執行過程以及執行結果均處於一種不可見的隱私狀態;因此,這就對智能合約的內容監管造成困難。
而在本說明書旨在提出一種在區塊鏈與TEE相結合的應用場景中,在對智能合約進行充分的隱私保護的基礎上,進一步實現對智能合約的有效管理的技術方案。
在實現時,在區塊鏈上部署的智能合約的合約代碼,可以加密後在區塊鏈的分散式帳本中進行持久化儲存。而在區塊鏈中的節點設備搭載的可信執行環境中,可以預先儲存與區塊鏈的分散式帳本中儲存的加密後的智能合約的合約代碼對應的解密密鑰。
例如,以智能合約的內容監管的場景為例,在一種實施方式中,上述可信執行環境中的儲存的解密密鑰,可以只包含那些受監管的智能合約對應的解密密鑰;亦即,在可信執行環境中可以僅儲存受監管的智能合約對應的解密密鑰,而並不儲存那些不受監管的智能合約的解密密鑰。
在另一種實施方式中,上述可信執行環境中,可以預設儲存所有的智能合約對應的解密密鑰;而對於上述可信執行環境中儲存的受監管的智能合約對應的解密密鑰,可以被設置為禁止提取;亦即,不是被管理智能合約的合約代碼對應的解密密鑰,可以被正常提取。
當節點設備收到客戶端發起的針對目標智能合約的調用交易時,可以獲取區塊鏈的分散式帳本中儲存的加密後的該目標智能合約的合約代碼,並將獲取到的加密後的該目標智能合約的合約代碼發送至該節點設備所搭載的可信執行環境。
在將加密的該目標智能合約的合約代碼發送至該節點設備所搭載的可信執行環境之後,節點設備可以獲取智能合約管理規則,並在搭載的可信執行環境中,基於獲取到的智能合約管理規則,來確定該目標智能合約是否為被管理智能合約;
如果經過確認,認定該目標智能合約不是被管理智能合約,此時節點設備可以提取可信執行環境中儲存的與該目標智能合約的合約代碼對應的解密密鑰,對該目標智能合約的合約代碼進行解密。
當完成解密得到上述目標智能合約的明文合約代碼後,節點設備可以在上述可信執行環境中,執行解密得到的明文合約代碼,然後將執行結果加密後發送至區塊鏈的分散式帳本進行儲存。
在以上技術方案中,由於區塊鏈中的節點設備在搭載的可信執行環境中執行加密後的智能合約的合約代碼時,只有不受管理的智能合約的合約代碼可以進行解密和執行;因此,可以在對智能合約進行充分的隱私保護的基礎上,透過技術手段對一些被管理智能合約進行內容屏蔽,來實現對智能合約的監管。
請參見圖4,圖4是一示例性實施例提供的一種基於區塊鏈的智能合約管理方法的流程圖。如圖4所示,該方法應用於區塊鏈中的節點設備;其中,所述節點設備搭載了可信執行環境;所述方法包括以下步驟:
步驟402,回應於客戶端發起的針對目標智能合約的調用交易,獲取所述區塊鏈的分散式帳本中儲存的加密後的所述目標智能合約的合約代碼,並將加密後的所述目標智能合約的合約代碼發送至所述可信執行環境;
步驟404,獲取智能合約管理規則,並在可信執行環境中基於所述智能合約管理規則確定所述目標智能合約是否為被管理智能合約;
步驟406,如果所述目標智能合約不是被管理智能合約,提取所述可信執行環境中儲存的與所述目標智能合約的合約代碼對應的解密密鑰,並基於提取到的所述解密密鑰對所述目標智能合約的合約代碼進行解密;
步驟408,在所述可信執行環境中執行解密後的所述目標智能合約的合約代碼,並將執行結果加密後發送至所述區塊鏈的分散式帳本進行儲存。
在本說明書中,對智能合約進行管理,具體可以是指智能合約的管理方,對智能合約的合約代碼的執行過程以及對應的執行結果進行管理。
例如,在示出的一種管理場景下,對智能合約進行管理,具體是指對智能合約的合約代碼的執行過程以及對應的執行結果進行內容監管;而在這種管理場景下,上述管理方相應的也可以是指智能合約的監管方。
以下將結合針對智能合約進行監管的管理場景,對本說明書的技術方案進行詳細描述。在這種場景下,上述被管理智能合約即為被監管智能合約;上述智能合約管理規則即為智能合約監管規則。在本說明書中,用戶在編寫完成了智能合約的合約代碼後,可以基於該智能合約的合約代碼,在客戶端上構建一筆用於創建智能合約的創建交易,並將交易發送給與該客戶端對接的區塊鏈節點設備。
例如,在實現時,如果用戶採用高階語言編寫智能合約的合約代碼,則客戶端可以進一步經過編譯器對合約代碼進行編譯,生成可以部署到區塊鏈上的位元組碼,然後基於編譯生成的智能合約的位元組碼,來“打包”生成一筆用於創建智能合約的創建交易,並將交易發送給與該客戶端對接的區塊鏈節點設備。
需要說明的是,為保證用戶編寫完成的合約代碼的隱私性,客戶端可以採用密鑰對編寫完成的合約代碼進行加密。
例如,在實現時,客戶端可以直接對構建出的上述創建交易整體進行加密;或者,也可以僅對構建出的上述創建交易中攜帶的智能合約的位元組碼本身進行加密;具體的加密方式,本領域技術人員在將本說明書公開的技術方案付諸實現時,可以靈活的選擇。
其中,對合約代碼進行加密時所採用的加密方式,可以採用對稱加密,也可以採用非對稱加密。
例如,對稱加密採用的加密演算法,可以是DES演算法,3DES演算法,TDEA演算法,Blowfish演算法,RC5演算法,IDEA演算法等。非對稱加密採用的演算法,可以是RSA、Elgamal、背包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)等。
除此之外,對合約代碼進行加密時所採用的加密方式,還可以採用對稱加密和非對稱加密相結合的方式。這種加密方式一般稱之為數位信封(Digital Envelope)加密方式。
例如,客戶端採用對稱加密演算法加密合約代碼,即採用對稱加密演算法的私鑰加密合約代碼,然後再用非對稱加密演算法的公鑰加密上述對稱加密演算法中所採用的私鑰。亦即,先用對稱加密演算法的密鑰,加密合約代碼;再使用非對稱加密演算法的密鑰,對加密上述合約代碼時所使用的密鑰進行進一步的加密。
區塊鏈中的節點設備在收到客戶端發送的上述創建交易後,可以檢查該交易是否有效、格式是否正確,驗證該交易的簽名是否合法等,並在所有的檢查和驗證均通過後,可以在可信執行環境中執行該創建交易,完成智能合約的創建。
具體的,在可信執行環境中執行該創建交易之前,首先可以確認該筆交易的功能類型;
例如,以以太坊為例,通常是基於交易中攜帶的交易內容來確定交易的功能類型;比如,如果交易中的to欄位為一個空的帳戶,並且交易的data欄位攜帶需要部署的位元組碼,則可以認定該筆交易為用於創建智能合約的交易;如果交易中的to欄位指向一個已經存在的智能合約的合約位址,並且交易的data欄位攜帶調用智能合約所需的參數,則可以認定該筆交易為用於調用智能合約的交易。
當確認該筆交易為用於創建智能合約的創建交易,可以進一步在上述可信安全環境中執行智能合約創建代碼,在區塊鏈上創建一個與智能合約對應的合約帳戶,並將該創建交易中的加密後的智能合約的合約代碼發送至區塊鏈的分散式帳本進行儲存。
例如,以以太坊為例,創建的合約帳戶中通常會包括Balance、Nonce、codehash和storaghash等屬性欄位,節點設備在完成合約帳戶的創建後,會將創建交易中的合約代碼的hash值填充至上述codehash欄位,將上述創建交易打包進區塊發送給區塊鏈中的其它各節點設備,在區塊鏈的分散式帳本中進行儲存。亦即,智能合約的合約代碼的原始內容,仍然存放在原始的創建交易保存在區塊鏈的區塊中,與該智能合約對應的合約帳戶中,僅需要維護智能合約的合約代碼的hash指標。
一般的,區塊鏈中支持的共識演算法,通常分為節點設備需要爭奪每一輪的記帳週期的記帳權的共識演算法,和預先為每一輪記帳週期選舉記帳節點(不需要爭奪記帳權)的共識演算法。
例如,前者以工作量證明(Proof of Work,POW)、股權證明(Proof of Stake,POS)、委任權益證明(Delegated Proof of Stake,DPOS)等共識演算法為代表;後者以實用拜占庭容錯(Practical Byzantine Fault Tolerance,PBFT)等共識演算法為代表。
對於採用工作量證明(Proof of Work,POW)以及股權證明(Proof of Stake,POS)、委任權益證明(Delegated Proof of Stake,DPOS)等共識演算法的支持智能合約的區塊鏈網路中,爭奪記帳權的節點都可以在接收到創建交易後執行該筆交易。爭奪記帳權的節點中可能其中一個在本輪爭奪記帳權的過程中勝出,成為記帳節點。記帳節點可以收到的該創建交易與其它交易一起打包並生成新的區塊,並將生成的新的區塊發送至其它節點進行共識。
對於採用實用拜占庭容錯(Practical Byzantine Fault Tolerance,PBFT)等共識演算法的支持智能合約的區塊鏈網路中,具有記帳權的節點在本輪記帳前已經商定好。因此,節點設備在接收到上述創建交易後,如果自身不是本輪的記帳節點,則可以將該創建交易發送至記帳節點。對於本輪的記帳節點,在將該創建交易與其它交易一起打包並生成新區塊的過程中或者之前,可以執行該創建交易。記帳節點在將該創建交易與其它交易一起打包生成新區塊後,可以將生成的新的區塊或者該新的區塊的區塊頭發送至其它節點進行共識。
如上所述,無論區塊鏈採用以上示出的哪種共識演算法,本輪的記帳節點都可以將該創建交易打包並生成新的區塊,並將生成的新的區塊或者區塊頭發送至其它節點設備進行共識驗證。如果其它節點設備接收到新的區塊或者區塊頭後,經驗證沒有問題,可以將該新的區塊追加到原有的區塊鏈末尾,從而完成記帳過程,達成共識。當達成共識後,也就完成了智能合約在區塊鏈上的部署。其中,其它節點設備在驗證記帳節點發來的新的區塊或區塊頭的過程中,也可以執行該區塊中的包含的上述創建交易。
在本說明書中,在可信執行環境中執行上述創建交易的具體過程,具體可以是透過在上述可信執行環境中部署的虛擬機來完成;亦即,可信執行環境中部署的虛擬機才是上述創建交易的執行主體;例如,以以太坊為例,節點設備通常是透過搭載的以太坊虛擬機(Ethereum Virtual Machine,EVM)來執行交易。
在本說明書中,當在區塊鏈上完成了智能合約的部署之後,用戶可以在客戶端上構建一筆用於調用目標智能合約的調用交易,並將交易發送給與該客戶端對接的區塊鏈節點設備,來發起對已經部署完成的目標智能合約的調用執行。
區塊鏈中的節點設備在收到客戶端發送的上述調用交易後,仍然可以檢查該交易是否有效、格式是否正確,驗證該交易的簽名是否合法等,並在所有的檢查和驗證均通過後,在可信執行環境中執行該調用交易。
具體的,在可信執行環境中執行該調用交易之前,首先也可以確認該筆交易的功能類型;當確認該筆交易為用於調用智能合約的調用交易,可以進一步獲取區塊鏈的分散式帳本中儲存的加密後的該目標智能合約的合約代碼,並將獲取到的加密後的該目標智能合約的合約代碼發送至上述可信執行環境,在上述可信執行環境中進行執行。
在本說明書中,在上述可信執行環境中,可以儲存和維護與區塊鏈的分散式帳本中儲存的加密後的智能合約的合約代碼對應的解密密鑰。例如,在實際應用中,在上述可信執行環境中可以搭載密鑰生成演算法,當用戶在區塊鏈成功創建了一個與智能合約對應的合約帳戶時,節點設備可以在可信執行環境中,調用搭載的密鑰生成演算法,為該合約帳戶創建根密鑰。
其中,如果採用非對稱加密方式,該根密鑰包括公私鑰對;公鑰用於對合約代碼進行加密,由用戶持有;私鑰儲存在可信執行環境中,用於對加密的合約代碼進行解密;如果採用對稱加密方式,該根密鑰則僅包括一個用於對合約代碼進行加密和解密的密鑰。
其中,上述密鑰生成演算法的具體類型,以及基於上述密鑰生成演算法創建根密鑰的具體實施過程,本說明書中不再進行詳述。
在示出的一種實施方式中,為了實現對智能合約的監管,在上述可信執行環境中,可以預設儲存區塊鏈的分散式帳本中收錄的所有智能合約的合約代碼對應的解密密鑰;其中,為了實現監管的目的,對於上述可信執行環境中儲存的受監管的智能合約對應的解密密鑰,可以將其設置為禁止提取的狀態。
其中,關於如何將在上述可信執行環境中儲存和維護的與被監管智能合約的合約代碼對應的解密密鑰設置為不可提取的狀態的實施手段,在本說明書中不進行特別的限定;
例如,在示出的一種實現方式中,可以在可信執行環境中部署用於對解密密鑰的提取權限進行控制的程式碼,該程式碼具體可以由承載該可信執行環境的硬體(比如,作為可信執行環境的晶片)來獨立的進行調用執行;進而可信執行環境可以透過執行上述程式碼,對儲存和維護的解密密鑰的提取權限進行控制,以保障該可信執行環境中儲存和維護的與被監管智能合約的合約代碼對應的解密密鑰,處於一種無法被提取和匯出的狀態。當然,除了以上示出的實現方式以外,在實際應用中,也可以透過其它的實現方式進行實施,在本說明書中不再進行一一列舉。
在將獲取到的加密後的上述目標智能合約的合約代碼,發送至上述可信執行環境之後,承載該可信執行環境的硬體,可以進一步獲取智能合約監管規則,並在該可信執行環境中基於獲取到的智能合約監管規則確定該目標智能合約是否為被監管智能合約。
其中,上述智能合約監管規則,具體可以是由監管方自主生成,並且能夠由監管方來進行即時的更新和修改的監管規則。
在示出的一種實施方式中,在以上描述的區塊鏈的基礎上,可以再部署一個獨立的監管區塊鏈,並在該監管區塊鏈上部署用於生成智能合約監管規則的智能合約,並在該智能合約中聲明用於生成智能合約監管規則的生成邏輯。進而,監管方可以基於實際的監管需求構建調用交易,來調用該智能合約,動態的生成智能合約監管規則,並將生成的智能合約監管規則在該監管區塊鏈的分散式帳本中進行儲存。
其中,所述動態的生成智能合約監管規則,是指對智能合約進行監管時實際所使用的智能合約監管規則,總是以最新生成的智能合約監管規則為準。如果監管方的監管需求發生變化,監管方可以基於新的監管需求,來調用該智能合約重新生成新的智能合約監管規則。
透過這種方式,監管方可以基於實際的監管需求,來靈活的對智能合約監管規則進行動態更新。
例如,上述智能合約監管規則具體可以是由被監管智能合約的合約位址組成的智能合約黑名單,當監管方需要更新該智能合約黑名單中的被監管智能合約的合約位址時,可以透過以上描述的方式,透過調用上述智能合約,來重新生成一個智能合約黑名單,靈活的對智能合約黑名單中的被監管智能合約的合約位址進行刪除或者增加。
相應的,承載上述可信執行環境的硬體,在獲取智能合約監管規則時,可以訪問該監管區塊鏈的分散式帳本,從該監管區塊鏈的分散式帳本中來獲取最新的智能合約監管規則;
例如,在實現時,調用部署在上述監管區塊鏈中的上述智能合約後生成的智能合約監管規則,可以儲存在上述監管區塊鏈的狀態資料庫中;比如,以以太坊為例,智能合約的調用結果,通常會作為本次調用的調用交易的交易收據的一部分內容,儲存至區塊鏈的狀態資料庫中的收據樹中。而上述節點設備可以即時的監聽上述監管區塊鏈的狀態資料庫中儲存的,與上述智能合約相關的資料。當監聽到調用該智能合約生成的最新的智能合約監管規則後,可以將該智能合約監管規則在本地進行儲存。而承載上述可信執行環境的硬體,則可以直接從該節點設備本地讀取最新的智能合約監管規則。
其中,上述智能合約監管規則的具體形式,在本說明書中不僅進行特別限定;例如,具體可以是由被監管智能合約的合約位址構成的智能合約黑名單,也可以黑名單以外的其他形式。
在示出的一種實施方式中,以上述智能合約監管規則是由被監管智能合約的合約位址構成的智能合約黑名單為例,在這種情況下,承載上述可信執行環境的硬體在基於獲取到的最新的智能合約監管規則確定上述目標智能合約是否為被監管智能合約時,首先可以獲取上述調用交易中攜帶的上述目標智能合約的合約位址,再將該目標智能合約的合約位址,與上述黑名單中的被監管智能合約的合約位址進行匹配;
其中,在本說明書中,上述合約位址就是為智能合約創建的合約帳戶的帳戶位址;例如,以以太坊為例,智能合約帳戶的位址是由發送者的位址(如圖1中的0xf5e…或)和交易亂數(nonce)作為輸入,透過加密演算法生成的。
如果該目標智能合約的合約位址,與上述黑名單中的任一被監管智能合約的合約位址匹配;此時,可以確定該目標智能合約為被監管智能合約;反之,如果該目標智能合約的合約位址,與上述黑名單中的合約位址均不匹配;此時,可以確定該目標智能合約不是被監管智能合約。
需要說明的是,當上述智能合約監管規則為上述智能合約黑名單以外的其它形式的監管規則時,在基於獲取到的最新的智能合約監管規則確定上述目標智能合約是否為被監管智能合約時的具體確認方式,也會隨之發生變化,在本說明書中不再進行一一列舉;
例如,在一種情況下,上述智能合約監管規則,具體也可以是被監管智能合約的合約位址的編碼方式。亦即,可以透過該智能合約監管規則,對合約位址滿足特定的編碼方式的一類智能合約進行監管。在這種情況下,在基於獲取到的最新的智能合約監管規則確定上述目標智能合約是否為被監管智能合約時,即為確定上述目標智能合約的合約位址的編碼方式,是否匹配上述智能合約監管規則中,所約定的編碼方式的過程。
在示出的一種實施方式中,為了實現對智能合約的監管,上述可信執行環境中儲存的解密密鑰,也可以不包含受監管的智能合約對應的解密密鑰;亦即,在上述可信執行環境中可以儲存與不受監管的智能合約的合約代碼對應的解密密鑰,而並不儲存和維護與被監管的智能合約的合約代碼對應的解密密鑰。
例如,在實現時,當用戶在區塊鏈成功創建了一個與智能合約對應的合約帳戶時,可以調用可信執行環境中搭載的密鑰生成演算法,為該合約帳戶創建根密鑰;當根密鑰創建完成後,可以進一步獲取智能合約監管規則,並在該可信執行環境中基於獲取到的智能合約監管規則來確定該智能合約是否為被監管智能合約;其中,確定該智能合約是否為被監管智能合約的實施過程不再贅述。
如果確定該目標智能合約不是被監管智能合約,則可以進一步在可信執行環境中儲存和維護生成的根密鑰。反之,如果確定該目標智能合約是被監管智能合約,則可信執行環境可以不再儲存和維護生成的根密鑰,此時可以選擇將生成的根密鑰丟棄;例如,如果採用非對稱加密方式,可以將根密鑰中的公鑰發送給用戶持有,而將根密鑰中的私鑰丟棄;如果採用對稱加密方式,則可以將生成的密鑰複製一份發送給用戶,再將生成的該密鑰丟棄。
在本說明書中,如果在該可信執行環境中基於獲取到的智能合約監管規則確定上述目標智能合約是被監管智能合約,由於可信執行環境中儲存的與被監管智能合約的合約代碼對應的解密密鑰是被禁止提取的;或者,可信執行環境中並沒有儲存被監管智能合約的合約代碼對應的解密密鑰;此時,無法提取到解密密鑰對該目標智能合約的合約代碼進行解密;亦即,無法執行該目標智能合約的合約代碼;因此,在這種情況下,可以直接終止針對該目標智能合約的調用過程,向上述客戶端返回該目標智能合約調用失敗的提示消息。
如果在該可信執行環境中基於獲取到的智能合約監管規則確定該目標智能合約不是被監管智能合約,此時還進一步從該可信執行環境中,提取出與該目標智能合約的合約代碼對應的解密密鑰,並基於該解密密鑰對該目標智能合約的合約代碼進行解密。其中,基於提取出的解密密鑰,對該目標智能合約的合約代碼進行解密的方式,與在部署該智能合約時所採用的加密方式相對應。
如前所述,如果在部署該目標智能合約時,該目標智能合約的合約代碼採用了對稱加密的方式進行加密;比如,採用對稱加密演算法的私鑰進行加密,此時直接使用對稱加密的私鑰進行解密即可。
如果在部署該目標智能合約時,該目標智能合約的合約代碼採用了非對稱加密的方式進行加密;比如,採用了非對稱加密的私鑰進行了加密;此時直接使用非對稱加密的公鑰進行解密即可。
進一步的,如果在部署該目標智能合約時,該目標智能合約的合約代碼採用了對稱加密和非對稱加密相結合的方式;比如,採用用對稱加密演算法的私鑰加密合約代碼,然後再用非對稱加密演算法的公鑰加密上述對稱加密演算法中所採用的私鑰。此時先使用非對稱加密演算法的私鑰解密上述對稱加密演算法中所採用的私鑰;再使用解密出的上述對稱加密演算法中所採用的私鑰,對加密的合約代碼進行解密。
在本說明書中,上述節點設備搭載的可信執行環境,具體可以是一個基於CPU硬體的安全擴展,且與外部完全隔離的可信執行環境。
可信執行環境最早是由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為例,該CPU可以利用新增的處理器指令,在主記憶體中分配一部分區域EPC(Enclave Page Cache,圍圈頁面快取或飛地頁面快取),透過CPU內的加密引擎MEE(Memory Encryption Engine)對其中的資料進行加密。
EPC 中加密的內容只有進入CPU後才會被解密成明文。因此,在SGX中,用戶可以不信任作業系統、VMM(
Virtual Machine Monitor,虛擬機監控器)、甚至BIOS (Basic Input Output System,基本輸入輸出系統),只需要信任CPU便能確保隱私資料不會洩漏。實際應用中,可以將隱私資料加密後以密文形式傳遞至圍圈中,並透過遠端證明將對應的密鑰也傳入圍圈。然後,在CPU的加密保護下利用資料進行運算,結果會以密文形式返回。這種模式下,既可以利用強大的計算力,又不用擔心資料洩漏。
在這種情況下,節點設備可以將部署的虛擬機,加載進SGX技術提供的圍圈中。當在基於提取出的解密密鑰對上述目標智能合約的合約代碼進行解密,獲得該目標智能合約的明文合約代碼以後,該節點設備可以利用CPU中新增的處理器指令,在主記憶體中可以分配一部分區域EPC,透過CPU內的加密引擎MEE對上述解密得到的明文合約代碼進行加密存入所述EPC中。EPC中加密的內容進入CPU後被解密成明文。在CPU中,對所述明文的代碼進行運算,完成代碼的執行過程。
當節點設備在上述可執行環境中,執行上述目標智能合約的明文合約代碼後,還可以對該明文合約代碼的執行結果進行加密,然後將加密後的執行結果發送至上述區塊鏈的分散式帳本進行儲存。
例如,由於上述目標智能合約的明文合約代碼的執行結果,通常會導致該智能合約的狀態發生變化;因此,上述明文合約代碼的執行結果通常會儲存至上述區塊鏈的狀態資料庫中;比如,以以太坊為例,上述明文合約代碼的執行結果,通常會作為本次調用的調用交易的交易收據的一部分內容,儲存至區塊鏈的狀態資料庫中的收據樹中。
其中,在本說明書中,對上述目標智能合約的合約代碼的執行結果進行加密時所採用的加密方式,具體可以是對稱加密方式,也可以是非對稱加密方式,
例如,仍以上述可信執行環境為Intel SGX為例,在區塊鏈的分散式帳本中寫入合約代碼的執行結果時使用的加密密鑰,通常稱之為secret_key。該secret_key可以是對稱加密的密鑰,也可以是非對稱加密密鑰;其中,如果該secret_key是對稱加密的密鑰,通常稱之為seal(Simple
Encrypted Arithmetic Library)密鑰。基於Intel SGX技術,該seal密鑰,可以是通過遠端證明後由密鑰管理伺服器發送給區塊鏈節點的密鑰。
在以上技術方案中,由於區塊鏈中的節點設備在搭載的可信執行環境中執行加密後的智能合約的合約代碼時,只有不受管理的智能合約的合約代碼可以進行解密和執行;因此,可以在對智能合約進行充分的隱私保護的基礎上,透過技術手段對一些被管理智能合約進行內容屏蔽,來實現對智能合約的監管。
請參見圖5,圖5是一示例性實施例提供的另一種基於區塊鏈的智能合約管理方法的流程圖。如圖5所示,該方法應用於區塊鏈中的節點設備;其中,所述節點設備搭載了可信執行環境;所述可信執行環境中儲存了與所述區塊鏈的分散式帳本中儲存的加密後的智能合約的合約代碼對應的解密密鑰;所述方法包括以下步驟:
步驟502,回應於客戶端發起的針對目標智能合約的調用交易,獲取所述區塊鏈的分散式帳本中儲存的加密後的所述目標智能合約的合約代碼,並將加密後的所述目標智能合約的合約代碼發送至所述可信執行環境;
步驟504,提取所述可信執行環境中儲存的與所述目標智能合約的合約代碼對應的解密密鑰,基於提取到的所述解密密鑰對所述目標智能合約的合約代碼進行解密,並在所述可信執行環境中執行解密後的所述目標智能合約的合約代碼;
在本說明書中,在上述可信執行環境中,可以預設儲存區塊鏈的分散式帳本中收錄的所有智能合約的合約代碼對應的解密密鑰。
而在將加密的該目標智能合約的合約代碼發送至該節點設備所搭載的可信執行環境之後,可以提取可信執行環境中儲存的與該目標智能合約對應的解密密鑰,基於該解密密鑰對該目標智能合約的合約代碼進行解密,並在可信執行環境中執行解密後的合約代碼。
步驟506,獲取智能合約管理規則,並在可信執行環境中基於所述智能合約管理規則確定所述目標智能合約是否為被管理智能合約;
步驟508,如果所述目標智能合約不是被管理智能合約,則將所述目標智能合約的合約代碼的執行結果加密後發送至所述區塊鏈的分散式帳本進行儲存。
在本說明書中,當目標智能合約的合約代碼執行完畢後,可以在上述可信執行環境中快取上述合約代碼的執行結果,並透過進一步確定該目標智能合約是否為受監管的智能合約,來決策是否需要將上述合約代碼的執行結果加密後發送至區塊鏈的分散式帳本進行儲存。
具體的,承載該可信執行環境的硬體,可以進一步獲取智能合約監管規則,並在該可信執行環境中基於獲取到的智能合約監管規則來確定該目標智能合約是否為被監管智能合約。其中,具體的實施過程不再贅述,可以參考之前實施例的記載。
在示出的一種實施方式中,如果該目標智能合約是被監管智能合約,此時可以刪除快取的該目標智能合約的合約代碼的執行結果,並向上述客戶端返回該目標智能合約調用失敗的提示消息。
在示出的另一種實施方式中,如果該目標智能合約是被管理智能合約,也可以將該目標智能合約的合約代碼的執行結果,由快取模式切換為在可信執行環境中進行持久化儲存,並將該可信執行環境中持久化儲存的上述執行結果設置為禁止提取狀態;同時,還可以向上述客戶端返回該目標智能合約調用失敗的提示消息。
當然,如果該目標智能合約不是被監管智能合約,此時可以針對上述可信執行環境中快取的該目標智能合約的合約代碼的執行結果進行加密,然後將加密後的執行結果發送至上述區塊鏈的分散式帳本進行儲存。其中,具體的實施過程也不再贅述,可以參考之前實施例的記載。
在以上技術方案中,由於區塊鏈中的節點設備在搭載的可信執行環境中執行解密的智能合約的合約代碼之後,只有不受管理的智能合約的合約代碼的執行結果進一步加密後發送至區塊鏈的分散式帳本進行儲存;因此,可以在對智能合約進行充分的隱私保護的基礎上,透過技術手段對一些被管理智能合約進行內容屏蔽,來實現對智能合約的監管。與上述方法實施例相對應,本申請還提供了裝置的實施例。
與上述方法實施例相對應,本說明書還提供了一種基於區塊鏈的智能合約管理裝置的實施例。本說明書的基於區塊鏈的智能合約管理裝置的實施例可以應用在電子設備上。裝置實施例可以透過軟體實現,也可以透過硬體或者軟硬體結合的方式實現。以軟體實現為例,作為一個邏輯意義上的裝置,是透過其所在電子設備的處理器將非易失性記憶體中對應的電腦程式指令讀取到主記憶體中運行形成的。從硬體層面而言,如圖6所示,為本說明書的基於區塊鏈的智能合約管理裝置所在電子設備的一種硬體結構圖,除了圖6所示的處理器、主記憶體、網路介面、以及非易失性記憶體之外,實施例中裝置所在的電子設備通常根據該電子設備的實際功能,還可以包括其他硬體,對此不再贅述。
圖7是本說明書一示例性實施例示出的一種基於區塊鏈的智能合約管理裝置的方塊圖。
請參考圖7,所述基於區塊鏈的智能合約管理裝置70可以應用在前述圖6所示的電子設備中,所述電子設備搭載了可信執行環境;包括:
第一獲取模組701,回應於客戶端發起的針對目標智能合約的調用交易,獲取所述區塊鏈的分散式帳本中儲存的加密後的所述目標智能合約的合約代碼,並將加密後的所述目標智能合約的合約代碼發送至所述可信執行環境;
第一確定模組702,獲取智能合約管理規則,並在可信執行環境中基於所述智能合約管理規則確定所述目標智能合約是否為被管理智能合約;
第一解密模組703,如果所述目標智能合約不是被管理智能合約,提取所述可信執行環境中儲存的與所述目標智能合約的合約代碼對應的解密密鑰,並基於提取到的所述解密密鑰對所述目標智能合約的合約代碼進行解密;
第一執行模組704,在所述可信執行環境中執行解密後的所述目標智能合約的合約代碼,並將執行結果加密後發送至所述區塊鏈的分散式帳本進行儲存。
在本實施例中,所述可信執行環境中儲存了與所述區塊鏈的分散式帳本中儲存的加密後的智能合約的合約代碼對應的解密密鑰;
其中,所述可信執行環境中儲存的與被管理智能合約對應的解密密鑰被設置為禁止提取;或者,所述可信執行環境中儲存的解密密鑰不包括與被管理智能合約對應的解密密鑰。
在本實施例中,所述裝置70還包括:
第一返回模組705(圖7中未示出),如果所述目標智能合約是被管理智能合約,向所述客戶端返回所述目標智能合約調用失敗的提示消息。
在本實施例中,所述裝置70還包括:
接收模組706,接收客戶端發起的針對目標智能合約的創建交易;其中,所述創建交易包括加密後的所述目標智能合約的合約代碼;
創建模組707,回應於所述創建交易,在所述可信執行環境中執行智能合約創建代碼,在所述區塊鏈中創建與所述目標智能合約對應的合約帳戶,並將加密後的所述目標智能合約的合約代碼發送至所述區塊鏈的分散式帳本進行儲存。
在本實施例中,所述第一獲取模組701:
從管理區塊鏈的分散式帳本中獲取智能合約管理規則;其中,所述智能合約管理規則由管理方調用部署在所述管理區塊鏈上的智能合約,生成的智能合約管理規則。
在本實施例中,所述智能合約管理規則包括:由被管理智能合約的合約位址構成的智能合約黑名單;
所述第一確定模組702:
獲取所述調用交易中的所述目標智能合約的合約位址;
將所述目標智能合約的合約位址與所述智能合約黑名單中的合約位址進行匹配;
如果所述目標智能合約的合約位址與所述智能合約黑名單中的任一合約位址匹配,確定所述目標智能合約為被管理智能合約;反之,確定所述目標智能合約不是被管理智能合約。
在本實施例中,對所述目標智能合約的合約代碼採用的加密方式,包括以下示出的加密方式中的任意一種:對稱加密方式、非對稱加密方式、對稱加密結合非對稱加密的方式;
對所述目標智能合約的合約代碼的執行結果採用的加密方式,包括:對稱加密方式;或者,非對稱加密方式。
在本實施例中,其中,所述對稱加密結合非對稱加密的方式,包括數位信封加密方式。
在本實施例中,其中,所述可信執行環境包括Intel SGX。
圖8是本說明書一示例性實施例示出的一種基於區塊鏈的智能合約管理裝置的方塊圖。
請參考圖8,所述基於區塊鏈的智能合約管理裝置80可以應用在前述圖6所示的電子設備中,所述電子設備搭載了可信執行環境;所述可信執行環境中儲存了與所述區塊鏈的分散式帳本中儲存的加密後的智能合約的合約代碼對應的解密密鑰;包括:
第二獲取模組801,回應於客戶端發起的針對目標智能合約的調用交易,獲取所述區塊鏈的分散式帳本中儲存的加密後的所述目標智能合約的合約代碼,並將加密後的所述目標智能合約的合約代碼發送至所述可信執行環境;
第二解密模組802,提取所述可信執行環境中儲存的與所述目標智能合約的合約代碼對應的解密密鑰,基於提取到的所述解密密鑰對所述目標智能合約的合約代碼進行解密;
第二執行模組803,在所述可信執行環境中執行解密後的所述目標智能合約的合約代碼;
第二確定模組804,獲取智能合約管理規則,並在可信執行環境中基於所述智能合約管理規則確定所述目標智能合約是否為被管理智能合約;如果所述目標智能合約不是被管理智能合約,則將所述目標智能合約的合約代碼的執行結果加密後發送至所述區塊鏈的分散式帳本進行儲存。
在本實施例中,所述裝置80還包括:
第二返回模組805(圖8中未示出),如果所述目標智能合約是被管理智能合約,刪除所述目標智能合約的合約代碼的執行結果,並向所述客戶端返回所述目標智能合約調用失敗的提示消息;或者,
如果所述目標智能合約是被管理智能合約,在所述可信執行環境中儲存所述目標智能合約的合約代碼的執行結果,並將所述可信執行環境中儲存的所述執行結果設置為禁止提取;以及,向所述客戶端返回所述目標智能合約調用失敗的提示消息。
上述實施例闡明的系統、裝置、模組或單元,具體可以由電腦晶片或實體實現,或者由具有某種功能的產品來實現。一種典型的實現設備為電腦,電腦的具體形式可以是個人電腦、膝上型電腦、行動電話、相機電話、智慧型電話、個人數位助理、媒體播放機、導航設備、電子郵件收發設備、遊戲控制台、平板電腦、可穿戴設備或者這些設備中的任意幾種設備的組合。
在一個典型的配置中,電腦包括一個或多個處理器(CPU)、輸入/輸出介面、網路介面和主記憶體。
主記憶體可能包括電腦可讀媒體中的非永久性記憶體,隨機存取記憶體(RAM)和/或非易失性主記憶體等形式,如唯讀記憶體(ROM)或快閃記憶體(flash RAM)。主記憶體是電腦可讀媒體的示例。
電腦可讀媒體包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現資訊儲存。資訊可以是電腦可讀指令、資料結構、程式的模組或其他資料。電腦的儲存媒體的例子包括,但不限於相變主記憶體(PRAM)、靜態隨機存取記憶體(SRAM)、動態隨機存取記憶體(DRAM)、其他類型的隨機存取記憶體(RAM)、唯讀記憶體(ROM)、電可擦除可程式化唯讀記憶體(EEPROM)、快閃記憶體或其他主記憶體技術、唯讀光碟唯讀記憶體(CD-ROM)、數位多功能光碟(DVD)或其他光學儲存、磁盒式磁帶、磁片儲存、量子記憶體、基於石墨烯的儲存媒體或其他磁性存放裝置或任何其他非傳輸媒體,可用於儲存可以被計算設備訪問的資訊。按照本文中的界定,電腦可讀媒體不包括暫存電腦可讀媒體 (transitory media),如調變的資料信號和載波。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,並不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
上述對本說明書特定實施例進行了描述。其它實施例在所附申請專利範圍的範圍內。在一些情況下,在申請專利範圍中記載的動作或步驟可以按照不同於實施例中的順序來執行並且仍然可以實現期望的結果。另外,在附圖中描繪的過程不一定要求示出的特定順序或者連續順序才能實現期望的結果。在某些實施方式中,多工處理和並行處理也是可以的或者可能是有利的。
在本說明書一個或多個實施例使用的術語是僅僅出於描述特定實施例的目的,而非旨在限制本說明書一個或多個實施例。在本說明書一個或多個實施例和所附申請專利範圍中所使用的單數形式的“一種”、“所述”和“該”也旨在包括多數形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“和/或”是指並包含一個或多個相關聯的列出專案的任何或所有可能組合。
應當理解,儘管在本說明書一個或多個實施例可能採用術語第一、第二、第三等來描述各種資訊,但這些資訊不應限於這些術語。這些術語僅用來將同一類型的資訊彼此區分開。例如,在不脫離本說明書一個或多個實施例範圍的情況下,第一資訊也可以被稱為第二資訊,類似地,第二資訊也可以被稱為第一資訊。取決於語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“回應於確定”。
以上所述僅為本說明書一個或多個實施例的較佳實施例而已,並不用以限制本說明書一個或多個實施例,凡在本說明書一個或多個實施例的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本說明書一個或多個實施例保護的範圍之內。
402~408:方法步驟
502~508:方法步驟
70:基於區塊鏈的智能合約管理裝置
701:第一獲取模組
702:第一確定模組
703:第一解密模組
704:第一執行模組
80:基於區塊鏈的智能合約管理裝置
801:第二獲取模組
802:第二解密模組
803:第二執行模組
804:第二確定模組
[圖1] 是一示例性實施例提供的一種創建智能合約的示意圖;
[圖2] 是一示例性實施例提供的調用智能合約的示意圖;
[圖3] 是一示例性實施例提供的創建智能合約和調用智能合約的示意圖;
[圖4] 是一示例性實施例提供的一種基於區塊鏈的智能合約管理方法的流程圖;
[圖5] 是一示例性實施例提供的另一種基於區塊鏈的智能合約管理方法的流程圖;
[圖6] 是一示例性實施例提供的一種電子設備的結構示意圖;
[圖7] 是一示例性實施例提供的一種基於區塊鏈的智能合約管理裝置的方塊圖;
[圖8] 是一示例性實施例提供的一種基於區塊鏈的智能合約管理裝置的方塊圖。