CN110297689B - 智能合约执行方法、装置、设备及介质 - Google Patents
智能合约执行方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN110297689B CN110297689B CN201910372720.3A CN201910372720A CN110297689B CN 110297689 B CN110297689 B CN 110297689B CN 201910372720 A CN201910372720 A CN 201910372720A CN 110297689 B CN110297689 B CN 110297689B
- Authority
- CN
- China
- Prior art keywords
- target
- contract
- data
- virtual machine
- block chain
- 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
Images
Classifications
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network integration; Enabling network access in virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明实施例公开了一种智能合约执行方法、装置、设备及介质。其中,该方法由代理模块执行,该方法包括:接收目标合约虚拟机的数据访问请求,所述数据访问请求是响应于基于目标智能合约发起的事务请求而产生的;通过区块链访问模块,根据所述数据访问请求中的目标智能合约标识,从区块链中获取执行目标智能合约所需的目标合约数据,其中区块链系统中的各候选合约虚拟机使用同一个区块链访问模块;将获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式,供目标合约虚拟机根据转化结果执行所述事务请求。通过本发明实施例提供的技术方案,可以降低支持多合约虚拟机的区块链开发成本,而且无需存储不同数据格式的区块链数据。
Description
技术领域
本发明实施例涉及信息安全技术领域,尤其涉及一种智能合约执行方法、装置、设备及介质。
背景技术
在区块链系统中,区块链节点可以基于智能合约产生事务请求,并向其他区块链节点发送该事务请求,由此,该事务请求在全网中得到执行和验证,并上链到区块链中进行存储。智能合约是指在区块链节点中部署的、实现某些功能的代码集合。
区块链中智能合约需要在虚拟机中运行,而不是在计算机硬件上执行。为了便于使用不同编程语言编写智能合约,由于不同编程语言可能需要在不同虚拟机中执行,区块链系统需要不同类型的虚拟机。
区块链系统如果为每一种类型的虚拟机单独开发运行环境,则导致开发成本大。
发明内容
本发明实施例提供了一种智能合约执行方法、装置、设备及介质,可以降低支持多合约虚拟机的区块链开发成本,而且无需存储不同数据格式的区块链数据。
第一方面,本发明实施例提供了一种智能合约执行方法,由代理模块执行,该方法包括:
接收目标合约虚拟机的数据访问请求,所述数据访问请求是响应于基于目标智能合约发起的事务请求而产生的;
通过区块链访问模块,根据所述数据访问请求中的目标智能合约标识,从区块链中获取执行目标智能合约所需的目标合约数据,其中区块链系统中的各候选合约虚拟机使用同一个区块链访问模块;
将获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式,供目标合约虚拟机根据转化结果执行所述事务请求。
第二方面,本发明实施例提供了一种智能合约执行装置,配置于代理模块中,该装置包括:
请求接收模块,用于接收目标合约虚拟机的数据访问请求,所述数据访问请求是响应于基于目标智能合约发起的事务请求而产生的;
数据获取模块,用于通过区块链访问模块,根据所述数据访问请求中的目标智能合约标识,从区块链中获取执行目标智能合约所需的目标合约数据,其中区块链系统中的各候选合约虚拟机使用同一个区块链访问模块;
数据格式转换模块,用于将获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式,供目标合约虚拟机根据转化结果执行所述事务请求。
第三方面,本发明实施例还提供了一种设备,该设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现第一方面所述的智能合约执行方法。
第四方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面所述的智能合约执行方法。
本发明实施例提供的智能合约执行方法、装置、设备及介质,在接收到目标合约虚拟机响应于基于目标智能合约发起的事务请求所产生并发送的数据访问请求之后,通过区块链系统中多个候选合约虚拟机共同使用的同一个区块链访问模块,根据数据访问请求中的目标智能合约标识,从区块链中获取执行目标智能合约所需的目标合约数据,并将所获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式,供目标合约虚拟机根据转化结果执行该事务请求。相比于现有的技术方案,本方案通过为接入区块链系统中的多个合约虚拟机配置统一的区块链访问模块,可以降低支持多合约虚拟机的区块链开发成本;而且代理模块能够将从区块链中获取的数据转化为对应的合约虚拟机所支持的数据格式,进而在区块链数据结构有限的情况下,也能够满足不同合约虚拟机的需求。
附图说明
图1为本发明实施例所使用的区块链节点的系统架构图;
图2为本发明实施例一中提供的一种智能合约执行方法的流程图;
图3为本发明实施例二中提供的一种智能合约执行方法的流程图;
图4为本发明实施例三中提供的一种智能合约执行方法的流程图;
图5为本发明实施例四提供的一种智能合约执行装置的结构示意图;
图6为本发明实施例五提供的一种设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明实施例作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明实施例,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明实施例相关的部分而非全部结构。
在介绍本发明各实施例之前,先对本发明实施例中系统架构进行说明。如图1所示,本实施例的设备可以包括智能合约模块,代理模块,以及区块链访问模块。该设备优选是区块链节点设备。
其中,智能合约模块用于构建不同合约虚拟机代码运行环境,包括接入区块链系统的合约虚拟机、以及所支持的编写智能合约的语言。可选的,不同合约虚拟机所支持的智能合约编程语言可能不同。例如,若接入区块链系统的合约虚拟机包括Docker合约虚拟机、WebAssembly合约虚拟机(即WASM)以及以太坊合约虚拟机(Ethereum Virtual Machine,EVM)等,而Docker合约虚拟机支持的编写智能合约的语言包括GO语言、C/C++语言,WebAssembly合约虚拟机支持的编写智能合约的语言包括GO语言、C/C++语言以及Java语言,以太坊合约虚拟机支持的编写智能合约的语言包括solidity语言,进而智能合约模块中可配置的编程语言包括GO语言、C/C++语言、Java语言以及solidity语言。
区块链访问模块可以是一种智能合约模块中的合约虚拟机访问区块链数据的接口。可选的,本实施例中,接入区块链系统中的多个合约虚拟机配置统一的区块链访问模块,进而可降低支持多合约虚拟机的区块链开发成本。
代理模块作为智能合约模块和区块链访问模块的中间模块,能够在获取到智能合约模块发送的数据访问请求时,通过区块链访问模块访问区块链,进而获取数据访问请求所需的数据;此外,还可以将获取的数据转化为对应合约虚拟机所支持的数据格式,供该合约虚拟机根据转化的数据执行相应的事务请求。
实施例一
图2为本发明实施例一中提供的一种智能合约执行方法的流程图,本实施例可适用于执行智能合约的情况,尤其适用于基于区块链节点的系统构架中的的智能合约模块、代理模块以及区块链访问模块之间相互配合,以实现智能合约的执行的场景。本发明实施例的方案由代理模块来执行。该方法可由智能合约执行装置来执行,该装置可以配置于承载区块链节点的计算设备中,以硬件和/或软件的方式来实现。参见图2,该方法具体可以包括:
S210,接收目标合约虚拟机的数据访问请求,数据访问请求是响应于基于目标智能合约发起的事务请求而产生的。
本实施例中,区块链系统中接入有两种或两种以上可供选择的候选合约虚拟机,且各候选合约虚拟机之间相互独立。可选的,候选合约虚拟机可以包括Docker合约虚拟机、WebAssembly合约虚拟机和以太坊合约虚拟机中的至少两种;目标合约虚拟机可以为各候合约选虚拟机中的一个或多个。
智能合约是指在区块链节点中部署的、实现某些功能的代码集合。不同候选合约虚拟机所支持的编程语言可能不同,进而利用不同编程语言可编写不同智能合约。可选的,本实施例中支持多合约虚拟机的区块链系统可通过下述过程部署所需的智能合约:从区块链系统提供的候选编程语言中选择目标编程语言,并基于目标编程语言编写目标智能合约源码;之后从区块链系统中为目标编程语言提供的候选合约虚拟编译器中选择目标合约虚拟机编译器,并调用目标合约虚拟机编译器对目标智能合约源码进行编译,得到目标智能合约字节码文件;通过内核虚拟机发起包括目标智能合约字节码文件的上链事务请求,以将目标智能合约部署于区块链中。其中,不同的编程语言可对应不同的合约虚拟机编译器;不同候选合约虚拟机支持的相同的编程语言,对于不同候选合约虚拟机而言,对应不同的合约虚拟机编译器,进而可基于不同候选合约虚拟机部署不同智能合约,也就是说支持多合约虚拟机的区块链系统所部署的任一智能合约,均唯一对应一个可执行该智能合约的合约虚拟机。
可选的,区块链节点可部署多个智能合约,不同的智能合约可对应不同的功能。目标智能合约是指区块链节点所部署的智能合约中的一个,且唯一对应一个可执行该目标智能合约的目标合约虚拟机。本实施例中,基于目标智能合约发起的事务请求即为基于目标智能合约的事务请请求。具体的,区块链节点本地产生事务处理需求,或者接收到某一触发机制如第三方设备(如客户端、终端设备或服务器等)发送的事务处理需求时,可根据该事务处理需求确定目标智能合约,而后产生并发起基于目标智能合约的事务请求;或者,区块链节点获取区块链网络中传输的其他区块链节点基于目标智能合约发起的事务请求。
数据访问请求是指用于对区块链数据进行访问的请求。可选的,产生数据访问请求的过程可以为:区块链节点获取基于目标智能合约发起的事务请求,并基于目标智能合约调用与其相对应的目标合约虚拟机;进而目标合约虚拟机响应基于目标智能合约发起的事务请求,对该事务请求进行分析,并依据分析结果产生数据访问请求。
具体的,接入区块链节点的目标合约虚拟机在产生数据访问请求后,可将该数据访问请求传输至该区块链节点中的代理模块,以请求代理模块依据数据访问请求从区块链获取所需数据。
S220,通过区块链访问模块,根据数据访问请求中的目标合约标识,从区块链中获取执行目标智能合约所需的目标合约数据,其中区块链系统中的各候选合约虚拟机使用同一个区块链访问模块。
本实施例中,目标合约数据为执行目标智能合约所需从区块链中读取的数据。可以理解的是,执行目标智能合约的过程可以包括目标合约虚拟机执行事务请求的过程,若目标智能合约设置有调用权限,则执行目标智能合约的过程还可以包括由代理模块验证事务请求权限的过程。可选的,目标合约数据可以包括目标合约虚拟机执行事务请求所需从区块链中读取的依赖数据,即读依赖数据,还可以包括代理模块验证事务请求权限所需从区块链读取的目标智能合约的调用权限。
数据访问请求中可以包括目标智能合约标识。目标智能合约标识是指能够唯一识别目标智能合约的标识符,例如可以是目标智能合约的名称,还可以是目标智能合约存储于区块链中的地址等。
具体的,代理模块依据目标智能合约标识可以从区块链中获取到目标智能合约的代码段内容本身,还可以获取到目标智能合约的调用权限。同时代理模块可以将获取的目标智能合约的代码段内容本身传输给目标合约虚拟机,以使目标合约虚拟机依据目标智能合约的代码段内容本身及事务请求分析确定读依赖数据的目标数据标识;进而代理模块可依据目标数据标识从区块链中查询获取读依赖数据。其中,目标数据标识是指可以用于唯一识别目标合约虚拟机执行事务请求所需数据(即读依赖数据)的标识符。可选的,若基于目标智能合约发起的事务请求为两个账户之间的转账交易,则目标数据标识可以为账户ID;区块链中数据存储结构为键值对数据结构,则目标数据标识可以为目标键标识。
鉴于智能合约的安全性和稳定性,为了防止智能合约的任意篡改或调用,在部署智能合约时,可设置调用权限。其中,调用权限可用于记录至少一种角色的使用权限,角色是指事务请求发起者的身份标识,可以包括创建者或拥有者、以及其他人等。可以理解的是,创建者或拥有者可以配置有调用权限;其他人可以是指配置有调用权限或没有调用权限的访问者。为不同角色配置不同的权限,可通过权限值的形式来表现。相应的,数据访问请求中还可以包括事务请求发起者的角色。
若目标合约数据中包括目标智能合约的调用权限,则从区块链中获取执行目标智能合约所需的目标合约数据之后还可以包括:根据目标智能合约的调用权限,对事务请求进行权限校验。
具体的,代理模块可通过对事务请求发起者角色的识别,以及从区块链中获取的目标智能合约的调用权限,以此来识别事务请求发起者是否具有目标智能合约的调用权限。可以理解的是,只有识别出发起者具有目标智能合约的调用权限,才可以继续响应后续操作,否则请求无效。
此外,需要说明的是,本实施例中,为接入区块链系统中的多个候选合约虚拟机配置了统一的区块链访问模块,也就是说,区块链系统中的各候选合约虚拟机使用同一个区块链访问模块,进而可降低支持多合约虚拟机的区块链开发成本。而且,后续若想接入新合约虚拟机,只需在区块链系统中开发新合约虚拟机所需的代码运行环境即编程语言即可,即降低了接入新合约虚拟机的成本。
S230,将获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式,供目标合约虚拟机根据转化结果执行事务请求。
本实施例中,将获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式,即为将获取的目标合约数据中的读依赖数据转为目标合约虚拟机支持的目标数据格式。可选的,不同候选虚拟机所能够支持的数据结构不同,同一候选虚拟机可支持一种或多种数据结构。目标数据格式为目标合约虚拟机支持的数据格式中的一种或多种,具体可以为目标合约虚拟机执行目标智能合约所需的数据的数据格式,例如可以是字符串,数组,字典和JSON(JavaScript Object Notation,JS对象简谱)格式等。区块链中数据存储结构可由区块链节点的底层存储系统决定,如可以是键值对数据结构等。
由于各候选合约虚拟机所能够支持的数据结构不同,若直接将区块链数据存储为不同候选合约虚拟机所支持的数据结构则将占据大量存储空间,不利于区块链系统的运行。因此,本实施例中,在区块链数据结构有限的情况下,为了能够满足不同候选合约虚拟机运行所需数据格式的需求,可选的,在每个候选合约虚拟机接入区块链系统中时,可为其配置运行所需的数据格式,以及还可以设置区块链存储数据格式与运行所需的数据格式之间的转换关系等。
可选的,目标合约虚拟机支持的目标数据格式可以包括数组、链表、图集合、以及搜索语句中的至少一种,且区块链存储数据转化为每种数据格式的策略不同。例如,若区块链中数据存储结构为键值对数据结构,则对于数组而言,将其转变为区块链存储数据格式的过程可以为:将数组名及下标作为键值对的键标识,键值对的值域存储该下标所对应的数据等,进而还原数组的过程与将其转变为区块链存储数据格式的过程相反。
具体的,在从区块链中获取执行目标智能合约所需的目标合约数据之后,可以将目标智能合约的代码段本身提供给目标合约虚拟机,同时可以依据区块链存储数据格式与目标合约虚拟机配置的其运行所需的数据格式之间的转换关系,将目标合约数据中的读依赖数据转化为目标合约虚拟机配置的其运行所需的数据格式即目标数据格式,供目标合约虚拟机根据转化结果执行事务请求。
本发明实施例提供的技术方案,在接收到目标合约虚拟机响应于基于目标智能合约发起的事务请求所产生并发送的数据访问请求之后,通过区块链系统中多个候选合约虚拟机共同使用的同一个区块链访问模块,根据数据访问请求中的目标智能合约标识,从区块链中获取执行目标智能合约所需的目标合约数据,并将所获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式,供目标合约虚拟机根据转化结果执行该事务请求。相比于现有的技术方案,本方案通过为接入区块链系统中的多个合约虚拟机配置统一的区块链访问模块,可以降低支持多合约虚拟机的区块链开发成本;而且代理模块能够将从区块链中获取的数据转化为对应的合约虚拟机所支持的数据格式,进而在区块链数据结构有限的情况下,也能够满足不同合约虚拟机的需求。
实施例二
图3为本发明实施例二中提供的一种智能合约执行方法的流程图,本实施例在上述实施例的基础上,进一步对将获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式进行解释说明。参见图3,该方法具体可以包括:
S310,接收目标合约虚拟机的数据访问请求,数据访问请求是响应于基于目标智能合约发起的事务请求而产生的。
S320,通过区块链访问模块,根据数据访问请求中的目标智能合约标识,从区块链中获取执行目标智能合约所需的目标合约数据,其中区块链系统中的各候选合约虚拟机使用同一个区块链访问模块。
S330,从为区块链系统中各候选合约虚拟机配置的各候选数据格式中,选择为目标合约虚拟机配置的目标数据格式。
本实施例中,候选合约虚拟机可以包括Docker合约虚拟机、WebAssembly合约虚拟机和以太坊合约虚拟机中的至少两种,而且候选合约虚拟机的候选数据格式是在将候选合约虚拟机接入区块链系统过程中配置到代理模块中的。可选的,不同候选合约虚拟机可配置不同的候选数据格式,且一个候选合约虚拟机可支持一种或多种候选数据格式。目标数据格式为目标候选合约虚拟机所支持的候选数据格式中的一种或多种。
具体的,代理模块可以从为区块链系统中各候选合约虚拟机配置的各候选数据格式中,选择目标合约虚拟机所支持的候选数据格式作为目标数据格式。
S340,将获取的目标合约数据转化为目标数据格式。
具体的,在确定目标数据格式之后,可以将从区块链中获取的目标合约数据转化为目标数据格式。
例如,若区块链中数据存储结构为键值对数据结构,且目标数据格式为链表,则将链表数据转变为区块链存储数据格式的过程可以为:可以将链表名称和结点标识作为键值对的键标识,键值对的值域存储该链表结点的数据。进而还原链表数据的过程与将其转变为区块链存储数据格式的过程相反。
例如,目标数据格式为图集合,则将图集合数据转化为区块链存储数据格式的过程可以为:为每个图集合设置一个图键值对,每个图键值对包括键域和值域,键域可存储有键标识,键标识可以是图标识,图标识可以为图集合的名称;值域可存储有数据等。进而还原图集合数据的过程与将其转变为区块链存储数据格式的过程相反。
此外,若区块链中数据存储结构为数值型数据结构,目标数据格式为字符串数据结构,则可以采用现有的数值型数据结构与字符串数据结构之间的转化关系,将获取的目标合约数据转化为目标数据格式。
若区块链中数据存储结构为十进制数据结构,目标数据格式为二进制、八进制或十六进制等数据格式,则可以采用现有的十进制数据结构与其他各进制数据结构之间的转化关系,将获取的目标合约数据转化为目标数据格式。
可选的,若区块链系统运行过程中,某一候选合约虚拟机的可支持新出现的一种或多种数据结构,则可以将新出现的一种或多种数据结构作为该候选合约虚拟机的候选数据结构配置到代理模块中。
本发明实施例提供的技术方案,提供了一种将从区块链中获取的数据转化为目标合约虚拟机所支持的数据格式的方案,实现了在区块链数据结构有限的情况下,满足了不同候选合约虚拟机运行所需数据格式的需求。
实施例三
图4为本发明实施例三中提供的一种智能合约执行方法的流程图,本实施例在上述实施例的基础上进一步的优化,提供了一种在区块链系统接入不同种合约虚拟机的情况下,如何对事务请求进行处理的方案,参见图4,该方法具体可以包括:
S410,接收目标合约虚拟机的数据访问请求,数据访问请求是响应于基于目标智能合约发起的事务请求而产生的。
S420,通过区块链访问模块,根据数据访问请求中的目标智能合约标识,从区块链中获取执行目标智能合约所需的目标合约数据,其中区块链系统中的各候选合约虚拟机使用同一个区块链访问模块。
S430,将获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式。
S440,在目标合约虚拟机执行事务请求过程中,为事务请求分配执行存储空间。
本实施例中,存储空间是一种存储介质,本实施例中存储空间优选为缓存(Cache),即临时存储空间。在该执行存储空间中的执行过程,对于区块链系统中的数据是只读的,即只能够从区块链系统中读取数据,单不能通过写入来修改区块链系统中的已有数据。
为了满足现实应用场景较大吞吐量的需求,本实施例充分利用计算机多核特征,并发执行所获取的多个事务请求。首先为各事务请求分配执行存储空间,以保障各个事务请求在执行过程中不相互影响。其中,执行存储空间即为执行某一事务请求所需的空间。
可选的,代理模块可依据所获取的事务请求的数量,将存储空间中可用部分平均划分为与其数量相当的执行存储空间。还可以依据所获取的事务请求的数量、各事务请求的字节量、以及可用存储空间的大小等多维度因素,为各事务请求分配执行存储空间。
S450,在执行存储空间中记录事务请求执行过程中的影响数据集,其中,不同事务请求的影响数据集相互隔离。
本实施例中,事务请求在执行过程中需要依赖本地数据中一些已有数据,并可能更改、删除或新增一些数据,即对应于影响数据集。进一步的,影响数据集可以包括读依赖数据和写数据。读依赖数据是指目标智能合约虚拟机在事务请求在执行过程中需要从区块链数据中读取的依赖数据;写数据为事务请求执行后所要更新(如增加、更改或删除等)的数据。
具体的,代理模块在为各事务请求分配各自执行存储空间之后,目标合约虚拟机可在各执行存储空间中并发执行对应的事务请求,代理模块可分别记录事务请求执行过程中的影响数据集,如分别将各事务请求执行过程中的影响数据集记录于对应的执行存储空间中。
需要说明的是,若目标合约虚拟机为一个,则该目标合约虚拟机可在各执行存储空间中并发执行对应的事务请求;若目标合约虚拟机为多个,由于各目标合约虚拟机之间是独立的,因此,各目标合约虚拟机可并发执行与其相关的多个事务请求。
S460,若事务请求执行成功,则将影响数据集由目标数据格式转化为区块链存储格式。
本实施例中,任一事务请求执行成功是指该事务请求执行完成且执行存储空间中记录的影响数据中的写数据,与并行执行的其他事务请求的影响数据集中的写数据之间不重叠。可选的,任一事务请求执行失败可以是该事务请求的处理过程与其他事务请求的处理过程发生冲突而失败;还可以是该事务请求的执行存储空间中所记录的影响数据集中的写数据集,与并行执行的其他事务请求的影响数据集中的写数据之间重叠等。
具体的,对于每个事务请求而言,若该事务请求执行成功,则可以将影响数据集中的写数据由目标数据格式转化为区块链存储格式,如数组数据格式转化为键值对数据结构等。
对于一个区块链节点,其可能同时获得多个事务请求,例如单位时间内的数千、数万、甚至更高数量级的事务请求,需要支持大吞吐量应用场景的节点,会有并行执行需求。现有技术中,为了避免事务请求之间的数据冲突,只能串行处理,而采用本发明实施例的技术方案,通过为各事务请求分配执行存储空间,进而可并行执行多个事务请求,满足了事务请求并发执行的需求。同时在执行存储空间中记录事务请求执行过程中的影响数据集,进而可依据影响数据集逐一核对事务请求是否执行成功,即兼顾了事务请求之间的依赖关系。
S470,通过区块链访问模块将区块链存储格式的影响数据集写入区块链中。
具体的,对于每个事务请求而言,在将其影响数据集由目标数据格式转化为区块链存储格式之后,可以通过区块链访问模块将区块链存储格式的影响数据集写入区块链中。
示例性的,通过区块链访问模块将区块链存储格式的影响数据集写入区块链中之后,还可以包括:释放事务请求的执行存储空间,以充分利用存储空间,提高并行处理的效率。
本发明实施例提供的技术方案,通过为获取的基于智能合约发起的事务请求分配各自执行存储空间,并在各执行存储空间中记录对应事务请求执行过程中的影响数据集;而后对于每个事务请求,若该事务请求执行成功,则将影响数据集由目标数据格式转化为区块链存储格式,并通过区块链访问模块将区块链存储格式的影响数据集写入区块链中。本方案,可解决现有区块链网络中事务请求串行执行方式与现实应用场景需要较大吞吐量之间矛盾的问题,满足了事务请求并发执行的需求,同时兼顾了事务请求之间的依赖关系,为基于智能合约的事务请求并行执行提供了一种新思路。
实施例四
图5为本发明实施例四中提供的一种智能合约执行装置的结构示意图,该装置可配置于区块链节点中,进一步可配置于区块链节点的代理模块中,该装置可执行本发明任意实施例所提供的智能合约执行方法,具备执行方法相应的功能模块和有益效果。如图5所示,该装置可以包括:
请求接收模块510,用于接收目标合约虚拟机的数据访问请求,数据访问请求是响应于基于目标智能合约发起的事务请求而产生的;
数据获取模块520,用于通过区块链访问模块,根据数据访问请求中的目标智能合约标识,从区块链中获取执行目标智能合约所需的目标合约数据,其中区块链系统中的各候选合约虚拟机使用同一个区块链访问模块;
数据格式转换模块530,用于将获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式,供目标合约虚拟机根据转化结果执行事务请求。
本发明实施例提供的技术方案,在接收到目标合约虚拟机响应于基于目标智能合约发起的事务请求所产生并发送的数据访问请求之后,通过区块链系统中多个候选合约虚拟机共同使用的同一个区块链访问模块,根据数据访问请求中的目标智能合约标识,从区块链中获取执行目标智能合约所需的目标合约数据,并将所获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式,供目标合约虚拟机根据转化结果执行该事务请求。相比于现有的技术方案,本方案通过为接入区块链系统中的多个合约虚拟机配置统一的区块链访问模块,可以降低支持多合约虚拟机的区块链开发成本;而且代理模块能够将从区块链中获取的数据转化为对应的合约虚拟机所支持的数据格式,进而在区块链数据结构有限的情况下,也能够满足不同合约虚拟机的需求。
示例性的,数据格式转换模块530具体可以用于:
从为区块链系统中各候选合约虚拟机配置的各候选数据格式中,选择为目标合约虚拟机配置的目标数据格式;
将获取的目标合约数据转化为目标数据格式。
示例性的,候选合约虚拟机的候选数据格式是在将候选合约虚拟机接入区块链系统过程中配置到代理模块中的。
示例性的,候选合约虚拟机可以包括Docker合约虚拟机、WebAssembly合约虚拟机和以太坊合约虚拟机中的至少两种。
若目标合约数据中包括目标智能合约的调用权限,示例性的,上述装置还可以包括:
校验模块,用于在从区块链中获取执行目标智能合约所需的目标合约数据之后,根据目标智能合约的调用权限,对事务请求进行权限校验。
示例性的,上述装置还可以包括:
存储空间分配模块,用于在将获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式之后,在目标合约虚拟机执行事务请求过程中,为事务请求分配执行存储空间;
数据记录模块,用于在执行存储空间中记录事务请求执行过程中的影响数据集,其中,不同事务请求的影响数据集相互隔离;
数据格式转换模块530,还用于若事务请求执行成功,则将影响数据集由目标数据格式转化为区块链存储格式;
数据写入模块,用于通过区块链访问模块将区块链存储格式的影响数据集写入区块链中。
实施例五
图6为本发明实施例五提供的一种设备的结构示意图,图6示出了适于用来实现本发明实施例实施方式的示例性设备的框图。图6显示的设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。设备12典型可以是具有代理模块功能的区块链节点设备。
如图6所示,设备12以通用计算设备的形式表现。设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,存储器28,连接不同系统组件(包括存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图6未显示,通常称为“硬盘驱动器”)。尽管图6中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明实施例各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明实施例所描述的实施例中的功能和/或方法。
设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该设备12交互的设备通信,和/或与使得该设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与设备12的其它模块通信。应当明白,尽管图6中未示出,可以结合设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元16通过运行存储在存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的智能合约执行方法。
实施例六
本发明实施例六还提供一种计算机可读存储介质,其上存储有计算机程序(或称为计算机可执行指令),该程序被处理器执行时用于执行一种智能合约执行方法,该方法包括:
接收目标合约虚拟机的数据访问请求,数据访问请求是响应于基于目标智能合约发起的事务请求而产生的;
通过区块链访问模块,根据数据访问请求中的目标智能合约标识,从区块链中获取执行目标智能合约所需的目标合约数据,其中区块链系统中的各候选合约虚拟机使用同一个区块链访问模块;
将获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式,供目标合约虚拟机根据转化结果执行事务请求。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明实施例操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LA至少一)或广域网(WA至少一)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明实施例进行了较为详细的说明,但是本发明实施例不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种智能合约执行方法,其特征在于,由代理模块执行,所述方法包括:
接收目标合约虚拟机的数据访问请求,所述数据访问请求是响应于基于目标智能合约发起的事务请求而产生的;
通过区块链访问模块,根据所述数据访问请求中的目标智能合约标识,从区块链中获取执行目标智能合约所需的目标合约数据,其中区块链系统中的各候选合约虚拟机使用同一个区块链访问模块,各候选合约虚拟机之间相互独立;
将获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式,供目标合约虚拟机根据转化结果执行所述事务请求。
2.根据权利要求1所述的方法,其特征在于,将获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式,包括:
从为区块链系统中各候选合约虚拟机配置的各候选数据格式中,选择为目标合约虚拟机配置的目标数据格式;
将获取的目标合约数据转化为所述目标数据格式。
3.根据权利要求2所述的方法,其特征在于,候选合约虚拟机的候选数据格式是在将候选合约虚拟机接入区块链系统过程中配置到代理模块中的。
4.根据权利要求2所述的方法,其特征在于,候选合约虚拟机包括Docker合约虚拟机、WebAssembly合约虚拟机和以太坊合约虚拟机中的至少两种。
5.根据权利要求1所述的方法,其特征在于,若目标合约数据中包括目标智能合约的调用权限,则从区块链中获取执行目标智能合约所需的目标合约数据之后,还包括:
根据所述目标智能合约的调用权限,对所述事务请求进行权限校验。
6.根据权利要求1所述的方法,其特征在于,将获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式之后,还包括:
在目标合约虚拟机执行所述事务请求过程中,为所述事务请求分配执行存储空间;
在所述执行存储空间中记录事务请求执行过程中的影响数据集,其中,不同事务请求的影响数据集相互隔离;
若所述事务请求执行成功,则将所述影响数据集由所述目标数据格式转化为区块链存储格式;
通过所述区块链访问模块将区块链存储格式的影响数据集写入区块链中。
7.一种智能合约执行装置,其特征在于,配置于代理模块中,所述装置包括:
请求接收模块,用于接收目标合约虚拟机的数据访问请求,所述数据访问请求是响应于基于目标智能合约发起的事务请求而产生的;
数据获取模块,用于通过区块链访问模块,根据所述数据访问请求中的目标智能合约标识,从区块链中获取执行目标智能合约所需的目标合约数据,其中区块链系统中的各候选合约虚拟机使用同一个区块链访问模块,各候选合约虚拟机之间相互独立;
数据格式转换模块,用于将获取的目标合约数据转化为目标合约虚拟机支持的目标数据格式,供目标合约虚拟机根据转化结果执行所述事务请求。
8.根据权利要求7所述的装置,其特征在于,所述数据格式转换模块具体用于:
从为区块链系统中各候选合约虚拟机配置的各候选数据格式中,选择为目标合约虚拟机配置的目标数据格式;
将获取的目标合约数据转化为所述目标数据格式。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6中任一项所述的智能合约执行方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-6中任一项所述的智能合约执行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910372720.3A CN110297689B (zh) | 2019-05-06 | 2019-05-06 | 智能合约执行方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910372720.3A CN110297689B (zh) | 2019-05-06 | 2019-05-06 | 智能合约执行方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110297689A CN110297689A (zh) | 2019-10-01 |
CN110297689B true CN110297689B (zh) | 2021-09-14 |
Family
ID=68026638
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910372720.3A Active CN110297689B (zh) | 2019-05-06 | 2019-05-06 | 智能合约执行方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110297689B (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825363B (zh) * | 2019-11-01 | 2024-05-17 | 北京知道创宇信息技术股份有限公司 | 智能合约获取方法、装置、电子设备及存储介质 |
CN111179086B (zh) * | 2019-12-31 | 2024-01-02 | 杭州趣链科技有限公司 | 一种基于WebAssembly的智能合约虚拟机 |
CN111352706B (zh) * | 2020-02-28 | 2023-09-15 | 百度在线网络技术(北京)有限公司 | 一种数据访问方法、装置、设备及存储介质 |
CN111324396B (zh) * | 2020-03-19 | 2023-09-15 | 深圳市迅雷网络技术有限公司 | 一种区块链智能合约执行方法、装置及设备 |
CN112163035B (zh) * | 2020-05-15 | 2024-05-31 | 支付宝(杭州)信息技术有限公司 | 调用智能合约的方法及装置 |
CN111831745B (zh) * | 2020-06-05 | 2023-04-18 | 广东科学技术职业学院 | 定时智能合约的调度方法及装置 |
CN111736954B (zh) * | 2020-06-24 | 2024-01-05 | 陈鹏 | 多智能合约虚拟机实现方法、多智能合约虚拟机及系统 |
CN111881472B (zh) * | 2020-07-22 | 2024-04-26 | 云账户技术(天津)有限公司 | 一种数据访问控制方法、系统及权限管理系统、介质 |
CN112187772B (zh) * | 2020-09-23 | 2021-09-21 | 上海万向区块链股份公司 | 基于智能合约设计的权限控制方法、系统及介质 |
CN112632573B (zh) * | 2020-12-15 | 2024-06-21 | 东软集团股份有限公司 | 智能合约执行方法、装置、系统、存储介质及电子设备 |
CN112286643B (zh) * | 2020-12-24 | 2021-04-20 | 北京百度网讯科技有限公司 | 以太坊虚拟机的事务处理方法、装置、设备和介质 |
CN112306645B (zh) | 2020-12-24 | 2021-05-04 | 北京百度网讯科技有限公司 | 以太坊虚拟机的事务处理方法、装置、设备和介质 |
CN112286641B (zh) * | 2020-12-24 | 2021-04-20 | 北京百度网讯科技有限公司 | 以太坊虚拟机的事务处理方法、装置、设备和介质 |
CN112685136B (zh) * | 2021-01-07 | 2024-08-16 | 腾讯科技(深圳)有限公司 | 一种智能合约运行方法、装置、设备及存储介质 |
CN112529711B (zh) * | 2021-02-07 | 2021-05-14 | 腾讯科技(深圳)有限公司 | 基于区块链虚拟机复用的交易处理方法及装置 |
CN113129146B (zh) * | 2021-03-31 | 2023-11-24 | 南京质子链科技有限公司 | 智能合约事务处理方法、设备及存储介质 |
CN113472512A (zh) * | 2021-06-10 | 2021-10-01 | 东软集团股份有限公司 | 智能合约执行方法、装置、存储介质及电子设备 |
CN114358934A (zh) * | 2021-12-29 | 2022-04-15 | 中国农业银行股份有限公司 | 智能合约的校验方法和相关设备 |
CN114879948B (zh) * | 2022-07-08 | 2022-10-28 | 北京百度网讯科技有限公司 | 基于WebAssembly的智能合约处理方法、装置、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107395353A (zh) * | 2017-04-24 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 一种区块链共识方法及装置 |
CN107657059A (zh) * | 2017-10-20 | 2018-02-02 | 中国银行股份有限公司 | 基于区块链应用系统的数据同步方法、中间件及系统 |
CN109523383A (zh) * | 2018-10-30 | 2019-03-26 | 广州斯拜若科技有限公司 | 一种智能合约转换系统及方法 |
CN109636592A (zh) * | 2017-10-20 | 2019-04-16 | 北京航空航天大学 | 高性能智能合约设计 |
CN109684335A (zh) * | 2018-12-26 | 2019-04-26 | 百度在线网络技术(北京)有限公司 | 基于键值对的数据结构实现方法、装置、设备和存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180276508A1 (en) * | 2015-10-28 | 2018-09-27 | Fractal Industries, Inc. | Automated visual information context and meaning comprehension system |
-
2019
- 2019-05-06 CN CN201910372720.3A patent/CN110297689B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107395353A (zh) * | 2017-04-24 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 一种区块链共识方法及装置 |
CN107657059A (zh) * | 2017-10-20 | 2018-02-02 | 中国银行股份有限公司 | 基于区块链应用系统的数据同步方法、中间件及系统 |
CN109636592A (zh) * | 2017-10-20 | 2019-04-16 | 北京航空航天大学 | 高性能智能合约设计 |
CN109523383A (zh) * | 2018-10-30 | 2019-03-26 | 广州斯拜若科技有限公司 | 一种智能合约转换系统及方法 |
CN109684335A (zh) * | 2018-12-26 | 2019-04-26 | 百度在线网络技术(北京)有限公司 | 基于键值对的数据结构实现方法、装置、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110297689A (zh) | 2019-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110297689B (zh) | 智能合约执行方法、装置、设备及介质 | |
CN108595157B (zh) | 区块链数据的处理方法、装置、设备和存储介质 | |
US8667459B2 (en) | Application specific runtime environments | |
US11556348B2 (en) | Bootstrapping profile-guided compilation and verification | |
CN104220987A (zh) | 应用安装 | |
CN109951553B (zh) | 数据处理方法、系统、电子设备以及计算机可读存储介质 | |
CN109995523B (zh) | 激活码管理方法及装置、激活码生成方法及装置 | |
JP2022545422A (ja) | スマートコントラクトの並行実行の方法、装置、機器、及び媒体 | |
CN111694638A (zh) | 规则包加载方法、规则包执行方法及终端设备 | |
CN110688096B (zh) | 包含插件的应用程序的构建方法、装置、介质及电子设备 | |
US10585678B2 (en) | Insertion of custom activities in an orchestrated application suite | |
CN114356521A (zh) | 任务调度方法、装置、电子设备及存储介质 | |
US11689630B2 (en) | Request processing method and apparatus, electronic device, and computer storage medium | |
CN110888972A (zh) | 一种基于Spark Streaming的敏感内容识别方法及装置 | |
CN112639745A (zh) | 动态应用的可缩放预分析 | |
US9064042B2 (en) | Instrumenting computer program code by merging template and target code methods | |
CN110096543B (zh) | 应用程序的数据操作方法、装置、服务器和介质 | |
US10394610B2 (en) | Managing split packages in a module system | |
CN115934537A (zh) | 接口测试工具生成方法、装置、设备、介质及产品 | |
US9519592B2 (en) | Stale pointer detection with overlapping versioned memory | |
CN115828262A (zh) | 开源组件漏洞扫描方法、装置、设备及存储介质 | |
CN114219643A (zh) | 一种交易调用方法、装置、设备及存储介质 | |
US10620946B1 (en) | Dynamic modeling for opaque code during static analysis | |
CN112182083A (zh) | 文件生成方法、装置、设备及存储介质 | |
US20230195901A1 (en) | Model-based upgrade recommendations using software dependencies |
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 |