區塊鏈中智能合約的儲存、執行方法及裝置和電子設備
本說明書實施例係關於區塊鏈技術領域,尤其關於一種區塊鏈中智能合約的儲存、執行方法及裝置和電子設備。
區塊鏈技術,也被稱之為分散式帳本技術,是一種由若干台計算設備共同參與“記帳”,共同維護一份完整的分散式資料庫的新興技術。由於區塊鏈技術具有去中心化、公開透明、每台計算設備可以參與資料庫記錄、並且各計算設備之間可以快速的進行資料同步的特性,使得區塊鏈技術在眾多的領域中廣泛的進行應用。
本說明書實施例提供的一種區塊鏈中智能合約的儲存、執行方法及裝置和電子設備:
根據本說明書實施例的第一態樣,提供一種區塊鏈中智能合約的儲存方法,所述方法包括:
接收儲存目標智能合約的交易;
回應所述交易,調用發佈於所述區塊鏈的智能合約的儲存邏輯;
查詢所述目標智能合約中是否存在與已儲存智能合約相同的邏輯方法;
如果存在,將所述目標智能合約中除所述相同的邏輯方法外的其它邏輯方法,以及所述目標智能合約與所述已儲存智能合約相同的邏輯方法的對應關係儲存在所述區塊鏈。
可選的,查詢所述目標智能合約是否存在與已儲存智能合約相同的邏輯方法,具體包括:
計算所述目標智能合約中的各邏輯方法的唯一標識;
如果所述唯一標識與所述區塊鏈中儲存的邏輯方法的唯一標識一致,確定所述一致的唯一標識對應的邏輯方法為已儲存智能合約相同的邏輯方法。
可選的,所述目標智能合約與所述已儲存智能合約相同的邏輯方法的對應關係儲存在所述區塊鏈,具體包括:
將所述目標智能合約中相同的邏輯方法轉換為所述相同的邏輯方法的唯一標識後儲存在所述區塊鏈。
可選的,所述唯一標識包括唯一路徑或者數位摘要;
所述唯一路徑包括邏輯方法的檔案名和方法名;
所述數位摘要包括針對邏輯方法進行雜湊計算得到的雜湊值。
可選的,所述區塊鏈包括聯盟鏈、公有鏈或者私有鏈。
根據本說明書實施例的第二態樣,提供一種區塊鏈中智能合約的執行方法,所述智能合約由前述任一項區塊鏈中智能合約的儲存方法儲存在所述區塊鏈,所述方法包括:
接收執行目標業務的交易;
回應所述交易,查詢所述區塊鏈中執行所述目標業務所需的目標智能合約;
基於所述目標智能合約與已儲存智能合約相同的邏輯方法的對應關係獲取所述相同的邏輯方法,以及所述目標智能合約中除所述相同的邏輯方法外的其它邏輯方法;
在實例化的虛擬機中將所述其它邏輯方法和相同的邏輯方法組裝為完整的合約邏輯方法,執行所述合約邏輯方法。
可選的,所述基於所述目標智能合約與已儲存智能合約相同的邏輯方法的對應關係獲取所述相同的邏輯方法,具體包括:
獲取所述目標智能合約中儲存的唯一標識;
如果所述唯一標識與已儲存智能合約的邏輯方法的唯一標識相同,獲取所述已儲存智能合約的邏輯方法。
可選的,所述唯一標識包括唯一路徑或者數位摘要;
所述唯一路徑包括邏輯方法的檔案名和方法名;
所述數位摘要包括針對邏輯方法進行雜湊計算得到的雜湊值。
可選的,所述方法還包括:
如果所述目標智能合約執行需要狀態資料,從目標智能合約的資料域中獲取狀態資料;
所述在實例化的虛擬機中將所述其它邏輯方法和相同的邏輯方法組裝為完整的合約邏輯方法,執行所述合約邏輯方法,具體包括:
在實例化的虛擬機中將所述其它邏輯方法和相同的邏輯方法組裝為完整的合約邏輯方法,並將所述狀態資料載入到所述合約邏輯方法後執行。
可選的,所述方法還包括:
區塊鏈中的節點設備在啟動時,實例化一個虛擬機;其中,所述虛擬機用於執行所述節點設備中任意的智能合約。
可選的,所述區塊鏈包括聯盟鏈、公有鏈或者私有鏈。
根據本說明書實施例的第三態樣,提供一種區塊鏈中智能合約的儲存裝置,所述裝置包括:
接收單元,接收儲存目標智能合約的交易;
回應單元,回應所述交易,調用發佈於所述區塊鏈的智能合約的儲存邏輯;
查詢單元,查詢所述目標智能合約中是否存在與已儲存智能合約相同的邏輯方法;
儲存單元,如果存在,將所述目標智能合約中除所述相同的邏輯方法外的其它邏輯方法,以及所述目標智能合約與所述已儲存智能合約相同的邏輯方法的對應關係儲存在所述區塊鏈。
可選的,所述查詢單元,具體包括:
計算子單元,計算所述目標智能合約中的各邏輯方法的唯一標識;
確定單元,如果所述唯一標識與所述區塊鏈中儲存的邏輯方法的唯一標識一致,確定所述一致的唯一標識對應的邏輯方法為已儲存智能合約相同的邏輯方法。
可選的,所述儲存單元中,目標智能合約與所述已儲存智能合約相同的邏輯方法的對應關係儲存在所述區塊鏈,具體包括:
將所述目標智能合約中相同的邏輯方法轉換為所述相同的邏輯方法的唯一標識後儲存在所述區塊鏈。
可選的,所述唯一標識包括唯一路徑或者數位摘要;
所述唯一路徑包括邏輯方法的檔案名和方法名;
所述數位摘要包括針對邏輯方法進行雜湊計算得到的雜湊值。
可選的,所述區塊鏈包括聯盟鏈、公有鏈或者私有鏈。
根據本說明書實施例的第四態樣,提供一種區塊鏈中智能合約的執行裝置,所述智能合約由前述任一項區塊鏈中智能合約的儲存方法儲存在所述區塊鏈,所述裝置包括:
接收單元,接收執行目標業務的交易;
回應單元,回應所述交易,查詢所述區塊鏈中執行所述目標業務所需的目標智能合約;
獲取單元,基於所述目標智能合約與已儲存智能合約相同的邏輯方法的對應關係獲取所述相同的邏輯方法,以及所述目標智能合約中除所述相同的邏輯方法外的其它邏輯方法;
執行單元,在實例化的虛擬機中將所述其它邏輯方法和相同的邏輯方法組裝為完整的合約邏輯方法,執行所述合約邏輯方法。
可選的,所述獲取單元中,基於所述目標智能合約與已儲存智能合約相同的邏輯方法的對應關係獲取所述相同的邏輯方法,具體包括:
第一獲取子單元,獲取所述目標智能合約中儲存的唯一標識;
第二獲取子單元,如果所述唯一標識與已儲存智能合約的邏輯方法的唯一標識相同,獲取所述已儲存智能合約的邏輯方法。
可選的,所述唯一標識包括唯一路徑或者數位摘要;
所述唯一路徑包括邏輯方法的檔案名和方法名;
所述數位摘要包括針對邏輯方法進行雜湊計算得到的雜湊值。
可選的,所述裝置還包括:
狀態資料獲取子單元,如果所述目標智能合約執行需要狀態資料,從目標智能合約的資料域中獲取狀態資料;
所述執行單元,具體包括:
在實例化的虛擬機中將所述其它邏輯方法和相同的邏輯方法組裝為完整的合約邏輯方法,並將所述狀態資料載入到所述合約邏輯方法後執行。
可選的,所述裝置還包括:
實例化單元,區塊鏈中的節點設備在啟動時,實例化一個虛擬機;其中,所述虛擬機用於執行所述節點設備中任意的智能合約。
可選的,所述區塊鏈包括聯盟鏈、公有鏈或者私有鏈。
根據本說明書實施例的第五態樣,提供一種電子設備,包括:
處理器;
用於儲存處理器可執行指令的記憶體;
其中,所述處理器被配置為上述任一項區塊鏈中智能合約的儲存方法。
根據本說明書實施例的第六態樣,提供一種電子設備,包括:
處理器;
用於儲存處理器可執行指令的記憶體;
其中,所述處理器被配置為上述任一項區塊鏈中智能合約的執行方法。
本說明書實施例,提供了一種區塊鏈中智能合約的儲存、執行方案,首先透過將運行智能合約所需的合約邏輯方法和狀態資料分離,使得合約邏輯方法不再受到資料儲存關聯的制約。然後針對不同智能合約中相同的邏輯方法僅儲存一次,使得相同的智能合約不再需要儲存多次。如此,降低了儲存智能合約所需的儲存資源。在執行智能合約過程中,基於目標智能合約與已儲存智能合約相同的邏輯方法的對應關係獲取相同的邏輯方法,從而還原完整的目標智能合約代碼。並且,由於合約邏輯方法和狀態資料分離,每個節點設備僅需要實例化一個虛擬機,並透過一個虛擬機就可以執行各個智能合約,減少了實例化虛擬機所消耗的資源。
這裡將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式並不代表與本說明書相一致的所有實施方式。相反,它們僅是與如所附申請專利範圍中所詳述的、本說明書的一些態樣相一致的裝置和方法的例子。
在本說明書使用的術語是僅僅出於描述特定實施例的目的,而非旨在限制本說明書。在本說明書和所附申請專利範圍中所使用的單數形式的“一種”、“所述”和“該”也旨在包括多數形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“和/或”是指並包含一個或多個相關聯的列出專案的任何或所有可能組合。
應當理解,儘管在本說明書可能採用術語第一、第二、第三等來描述各種資訊,但這些資訊不應限於這些術語。這些術語僅用來將同一類型的資訊彼此區分開。例如,在不脫離本說明書範圍的情況下,第一資訊也可以被稱為第二資訊,類似地,第二資訊也可以被稱為第一資訊。取決於語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“回應於確定”。
智能合約(Smart contract)是一種旨在應用在可以部署在區塊鏈上的以資訊化方式傳播、驗證或執行合同的電腦協議。透過在智能合約中聲明業務邏輯可以實現執行相應操作。智能合約允許在沒有第三方的情況下進行可信交易。這些交易可追蹤且不可逆轉。智能合約能夠提供優於傳統合同方法的安全,並減少與合同相關的其他交易成本。
在傳統區塊鏈系統中,一方面在回應創建的智能合約時,即使該智能合約已經由其它請求方創建並上鏈儲存了,依然需要再次儲存一份。從而導致了儲存資源的浪費。
另一方面,在節點設備執行不同智能合約時,每個智能合約都需要實例化一個虛擬機VM。從而到導致計算資源的浪費,並且隨著智能合約的邏輯越來越複雜,這種浪費乘階遞增。
以下透過介紹傳統區塊鏈智能合約設計,來進一步理解出現上述問題的原因。
在傳統區塊鏈智能合約的設計中,每個智能合約的方法邏輯(或業務邏輯)都是合約發佈者根據自身的業務需求進行編寫的。正是由於智能合約是外部的合約發佈者發佈的,因此可能存在由於編寫者的疏忽導致智能合約運算邏輯異常的問題。而智能合約上鏈後,區塊鏈中各個節點設備均可以使用,為了避免異常智能合約對調用方造成損失,每個智能合約都需要在各自封閉的環境中才可以運行。
以下對本說明書中智能合約中的通用方法邏輯進行介紹。
隨著區塊鏈技術的不斷發展,區塊鏈在不同領域不同場景中都有所應用。通常,在同一個領域特別是同一個業務場景中,業務流程一般具有一定的通用性,因此就會存在通用的方法邏輯。甚至在不同領域、不同業務場景中也會存在一些交叉通用的方法邏輯。
例如,在編程層面上也有很多方法邏輯是通用的,本說明書中稱為通用邏輯方法,如加密簽名演算法、資料解析、工作流轉、狀態儲存等。
相同業務公司之間也具有相同的方法邏輯,本說明書中稱為業務邏輯方法,例如兩個旅遊公司,對於旅遊業務通常也具有通用的業務邏輯,例如購買機票、火車票、訂酒店等。
這些通用的方法邏輯可以來自智能合約平台、權威組織、活躍的開源愛好者等等。好的方法會得到認可並會積極採用。雖則業務的不斷成熟、通用化,底層方法的不斷完善、優化。一個智能合約依賴與此,其開發效率、性能等才能有所提升,健壯性、穩定性才能有更大保障。
同時,傳統區塊鏈中的智能合約還具有局限性,調用方只能在智能合約中實現部分的核心業務邏輯。一方面是因為風險太大,一方面則是因為區塊鏈平台的局限性。無論是在性能還是擴展性上,在區塊鏈上執行智能合約都有各種束縛。
在一些智能合約中,因為業務流程等的不同,只是在上層邏輯調用有些差異,底層邏輯可能完全一致。然而不同業務需要部署不同甚至相同的智能合約。每個智能合約會被拷貝多份儲存在各個區塊鏈節點上。在執行智能合約時,每個智能合約需要實例化並在一個獨有的完全封閉的虛擬機中運行。這不論是對伺服器的儲存資源還是計算資源都會造成浪費。
如圖1所示的傳統區塊鏈智能合約儲存的示意圖。
圖1中,區塊鏈中儲存有智能合約1-1、智能合約1-2和智能合約2-1。
其中,智能合約1-1和智能合約1-2是不同合約發佈者發佈的相同的智能合約。智能合約2-1與智能合約1-1、智能合約1-2是不同的智能合約。
如圖1所示,智能合約1-1和智能合約1-2具有相同的業務邏輯方法A和通用邏輯方法A。
智能合約2-1與智能合約1-1或1-2具有相同的通用邏輯方法A,具有不同的業務邏輯方法B。
雖然這3個智能合約存在相同的通用邏輯方法A,而且智能合約1-1和智能合約1-2還存在相同的業務邏輯方法A;但如圖1所示,每個智能合約依然是相互獨立的,3個合約中的通用邏輯方法A雖然完全相同,但依然需要儲存3份;2個合約中的業務邏輯方法A雖然完全相同,但依然需要儲存2份。
另一方面,每個智能合約的邏輯方法還關聯有對應的資料域,即邏輯方法和資料域是強耦合、強關聯的。如智能合約1-1對應有唯一的資料域1-1;智能合約1-1對應有唯一的資料域1-2;智能合約2-1對應有唯一的資料域2-1。所述資料域是用於存放智能合約執行所需的狀態資料的。
需要說明的是,這僅是針對區塊鏈中1個節點設備中儲存的智能合約,而區塊鏈中的其它節點設備儲存智能合約同樣如此,因此各個節點設備都會需要重複儲存相同的邏輯代碼,從而導致儲存資源的浪費。
針對上述提出的傳統區塊鏈中智能合約的問題,本說明書提出了一種區塊鏈中智能合約的儲存以及執行方案。從根源上減少儲存、計算資源的浪費。並且可以使得智能合約執行更穩定,邏輯方法趨於標準化。
請參考圖2,圖2為本說明書一實施例提供的區塊鏈中智能合約的儲存方法的流程圖,所述方法應用於所述區塊鏈中任一節點設備,所述方法包括:
步驟110:接收儲存目標智能合約的交易;
步驟120:回應所述交易,調用發佈於所述區塊鏈的智能合約的儲存邏輯;
步驟130:查詢所述目標智能合約中是否存在與已儲存智能合約相同的邏輯方法;
步驟140:如果存在,將所述目標智能合約中除所述相同的邏輯方法外的其它邏輯方法,以及所述目標智能合約與所述已儲存智能合約相同的邏輯方法的對應關係儲存在所述區塊鏈。
在本說明書所描述的區塊鏈,具體可以包括私有鏈、公有鏈以及聯盟鏈等,在本說明書中不進行特別限定。所述區塊鏈中的節點設備可以無限制的添加,各個節點設備可以同步一個系統時間,以保障智能合約執行的時效性。
需要說明的是,在本說明書中所描述的交易(Transaction),是指透過區塊鏈的用戶端創建,並需要最終發佈至區塊鏈的資料儲存系統中的一筆資料。
區塊鏈中的交易,通常存在狹義的交易以及廣義的交易之分。狹義的交易是指用戶向區塊鏈發佈的一筆價值轉移;例如,在傳統的比特幣區塊鏈網路中,交易可以是用戶在區塊鏈中發起的一筆轉帳。而廣義的交易是指用戶向區塊鏈發佈的一筆具有業務意圖的業務資料;例如,運營方可以基於實際的業務需求搭建一個聯盟鏈,依託於聯盟鏈部署一些與價值轉移無關的其它類型的線上業務(比如,寬泛的可以分為查詢業務、調用業務等),而在這類聯盟鏈中,交易可以是用戶在聯盟鏈中發佈的一筆具有業務意圖的業務消息或者業務請求。
上述用戶端,可以包括任意類型的以區塊鏈中儲存的底層業務資料作為資料支撐,來實現特定的業務功能的上層應用。
以下結合圖3所示的本說明書提供的區塊鏈中智能合約儲存的示意圖。
圖3中,可以將智能合約獨立為一個獨立的智能合約模組。並且將智能合約的狀態資料和合約邏輯進行分離,即將每個智能合約的邏輯方法和資料域解耦。如此,相同的智能合約不再需要實例化儲存多次。
在前述圖1傳統區塊鏈中智能合約儲存示意圖中,智能合約1-1具有業務邏輯方法A和通用邏輯方法A;
智能合約1-2具有業務邏輯方法A和通用邏輯方法A;
智能合約2-1具有業務邏輯方法B和通用邏輯方法A。
圖3同樣是針對這3個智能合約進行儲存;可見由於智能合約1-1、1-2和3-1具有完全相同的通用邏輯方法A,因此,僅需要儲存一次通用邏輯方法A;即智能合約1-1、1-2、2-1共用通用邏輯方法A。
由於智能合約1-1和1-2具有完全相同的業務邏輯方法A,因此,也只要儲存一次業務邏輯方法A;即智能合約1-1、1-2共用業務邏輯方法A。
另一方面,由於邏輯方法和資料域分離,相同的業務邏輯方法A需要分別對應智能合約1-1和1-2的資料域。
值得一提的是,各個智能合約中的通用邏輯方法可以下沉,開發者只需要將這些通用邏輯方法按照業務邏輯拼湊在一起即可實現智能合約的開發。同時開發者可以分享平台更多的通用邏輯方法(對現有邏輯方法的優化、業務邏輯優化及創建、bug修改等等),供自己和他人調用。
在一實施例中,所述步驟130查詢所述目標智能合約是否存在與已儲存智能合約相同的邏輯方法,具體包括:
計算所述目標智能合約中的各邏輯方法的唯一標識;
如果所述唯一標識與所述區塊鏈中儲存的邏輯方法的唯一標識一致,確定所述一致的唯一標識對應的邏輯方法為已儲存智能合約相同的邏輯方法。
所述唯一標識包括唯一路徑或者數位摘要;
所述唯一路徑包括邏輯方法的檔案名和方法名;
所述數位摘要包括針對邏輯方法進行雜湊計算得到的雜湊值。
需要說明的是,所述唯一路徑和數位摘要僅是唯一標識的幾種示例,所述唯一標識還可以是其它任何具有唯一性的內容。
在實際應用中,由於邏輯方法實際是一系列用於實現運行邏輯的代碼;而查詢相同的代碼所消耗的計算資源較大;而將邏輯方法轉換為數位摘要或者唯一路徑後,由於數位摘要或者唯一路徑的內容相對於代碼的內容大大縮小,因此查詢效率會提高,所消耗的計算資源也會降低。
在一實施例中,所述步驟140中,目標智能合約與所述已儲存智能合約相同的邏輯方法的對應關係儲存在所述區塊鏈,具體包括:
將所述目標智能合約中相同的邏輯方法轉換為所述相同的邏輯方法的唯一標識(例如數位摘要、唯一路徑等)後儲存在所述區塊鏈。
以下以數位摘要為例進行說明,某目標智能合約存在邏輯方法A、邏輯方法B和邏輯方法C;記為目標智能合約{A,B,C}。
假設其中邏輯方法A與一個已儲存在區塊鏈的智能合約1的邏輯方法A相同;邏輯方法B與另一個已儲存在區塊鏈的智能合約2的邏輯方法B相同;邏輯方法C與儲存在區塊鏈的所有邏輯方法均不同。
那麼,在儲存目標智能合約{A,B,C}時,將邏輯方法A的代碼整個轉換為邏輯方法A的數位摘要,記為hash(A);
將邏輯方法B的代碼整個轉換為邏輯方法B的數位摘要,記為hash(B);
這樣最終儲存在區塊鏈中的目標智能合約實際為{hash(A),hash(B),C},邏輯方法A和B均是數位摘要,只有邏輯方法C是代碼本身。所述hash(A)、hash(B)即為目標智能合約與已儲存的相同邏輯方法之間的對應關係。
透過上述區塊鏈中智能合約的儲存方案,首先透過將運行智能合約所需的合約邏輯方法和狀態資料分離,使得合約邏輯方法不再受到資料儲存關聯的制約。然後針對不同智能合約中相同的邏輯方法僅儲存一次,使得相同的智能合約不再需要儲存多次。如此,降低了儲存智能合約所需的儲存資源。
在儲存智能合約的基礎上,本說明書還提供了智能合約的執行實施例。
首先,透過圖4的傳統區塊鏈中智能合約的執行示意圖(對應圖1的傳統區塊鏈中智能合約的儲存方案),介紹傳統區塊鏈的缺陷。
圖4中,由於傳統區塊鏈中智能合約的邏輯方法和資料域是強耦合、強關聯的。如智能合約1-1對應有唯一的資料域1-1;智能合約1-1對應有唯一的資料域1-2;智能合約2-1對應有唯一的資料域2-1。所述資料域是用於存放智能合約執行所需的狀態資料的。因此,執行每個智能合約都需要實例化一個虛擬機VM。然後將智能合約的邏輯方法和狀態資料在對應的虛擬機中執行。一個節點設備的資源(記憶體資源、計算資源)是有限的;隨著節點設備的智能合約不斷增加,虛擬機消耗的資源也會不斷增加,無疑是一種資源浪費。
針對上述問題,請參考圖5,圖5為本說明書一實施例提供的區塊鏈中智能合約的執行方法的流程圖,所述方法應用於所述區塊鏈的節點設備,所述智能合約透過前述區塊鏈中智能合約的儲存方法儲存在所述區塊鏈,所述方法包括:
步驟210:接收執行目標業務的交易;
步驟220:回應所述交易,查詢所述區塊鏈中執行所述目標業務所需的目標智能合約;
步驟230:基於所述目標智能合約與已儲存智能合約相同的邏輯方法的對應關係獲取所述相同的邏輯方法,以及所述目標智能合約中除所述相同的邏輯方法外的其它邏輯方法;
步驟240:在實例化的虛擬機中將所述其它邏輯方法和相同的邏輯方法組裝為完整的合約邏輯方法,執行所述合約邏輯方法。
在本說明書所描述的區塊鏈,具體可以包括私有鏈、公有鏈以及聯盟鏈等,在本說明書中不進行特別限定。所述區塊鏈中的節點設備可以無限制的添加,各個節點設備可以同步一個系統時間,以保障智能合約執行的時效性。
需要說明的是,在本說明書中所描述的交易(Transaction),是指透過區塊鏈的用戶端創建,並需要最終發佈至區塊鏈的資料儲存系統中的一筆資料。
區塊鏈中的交易,通常存在狹義的交易以及廣義的交易之分。狹義的交易是指用戶向區塊鏈發佈的一筆價值轉移;例如,在傳統的比特幣區塊鏈網路中,交易可以是用戶在區塊鏈中發起的一筆轉帳。而廣義的交易是指用戶向區塊鏈發佈的一筆具有業務意圖的業務資料;例如,運營方可以基於實際的業務需求搭建一個聯盟鏈,依託於聯盟鏈部署一些與價值轉移無關的其它類型的線上業務(比如,寬泛的可以分為查詢業務、調用業務等),而在這類聯盟鏈中,交易可以是用戶在聯盟鏈中發佈的一筆具有業務意圖的業務消息或者業務請求。
上述用戶端,可以包括任意類型的以區塊鏈中儲存的底層業務資料作為資料支撐,來實現特定的業務功能的上層應用。
在一實施例中,所述方法還包括:
區塊鏈中的節點設備在啟動時,實例化一個虛擬機;其中,所述虛擬機用於執行所述節點設備中任意的智能合約。
以下結合圖6所示的本說明書提供的區塊鏈中智能合約執行的示意圖(對應圖3所示的本說明書提供的區塊鏈中智能合約儲存方案)。
如前圖3中所述:將智能合約的狀態資料和合約邏輯進行分離,即將每個智能合約的邏輯方法和資料域解耦。如此圖6中,一個節點設備只需要實例化一個虛擬機即可。不同的智能合約作為該虛擬機的不同業務介面對外提供服務。與圖4的對比中可以看出,虛擬機實例化數量、智能合約載入數量、通用邏輯方法載入數量等都會精簡到最少。
在一實施例中,所述步驟230中基於所述目標智能合約與已儲存智能合約相同的邏輯方法的對應關係獲取所述相同的邏輯方法,具體包括:
獲取所述目標智能合約中儲存的唯一標識;
如果所述唯一標識與已儲存智能合約的邏輯方法的唯一標識相同,獲取所述已儲存智能合約的邏輯方法。
其中,所述唯一標識包括唯一路徑或者數位摘要;
所述唯一路徑包括邏輯方法的檔案名和方法名;
所述數位摘要包括針對所述邏輯方法進行雜湊計算得到的雜湊值。
依然沿用前述智能合約儲存示例為例:目標智能合約{A,B,C}最終儲存在區塊鏈中的目標智能合約實際為{hash(A),hash(B),C}。
本實施例中,假設執行目標業務所需的目標智能合約同樣是{A,B,C}。那麼由於其儲存在區塊鏈中內容為{hash(A),hash(B),C};只有邏輯方法C是代碼,兩個邏輯方法A和B實際儲存的是數位摘要。此時,需要獲取這兩個數位摘要對應的代碼內容。
透過上述儲存過程可知,每個數位摘要實際是對應的已儲存在區塊鏈的其它智能合約中的邏輯方法;這樣,只需要查詢已儲存的各個智能合約中各個邏輯方法的數位摘要是否與hash(A),hash(B)一致就可以還原hash(A),hash(B)原始的代碼內容。
以前述智能合約儲存中示例的內容可知,智能合約1的邏輯方法A實際與目標智能合約的邏輯方法A相同,因此,智能合約1的邏輯方法A的數位摘要必定與hash(A)是相同的;所以可以確定目標智能合約的hash(A)對應的代碼內容為智能合約1的邏輯方法A的代碼內容。
同樣地,智能合約2的邏輯方法B實際與目標智能合約的邏輯方法B相同,因此,智能合約2的邏輯方法B的數位摘要必定與hash(B)是相同的;所以可以確定目標智能合約的hash(B)對應的代碼內容為智能合約2的邏輯方法B的代碼內容;
如此,就可以還原出目標智能合約原始的邏輯方法A、B、C的代碼。
最後,節點設備可以在實例化的虛擬機中將所述邏輯方法A、B、C組裝為完整的合約邏輯方法,執行所述合約邏輯方法。
在一實施例中,所述方法還包括:
如果所述目標智能合約執行需要狀態資料,從目標智能合約的資料域中獲取狀態資料;
所述在實例化的虛擬機中將所述其它邏輯方法和相同的邏輯方法組裝為完整的合約邏輯方法,執行所述合約邏輯方法,具體包括:
在實例化的虛擬機中將所述其它邏輯方法和相同的邏輯方法組裝為完整的合約邏輯方法,並將所述狀態資料載入到所述合約邏輯方法後執行。
如圖6所示,假設節點設備需要執行智能合約1-1,則需要獲取業務邏輯方法A和通用邏輯方法A,以及從資料域1-1中獲取相應的狀態資料;
然後在虛擬機中,將業務邏輯方法A和通用邏輯方法A組裝為一個完整的合約邏輯方法,並將狀態資料載入到該合約邏輯方法後執行。
值得一提的是,在虛擬機執行合約邏輯方法後,還需要根據執行結果中各狀態資料更新資料域中狀態資料的狀態值;以及將執行結果返回給請求方。
透過上述區塊鏈中智能合約的執行方案,在執行智能合約過程中,需要基於目標智能合約與已儲存智能合約相同的邏輯方法的對應關係獲取相同的邏輯方法,從而還原完整的目標智能合約代碼。並且,由於合約邏輯方法和狀態資料分離,每個節點設備僅需要實例化一個虛擬機,並透過一個虛擬機就可以執行各個智能合約,減少了實例化虛擬機所消耗的資源。
綜上所述,本說明書提供的區塊鏈中智能合約的儲存、執行方案,透過共用相同邏輯方法,使得相同的邏輯方法僅需儲存一次;各個邏輯方案可以相互調用。同時對業務核心資料即資料域的狀態資料進行隔離、加密等處理。保障核心資料、緊密業務相關的邏輯方法。通用邏輯方法全系統可調用,可發佈。避免了各個合約都有相同的通用邏輯方法造成冗餘。每個節點設備的各個智能合約可以採用同一個實例化虛擬機。各個合約介面作為服務方法提供。區塊鏈系統的邏輯方法和狀態資料儲存相分離,避免了智能合約對資料的依賴。
與前述圖5所示區塊鏈中智能合約的儲存方法實施例相對應,本說明書還提供了區塊鏈中智能合約的儲存裝置的實施例。所述裝置實施例可以透過軟體實現,也可以透過硬體或者軟硬體結合的方式實現。以軟體實現為例,作為一個邏輯意義上的裝置,是透過其所在設備的處理器將非易失性記憶體中對應的電腦業務程式指令讀取到記憶體中運行形成的。從硬體層面而言,如圖7所示,為本說明書區塊鏈中智能合約的儲存裝置所在設備的一種硬體結構圖,除了圖7所示的處理器、網路介面、記憶體以及非易失性記憶體之外,實施例中裝置所在的設備通常根據區塊鏈中智能合約的儲存邏輯的實際功能,還可以包括其他硬體,對此不再贅述。
請參見圖8,為本說明書一實施例提供的區塊鏈中智能合約的儲存裝置的模組圖,所述裝置對應了圖5所示實施例,所述裝置包括:
接收單元310,接收儲存目標智能合約的交易;
回應單元320,回應所述交易,調用發佈於所述區塊鏈的智能合約的儲存邏輯;
查詢單元330,查詢所述目標智能合約中是否存在與已儲存智能合約相同的邏輯方法;
儲存單元340,如果存在,將所述目標智能合約中除所述相同的邏輯方法外的其它邏輯方法,以及所述目標智能合約與所述已儲存智能合約相同的邏輯方法的對應關係儲存在所述區塊鏈。
可選的,所述查詢單元330,具體包括:
計算子單元,計算所述目標智能合約中的各邏輯方法的數位摘要;
確定單元,如果所述數位摘要與所述區塊鏈中儲存的邏輯方法的數位摘要一致,確定所述一致的數位摘要對應的邏輯方法為已儲存智能合約相同的邏輯方法。
可選的,所述儲存單元340中,目標智能合約與所述已儲存智能合約相同的邏輯方法的對應關係儲存在所述區塊鏈,具體包括:
將所述目標智能合約中相同的邏輯方法轉換為所述相同的邏輯方法的數位摘要後儲存在所述區塊鏈。
可選的,所述邏輯方法的數位摘要包括:
針對所述邏輯方法進行雜湊計算得到的雜湊值。
可選的,所述區塊鏈包括聯盟鏈、公有鏈或者私有鏈。
與前述圖6所示區塊鏈中智能合約的執行方法實施例相對應,本說明書還提供了區塊鏈中智能合約的執行裝置的實施例。所述裝置實施例可以透過軟體實現,也可以透過硬體或者軟硬體結合的方式實現。以軟體實現為例,作為一個邏輯意義上的裝置,是透過其所在設備的處理器將非易失性記憶體中對應的電腦業務程式指令讀取到記憶體中運行形成的。從硬體層面而言,如圖9所示,為本說明書區塊鏈中智能合約的執行裝置所在設備的一種硬體結構圖,除了圖9所示的處理器、網路介面、記憶體以及非易失性記憶體之外,實施例中裝置所在的設備通常根據區塊鏈中智能合約的執行邏輯的實際功能,還可以包括其他硬體,對此不再贅述。
請參見圖10,為本說明書一實施例提供的區塊鏈中智能合約的執行裝置的模組圖,所述裝置對應了圖6所示實施例,所述智能合約透過前述區塊鏈中智能合約的儲存方法儲存在所述區塊鏈,所述裝置包括:
接收單元410,接收執行目標業務的交易;
回應單元420,回應所述交易,查詢所述區塊鏈中執行所述目標業務所需的目標智能合約;
獲取單元430,基於所述目標智能合約與已儲存智能合約相同的邏輯方法的對應關係獲取所述相同的邏輯方法,以及所述目標智能合約中除所述相同的邏輯方法外的其它邏輯方法;
執行單元440,在實例化的虛擬機中將所述其它邏輯方法和相同的邏輯方法組裝為完整的合約邏輯方法,執行所述合約邏輯方法。
可選的,所述獲取單元430中,基於所述目標智能合約與已儲存智能合約相同的邏輯方法的對應關係獲取所述相同的邏輯方法,具體包括:
第一獲取子單元,獲取所述目標智能合約中儲存的數位摘要;
第二獲取子單元,如果所述數位摘要與已儲存智能合約的邏輯方法的數位摘要相同,獲取所述已儲存智能合約的邏輯方法。
可選的,所述邏輯方法的數位摘要包括:
針對所述邏輯方法進行雜湊計算得到的雜湊值。
可選的,所述裝置還包括:
狀態資料獲取子單元,如果所述目標智能合約執行需要狀態資料,從目標智能合約的資料域中獲取狀態資料;
所述執行單元440,具體包括:
在實例化的虛擬機中將所述其它邏輯方法和相同的邏輯方法組裝為完整的合約邏輯方法,並將所述狀態資料載入到所述合約邏輯方法後執行。
可選的,所述裝置還包括:
實例化單元,區塊鏈中的節點設備在啟動時,實例化一個虛擬機;其中,所述虛擬機用於執行所述節點設備中任意的智能合約。
可選的,所述區塊鏈包括聯盟鏈、公有鏈或者私有鏈。
上述實施例闡明的系統、裝置、模組或單元,具體可以由電腦晶片或實體實現,或者由具有某種功能的產品來實現。一種典型的實現設備為電腦,電腦的具體形式可以是個人電腦、膝上型電腦、行動電話、相機電話、智慧型電話、個人數位助理、媒體播放機、導航設備、電子郵件收發設備、遊戲控制台、平板電腦、可穿戴設備或者這些設備中的任意幾種設備的組合。
上述裝置中各個單元的功能和作用的實現過程具體詳見上述方法中對應步驟的實現過程,在此不再贅述。
對於裝置實施例而言,由於其基本對應於方法實施例,所以相關之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位於一個地方,或者也可以分佈到多個網路單元上。可以根據實際的需要選擇其中的部分或者全部模組來實現本說明書方案的目的。本領域普通技術人員在不付出創造性勞動的情況下,即可以理解並實施。
以上圖8描述了區塊鏈中智能合約的儲存裝置的內部功能模組和結構示意,其實質上的執行主體可以為一種電子設備,包括:
處理器;
用於儲存處理器可執行指令的記憶體;
其中,所述處理器被配置為:
接收儲存目標智能合約的交易;
回應所述交易,調用發佈於所述區塊鏈的智能合約的儲存邏輯;
查詢所述目標智能合約中是否存在與已儲存智能合約相同的邏輯方法;
如果存在,將所述目標智能合約中除所述相同的邏輯方法外的其它邏輯方法,以及所述目標智能合約與所述已儲存智能合約相同的邏輯方法的對應關係儲存在所述區塊鏈。
以上圖10描述了區塊鏈中智能合約的執行裝置的內部功能模組和結構示意,其實質上的執行主體可以為一種電子設備,包括:
處理器;
用於儲存處理器可執行指令的記憶體;
其中,所述處理器被配置為:
接收執行目標業務的交易;
回應所述交易,查詢所述區塊鏈中執行所述目標業務所需的目標智能合約;
基於所述目標智能合約與已儲存智能合約相同的邏輯方法的對應關係獲取所述相同的邏輯方法,以及所述目標智能合約中除所述相同的邏輯方法外的其它邏輯方法;
在實例化的虛擬機中將所述其它邏輯方法和相同的邏輯方法組裝為完整的合約邏輯方法,執行所述合約邏輯方法;
其中,所述智能合約透過前述任一項區塊鏈中智能合約儲存方法儲存在所述區塊鏈。
在上述電子設備的實施例中,應理解,該處理器可以是中央處理單元(英文:Central Processing Unit,簡稱:CPU),還可以是其他通用處理器、數位訊號處理器(英文:Digital Signal Processor,簡稱:DSP)、專用積體電路(英文:Application Specific Integrated Circuit,簡稱:ASIC)等。通用處理器可以是微處理器或者該處理器也可以是任何常規的處理器等,而前述的記憶體可以是唯讀記憶體(英文:read-only memory,縮寫:ROM)、隨機存取記憶體(英文:random access memory,簡稱:RAM)、快閃記憶體、硬碟或者固態硬碟。結合本發明實施例所公開的方法的步驟可以直接體現為硬體處理器執行完成,或者用處理器中的硬體及軟體模組組合執行完成。
本說明書中的各個實施例均採用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對於電子設備實施例而言,由於其基本相似於方法實施例,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
本領域技術人員在考慮說明書及實踐這裡公開的發明後,將容易想到本說明書的其它實施方案。本說明書旨在涵蓋本說明書的任何變型、用途或者適應性變化,這些變型、用途或者適應性變化遵循本說明書的一般性原理並包括本說明書未公開的本技術領域中的公知常識或慣用技術手段。說明書和實施例僅被視為示例性的,本說明書的真正範圍和精神由下面的申請專利範圍指出。
應當理解的是,本說明書並不局限於上面已經描述並在附圖中示出的精確結構,並且可以在不脫離其範圍進行各種修改和改變。本說明書的範圍僅由所附的申請專利範圍來限制。
110~140:方法步驟
210~240:方法步驟
310:接收單元
320:回應單元
330:查詢單元
340:儲存單元
410:接收單元
420:回應單元
430:獲取單元
440:執行單元
[圖1]是傳統區塊鏈中智能合約儲存的示意圖;
[圖2]是本說明書一實施例提供的區塊鏈中智能合約的儲存方法的流程圖;
[圖3]是本說明書提供的區塊鏈中智能合約儲存的示意圖;
[圖4]是傳統區塊鏈中智能合約執行的示意圖;
[圖5]是本說明書一實施例提供的區塊鏈中智能合約的執行方法的流程圖;
[圖6]是本說明書提供的區塊鏈中智能合約執行的示意圖;
[圖7]是本說明書一實施例提供的區塊鏈中的儲存裝置的硬體結構圖;
[圖8]是本說明書一實施例提供的區塊鏈中的儲存裝置的模組;
[圖9]是本說明書一實施例提供的區塊鏈中的執行裝置的硬體結構圖;
[圖10]是本說明書一實施例提供的區塊鏈中的執行裝置的模組。