[發明專利]編譯和執行智能合約的方法及裝置有效
| 申請號: | 201910940201.2 | 申請日: | 2019-09-30 |
| 公開(公告)號: | CN110704064B | 公開(公告)日: | 2021-09-14 |
| 發明(設計)人: | 姚忠孝 | 申請(專利權)人: | 支付寶(杭州)信息技術有限公司 |
| 主分類號: | G06F8/41 | 分類號: | G06F8/41;G06F9/455;G06Q40/04 |
| 代理公司: | 北京億騰知識產權代理事務所(普通合伙) 11309 | 代理人: | 陳霽;周良玉 |
| 地址: | 310000 浙江省杭州市*** | 國省代碼: | 浙江;33 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 編譯 執行 智能 合約 方法 裝置 | ||
本說明書實施例提供一種編譯和執行智能合約的方法和裝置,根據上述方法,在對智能合約進行編譯而該智能合約依賴于外部函數時,不再將外部函數的實現代碼納入到合約中進行編譯,而是將其轉化為一條對該外部函數的調用指令,并將函數的聲明信息添加到合約模塊的導入區段中。如此生成的合約模塊中僅包含外部函數的聲明信息,而不包含該外部函數的實現代碼。在執行該智能合約時,由虛擬機從本地的模塊庫中確定出用于實現該外部函數的字節碼模塊,進而獲取到與該字節碼模塊對應的可執行代碼塊,并將該代碼段與合約代碼相鏈接,從而執行該外部函數。
技術領域
本說明書一個或多個實施例涉及區塊鏈技術領域,尤其涉及編譯和執行區塊鏈中的智能合約的方法及裝置。
背景技術
目前,越來越多的區塊鏈平臺支持智能合約,來執行更為豐富的交易。智能合約是一種可以自動執行的交易合約,它以數字化的形式寫入區塊鏈中,由區塊鏈技術的特性保障存儲、讀取、執行整個過程透明可跟蹤、不可篡改。同時,由區塊鏈自帶的共識算法構建出一套狀態機系統,使得智能合約能夠高效地運行。例如,以太坊提供了一種開源的區塊鏈底層系統,通過提供諸多接口,允許開發人員在此基礎上開發各種區塊鏈應用,編寫智能合約。
如此,區塊鏈平臺允許用戶進行內容更加豐富的交易,從而提供更加豐富的功能。相應的,越來越多的數據存儲、程序應用(例如分布式應用Dapp),通過區塊鏈實現。相應地,在區塊鏈的各個節點中提供有虛擬機,用于執行區塊鏈中的智能合約,并通過共識機制,保證各個節點中的虛擬機具有相同的執行狀態和執行結果。因此,智能合約的執行效率,成為區塊鏈平臺的主要性能指標。
因此,希望提供有效的方案,提高區塊鏈中智能合約的執行效率,改進區塊鏈平臺的性能。
發明內容
本說明書一個或多個實施例描述了一種編譯和執行智能合約的方法和裝置,用以提升智能合約的部署效率和執行性能。
根據第一方面,提供了一種執行智能合約的方法,通過虛擬機執行,該方法包括:
獲取智能合約對應的合約模塊,所述合約模塊包括代碼區段和導入區段,所述導入區段中包括第一外部函數的函數聲明信息;
解析所述代碼區段中的字節碼,得到對所述第一外部函數的調用指令代碼;
根據所述第一外部函數的函數聲明信息,從虛擬機本地的模塊庫中確定用于實現所述第一外部函數的字節碼模塊,并獲取解析所述字節碼模塊得到的第一代碼段;
將所述調用指令代碼鏈接到所述第一代碼段,得到鏈接代碼;
執行所述鏈接代碼,以執行所述智能合約中的所述第一外部函數。
在一個實施例中,在獲取智能合約對應的合約模塊之前,方法還包括:接收第一交易,所述第一交易的目標地址字段指向所述智能合約的合約地址,以請求調用所述智能合約。
根據一個實施例,所述字節碼模塊為WASM模塊。
在一個實施例中,方法還包括,根據所述第一外部函數的函數聲明信息,確定所述第一外部函數為本地模塊庫中提供的函數。
在一種實施方式中,所述字節碼模塊為虛擬機中包含的原生合約的合約模塊,所述第一外部函數為該原生合約的導出函數。
根據一種實施方式,獲取解析所述字節碼模塊得到的第一代碼段包括:加載并解析所述字節碼模塊中的字節碼,得到所述第一代碼段。
根據另一種實施方式,獲取解析所述字節碼模塊得到的第一代碼段包括:從內存中獲取已加載的、通過解析所述字節碼模塊中的字節碼而生成的所述第一代碼段。
在一個實施例,通過以下方式將所述調用指令代碼鏈接到所述第一代碼段:將執行所述調用指令代碼的地址指向存儲所述第一代碼段的內存地址。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于支付寶(杭州)信息技術有限公司,未經支付寶(杭州)信息技術有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201910940201.2/2.html,轉載請聲明來源鉆瓜專利網。





