[發明專利]編譯和執行智能合約的方法及裝置有效
| 申請號: | 201910939503.8 | 申請日: | 2019-09-30 |
| 公開(公告)號: | CN110704063B | 公開(公告)日: | 2021-09-07 |
| 發明(設計)人: | 姚忠孝 | 申請(專利權)人: | 支付寶(杭州)信息技術有限公司 |
| 主分類號: | G06F8/41 | 分類號: | G06F8/41;G06F9/455;G06Q40/04 |
| 代理公司: | 北京億騰知識產權代理事務所(普通合伙) 11309 | 代理人: | 陳霽;周良玉 |
| 地址: | 310000 浙江省杭州市*** | 國省代碼: | 浙江;33 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 編譯 執行 智能 合約 方法 裝置 | ||
1.一種執行智能合約的方法,通過區塊鏈節點中的虛擬機執行,該方法包括:
獲取智能合約對應的合約模塊,所述合約模塊包括代碼區段和導入區段,所述代碼區段包括經過編譯的字節碼,所述導入區段中包括第一外部函數的函數聲明信息;
解析所述代碼區段中的字節碼,得到對所述第一外部函數的調用指令代碼;
根據所述第一外部函數的函數聲明信息,從虛擬機提供的采用相同語言實現的共享函數庫中,確定用于實現所述第一外部函數的函數代碼,并獲取所述函數代碼對應的可執行的第一代碼段;
將所述調用指令代碼鏈接到所述第一代碼段,得到鏈接代碼;
執行所述鏈接代碼,以執行所述智能合約中的所述第一外部函數。
2.根據權利要求1所述的方法,還包括,在獲取智能合約對應的合約模塊之前:
接收第一交易,所述第一交易的目標地址字段指向所述智能合約的合約地址,以請求調用所述智能合約。
3.根據權利要求1所述的方法,其中,所述合約模塊為WASM模塊。
4.根據權利要求1所述的方法,還包括,根據所述第一外部函數的函數聲明信息,確定所述第一外部函數為所述共享函數庫中提供的函數。
5.根據權利要求1所述的方法,其中,所述虛擬機和所述函數代碼采用C語言或C++語言實現。
6.根據權利要求1所述的方法,其中,獲取所述函數代碼對應的可執行的第一代碼段包括:將所述函數代碼編譯為所述第一代碼段,所述第一代碼段是適用于所述虛擬機所在平臺的原生代碼。
7.根據權利要求1所述的方法,其中,獲取所述函數代碼對應的可執行的第一代碼段包括:從內存中獲取已加載、通過編譯所述函數代碼而生成的所述第一代碼段,所述第一代碼段是適用于所述虛擬機所在平臺的原生代碼。
8.根據權利要求1所述的方法,其中,將所述調用指令代碼鏈接到所述第一代碼段,包括,將執行所述調用指令代碼的地址指向存儲所述第一代碼的內存地址。
9.一種執行智能合約的裝置,部署在區塊鏈節點中的虛擬機中,該裝置包括:
模塊獲取單元,配置為獲取智能合約對應的合約模塊,所述合約模塊包括代碼區段和導入區段,所述代碼區段包括經過編譯的字節碼,所述導入區段中包括第一外部函數的函數聲明信息;
解析單元,配置為解析所述代碼區段中的字節碼,得到對所述第一外部函數的調用指令代碼;
代碼獲取單元,配置為根據所述第一外部函數的函數聲明信息,從虛擬機提供的采用相同語言實現的共享函數庫中,確定用于實現所述第一外部函數的函數代碼,并獲取所述函數代碼對應的可執行的第一代碼段;
鏈接單元,配置為將所述調用指令代碼鏈接到所述第一代碼段,得到鏈接代碼;
執行單元,配置為執行所述鏈接代碼,以執行所述智能合約中的所述第一外部函數。
10.根據權利要求9所述的裝置,還包括接收單元,配置為:
接收第一交易,所述第一交易的目標地址字段指向所述智能合約的合約地址,以請求調用所述智能合約。
11.根據權利要求9所述的裝置,其中,所述合約模塊為WASM模塊。
12.根據權利要求9所述的裝置,還包括確定單元,配置為根據所述第一外部函數的函數聲明信息,確定所述第一外部函數為所述共享函數庫中提供的函數。
13.根據權利要求9所述的裝置,其中,所述虛擬機和所述函數代碼采用C語言或C++語言實現。
14.根據權利要求9所述的裝置,其中,所述代碼獲取單元配置為:將所述函數代碼編譯為所述第一代碼段,所述第一代碼段是適用于所述虛擬機所在平臺的原生代碼。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于支付寶(杭州)信息技術有限公司,未經支付寶(杭州)信息技術有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201910939503.8/1.html,轉載請聲明來源鉆瓜專利網。





