CN112308716B - 区块链智能合约执行方法、装置、设备及计算机存储介质 - Google Patents
区块链智能合约执行方法、装置、设备及计算机存储介质 Download PDFInfo
- Publication number
- CN112308716B CN112308716B CN202011171991.1A CN202011171991A CN112308716B CN 112308716 B CN112308716 B CN 112308716B CN 202011171991 A CN202011171991 A CN 202011171991A CN 112308716 B CN112308716 B CN 112308716B
- Authority
- CN
- China
- Prior art keywords
- library
- intelligent contract
- executed
- called
- contract
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 191
- 230000008676 import Effects 0.000 claims abstract description 175
- 230000015654 memory Effects 0.000 claims description 29
- 238000012545 processing Methods 0.000 claims description 17
- 230000006870 function Effects 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000005291 magnetic effect Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- KLDZYURQCUYZBL-UHFFFAOYSA-N 2-[3-[(2-hydroxyphenyl)methylideneamino]propyliminomethyl]phenol Chemical compound OC1=CC=CC=C1C=NCCCN=CC1=CC=CC=C1O KLDZYURQCUYZBL-UHFFFAOYSA-N 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 3
- 201000001098 delayed sleep phase syndrome Diseases 0.000 description 3
- 208000033921 delayed sleep phase type circadian rhythm sleep disease Diseases 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000009191 jumping Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 1
- 230000005294 ferromagnetic effect Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Data Mining & Analysis (AREA)
- Development Economics (AREA)
- General Business, Economics & Management (AREA)
- Technology Law (AREA)
- Strategic Management (AREA)
- Marketing (AREA)
- Economics (AREA)
- Computing Systems (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请实施例提供了一种区块链智能合约执行方法、装置、电子设备及计算机存储介质;该方法包括:在区块链节点中部署智能合约数据和库数据,其中,智能合约数据包括N个智能合约的字节码和智能合约导入表,库数据包括M个库的字节码、库导入表和和导出表,N和M均为大于0的整数;确定待执行智能合约的字节码;根据所述智能合约数据和库数据,提取所述待执行智能合约调用的库的字节码;将所述待执行智能合约调用的库的字节码添加至所述待执行智能合约的字节码中,得到组合字节码;执行所述组合字节码,得到执行结果。
Description
技术领域
本申请涉及金融科技(Fintech)的区块链技术,涉及但不限于一种区块链智能合约执行方法、装置、电子设备及计算机存储介质。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性要求,也对技术提出了更高的要求。
目前,在金融科技领域中,随着区块链的应用场景不断扩大,区块链智能合约的复杂程度不断提高。为减少项目的开发周期和成本,需要在智能合约的开发过程尽可能复用已有的项目或他人编写的智能合约代码;然而,在相关技术中,实现不同智能合约的复用的一种方法为:通过不同智能合约的复制合并实现不同智能合约的复用,这样,会消耗较多的存储资源以实现区块链智能合约的存储;实现不同智能合约的复用的另一种方法为:通过外部库的调用实现不同智能合约的复用,然而,这种方法需要虚拟机与宿主环境进行通信,并且在智能合约调用外部库中的代码时,需要对交互信息进行编解码,在一定程度上降低了智能合调用外部库中代码的执行效率。
发明内容
本申请实施例提供一种区块链智能合约执行方法、装置、电子设备及计算机存储介质,可以解决现有技术中存储资源消耗加剧且代码执行效率较低的问题。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种区块链智能合约执行方法,所述方法包括:
在区块链节点中部署智能合约数据和库数据,其中,所述智能合约数据包括N个智能合约的字节码和智能合约导入表,所述智能合约导入表包括:所述N个智能合约中至少一个智能合约对库中待调用方法的第一调用关系;所述库数据包括M个库的字节码、库导入表和和导出表,所述库导入表包括:所述M个库中至少一个库对其它库中待调用方法的第二调用关系,所述导出表包括:所述M个库中至少一个库的待调用方法在库中的地址索引信息,N和M均为大于0的整数;
确定待执行智能合约的字节码;根据所述智能合约数据和库数据,提取所述待执行智能合约调用的库的字节码;将所述待执行智能合约调用的库的字节码添加至所述待执行智能合约的字节码中,得到组合字节码;
执行所述组合字节码,得到执行结果。
在本申请的一些实施例中,在所述区块链节点中部署智能合约数据之前,所述方法还包括:
针对所述N个智能合约中至少一个智能合约的字节码中的第一调用指令,在所述智能合约导入表中构造用于表示所述第一调用关系的键值对;其中,第一调用指令用于调用库中的待调用方法。
在本申请的一些实施例中,所述在区块链节点中部署智能合约数据,包括:
获取区块链的第一交易数据;
在所述第一交易数据包括所述智能合约数据的情况下,将所述第一交易数据中的所述智能合约数据存入所述区块链节点上预先分配的第一存储空间中。
在本申请的一些实施例中,在所述区块链节点中部署库数据之前,所述方法还包括:
针对所述M个库中至少一个库的字节码中的第二调用指令,在所述库导入表中构造用于表示所述第二调用关系的键值对,其中,所述第二调用指令用于调用所述其它库中的待调用方法;
针对所述M个库中至少一个库的字节码中的标志指令,在所述导出表中构造用于表示所述地址索引信息的键值对,其中,所述标志指令用于标志所述待调用方法在库中的起始地址。
在本申请的一些实施例中,所述在区块链节点中部署库数据,包括:
获取区块链的第一交易数据;
在所述第一交易数据包括所述库数据的情况下,将所述第一交易数据中的所述库数据存入所述区块链节点上预先分配的第二存储空间中。
在本申请的一些实施例中,所述方法还包括:
在所述智能合约导入表中构造用于表示所述第一调用关系的键值对后,将所述第一调用指令替换为跳转指令;
在确定待执行智能合约的字节码后,获取所述待执行智能合约对应的智能合约导入表;根据所述待执行智能合约对应的智能合约导入表,获取所述待执行智能合约调用的库的导出表;
根据所述待执行智能合约对应的智能合约导入表和所述待执行智能合约调用的库的导出表,确定所述待执行智能合约的待调用方法在组合字节码中的地址偏移量;将所述跳转指令的目标地址更新为所述地址偏移量。
在本申请的一些实施例中,所述待执行智能合约调用的库,包括:所述待执行智能合约直接调用的库和所述待执行智能合约间接调用的库;
所述根据所述待执行智能合约对应的智能合约导入表,获取所述待执行智能合约调用的库的导出表,包括:
获取所述待执行智能合约直接调用的库的库导入表和所述待执行智能合约直接调用的库的导出表,并基于所述待执行智能合约直接调用的库的库导入表,确定所述待执行智能合约间接调用的库;获取所述待执行智能合约间接调用的库的导出表。
在本申请的一些实施例中,所述基于所述待执行智能合约直接调用的库的库导入表,确定所述待执行智能合约间接调用的库,包括:
基于所述待执行智能合约直接调用的库的库导入表,确定所述待执行智能合约第1次间接调用的库;
在确定所述待执行智能合约第i次间接调用的库,且所述库数据中不存在所述待执行智能合约第i次间接调用的库的库导入表的情况下,确定所述待执行智能合约间接调用的库包括:所述待执行智能合约第1次至第i次间接调用的库,i为大于或等于1的整数;
在确定所述待执行智能合约第i次间接调用的库,且所述库数据中存在所述待执行智能合约第i次间接调用的库的库导入表的情况下,根据所述待执行智能合约第i次间接调用的库的库导入表,确定所述待执行智能合约第i+1次间接调用的库的库导入表。
本申请实施例提供一种区块链智能合约执行装置,所述装置包括:
部署模块,用于在区块链节点中部署智能合约数据和库数据,其中,所述智能合约数据包括N个智能合约的字节码和智能合约导入表,所述智能合约导入表包括:所述N个智能合约中至少一个智能合约对库中待调用方法的第一调用关系;所述库数据包括M个库的字节码、库导入表和和导出表,所述库导入表包括:所述M个库中至少一个库对其它库中待调用方法的第二调用关系,所述导出表包括:所述M个库中至少一个库的待调用方法在库中的地址索引信息,N和M均为大于0的整数;
处理模块,用于确定待执行智能合约的字节码;根据所述智能合约数据和库数据,提取所述待执行智能合约调用的库的字节码;将所述待执行智能合约调用的库的字节码添加至所述待执行智能合约的字节码中,得到组合字节码;
执行模块,用于执行所述组合字节码,得到执行结果。
在本申请的一些实施例中,所述部署模块,在在所述区块链节点中部署智能合约数据之前,还用于:
针对所述N个智能合约中至少一个智能合约的字节码中的第一调用指令,在所述智能合约导入表中构造用于表示所述第一调用关系的键值对;其中,第一调用指令用于调用库中的待调用方法。
在本申请的一些实施例中,所述部署模块,用于在区块链节点中部署智能合约数据,包括:
获取区块链的第一交易数据;
在所述第一交易数据包括所述智能合约数据的情况下,将所述第一交易数据中的所述智能合约数据存入所述区块链节点上预先分配的第一存储空间中。
在本申请的一些实施例中,在所述区块链节点中部署库数据之前,还用于针对所述M个库中至少一个库的字节码中的第二调用指令,在所述库导入表中构造用于表示所述第二调用关系的键值对,其中,所述第二调用指令用于调用所述其它库中的待调用方法;
针对所述M个库中至少一个库的字节码中的标志指令,在所述导出表中构造用于表示所述地址索引信息的键值对,其中,所述标志指令用于标志所述待调用方法在库中的起始地址。
在本申请的一些实施例中,所述部署模块,用于在区块链节点中部署库数据,包括:
获取区块链的第一交易数据;
在所述第一交易数据包括所述库数据的情况下,将所述第一交易数据中的所述库数据存入所述区块链节点上预先分配的第二存储空间中。
在本申请的一些实施例中,所述部署模块,还用于在所述智能合约导入表中构造用于表示所述第一调用关系的键值对后,将所述第一调用指令替换为跳转指令;
所述处理模块,在确定待执行智能合约的字节码后,还用于:
获取所述待执行智能合约对应的智能合约导入表;根据所述待执行智能合约对应的智能合约导入表,获取所述待执行智能合约调用的库的导出表;
根据所述待执行智能合约对应的智能合约导入表和所述待执行智能合约调用的库的导出表,确定所述待执行智能合约的待调用方法在组合字节码中的地址偏移量;将所述跳转指令的目标地址更新为所述地址偏移量。
在本申请的一些实施例中,所述待执行智能合约调用的库,包括:所述待执行智能合约直接调用的库和所述待执行智能合约间接调用的库;
所述处理模块,用于根据所述待执行智能合约对应的智能合约导入表,获取所述待执行智能合约调用的库的导出表,包括:
获取所述待执行智能合约直接调用的库的库导入表和所述待执行智能合约直接调用的库的导出表,并基于所述待执行智能合约直接调用的库的库导入表,确定所述待执行智能合约间接调用的库;获取所述待执行智能合约间接调用的库的导出表。
在本申请的一些实施例中,所述处理模块,用于基于所述待执行智能合约直接调用的库的库导入表,确定所述待执行智能合约间接调用的库,包括:
基于所述待执行智能合约直接调用的库的库导入表,确定所述待执行智能合约第1次间接调用的库;
在确定所述待执行智能合约第i次间接调用的库,且所述库数据中不存在所述待执行智能合约第i次间接调用的库的库导入表的情况下,确定所述待执行智能合约间接调用的库包括:所述待执行智能合约第1次至第i次间接调用的库,i为大于或等于1的整数;
在确定所述待执行智能合约第i次间接调用的库,且所述库数据中存在所述待执行智能合约第i次间接调用的库的库导入表的情况下,根据所述待执行智能合约第i次间接调用的库的库导入表,确定所述待执行智能合约第i+1次间接调用的库的库导入表。
本申请实施例提供一种电子设备,所述电子设备包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现上述任意一种区块链智能合约执行方法。
本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于被处理器执行时,实现上述任意一种区块链智能合约执行方法。
本申请实施例中,在区块链节点中部署智能合约数据和库数据,其中,所述智能合约数据包括N个智能合约的字节码和智能合约导入表,所述智能合约导入表包括:所述N个智能合约中至少一个智能合约对库中待调用方法的第一调用关系;所述库数据包括M个库的字节码、库导入表和和导出表,所述库导入表包括:所述M个库中至少一个库对其它库中待调用方法的第二调用关系,所述导出表包括:所述M个库中至少一个库的待调用方法在库中的地址索引信息,N和M均为大于0的整数;确定待执行智能合约的字节码;根据所述智能合约数据和库数据,提取所述待执行智能合约调用的库的字节码;将所述待执行智能合约调用的库的字节码添加至所述待执行智能合约的字节码中,得到组合字节码;执行所述组合字节码,得到执行结果。
可以看出,本申请实施例中,可以通过对库的调用实现不同智能合约代码的复用,与通过不同智能合约的复制合并实现不同智能合约的复用的方案相比,可以对区块链上外部库的代码进行有效复用,在一定程度上可以降低存储资源消耗,降低与宿主环境通信开销;并且,在智能合约执行前,基于预先部署的智能合约数据和库数据,将智能合约调用的库的字节码添加到智能合约的字节码中;因而,与相关技术中通过外部库的调用实现不同智能合约的复用的方案相比,本申请实施例在执行智能合约的过程中,无需虚拟机与宿主环境进行通信,并且无需进行数据编解码,而是可以直接执行组合字节码,以实现复用后的不同智能合约代码的执行,从而,有利于提升智能合约调用外部代码的执行效率。
附图说明
图1是本申请实施例提供的区块链智能合约执行方法的一个可选的流程图;
图2是本申请实施例中智能合约数据和库数据的编译流程图;
图3是本申请实施例中智能合约数据和库数据的部署流程图;
图4是本申请实施例中智能合约的执行流程图;
图5是本申请实施例的区块链智能合约执行装置的一个可选的组成结构示意图;
图6是本申请实施例提供的电子设备的一个可选的组成结构示意图。
具体实施方式
智能合约是运行在区块链系统之上的一份代码和数据的集合,其中代码负责实现智能合约的功能,数据负责存储智能合约状态,智能合约可以接收和发送信息;每个智能合约部署到区块链上后,会生成对应的合约地址,用于标示该智能合约;在通过交易调用智能合约的接口时,需要提供合约地址。这里,交易可以用于实现区块链上的操作,在区块链上,任何操作(部署合约、调用合约接口等)都是通过发送交易的方式进行。交易由用户发起,并通过客户端发送至区块链节点。区块链节点在收到交易数据后,会将交易数据打包为区块并执行。
在相关技术中,实现不同智能合约的复用的方法包括直接导入法和外部库法。
下面对直接导入法的实现方式进行说明。
将需要复用的代码组织为一个公共智能合约,然后在需要调用该公共智能合约方法的智能合约中直接导入该公共智能合约,在编译智能合约时由编译器将两者拼接为一个完整的智能合约。用户将编译出的字节码部署至区块链上后,可通过交易的形式执行该智能合约。
这里,编译器是一种计算机程序,它会将某种编程语言写成的源代码转换成另一种编程语言,编译器的主要目的是将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻译为计算机能解读、运行的低阶机器语言的程序,也就是可执行文件。编译器将原始程序作为输入,翻译产生使用目标语言的等价程序。
字节码通常指的是已经经过编译,但与特定机器代码无关,需要解释器转译后才能成为机器代码的中间代码。字节码不像源码一样可以让人阅读,而是编码后的数值常量、引用、指令等构成的序列。通过字节码的设置,使得特定软件运行和软件环境、与硬件环境无关。在实际应用中,编译器将源码编译成字节码,特定平台上的虚拟机将字节码转译为可以直接运行的指令。示例性地,字节码在区块链领域的典型应用为以太坊虚拟机(EthereumVirtual Machine,EVM)字节码。
直接导入法本质上是通过复制、粘贴将智能合约与公共智能合约进行合并,合并后的合约的数据量较大,因此编译产生的字节码的数据量也较大。若多个智能合约都要用到相同的公共智能合约,则会导致区块链上会在多个公共智能合约的副本,增加了存储压力;另外,若不同的项目需要使用同功能的公共智能合约,则需要在不同项目间拷贝公共智能合约的副本,不便于公共智能合约的版本管理,容易造成版本混乱。
下面对外部库法的实现方式进行说明。
将需要复用的智能合约代码组织为一个公共库,用户提前将公共库编译为字节码并部署至区块链上,并获得该公共库的链上地址。库无法直接执行,只能被其它智能合约调用执行。
用户在需要调用公共库的智能合约中声明要调用的方法的签名(不需要方法的具体实现),并将这些方法与被调用的公共库的地址绑定。将该智能合约编译为字节码并部署至区块链上后,可通过交易的形式执行该智能合约。
当虚拟机执行智能合约时,若需要调用外部库,则虚拟机向宿主环境发起外部库调用请求,请求中包括外部库地址、方法选择器及方法参数,宿主环境负责传递方法参数、运行被调用的目标方法,并将调用结果返回至原智能合约中。
外部库法虽然缓解了区块链系统的存储压力,但调用外部库时仍然需要对传递被调用方法的参数及返回值进行编解码,且需要与宿主环境通信,导致执行效率不高。
针对上述技术问题,提出本申请实施例的技术方案。
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
本申请实施例提供一种区块链智能合约执行方法、装置、电子设备及计算机存储介质,本申请实施例的区块链智能合约执行方法可以应用于区块链的电子设备中,实现区块链节点的电子设备可以实施为服务器,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Net work,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。
下面对本申请实施例的区块链智能合约执行方法进行示例性说明。
图1为本申请实施例提供的区块链智能合约执行方法的一个可选的流程图,如图1所示,该流程可以包括:
步骤101:在区块链节点中部署智能合约数据和库数据,其中,智能合约数据包括N个智能合约的字节码和智能合约导入表,智能合约导入表包括:N个智能合约中至少一个智能合约对库中待调用方法的第一调用关系;库数据包括M个库的字节码、库导入表和和导出表,库导入表包括:M个库中至少一个库对其它库中待调用方法的第二调用关系,导出表包括:M个库中至少一个库的待调用方法在库中的地址索引信息,N和M均为大于0的整数。
本申请实施例中,区块链节点上存储的字节码分为智能合约的字节码和库的字节码;在一些实施例中,智能合约和库使用同种编程语言书写,并被编译为由同种虚拟机指令组成的字节码,但是它们的功能不同;智能合约的字节码能够被区块链虚拟机执行,而库的字节码无法被区块链虚拟机直接执行,但可被至少一个智能合约或其它库调用。
本申请实施例中,在区块链节点中部署智能合约数据之前,可以编译智能合约数据;在区块链节点中部署库数据之前,可以编译库数据。
本申请实施例中,在库的字节码中,待调用方法的呈现形式为字节码;待调用方法在库中具有起始地址和末尾地址,待调用方法在库中的起始地址为相应的字节码在库中的起始地址,待调用方法在库中的末尾地址为应的字节码在库中的末尾地址。
在一些实施例中,智能合约和库对库的调用可以通过跳转指令实现;在一些实施例中,第一调用关系可以由智能合约调用的库的地址、智能合约调用的库的方法的标识信息和调用库中方法的跳转指令在智能合约字节码的地址偏移量表示。示例性地,库的方法的标识信息可以是方法名的哈希值或方法签名的哈希值等。
在一些实施例中,可以针对N个智能合约中至少一个智能合约的字节码中的第一调用指令,在所述智能合约导入表中构造用于表示所述第一调用关系的键值对;第一调用指令用于调用库中的待调用方法。
在一些实施例中,智能合约导入表为一个键值对集合,在智能合约导入表的键值对集合的每个键值对中,键为智能合约调用的库的地址、以及智能合约调用的库的方法的标识信息,值为调用库中方法的跳转指令在智能合约字节码的地址偏移量。
可以看出,通过键值对的设置,便于构建智能合约的字节码中的第一调用关系。
在一些实施例中,在区块链节点中部署智能合约数据的实现方式可以是:获取区块链的第一交易数据;在所述第一交易数据包括所述智能合约数据的情况下,将所述交易数据中的所述智能合约数据存入所述区块链节点上预先分配的第一存储空间中。
这里,第一交易数据可以是预先构造的交易数据,第一存储空间可以是为区块链上预先为智能合约数据分配的存储空间。
在一些实施例中,可以从第一交易数据中分离出智能合约的字节码和智能合约导入表,然后可以将智能合约的字节码和智能合约导入表存入第一存储空间;如此,便于从区块链的同一存储空间读取智能合约的字节码和智能合约导入表。
在一些实施例中,第二调用关系可以由库调用的其它库的地址、库调用的其它库的方法的标识信息和调用库中方法的跳转指令在智能合约字节码的地址偏移量表示。
在一些实施例中,可以针对M个库中至少一个库的字节码中的第二调用指令,在所述库导入表中构造用于表示所述第二调用关系的键值对,第二调用指令用于调用其它库中的待调用方法。
在一些实施例中,库导入表为一个键值对集合,在库导入表的键值对集合的每个键值对中,键为库调用的其它库的地址、以及库调用的其它库的方法的标识信息智能合约调用的库的方法的标识信息,值为调用库中方法的跳转指令在智能合约字节码的地址偏移量。
可以看出,通过键值对的设置,便于构建库的字节码中的第二调用关系。
在一些实施例中,地址索引信息可以由库中方法的标识信息、以及库中方法的起始处在库的字节码中的地址偏移量。
在一些实施例中,可以针对M个库中至少一个库的字节码中的标志指令,在导出表中构造用于表示所述地址索引信息的键值对,其中,标志指令用于标志待调用方法在库中的起始地址。
在一些实施例中,导出表是一个键值对集合,在导出表的键值对集合的每个键值对中,键为库中方法的标识信息,值为库中方法的起始处在库的字节码中的地址偏移量。
可以看出,通过键值对的设置,便于构建库的字节码中的地址索引信息。
在一些实施例中,在区块链节点中部署库数据的实现方式可以是:在第一交易数据包括库数据的情况下,将第一交易数据中的所述库数据存入区块链节点上预先分配的第二存储空间中。
这里,第二交易数据可以是预先构造的交易数据,第如图存储空间可以是为区块链上预先为库数据分配的存储空间。
在一些实施例中,可以从第二交易数据中分离出库的字节码、库导入表和导出表,然后可以将库的字节码、库导入表和导出表存入第二存储空间;如此,便于从区块链的同一存储空间读取库的字节码、库导入表和导出表。
步骤102:确定待执行智能合约的字节码;根据智能合约数据和库数据,提取待执行智能合约调用的库的字节码;将待执行智能合约调用的库的字节码添加至待执行智能合约的字节码中,得到组合字节码。
在一些实施例中,可以从区块链的交易数据中解析出待执行智能合约的合约地址,即,用户发起交易的目标地址为上述待执行智能合约的合约地址;在解析出待执行智能合约的合约地址后,可以确定该待执行智能合约的合约地址对应的区块链存储空间,然后,可以从区块链存储空间读取出待执行智能合约的字节码,在区块链存储空间中存在待执行智能合约的字节码对应的智能合约导入表时,可以读取出对应的智能合约导入表;根据读取出的智能合约导入表,确定待执行智能合约调用的库的地址。示例性地,智能合约导入表的键值对中,键为智能合约调用的库的地址、以及智能合约调用的库的方法的标识信息,这样,可以基于读取出的智能合约导入表,确定待执行智能合约调用的库的地址。
需要说明的是,如果区块链存储空间中不存在待执行智能合约的字节码对应的智能合约导入表,则说明待执行智能合约无需调用库的方法,因而,可以直接执行待执行智能合约的字节码。
在一些实施例中,在确定待执行智能合约调用的库的地址后,可以从待执行智能合约调用的库的地址对应的区块链存储空间中,读取出待执行智能合约调用的库的字节码和导出表;在一些实施例中,还可以从待执行智能合约调用的库的地址对应的区块链存储空间中,读取出待执行智能合约调用的库的字节码和库导入表。
在一些实施例中,可以设置库加载器,库加载器可以是用于进行数据加载的插件;在从区块链的交易数据中解析出待执行智能合约的合约地址后,库加载器可以判断待执行智能合约的合约地址是否存在,如果不存在,则说明读取数据失败,可以直接结束流程;如果存在,则库加载器可以从待执行智能合约调用的库的地址对应的区块链存储空间中,读取出待执行智能合约调用的库的字节码和库导入表。
在一些实施例中,库加载器可以遍历库导入表的所有键值对,根据每个键值对,查找待执行智能合约调用的库的字节码、库导入表和导出表,并将查找的库的字节码添加到待执行智能合约的字节码的尾部,得到组合字节码。
步骤103:执行所述组合字节码,得到执行结果。
在一些实施例中,区块链节点可以启动虚拟机并向虚拟机传递包括组合字节码的数据,虚拟机可以执行该组合字节码,得到执行结果。
在一些实施例中,执行结果可以是执行成功,也可以是执行失败。
在实际应用中,步骤101至步骤103可以基于电子设备的处理器实现,上述处理器可以是特定用途集成电路(Application Specific Integrated Circuit,A SIC)、数字信号处理器(Digital Signal Processor,DSP)、数字信号处理装置(Digital SignalProcessing Device,DSPD)、可编程逻辑装置(Programmable Logic Device,PLD)、现场可编程门阵列(Field Programmable Gate Array,F PGA)、CPU、控制器、微控制器、微处理器中的至少一种。可以理解地,实现上述处理器功能的电子器件还可以为其它,本申请实施例不作限制。
可以看出,本申请实施例中,可以通过对库的调用实现不同智能合约代码的复用,与通过不同智能合约的复制合并实现不同智能合约的复用的方案相比,可以对区块链上外部库的代码进行有效复用,在一定程度上可以降低存储资源消耗,降低与宿主环境通信开销;并且,在智能合约执行前,基于预先部署的智能合约数据和库数据,将智能合约调用的库的字节码添加到智能合约的字节码中;因而,与相关技术中通过外部库的调用实现不同智能合约的复用的方案相比,本申请实施例在执行智能合约的过程中,无需虚拟机与宿主环境进行通信,并且无需进行数据编解码,而是可以直接执行组合字节码,以实现复用后的不同智能合约代码的执行,从而,有利于提升智能合约调用外部代码的执行效率。
在本申请的一些实施例中,可以在智能合约导入表中构造用于表示所述第一调用关系的键值对后,将第一调用指令替换为跳转指令。
在一些实施例中,在智能合约或库对库的调用通过跳转指令实现时,在执行智能合约之前,跳转指令的目标地址应该是未知的,因而,跳转指令的目标地址的初始值可以是0,以表示未知的目标地址。
在本申请的一些实施例中,在确定待执行智能合约的字节码后,可以获取待执行智能合约对应的智能合约导入表;根据待执行智能合约对应的智能合约导入表,获取待执行智能合约调用的库的导出表。
这里,获取待执行智能合约对应的智能合约导入表和待执行智能合约调用的库的导出表的实现方式,已经在步骤102中作出说明,这里不再赘述。
在获取待执行智能合约对应的智能合约导入表和待执行智能合约调用的库的导出表后,可以根据待执行智能合约对应的智能合约导入表和所述待执行智能合约调用的库的导出表,确定所述待执行智能合约的待调用方法在组合字节码中的地址偏移量;将跳转指令的目标地址更新为上述地址偏移量。
在一些实施例中,智能合约导入表的键值对中,键为智能合约调用的库的地址、以及智能合约调用的库的方法的标识信息,值为调用库中方法的跳转指令在智能合约字节码的地址偏移量;库的导出表的键值对中,键为库中方法的标识信息,值为库中方法的起始处在库的字节码中的地址偏移量;在这种情况下,由于组合字节码为待执行智能合约的字节码和库的字节码的组合,因而,可以直接确定待执行智能合约的待调用方法在组合字节码中的地址偏移量。
在一些实施例中,上述库加载器可以确定待执行智能合约的待调用方法在组合字节码中的地址偏移量,并且上述库加载器可以将跳转指令的目标地址更新为上述地址偏移量。
在一些实施例中,执行组合字节码的实现方式为:执行待执行智能合约的字节码,在执行待执行智能合约的字节码的过程中,根据上述跳转指令,执行库的字节码,从而实现组合字节码的执行;
可以看出,本申请实施例中,可以通过跳转指令的设置,在执行待执行智能合约的字节码的过程中,实现对库中方法的调用执行,实现智能合约对库中方法的动态连接;在执行待执行智能合约的字节码的过程中,可以基于跳转指令,准确地对库的方法进行寻址,有利于保证智能合约的正常执行;与相关技术中通过外部库的调用实现不同智能合约的复用的方案相比,本申请实施例在执行智能合约的过程中,无需虚拟机与宿主环境进行通信,并且无需进行数据编解码,而是可以直接执行组合字节码,以实现复用后的不同智能合约代码的执行,从而,有利于提升智能合约调用外部代码的执行效率。
在一些实施例中,待执行智能合约调用的库可以包括所述待执行智能合约直接调用的库,进一步地,待执行智能合约调用的库还可以包括待执行智能合约间接调用的库,这里,待执行智能合约间接调用的库包括待执行智能合约第1次间接调用的库至第i次间接调用的库,i为大于或等于1的整数。
在实际应用中,可以基于所述待执行智能合约直接调用的库的库导入表,确定待执行智能合约第1次间接调用的库。
在i大于1的情况下,可以基于待执行智能合约第i-1次间接调用的库的库导入表,确定待执行智能合约第i次间接调用的库。
在一些实施例中,在待执行智能合约调用的库仅包括待执行智能合约直接调用的库的情况下,可以直接根据待执行智能合约对应的智能合约导入表和待执行智能合约直接调用的库的导出表,确定待执行智能合约的待调用方法在组合字节码中的地址偏移量。
在一些实施例中,在待执行智能合约调用的库包括待执行智能合约直接调用的库和待执行智能合约间接调用的库时,根据待执行智能合约对应的智能合约导入表,获取待执行智能合约调用的库的导出表的实现方式可以是:
获取待执行智能合约直接调用的库的库导入表和待执行智能合约直接调用的库的导出表,并基于待执行智能合约直接调用的库的库导入表,确定所述待执行智能合约间接调用的库;获取待执行智能合约间接调用的库的导出表。
这里,待执行智能合约调用的库的导出表包括:待执行智能合约直接调用的库的导出表和待执行智能合约间接调用的库的导出表。
在一些实施例中,基于待执行智能合约直接调用的库的库导入表,确定所述待执行智能合约间接调用的库的实现方式可以是:
确定所述待执行智能合约第1次间接调用的库;
在确定所述待执行智能合约第i次间接调用的库,且所述库数据中不存在所述待执行智能合约第i次间接调用的库的库导入表的情况下,确定所述待执行智能合约间接调用的库包括:待执行智能合约第1次至第i次间接调用的库,i为大于或等于1的整数;
在确定待执行智能合约第i次间接调用的库,且库数据中存在所述待执行智能合约第i次间接调用的库的库导入表的情况下,根据待执行智能合约第i次间接调用的库的库导入表,确定待执行智能合约第i+1次间接调用的库的库导入表。
本申请的一些实施例中,如果待执行智能合约调用的库包括待执行智能合约间接调用的库,库加载器可以获取待执行智能合约间接调用的库的导出表,直至待执行智能合约各个间接调用的库的字节码均添加到待执行智能合约的字节码中;此时,可以由虚拟机执行组合字节码,
下面结合附图对智能合约数据和库数据的编译过程进行示例性说明。
图2为本申请实施例中智能合约数据和库数据的编译流程图,如图2所示,该流程可以包括:
步骤201:将当前编译对象编译为字节码,设置OFFSET的初始值为0,导入表为空。
本申请实施例中,用户可以在需要依赖外部库的智能合约或库的代码中声明要调用的库的链上地址及待调用方法的标识信息;用户还可以声明当前编译对象的类型,当前编译对象的类型为库或智能合约。
本申请实施例中,编译器可以将当前编译对象编译为字节码;在一些实施例中,编译器可以将库编译为库的字节码,也可以将智能合约编译为智能合约的字节码。
本申请实施例中,OFFSET表示待执行智能合约的待调用方法在组合字节码中的地址偏移量;导入表包括智能合约导入表和库导入表。
步骤202:判断当前编译对象是否为库,如果是则执行步骤203,如果否,则执行步骤204。
步骤203:设置库的导出表为空,然后执行步骤204。
步骤204:判断OFFSET是否大于或等于字节码的长度,如果是,则跳转至步骤214,如果否,则执行步骤205。
这里,本步骤中的字节码为对当前编译对象进行编译得到的字节码。
步骤205:判断字节码中地址为OFFSET的指令是否为调用库方法的指令,如果是,则执行步骤206;如果否,则跳转至步骤210。
步骤206:基于库地址及待调用方法的标识信息构造键。
步骤207:判断导入表中是否存在构造的键,如果不存在,则执行步骤208,如果存在,则跳转至步骤209。
步骤208:在导入表中新建键值对,然后执行步骤209。
这里,新建的键值对中,键为步骤206中构造的键,值为空集。
步骤209:确定键值对的值和跳转指令,然后跳转至步骤213。
本申请实施例中,可以将OFFSET的值添加到键值对的值中;然后,可以将字节码中地址为OFFSET的指令替换为跳转指令,将跳转指令的目标地址设置为0,然后,跳转至步骤213。
步骤210:判断当前编译对象是否为库,如果是,则执行步骤211,如果否,则跳转至步骤213。
步骤211:判断当前指令是否为标志指令,如果是,则执行步骤212,如果否,则执行步骤213。
这里,当前指令为字节码中地址为OFFSET的指令。
步骤212:在导出表中构造键值对,然后,执行步骤213。
这里,在导出表中构造的键值对中,键为待调用方法的标识信息,值为O FFSET的值。
步骤213:令OFFSET的值自增,跳转至步骤204。
这里,OFFSET的值的自增量为当前指令的长度。
步骤214:在字节码头部添加数据,然后结束流程。
在一些实施例中,本步骤的实现方式可以是:判断当前编译对象是否为库,在当前编译对象为库时,将导出表和库导入表添加至字节码头部,然后结束流程。在当前编译对象不是库时,将智能合约导入表添加至字节码头部,然后结束流程。
下面结合附图对智能合约数据和库数据的部署过程进行示例性说明。
图3为本申请实施例中智能合约数据和库数据的部署流程图,如图3所示,该流程可以包括:
步骤301:获取交易数据并分配存储空间。
在一些实施例中,可以由用户构造交易,其中,交易的目标地址设置为0,交易数据设置为智能合约数据或库数据;在用户向区块链节点发送交易后,区块链节点从交易中解析出交易数据。
在一些实施例中,在区块链节点从交易中解析出交易数据后,可以分配智能合约数据或库数据分配存储空间;示例性地,区块链节点分配新的链上地址ADDR,并确定ADDR代表的存储空间。
步骤302:在存储空间中存入表数据。
在一些实施例中,表数据为智能合约导入表;在一些实施例中,表数据为库导入表和导出表。
在一些实施例中,区块链节点判断交易数据是否包含导出表,如果是,则说明需要部署库数据,此时,区块链节点从交易数据中分离出库导入表和导出表,并将库导入表和导出表存入ADDR代表的存储空间中。
如果交易数据不包含导出表,则说明需要部署智能合约数据,此时,区块链节点从交易数据中分离出智能合约导入表,并将智能合约导入表存入ADDR代表的存储空间中。
步骤303:令A的初始值为0。
步骤304:判断A是否大于或等于导入表中的项的数量,如果是,则执行步骤307,如果否,则执行步骤305。
这里,本步骤中的导入表为智能合约导入表或库导入表。
步骤305:基于导入表中第A项进行数据处理,然后,执行步骤306。
本申请实施例中,基于导入表中第A项进行数据处理的实现方式可以为:获取导入表中第A项的键,并从导入表中第A项的键解析出库地址和待调用方法的标识信息;判断解析出的库地址是否存在于区块链上,如果否,则返回部署失败消息,并结束流程;如果是,则从解析出的库地址代表的存储空间中获取导出表;判断待调用方法的标识信息是否存在于导出表中,如果导出表中不存在待调用方法的标识信息,则返回部署失败消息,并结束流程;如果导出表中存在待调用方法的标识信息,则执行步骤306。
步骤306:令A的值自增1,然后,跳转至步骤304。
步骤307:在存储空间中存入字节码,返回部署成功消息,然后结束流程。
在一些实施例中,区块链节点可以从交易数据中分离出字节码,并将字节码存入ADDR代表的存储空间中。
下面结合附图对智能合约的执行过程进行示例性说明。
图4为本申请实施例中智能合约的执行流程图,如图4所示,该流程可以包括:
步骤401:获取交易数据和智能合约的合约地址。
本申请实施例中,可以由用户构造交易,其中,交易的目标地址设置为智能合约的合约地址,交易数据包括调用参数的编码;在用户向区块链节点发送交易后,区块链节点从交易中解析出交易数据和合约地址,并启动库加载器。
步骤402:库加载器判断合约地址是否存在,如果是则执行步骤403;如果否,则执行步骤409。
步骤403:库加载器判断合约地址代表的存储空间是否存在导出表,如果是,则执行步骤404;如果否,则执行步骤409。
步骤404:读取字节码、导入表并进行初始化设置。
本步骤的一种实现方式为:库加载器读取合约地址所代表的存储空间中的字节码,放置于字节码缓冲区中;设置LAST_BASE的初始值为0,设置BAS E为当前字节码缓冲区的长度;库加载器还可以读取合约地址所代表的存储空间中的导入表,并设置当前导入表为合约地址所代表的存储空间中的导入表。
步骤405:基于当前导入表进行数据处理,然后执行步骤406。
本申请的一些实施例中,基于当前导入表进行数据处理可以包括以下步骤:
步骤A1:判断当前导入表是否存在,如果不存在,则执行步骤406,如果存在,则执行步骤A2。
步骤A2:初始化B的值为0。
步骤A3:判断B是否大于或等于当前导入表中项的数量,如果是,则执行步骤A14;如果否,则执行步骤A4。
步骤A4:获取当前导入表中第B项的键和值,并从键中解析出智能合约调用的库的地址和待调用方法的标识信息。
步骤A5:读取库的地址代表的存储空间中的库导入表、导出表及库的字节码。
步骤A6:将读取出的库的字节码添加到字节码缓冲区中。
这里,字节码缓冲区不是具有固定存储容量的存储空间,而是根据存储的数据的数据量确定的存储空间;在字节码缓冲区仅存储由智能合约的字节码时,字节码缓冲区的长度(存储空间大小)为智能合约的字节码的长度,进一步地,在将读取出的库的字节码添加到字节码缓冲区中后,字节码缓冲区的长度为智能合约的字节码的长度与库的字节码的长度之和。
步骤A7:根据键中的方法标识信息,读取导出表中方法标识对应的地址偏移量OFFSET。
步骤A8:初始化J的值为0。
步骤A9:判断J的值是否大于或等于第B项的值中的元素个数,如果是,则跳转至步骤A13,如果否,则执行步骤A10。
步骤A10:设置JMP_OFFSET为第B项的值中第J个元素的值。
步骤A11:将字节码缓冲区中地址为LAST_BASE+JMP_OFFSET处的跳转指令的目标地址替换为BASE+OFFSET。
步骤A12:令J的值自增1,跳转至步骤A9。
步骤A13:令B的值自增1,跳转至步骤A3。
步骤A14:设置LAST_BASE为BASE,并设置BASE为当前字节码缓冲区的长度。
步骤A15:在库导入表存在的情况下,设置当前导入表为库导入表,并跳转至步骤A1。
这里,如果库导入表不存在,则说明当前导入表不存在,此时,可以在执行步骤A14后,跳转至步骤A1,然后,基于步骤A1,直接跳转至步骤406。
步骤406:基于交易数据执行字节码;
本步骤的一种实现方式可以是:区块链节点将启动虚拟机并向虚拟机传递交易数据;虚拟机开始执行字节码缓冲区中的字节码。
步骤407:判断是否执行成功,如果是,则执行步骤408,如果否,则执行步骤409。
步骤408:返回执行成功消息,然后结束流程。
步骤409:返回执行失败消息,然后结束流程。
在前述实施例提出的区块链智能合约执行方法的基础上,本申请实施例还提出了一种区块链智能合约执行装置;图5为本申请实施例的区块链智能合约执行装置的一个可选的组成结构示意图,如图5所示,该区块链智能合约执行装置500可以包括:
部署模块501,用于在区块链节点中部署智能合约数据和库数据,其中,所述智能合约数据包括N个智能合约的字节码和智能合约导入表,所述智能合约导入表包括:所述N个智能合约中至少一个智能合约对库中待调用方法的第一调用关系;所述库数据包括M个库的字节码、库导入表和和导出表,所述库导入表包括:所述M个库中至少一个库对其它库中待调用方法的第二调用关系,所述导出表包括:所述M个库中至少一个库的待调用方法在库中的地址索引信息,N和M均为大于0的整数;
处理模块502,用于确定待执行智能合约的字节码;根据所述智能合约数据和库数据,提取所述待执行智能合约调用的库的字节码;将所述待执行智能合约调用的库的字节码添加至所述待执行智能合约的字节码中,得到组合字节码;
执行模块503,用于执行所述组合字节码,得到执行结果。
在本申请的一些实施例中,所述部署模块501,在在所述区块链节点中部署智能合约数据之前,还用于:
针对所述N个智能合约中至少一个智能合约的字节码中的第一调用指令,在所述智能合约导入表中构造用于表示所述第一调用关系的键值对;其中,第一调用指令用于调用库中的待调用方法。
在本申请的一些实施例中,所述部署模块501,用于在区块链节点中部署智能合约数据,包括:
获取区块链的第一交易数据;
在所述第一交易数据包括所述智能合约数据的情况下,将所述第一交易数据中的所述智能合约数据存入所述区块链节点上预先分配的第一存储空间中。
在本申请的一些实施例中,在所述区块链节点中部署库数据之前,还用于针对所述M个库中至少一个库的字节码中的第二调用指令,在所述库导入表中构造用于表示所述第二调用关系的键值对,其中,所述第二调用指令用于调用所述其它库中的待调用方法;
针对所述M个库中至少一个库的字节码中的标志指令,在所述导出表中构造用于表示所述地址索引信息的键值对,其中,所述标志指令用于标志所述待调用方法在库中的起始地址。
在本申请的一些实施例中,所述部署模块501,用于在区块链节点中部署库数据,包括:
获取区块链的第一交易数据;
在所述第一交易数据包括所述库数据的情况下,将所述第一交易数据中的所述库数据存入所述区块链节点上预先分配的第二存储空间中。
在本申请的一些实施例中,所述部署模块501,还用于在所述智能合约导入表中构造用于表示所述第一调用关系的键值对后,将所述第一调用指令替换为跳转指令;
所述处理模块502,在确定待执行智能合约的字节码后,还用于:
获取所述待执行智能合约对应的智能合约导入表;根据所述待执行智能合约对应的智能合约导入表,获取所述待执行智能合约调用的库的导出表;
根据所述待执行智能合约对应的智能合约导入表和所述待执行智能合约调用的库的导出表,确定所述待执行智能合约的待调用方法在组合字节码中的地址偏移量;将所述跳转指令的目标地址更新为所述地址偏移量。
在本申请的一些实施例中,所述待执行智能合约调用的库,包括:所述待执行智能合约直接调用的库和所述待执行智能合约间接调用的库;
所述处理模块502,用于根据所述待执行智能合约对应的智能合约导入表,获取所述待执行智能合约调用的库的导出表,包括:
获取所述待执行智能合约直接调用的库的库导入表和所述待执行智能合约直接调用的库的导出表,并基于所述待执行智能合约直接调用的库的库导入表,确定所述待执行智能合约间接调用的库;获取所述待执行智能合约间接调用的库的导出表。
在本申请的一些实施例中,所述处理模块502,用于基于所述待执行智能合约直接调用的库的库导入表,确定所述待执行智能合约间接调用的库,包括:
基于所述待执行智能合约直接调用的库的库导入表,确定所述待执行智能合约第1次间接调用的库;
在确定所述待执行智能合约第i次间接调用的库,且所述库数据中不存在所述待执行智能合约第i次间接调用的库的库导入表的情况下,确定所述待执行智能合约间接调用的库包括:所述待执行智能合约第1次至第i次间接调用的库,i为大于或等于1的整数;
在确定所述待执行智能合约第i次间接调用的库,且所述库数据中存在所述待执行智能合约第i次间接调用的库的库导入表的情况下,根据所述待执行智能合约第i次间接调用的库的库导入表,确定所述待执行智能合约第i+1次间接调用的库的库导入表。
在实际应用中,部署模块501、处理模块502和执行模块503可以利用电子设备的处理器实现,上述处理器可以是ASIC、DSP、DSPD、PLD、FPGA、CPU、控制器、微控制器、微处理器中的至少一种。可以理解地,实现上述处理器功能的电子器件还可以为其它,本申请实施例不作限制。
需要说明的是,以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述的区块链智能合约执行方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是终端、服务器等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本申请实施例不限制于任何特定的硬件和软件结合。
对应地,本申请实施例再提供一种计算机程序产品,所述计算机程序产品包括计算机可执行指令,该计算机可执行指令用于实现本申请实施例提供的任意一种区块链智能合约执行方法。
相应的,本申请实施例再提供一种计算机存储介质,所述计算机存储介质上存储有计算机可执行指令,该计算机可执行指令用于实现上述实施例提供的任意一种区块链智能合约执行方法。
本申请实施例还提供一种电子设备,图6为本申请实施例提供的电子设备的一个可选的组成结构示意图,如图6所示,所述电子设备600包括:
存储器601,用于存储可执行指令;
处理器602,用于执行所述存储器601中存储的可执行指令时,实现上述任意一种区块链智能合约执行方法。
上述处理器602可以为ASIC、DSP、DSPD、PLD、FPGA、CPU、控制器、微控制器、微处理器中的至少一种。
上述计算机可读存储介质/存储器可以是只读存储器(Read Only Memory,ROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,EPROM)、电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性随机存取存储器(Ferromagnetic Random Access Memory,FRAM)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(Compact Disc Read-Only Memory,CD-ROM)等存储器;也可以是包括上述存储器之一或任意组合的各种终端,如移动电话、计算机、平板设备、个人数字助理等。
这里需要指出的是:以上存储介质和设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请存储介质和设备实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
应理解,说明书通篇中提到的“一些实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一些实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本申请实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得设备自动测试线执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
本申请所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
本申请所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (11)
1.一种区块链智能合约执行方法,其特征在于,所述方法包括:
在区块链节点中部署智能合约数据和库数据,其中,所述智能合约数据包括N个智能合约的字节码和智能合约导入表,所述智能合约导入表包括:所述N个智能合约中至少一个智能合约对库中待调用方法的第一调用关系;第一调用关系以所述智能合约导入表中构造的键值对表示,在所述智能合约导入表中构造的键值对中,键为智能合约调用的库的地址、以及智能合约调用的库的方法的标识信息,值为调用库中方法的跳转指令在智能合约字节码的地址偏移量;所述库数据包括M个库的字节码、库导入表和导出表,所述库导入表包括:所述M个库中至少一个库对其它库中待调用方法的第二调用关系,第二调用关系以所述库导入表中构造的键值对表示,在所述库导入表中构造的键值对中,键为库调用的其它库的地址、以及库调用的其它库的方法的标识信息智能合约调用的库的方法的标识信息,值为调用库中方法的跳转指令在智能合约字节码的地址偏移量;所述导出表包括:所述M个库中至少一个库的待调用方法在库中的地址索引信息,N和M均为大于0的整数;
确定待执行智能合约的字节码;根据所述智能合约数据和库数据,提取所述待执行智能合约调用的库的字节码;将所述待执行智能合约调用的库的字节码添加至所述待执行智能合约的字节码中,得到组合字节码;
执行所述组合字节码,得到执行结果。
2.根据权利要求1所述的区块链智能合约执行方法,其特征在于,在所述区块链节点中部署智能合约数据之前,所述方法还包括:
针对所述N个智能合约中至少一个智能合约的字节码中的第一调用指令,在所述智能合约导入表中构造用于表示所述第一调用关系的键值对;其中,第一调用指令用于调用库中的待调用方法。
3.根据权利要求1或2所述的区块链智能合约执行方法,其特征在于,所述在区块链节点中部署智能合约数据,包括:
获取区块链的第一交易数据;
在所述第一交易数据包括所述智能合约数据的情况下,将所述第一交易数据中的所述智能合约数据存入所述区块链节点上预先分配的第一存储空间中。
4.根据权利要求1所述的区块链智能合约执行方法,其特征在于,在所述区块链节点中部署库数据之前,所述方法还包括:
针对所述M个库中至少一个库的字节码中的第二调用指令,在所述库导入表中构造用于表示所述第二调用关系的键值对,其中,所述第二调用指令用于调用所述其它库中的待调用方法;
针对所述M个库中至少一个库的字节码中的标志指令,在所述导出表中构造用于表示所述地址索引信息的键值对,其中,所述标志指令用于标志所述待调用方法在库中的起始地址。
5.根据权利要求1或4所述的区块链智能合约执行方法,其特征在于,所述在区块链节点中部署库数据,包括:
获取区块链的第一交易数据;
在所述第一交易数据包括所述库数据的情况下,将所述第一交易数据中的所述库数据存入所述区块链节点上预先分配的第二存储空间中。
6.根据权利要求2所述的区块链智能合约执行方法,其特征在于,所述方法还包括:
在所述智能合约导入表中构造用于表示所述第一调用关系的键值对后,将所述第一调用指令替换为跳转指令;
在确定待执行智能合约的字节码后,获取所述待执行智能合约对应的智能合约导入表;根据所述待执行智能合约对应的智能合约导入表,获取所述待执行智能合约调用的库的导出表;
根据所述待执行智能合约对应的智能合约导入表和所述待执行智能合约调用的库的导出表,确定所述待执行智能合约的待调用方法在组合字节码中的地址偏移量;将所述跳转指令的目标地址更新为所述地址偏移量。
7.根据权利要求6所述的区块链智能合约执行方法,其特征在于,所述待执行智能合约调用的库,包括:所述待执行智能合约直接调用的库和所述待执行智能合约间接调用的库;
所述根据所述待执行智能合约对应的智能合约导入表,获取所述待执行智能合约调用的库的导出表,包括:
获取所述待执行智能合约直接调用的库的库导入表和所述待执行智能合约直接调用的库的导出表,并基于所述待执行智能合约直接调用的库的库导入表,确定所述待执行智能合约间接调用的库;获取所述待执行智能合约间接调用的库的导出表。
8.根据权利要求7所述的区块链智能合约执行方法,其特征在于,所述基于所述待执行智能合约直接调用的库的库导入表,确定所述待执行智能合约间接调用的库,包括:
基于所述待执行智能合约直接调用的库的库导入表,确定所述待执行智能合约第1次间接调用的库;
在确定所述待执行智能合约第i次间接调用的库,且所述库数据中不存在所述待执行智能合约第i次间接调用的库的库导入表的情况下,确定所述待执行智能合约间接调用的库包括:所述待执行智能合约第1次至第i次间接调用的库,i为大于或等于1的整数;
在确定所述待执行智能合约第i次间接调用的库,且所述库数据中存在所述待执行智能合约第i次间接调用的库的库导入表的情况下,根据所述待执行智能合约第i次间接调用的库的库导入表,确定所述待执行智能合约第i+1次间接调用的库的库导入表。
9.一种区块链智能合约执行装置,其特征在于,所述装置包括:
部署模块,用于在区块链节点中部署智能合约数据和库数据,其中,所述智能合约数据包括N个智能合约的字节码和智能合约导入表,所述智能合约导入表包括:所述N个智能合约中至少一个智能合约对库中待调用方法的第一调用关系;第一调用关系以所述智能合约导入表中构造的键值对表示,在所述智能合约导入表中构造的键值对中,键为智能合约调用的库的地址、以及智能合约调用的库的方法的标识信息,值为调用库中方法的跳转指令在智能合约字节码的地址偏移量;所述库数据包括M个库的字节码、库导入表和导出表,所述库导入表包括:所述M个库中至少一个库对其它库中待调用方法的第二调用关系,第二调用关系以所述库导入表中构造的键值对表示,在所述库导入表中构造的键值对中,键为库调用的其它库的地址、以及库调用的其它库的方法的标识信息智能合约调用的库的方法的标识信息,值为调用库中方法的跳转指令在智能合约字节码的地址偏移量;所述导出表包括:所述M个库中至少一个库的待调用方法在库中的地址索引信息,N和M均为大于0的整数;
处理模块,用于确定待执行智能合约的字节码;根据所述智能合约数据和库数据,提取所述待执行智能合约调用的库的字节码;将所述待执行智能合约调用的库的字节码添加至所述待执行智能合约的字节码中,得到组合字节码;
执行模块,用于执行所述组合字节码,得到执行结果。
10.一种电子设备,其特征在于,所述电子设备包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至8任一项所述的区块链智能合约执行方法。
11.一种计算机可读存储介质,其特征在于,存储有可执行指令,用于被处理器执行时,实现权利要求1至8任一项所述的区块链智能合约执行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011171991.1A CN112308716B (zh) | 2020-10-28 | 2020-10-28 | 区块链智能合约执行方法、装置、设备及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011171991.1A CN112308716B (zh) | 2020-10-28 | 2020-10-28 | 区块链智能合约执行方法、装置、设备及计算机存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112308716A CN112308716A (zh) | 2021-02-02 |
CN112308716B true CN112308716B (zh) | 2024-02-20 |
Family
ID=74331350
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011171991.1A Active CN112308716B (zh) | 2020-10-28 | 2020-10-28 | 区块链智能合约执行方法、装置、设备及计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112308716B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112819634B (zh) * | 2021-02-25 | 2023-06-02 | 成都质数斯达克科技有限公司 | 交易处理方法、装置、电子设备及可读存储介质 |
CN113342429B (zh) * | 2021-06-09 | 2023-08-08 | 网易(杭州)网络有限公司 | 智能合约数据处理方法、装置、计算机设备及存储介质 |
CN113805889B (zh) * | 2021-08-27 | 2023-07-28 | 成都质数斯达克科技有限公司 | 一种智能合约调用执行方法、装置、设备及可读存储介质 |
GB2618105A (en) * | 2022-04-27 | 2023-11-01 | Nchain Licensing Ag | Protocol for communicating compact scripts |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109325368A (zh) * | 2018-09-11 | 2019-02-12 | 云量区块链(深圳)有限公司 | 基于区块链的城市实景管理方法、电子设备及存储介质 |
CN110555700A (zh) * | 2019-09-04 | 2019-12-10 | 腾讯科技(深圳)有限公司 | 区块链智能合约执行方法、装置、计算机可读存储介质 |
CN110675256A (zh) * | 2019-08-30 | 2020-01-10 | 阿里巴巴集团控股有限公司 | 部署和执行智能合约的方法及装置 |
CN110704064A (zh) * | 2019-09-30 | 2020-01-17 | 支付宝(杭州)信息技术有限公司 | 编译和执行智能合约的方法及装置 |
CN111324396A (zh) * | 2020-03-19 | 2020-06-23 | 深圳市网心科技有限公司 | 一种区块链智能合约执行方法、装置及设备 |
CN111581181A (zh) * | 2020-04-07 | 2020-08-25 | 浙商银行股份有限公司 | 一种基于数据库数据表自动生成区块链智能合约的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11244064B2 (en) * | 2018-06-26 | 2022-02-08 | American Express Travel Related Services Company, Inc. | Application level data security |
-
2020
- 2020-10-28 CN CN202011171991.1A patent/CN112308716B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109325368A (zh) * | 2018-09-11 | 2019-02-12 | 云量区块链(深圳)有限公司 | 基于区块链的城市实景管理方法、电子设备及存储介质 |
CN110675256A (zh) * | 2019-08-30 | 2020-01-10 | 阿里巴巴集团控股有限公司 | 部署和执行智能合约的方法及装置 |
CN110555700A (zh) * | 2019-09-04 | 2019-12-10 | 腾讯科技(深圳)有限公司 | 区块链智能合约执行方法、装置、计算机可读存储介质 |
CN110704064A (zh) * | 2019-09-30 | 2020-01-17 | 支付宝(杭州)信息技术有限公司 | 编译和执行智能合约的方法及装置 |
CN111324396A (zh) * | 2020-03-19 | 2020-06-23 | 深圳市网心科技有限公司 | 一种区块链智能合约执行方法、装置及设备 |
CN111581181A (zh) * | 2020-04-07 | 2020-08-25 | 浙商银行股份有限公司 | 一种基于数据库数据表自动生成区块链智能合约的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112308716A (zh) | 2021-02-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112308716B (zh) | 区块链智能合约执行方法、装置、设备及计算机存储介质 | |
CN110675256B (zh) | 部署和执行智能合约的方法及装置 | |
JP3689368B2 (ja) | データ処理リソースを備えたマルチアプリケーション組込システムにアプリケーションをローディングする方法、対応するシステムおよび実行方法 | |
EP2557498B1 (en) | Updating method and computer system for hypervisor components | |
CN109614165B (zh) | 一种com组件的多版本并行运行方法和装置 | |
CN111666096B (zh) | 目标应用的热更新方法和装置、存储介质和电子设备 | |
CN111930382B (zh) | 应用页面的接入方法、装置及设备 | |
CN111399990A (zh) | 解释执行智能合约指令的方法及装置 | |
CN111176791A (zh) | 一种基于多虚拟机区块链平台跨虚拟机调用方法 | |
US11726810B2 (en) | Systemic extensible blockchain object model comprising a first-class object model and a distributed ledger technology | |
CN112256359A (zh) | 微服务合并方法、装置、电子设备及可读存储介质 | |
WO2024045382A1 (zh) | 区块链中实现反射机制 | |
CN114153521A (zh) | 类加载方法和装置 | |
CN113888173B (zh) | 基于区块链的智能合约调用方法、装置及设备 | |
CN113077260A (zh) | 基于区块链的数据访问方法、装置及电子设备 | |
CN112230930A (zh) | 混合技术栈构建打包的方法和装置及机器可读存储介质 | |
CN116680014A (zh) | 数据处理方法和装置 | |
KR101140522B1 (ko) | 객체 관리 시스템 및 방법 | |
CN112256324B (zh) | 安卓应用程序构建过程中对文件的处理方法及装置 | |
CN111105242A (zh) | 一种区块链智能合约实现方法 | |
CN110825361A (zh) | 一种代码修改方法、装置、设备及可读存储介质 | |
CN116755845B (zh) | 数据处理方法和装置 | |
CN116700841A (zh) | 一种原生api调用的方法及装置 | |
CN112148351B (zh) | 一种应用软件跨版本兼容的方法和系统 | |
CN117251234B (zh) | 基于补丁的函数调用方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |