本說明書實施例屬于計算機,尤其涉及一種在區塊鏈系統中執行智能合約的方法及區塊鏈節點。
背景技術:
1、區塊鏈(blockchain)系統是分布式數據存儲、點對點傳輸、共識機制、加密算法等計算機技術的新型應用模式。區塊鏈系統中按照時間順序將數據區塊以順序相連的方式組合成鏈式數據結構,并以密碼學方式保證的不可篡改和不可偽造的分布式賬本。由于區塊鏈系統具有去中心化、信息不可篡改、自治性等特性,區塊鏈系統受到人們越來越多的重視和應用。
2、區塊鏈系統中的智能合約中通常包括多個狀態變量,狀態變量的值通常以key-value對的形式存儲到數據存儲系統。智能合約中的部分狀態變量可能存在嵌套關系,此外在執行智能合約的過程中,經常需要從數據存儲系統中讀取狀態變量的值來完成對相關事務的實施。
3、在數據存儲系統中訪問變量,相對于在計算設備的內存中直接訪問變量,時間開銷相對較大,而開發者撰寫智能合約的源代碼的過程中,難以從語法角度來直觀的感受到從數據存儲系統中讀取狀態變量的操作,同時還極易忽視狀態變量間的嵌套關系。如此,極易導致開發者開發出執行成本相對較高的智能合約,例如導致所開發的執行合約在執行過程中,需要從數據存儲系統獲取后續執行過程并不需要使用的狀態變量的值,從數據存儲系統中連續多次獲取相同狀態變量的值來實現使用該狀態變量的值實施多項事務,等等。
技術實現思路
1、本發明的目的在于提供一種在區塊鏈系統中執行智能合約的方法及區塊鏈節點。
2、第一方面,提供了一種在區塊鏈系統中執行智能合約的方法,所述智能合約中包括載入函數以及與第一狀態變量對應的第一位置變量,所述第一位置變量用于表征所述第一狀態變量的值在所述數據存儲系統中的存儲位置,所述第一狀態變量在數據存儲系統中的第一存儲類型屬于聚合存儲,所述方法通過執行所述智能合約的合約代碼實現,所述方法包括:根據所述第一狀態變量的值在所述數據存儲系統中的存儲位置,調用所述載入函數;響應于對所述載入函數的調用,執行所述載入函數,實現根據所述第一狀態變量的值在所述數據存儲系統中的存儲位置,從所述數據存儲系統獲取所述第一狀態變量的值。
3、在一種可能的實施方式中,所述合約代碼是對源代碼編譯得到的,所述源代碼中定義了所述第一狀態變量在所述數據存儲系統中的第一存儲類型;所述第一狀態變量在所述數據存儲系統中的第一存儲類型,基于所述第一狀態變量在內存中的第一數據類型確定。
4、在一種可能的實施方式中,所述第一數據類型包括基礎類型;或者,所述第一數據類型包括第一復合類型,所述源代碼中還包括與所述第一狀態變量對應的注解信息,所述注解信息用于指示所述第一狀態變量在所述數據存儲系統中的第一存儲類型屬于聚合存儲。
5、在一種可能的實施方式中,所述第一復合類型包括array、map、vector或struct。
6、在一種可能的實施方式中,所述源代碼中定義了所述第一位置變量,所述第一位置變量的變量名為所述第一狀態變量的變量名,所述第一位置變量的類型為所述第一存儲類型。
7、在一種可能的實施方式中,所述方法還包括:將所述第一狀態變量的值賦值給目標臨時變量;利用所述目標臨時變量的值,執行目標事務。
8、在一種可能的實施方式中,所述智能合約中還包括貯存函數;所述方法還包括:根據所述第一狀態變量的值以及所述第一狀態變量的值在所述數據存儲系統中的存儲位置,調用所述貯存函數;響應于對所述貯存函數的調用,執行所述貯存函數,實現根據所述第一狀態變量的值在所述數據存儲系統中的存儲位置,向所述數據存儲系統存入所述第一狀態變量的值。
9、在一種可能的實施方式中,所述智能合約中還包括與第二狀態變量對應的第二位置變量,所述第二位置變量用于表征所述第二狀態變量的值在所述數據存儲系統中的存儲位置,所述第二狀態變量在數據存儲系統中的第二存儲類型屬于分離存儲;所述第二狀態變量中包括至少一個第一成員變量,所述第一狀態變量屬于所述至少一個第一成員變量;其中,所述方法還包括:獲取所述第二狀態變量的值在所述數據存儲系統中的存儲位置,其中包括所述第一狀態變量的值在所述數據存儲系統中的存儲位置。
10、在一種可能的實施方式中,所述合約代碼是對源代碼進行編譯得到的,所述源代碼中定義了所述第二位置變量,所述第二位置變量的變量名為所述第二狀態變量的變量名,所述第二位置變量的類型為所述第二存儲類型。
11、在一種可能的實施方式中,所述智能合約中還包括與第三狀態變量對應的第三位置變量,所述第二位置變量用于表征所述第二狀態變量的值在所述數據存儲系統中的存儲位置,所述第三狀態變量包括至少一個第二成員變量,所述第三狀態變量在所述數據存儲系統中的存儲類型屬于分離存儲,所述第二狀態變量屬于所述至少一個第二成員變量;其中,所述方法還包括:獲取所述第三狀態變量的值在所述數據存儲系統中的存儲位置,其中包括所述第二狀態變量的值在所述數據存儲系統中的存儲位置。
12、第二方面,提供了一種區塊鏈系統中的區塊鏈節點,所述區塊鏈系統中部署有智能合約,所述智能合約中包括載入函數以及與第一狀態變量對應的第一位置變量,所述第一位置變量用于表征所述第一狀態變量的值在所述數據存儲系統中的存儲位置,所述第一狀態變量在數據存儲系統中的第一存儲類型屬于聚合存儲,所述區塊鏈節點用于通過執行所述智能合約的合約代碼,實現:根據所述第一狀態變量的值在所述數據存儲系統中的存儲位置,調用所述載入函數;響應于對所述載入函數的調用,執行所述載入函數,實現根據所述第一狀態變量的值在所述數據存儲系統中的存儲位置,從所述數據存儲系統獲取所述第一狀態變量的值。
13、第三方面,提供了一種計算機可讀存儲介質,其上存儲有計算機程序/指令,當所述計算機程序/指令在計算設備中執行時,計算設備執行第一方面中所述的方法。
14、本說明書實施例提供的技術方案中,智能合約中提供了專用的載入函數以及用于表征狀態變量的值在數據存儲系統中存儲位置的位置變量,當需要從數據存儲系統中獲取某個狀態變量值,而且該狀態變量在數據存儲系統中的存儲類型屬于聚合存儲時,則可以根據該狀態變量的值在數據存儲系統中的存儲位置來調用該載入函數,通過載入函數來實現根據該狀態變量的值在數據存儲系統中的存儲位置,從數據存儲系統中獲取該狀態變量的值。如此,通過設置用于從數據存儲系統獲取狀態變量的值的載入函數,而且該載入函數的輸入參數需要是,存儲類型屬于聚合存儲的狀態變量的值在數據存儲系統中的存儲位置:一方面,可以避免智能合約在執行過程中非必要的讀取某些狀態變量的值;另一方面,開發者在開發智能合約的過程中,可以通過觀察載入函數的調用,直觀的感受到從數據存儲系統中獲取存儲類型屬于聚合存儲的狀態變量的值的操作,從而有利于開發者優化智能合約的源代碼,以利提高智能合約的執行效率。
1.一種在區塊鏈系統中執行智能合約的方法,所述智能合約中包括載入函數以及與第一狀態變量對應的第一位置變量,所述第一位置變量用于表征所述第一狀態變量的值在所述數據存儲系統中的存儲位置,所述第一狀態變量在數據存儲系統中的第一存儲類型屬于聚合存儲,所述方法通過執行所述智能合約的合約代碼實現,所述方法包括:
2.根據權利要求1所述的方法,所述合約代碼是對源代碼編譯得到的,所述源代碼中定義了所述第一狀態變量在所述數據存儲系統中的第一存儲類型;所述第一狀態變量在所述數據存儲系統中的第一存儲類型,基于所述第一狀態變量在內存中的第一數據類型確定。
3.根據權利要求2所述的方法,所述第一數據類型包括基礎類型;或者,所述第一數據類型包括第一復合類型,所述源代碼中還包括與所述第一狀態變量對應的注解信息,所述注解信息用于指示所述第一狀態變量在所述數據存儲系統中的第一存儲類型屬于聚合存儲。
4.根據權利要求2所述的方法,所述源代碼中定義了所述第一位置變量,所述第一位置變量的變量名為所述第一狀態變量的變量名,所述第一位置變量的類型為所述第一存儲類型。
5.根據權利要求1所述的方法,所述方法還包括:
6.根據權利要求1所述的方法,所述智能合約中還包括貯存函數;所述方法還包括:
7.根據權利要求1所述的方法,所述智能合約中還包括與第二狀態變量對應的第二位置變量,所述第二位置變量用于表征所述第二狀態變量的值在所述數據存儲系統中的存儲位置,所述第二狀態變量在數據存儲系統中的第二存儲類型屬于分離存儲;所述第二狀態變量中包括至少一個第一成員變量,所述第一狀態變量屬于所述至少一個第一成員變量;
8.根據權利要求7所述的方法,所述合約代碼是對源代碼進行編譯得到的,所述源代碼中定義了所述第二位置變量,所述第二位置變量的變量名為所述第二狀態變量的變量名,所述第二位置變量的類型為所述第二存儲類型。
9.一種區塊鏈系統中的區塊鏈節點,所述區塊鏈系統中部署有智能合約,所述智能合約中包括載入函數以及與第一狀態變量對應的第一位置變量,所述第一位置變量用于表征所述第一狀態變量的值在所述數據存儲系統中的存儲位置,所述第一狀態變量在數據存儲系統中的第一存儲類型屬于聚合存儲,所述區塊鏈節點用于執行所述智能合約的合約代碼,實現:
10.一種計算機可讀存儲介質,其上存儲有計算機程序,當所述計算機程序在計算設備中執行時,計算設備執行權利要求1-8中任一項所述的方法。