本申请涉及计算机
技术领域:
,尤其涉及一种基于区块链的数据处理方法、装置、电子设备及存储介质。
背景技术:
:智能合约是编程在区块链上的汇编语言代码程序,智能合约是跨领域法律学者尼克萨博提出来的,他对智能合约的定义是“一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议”,换句话说,智能合约就是一个在计算机系统上,当一定条件被满足后,可以被自动执行的合约。区块链上的智能合约需要在虚拟机中执行,而不是直接在计算机硬件上执行,更精确地讲,是在虚拟机中的智能合约执行引擎内执行。智能合约执行引擎将智能合约的整个执行环境隔离开来,在其内部执行的智能合约不能接触网络、文件系统或者系统中的其他线程等系统资源,智能合约之间也只能进行有限调用。由于通常的区块链虚拟机都只有一个智能合约执行引擎,也即识别一种或一类编程语言,比如,以太坊只识别由solidity语言编写的智能合约,掌握其他编语言的程序员都必须学习solidity语言才能编写智能合约。可以看出,智能合约所采用的编程语言大大影响了智能合约的通用性。目前,区块链虚拟机可以执行的智能合约通常采用solidity等通用性较差的编程语言编写,无法执行通用性较强的编程语言(例如go语言)编写的智能合约。可见,如何使得区块链虚拟机执行更加通用的编程语言(例如go语言)编写的智能合约,提高智能合约的通用性,成为一个亟待解决的问题。技术实现要素:本发明实施例提供了一种基于区块链的数据处理方法、装置及存储介质,可以通过区块链节点设备的虚拟机运行智能合约中目标方法的go语言代码。一方面,本发明实施例提供了一种基于区块链的数据处理方法,所述方法应用于区块链网络的节点设备,所述方法包括:当接收到针对智能合约中目标方法的调用请求时,调用虚拟机获取用于描述所述目标方法的go语言代码的目标抽象语法树以及目标控制流程图;基于所述目标控制流程图识别所述目标抽象语法树中的各个操作码,并确定所述各个操作码对应的操作逻辑以及操作数;对所述各个操作码对应的操作数执行各自对应的操作逻辑,以运行所述目标方法的go语言代码。另一方面,本发明实施例提供了一种基于区块链的数据处理装置,所述装置配置于区块链网络的节点设备,所述装置包括:通信模块,用于接收针对智能合约中目标方法的调用请求;处理模块,用于当所述通信模块接收到针对智能合约中目标方法的调用请求时,调用虚拟机获取用于描述所述目标方法的go语言代码的目标抽象语法树以及目标控制流程图;所述处理模块,还用于基于所述目标控制流程图识别所述目标抽象语法树中的各个操作码,并确定所述各个操作码对应的操作逻辑以及操作数;所述处理模块,还用于对所述各个操作码对应的操作数执行各自对应的操作逻辑,以运行所述目标方法的go语言代码。再一方面,本发明实施例提供了一种电子设备,该电子设备可以为区块链网络的节点设备,包括处理器、存储器和通信接口,所述处理器、存储器和通信接口相互连接,其中,所述存储器用于存储支持终端执行上述方法的计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如下步骤:当接收到针对智能合约中目标方法的调用请求时,调用虚拟机获取用于描述所述目标方法的go语言代码的目标抽象语法树以及目标控制流程图;基于所述目标控制流程图识别所述目标抽象语法树中的各个操作码,并确定所述各个操作码对应的操作逻辑以及操作数;对所述各个操作码对应的操作数执行各自对应的操作逻辑,以运行所述目标方法的go语言代码。本发明实施例中,可以在接收到针对智能合约中目标方法的调用请求时,可以调用虚拟机获取用于描述目标方法的go语言代码的目标抽象语法树以及目标控制流程图。进一步地,可以基于目标控制流程图识别目标抽象语法树中的各个操作码,并确定各个操作码对应的操作逻辑以及操作数,进而对各个操作码对应的操作数执行各自对应的操作逻辑,以运行目标方法的go语言代码。其中,go语言为一种静态强类型、编译型语言,go语言语法与c语言相近,通用性较强。实施本发明实施例,可以通过区块链节点设备的虚拟机运行智能合约中目标方法的go语言代码,实现目标方法的调用,提高智能合约的通用性。附图说明为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例提供的一种区块链的结构示意图;图2是本发明实施例提供的一种数据处理系统的架构示意图;图3是本发明实施例提供的一种基于区块链的数据处理方法的示意流程图;图4是本发明实施例提供的一种目标抽象语法树的结构示意图;图5是本发明另一实施例提供的一种基于区块链的数据处理方法的示意流程图;图6是本发明实施例提出的一种基于区块链的数据处理装置的示意性框图;图7是本发明实施例提出的一种电子设备的示意性框图。具体实施方式本发明实施例提出了一种基于区块链的数据处理方法,该方法可以应用于区块链网络的节点设备,该节点设备可以为接入区块链网络中的任一节点设备,该节点设备可以为任意形式的电子设备,如服务器、用户终端等,区块链网络中的每一个节点设备上均运行有虚拟机,该虚拟机用于运行go语言代码编写的智能合约。在一个实施例中,当节点设备接收到针对智能合约中目标方法的调用请求时,可以调用虚拟机获取用于描述目标方法的go语言代码的目标抽象语法树以及目标控制流程图。进一步地,可以基于目标控制流程图识别目标抽象语法树中的各个操作码,并确定各个操作码对应的操作逻辑以及操作数,进而对各个操作码对应的操作数执行各自对应的操作逻辑,以运行目标方法的go语言代码。其中,go语言为一种静态强类型、编译型语言,go语言语法与c语言相近,通用性较强。实施本发明实施例,可以通过区块链节点设备的虚拟机运行智能合约中目标方法的go语言代码,实现目标方法的调用,提高智能合约的通用性。区块链(blockchain)是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证数据不可篡改和不可伪造的分布式账本。多个独立的分布式节点(即区块链网络的节点设备)保存相同的记录。区块链技术实现了去中心化,成为了可信的数字资产存储、转移和交易的基石。以图1所示的区块链的结构示意图为例,每当有新的数据需要写入区块链,这些数据会汇总到一个区块(block)中,添加在已有区块链的末端,通过共识算法保证每个节点设备新添加的区块是完全相同的。每个区块内记录了若干条交易记录,同时包含了前一个区块的哈希(hash)值,所有区块就是通过这种方式保存前一个区块中的hash值,按顺序相连,组成了区块链。区块链中下一个区块的区块头中会存储前一个区块的哈希值,当前一个区块中的交易数据发生变化时,本区块的哈希值也会随之改变,因此通过上传至区块链网络中的交易数据难以被篡改,在区块链上进行交易实现了交易过程的公开透明,提高了交易数据的可靠性。为了更好的理解本申请实施例公开的一种基于区块链的数据处理方法,下面首先对本申请实施例适用的区块链系统进行描述。请参见图2,图2是本申请实施例公开的一种基于区块链的数据处理系统的架构示意图。如图2所示,该基于区块链的数据处理系统包括至少一个客户端200和区块链网络201,该区块链网络包括至少一个节点设备2010。在一个实施例中,当用户想要部署智能合约至区块链时,可以以交易的方式通过客户端200将智能合约的go语言代码发送至区块链网络中任一个节点设备2010,该节点设备2010可以与区块链网络中的其它节点设备对智能合约的go语言代码进行共识验证,在共识验证通过后,可以生成智能合约的go语言代码对应的新区块,并将新区块添加到区块链网络维护的区块链中,后续区块链网络中的其它节点设备均可以获取上述新区块,运行新区块中智能合约的go语言代码。进一步地,该节点设备2010可以从上述新区块中获取上述智能合约的go语言代码,部署智能合约的go语言代码,将智能合约的go语言代码存入数据库,一个智能合约可以包括至少一种方法,例如注册用户名、转账等等。当用户想要调用智能合约中的目标方法时,可以通过客户端200向节点设备2010发送针对智能合约中目标方法的调用请求,节点设备2010可以检测缓存空间中是否包括用于描述目标方法的go语言代码的目标抽象语法树以及目标控制流程图,若否,则可以调用虚拟机从数据库中读取上述智能合约的go语言代码,并从中提取目标方法的go语言代码。进一步地,节点设备2010可以解析目标方法的go语言代码,基于解析结果生成用于描述目标方法的go语言代码的目标抽象语法树,并根据目标抽象语法树生成用于描述目标方法的go语言代码的目标控制流程图。其中,目标抽象语法树为以树状的形式表现目标方法的go语言代码的语法结构,树上的每个节点都表示目标方法的go语言代码中的一种结构。目标控制流程图可以包括多个基本块,每一个基本块对应目标抽象语法树上的每个节点,该目标控制流程图可表征各基本块之间的相互关系(例如执行的先后顺序)、各基本块对应的节点的类型。进一步地,节点设备2010可以基于目标控制流程图识别目标抽象语法树中的各个操作码,并确定各个操作码对应的操作逻辑以及操作数,进而对各个操作码对应的操作数执行各自对应的操作逻辑,以运行目标方法的go语言代码。在一个实施例中,节点设备2010生成用于描述目标方法的go语言代码的目标抽象语法树和目标控制流程图后,可以将用于描述目标方法的go语言代码的目标抽象语法树和目标控制流程图缓存至缓存空间,当后续检测到用户再次调用该目标方法时,可以直接从缓存空间中获取该目标抽象语法树和目标控制流程图。后续地,当节点设备200接收到用户针对智能合约中其它方法的调用请求时,若检测到缓存空间中不包括用于描述该其它方法的go语言代码的目标抽象语法树以及目标控制流程图,那么可以采用与上述相似的方法,生成用于描述该其它方法的go语言代码的目标抽象语法树和目标控制流程图。进一步地,节点设备2010可以将其它方法的go语言代码的目标抽象语法树添加至缓存空间中上述目标方法的go语言代码的目标抽象语法树,可以将其它方法的go语言代码的目标控制流程图添加至缓存空间中上述目标方法的go语言代码的目标控制流程图。以此类推,采用与上述相似的流程,可以生成智能合约中所有方法的go语言代码对应的目标抽象语法树和目标控制流程图,并在缓存空间中将智能合约中所有方法的go语言代码对应的目标抽象语法树可以组成一棵大的抽象语法树,将智能合约中所有方法的go语言代码对应的目标控制流程图可以组成一个大的控制流程图。当后续检测到用户再次调用智能合约中的任一方法时,可以直接从缓存空间中获取该任一方法对应的目标抽象语法树和目标控制流程图,进而基于该任一方法对应的目标抽象语法树和目标控制流程图实现对该任一方法的go语言代码的运行。再请参见图3,是本发明实施例的一种基于区块链的数据处理方法的流程示意图,本发明实施例的所述方法可以由区块链网络的节点设备来执行。本发明实施例的所述方法包括如下步骤。s301:当接收到针对智能合约中目标方法的调用请求时,调用虚拟机获取用于描述目标方法的go语言代码的目标抽象语法树以及目标控制流程图。在一个实施例中,缓存空间包括用于描述智能合约中各个方法的go语言代码的抽象语法树以及控制流程图,当区块链网络的节点设备接收到针对智能合约中目标方法的调用请求时,可以检测缓存空间中是否包括用于描述目标方法的go语言代码的目标抽象语法树以及目标控制流程图,若是,则可以调用虚拟机从数据库中从缓存空间中读取用于描述目标方法的go语言代码的目标抽象语法树以及目标控制流程图。其中,该缓存空间可以为区块链网络的节点设备的本地存储空间,例如数据库。或者,当缓存空间中不包括上述用于描述目标方法的go语言代码的目标抽象语法树以及目标控制流程图,节点设备可以调用虚拟机从存储的智能合约中各个方法的go语言代码中获取目标方法的go语言代码,并解析目标方法的go语言代码,进而基于解析结果生成用于描述目标方法的go语言代码的目标抽象语法树,以及根据目标抽象语法树生成用于描述目标方法的go语言代码的目标控制流程图。s302:基于目标控制流程图识别目标抽象语法树中的各个操作码,并确定各个操作码对应的操作逻辑以及操作数。s303:对各个操作码对应的操作数执行各自对应的操作逻辑,以运行目标方法的go语言代码。其中,目标抽象语法树为以树状的形式表现目标方法的go语言代码的语法结构,树上的每个节点都表示目标方法的go语言代码中的一种结构。目标控制流程图可以包括多个基本块,每一个基本块对应目标抽象语法树上的每个节点,该目标控制流程图可表征各基本块之间的相互关系(例如执行的先后顺序)、各基本块的类型。在一个实施例中,节点设备可以基于目标控制流程图表征的各基本块的类型确定每个基本块对应的目标抽象语法树上的每个节点的类型,进而从目标抽象语法树识别出各个操作码。其中,目标抽象语法树中的每一个操作码均对应设置有一个解释器,每个解释器用于指示每个操作码对应的操作数和操作逻辑。这种情况下,节点设备可以解析每个操作码对应的解释器,以确定每个操作码对应的操作数和操作逻辑,进而对各个操作码对应的操作数执行各自对应的操作逻辑,以运行目标方法的go语言代码。示例性地,假设目标方法的go语言代码为“slice[i]=i*(2 6)”,“slice[i]=i*(2 6)”对应的目标抽象语法树如图4所示,目标抽象语法树上的每一个节点对应“slice[i]=i*(2 6)”中的一个字符,其中,字符“ ”为操作码,该操作码对应的操作数为字符“2”和字符“6”。该操作码“ ”对应的操作逻辑为将操作数“2”和“6”相加。节点设备可以依照目标控制流程图表征的各个操作码对应基本块执行的先后顺序,依次对各个操作码对应的操作数执行各自对应的操作逻辑,从而实现目标方法的go语言代码的运行。在一个实施例中,在对各个操作码对应的操作数执行各自对应的操作逻辑时,可以检测各个操作码对应的操作数中是否包括变量参数,若检测到第一操作码对应的第一操作数为变量参数,则从第一调用请求中获取该变量参数对应的传入参数,其中,第一操作码为各个操作码中的任一个,第一操作数为第一操作码对应的操作数。进一步地,节点设备可以基于上述传入参数对第一操作数进行更新,并对更新后的第一操作数执行第一操作码对应的操作逻辑。示例性地,假设目标方法为转账方法,上述传入参数为用户输入的转账金额,目标抽象语法树中第一操作数指代转账金额,为一个变量参数。这种情况下,节点设备可以基于上述用户输入的转账金额对第一操作数进行更新,并对更新后的第一操作数执行第一操作码对应的操作逻辑。在一个实施例中,当节点设备接收到针对智能合约中目标方法的调用请求时,可以获取调用请求对应的接口类型,若检测到接口类型不为查询接口,则可以将调用请求广播至区块链网络中的其它节点设备,以使其它节点设备基于该调用请求,根据目标抽象语法树以及目标控制流程图运行目标方法的go语言代码。或者,若检测到接口类型为查询接口,则可以无需将调用请求广播至区块链网络中的其它节点设备,由该节点设备自身执行上述步骤s301~步骤s303步骤。由于除查询之外的其它方法的调用(例如注册用户名、转账等等)均涉及对数据修改,采用这样的方式,可以在用户调用的目标方法不为查询方法时,触发区块链网络中的其他节点设备参与运行目标方法的go语言代码,从而使得区块链网络中的各个节点设备的数据保持同步。本发明实施例中,区块链网络的节点设备可以在接收到针对智能合约中目标方法的调用请求时,调用自身的虚拟机获取用于描述目标方法的go语言代码的目标抽象语法树以及目标控制流程图。进一步地,可以基于目标控制流程图识别目标抽象语法树中的各个操作码,并确定各个操作码对应的操作逻辑以及操作数,进而对各个操作码对应的操作数执行各自对应的操作逻辑,以运行目标方法的go语言代码。实施本发明实施例,可以通过区块链节点设备的虚拟机运行智能合约中目标方法的go语言代码,实现目标方法的调用,提高智能合约的通用性。请参见图5,是本发明另一实施例提供的一种基于区块链的数据处理方法的示意流程图,本发明实施例的所述方法可以由区块链网络的节点设备来执行,如图5所示,该方法包括:s501:当接收到针对智能合约中目标方法的调用请求时,调用虚拟机从缓存空间中读取用于描述目标方法的go语言代码的目标抽象语法树以及目标控制流程图,该缓存空间包括用于描述智能合约中各个方法的go语言代码的抽象语法树以及控制流程图。在一个实施例中,缓存空间包括用于描述智能合约中各个方法的go语言代码的抽象语法树以及控制流程图,每一个方法的go语言代码的目标抽象语法树中均对应一个该方法的入口节点和截止节点,入口节点为每一个方法的开始节点,截止节点为每一个方法的结束节点。这种情况下,区块链网络的节点设备可以调用虚拟机从缓存空间包括的抽象语法树中定位目标方法的入口节点和截止节点,进而基于入口节点和截止节点读取抽象语法树中用于描述目标方法的go语言代码的目标抽象语法树,以及读取控制流程图中用于描述目标方法的go语言代码的目标控制流程图。s502:基于目标控制流程图识别目标抽象语法树中的各个操作码,并确定各个操作码对应的操作逻辑以及操作数。s503:对各个操作码对应的操作数执行各自对应的操作逻辑,以运行目标方法的go语言代码。其中,步骤s502~步骤s503的具体实施方式可以参见上述实施例中步骤s301~步骤s302的相关描述,此处不再赘述。在一个实施例中,若区块链网络的节点设备从缓存空间中未读取到上述目标抽象语法树以及目标控制流程图,则可以调用虚拟机从存储的智能合约包括的各个方法的go语言代码中获取目标方法的go语言代码,并解析目标方法的go语言代码,基于解析结果生成用于描述目标方法的go语言代码的目标抽象语法树,进而根据目标抽象语法树生成用于描述目标方法的go语言代码的目标控制流程图。其中,解析目标方法的go语言代码,并基于解析结果生成用于描述目标方法的go语言代码的目标抽象语法树的具体实施方式可以包括:对目标方法的go语言代码进行词法分析,将目标方法的go语言代码对应的字符序列转换为标记序列。进一步地,对标记序列中的各个标记符进行语法分析,确定各个标记符的语法结构,基于各个标记符的语法结构,生成目标方法的go语言代码对应的初始抽象语法树。进一步地,可以对初始抽象语法树进行语义分析,并基于语义分析结果调整初始抽象语法树,得到用于描述目标方法的go语言代码的目标抽象语法树。其中,上述目标方法的go语言代码中的字符可以包括关键字、分隔符、标识符、字面量(包含数字、字符串)、特殊符号(如加号、等号)等。假设目标方法的go语言代码为“slice[i]=i*(2 6)”,总共包括16个非空字符,对“slice[i]=i*(2 6)”进行词法分析,可以将“slice[i]=i*(2 6)”对应的字符序列转换为标记序列转换为如表1所示的标记序列。表1记号类型slice标识符[左方括号i标识符]右方括号=赋值i标识符*乘号(左圆括号2数字 加号6数字)右圆括号其中,上述对初始抽象语法树进行语义分析包括对变量进行类型检查及符号管理(名字、类型、作用域)。在一个实施例中,在得到初始抽象语法树之后,可以遍历初始抽象语法树中的各个节点,对每个节点的类型进行检测,查询其中存在的语法错误(例如除数为0的情况),若查询到初始抽象语法树存在语法错误则可以输出错误提示信息,用于提示开发人员对错误位置进行修改。进一步地,可以基于用户针对错误位置输入的修正信息对初始抽象语法树进行优化,得到用于描述目标方法的go语言代码的目标抽象语法树。或者,节点设备在遍历初始抽象语法树中的各个节点的过程中,还可以删除初始抽象语法树中一些不会被执行的代码对应的节点,得到用于描述目标方法的go语言代码的目标抽象语法树,从而提高目标方法的go语言代码的执行效率。在一个实施例中,节点设备根据目标抽象语法树生成用于描述目标方法的go语言代码的目标控制流程图之后,还可以利用目标抽象语法树和目标控制流程图更新缓存空间中存储的抽象语法树以及控制流程图,并获取抽象语法树以及控制流程图对应的缓存生命周期,当检测到缓存生命周期到达时,清空缓存空间中的上述抽象语法树以及控制流程图。可以定期清理缓存空间中的抽象语法树以及控制流程图,减少抽象语法树以及控制流程图对内存的占用。在一个实施中,可以针对缓存空间中的抽象语法树以及控制流程图设置缓存生命周期,并在设置缓存生命周期后,获取智能合约包括的各个方法的调用频率,并基于调用频率更新缓存生命周期。在一个实施例中,可以基于调用频率越高缓存生命周期越长的原则,更新生命周期。示例性地,可以设置多个调用频率范围,每一个调用频率范围对应一个缓存生命周期的增加值。节点设备可以从智能合约包括的各个方法的调用频率中获取最高调用频率,并确定最高调用频率所处的目标调用频率范围,以及目标调用频率范围对应的增加值,基于该增加值更新上述缓存生命周期。本发明实施例中,区块链网络的节点设备可以在接收到针对智能合约中目标方法的调用请求时,调用自身的虚拟机从缓存空间中读取用于描述目标方法的go语言代码的目标抽象语法树以及目标控制流程图。进一步地,可以基于目标控制流程图识别目标抽象语法树中的各个操作码,并确定各个操作码对应的操作逻辑以及操作数,进而对各个操作码对应的操作数执行各自对应的操作逻辑,以运行目标方法的go语言代码。实施本发明实施例,可以在再次调用目标方法时,从缓存空间直接读取用于描述目标方法的go语言代码的目标抽象语法树以及目标控制流程图,进而基于该目标抽象语法树以及目标控制流程图实现对目标方法的go语言代码的运行,而无需再次对目标方法的go语言代码进行重复解析,有利于提高目标方法的go语言代码的执行效率。本发明实施例还提供了一种计算机存储介质,该计算机存储介质中存储有程序指令,该程序指令被执行时,用于实现上述实施例中描述的相应方法。基于上述的基于区块链的数据处理方法实施例的描述,本发明实施例还提出了一种基于区块链的数据处理装置,所述基于区块链的数据处理装置可以是运行于上述节点中的一个计算机程序(包括程序代码)。所述基于区块链的数据处理装置可用于执行如图3和图5所示的基于区块链的数据处理方法,请参见图6,所述基于区块链的数据处理装置可包括:通信模块60,处理模块61。通信模块60,用于接收针对智能合约中目标方法的调用请求;处理模块61,用于当所述通信模块60接收到针对智能合约中目标方法的调用请求时,调用虚拟机获取用于描述所述目标方法的go语言代码的目标抽象语法树以及目标控制流程图;所述处理模块61,还用于基于所述目标控制流程图识别所述目标抽象语法树中的各个操作码,并确定所述各个操作码对应的操作逻辑以及操作数;所述处理模块61,还用于对所述各个操作码对应的操作数执行各自对应的操作逻辑,以运行所述目标方法的go语言代码。在一个实施例中,所述处理模块61,具体用于调用虚拟机从缓存空间中读取用于描述所述目标方法的go语言代码的目标抽象语法树以及目标控制流程图,所述缓存空间包括用于描述所述智能合约中各个方法的go语言代码的抽象语法树以及控制流程图。在一个实施例中,所述处理模块61,还用于若从所述缓存空间中未读取到所述目标抽象语法树以及所述目标控制流程图,则调用虚拟机从存储的所述智能合约中各个方法的go语言代码中获取所述目标方法的go语言代码;解析所述目标方法的go语言代码,并基于解析结果生成用于描述所述目标方法的go语言代码的目标抽象语法树;根据所述目标抽象语法树生成用于描述所述目标方法的go语言代码的目标控制流程图。在一个实施例中,所述处理模块61,还用于利用所述目标抽象语法树和所述目标控制流程图更新所述缓存空间中存储的所述抽象语法树以及所述控制流程图;获取所述抽象语法树以及所述控制流程图对应的缓存生命周期;当检测到所述缓存生命周期到达时,清空所述缓存空间中的所述抽象语法树以及所述控制流程图。在一个实施例中,所述处理模块61,还用于获取所述智能合约包括的各个方法的调用频率,并基于所述调用频率更新所述缓存生命周期。在一个实施例中,所述缓存空间包括用于描述所述智能合约中各个方法的go语言代码的抽象语法树以及控制流程图,所述处理模块61,还具体用于调用虚拟机从缓存空间包括的所述抽象语法树中定位所述目标方法的入口节点和截止节点;基于所述入口节点和截止节点读取所述抽象语法树中用于描述所述目标方法的go语言代码的目标抽象语法树,以及读取所述控制流程图中用于描述所述目标方法的go语言代码的目标控制流程图。在一个实施例中,所述处理模块61,还用于获取所述调用请求对应的接口类型;若检测到所述接口类型不为查询接口,则将所述调用请求广播至区块链网络中的其它节点设备,以使所述其它节点设备基于所述调用请求,根据所述目标抽象语法树以及所述目标控制流程图运行所述目标方法的go语言代码。在一个实施例中,所述处理模块61,还具体用于对所述目标方法的go语言代码进行词法分析,将所述目标方法的go语言代码对应的字符序列转换为标记序列对所述标记序列中的各个标记符进行语法分析,确定所述各个标记符的语法结构;基于所述各个标记符的语法结构,生成所述目标方法的go语言代码对应的初始抽象语法树;对所述初始抽象语法树进行语义分析,并基于语义分析结果调整所述初始抽象语法树,得到用于描述所述目标方法的go语言代码的目标抽象语法树。再请参见图7,是本发明实施例的一种电子设备的结构示意图,该电子设备可以区块链网络中的任一节点设备,例如为如图2所示的节点设备2010,本发明实施例的所述电子设备包括供电模块等结构,并包括处理器701、存储器702以及通信接口703。所述处理器701、存储器702以及通信接口703之间可以交互数据,由处理器701实现相应的数据处理功能。所述存储器702可以包括易失性存储器(volatilememory),例如随机存取存储器(random-accessmemory,ram);存储器702也可以包括非易失性存储器(non-volatilememory),例如快闪存储器(flashmemory),固态硬盘(solid-statedrive,ssd)等;所述存储器702还可以包括上述种类的存储器的组合。所述处理器701可以是中央处理器701(centralprocessingunit,cpu)。在一个实施例中,所述处理器701还可以是图形处理器701(graphicsprocessingunit,gpu)。所述处理器701也可以是由cpu和gpu的组合。在所述电子设备中,可以根据需要包括多个cpu和gpu进行相应的根证书管理。在一个实施例中,所述存储器702用于存储程序指令。所述处理器701可以调用所述程序指令,实现如本发明实施例中上述涉及的各种方法。在一个实施例中,所述电子设备的所述处理器701,调用所述存储器702中存储的程序指令,用于当通过通信接口703接收到针对智能合约中目标方法的调用请求时,调用虚拟机获取用于描述所述目标方法的go语言代码的目标抽象语法树以及目标控制流程图,基于所述目标控制流程图识别所述目标抽象语法树中的各个操作码,并确定所述各个操作码对应的操作逻辑以及操作数,对所述各个操作码对应的操作数执行各自对应的操作逻辑,以运行所述目标方法的go语言代码。在一个实施例中,所述处理器701,具体用于调用虚拟机从缓存空间中读取用于描述所述目标方法的go语言代码的目标抽象语法树以及目标控制流程图,所述缓存空间包括用于描述所述智能合约中各个方法的go语言代码的抽象语法树以及控制流程图。在一个实施例中,所述处理器701,还用于若从所述缓存空间中未读取到所述目标抽象语法树以及所述目标控制流程图,则调用虚拟机从存储的所述智能合约中各个方法的go语言代码中获取所述目标方法的go语言代码;解析所述目标方法的go语言代码,并基于解析结果生成用于描述所述目标方法的go语言代码的目标抽象语法树;根据所述目标抽象语法树生成用于描述所述目标方法的go语言代码的目标控制流程图。在一个实施例中,所述处理器701,还用于利用所述目标抽象语法树和所述目标控制流程图更新所述缓存空间中存储的所述抽象语法树以及所述控制流程图;获取所述抽象语法树以及所述控制流程图对应的缓存生命周期;当检测到所述缓存生命周期到达时,清空所述缓存空间中的所述抽象语法树以及所述控制流程图。在一个实施例中,所述处理器701,还用于获取所述智能合约包括的各个方法的调用频率,并基于所述调用频率更新所述缓存生命周期。在一个实施例中,所述缓存空间包括用于描述所述智能合约中各个方法的go语言代码的抽象语法树以及控制流程图,所述处理器701,还具体用于调用虚拟机从缓存空间包括的所述抽象语法树中定位所述目标方法的入口节点和截止节点;基于所述入口节点和截止节点读取所述抽象语法树中用于描述所述目标方法的go语言代码的目标抽象语法树,以及读取所述控制流程图中用于描述所述目标方法的go语言代码的目标控制流程图。在一个实施例中,所述处理器701,还用于获取所述调用请求对应的接口类型;若检测到所述接口类型不为查询接口,则将所述调用请求广播至区块链网络中的其它节点设备,以使所述其它节点设备基于所述调用请求,根据所述目标抽象语法树以及所述目标控制流程图运行所述目标方法的go语言代码。在一个实施例中,所述处理器701,还具体用于对所述目标方法的go语言代码进行词法分析,将所述目标方法的go语言代码对应的字符序列转换为标记序列对所述标记序列中的各个标记符进行语法分析,确定所述各个标记符的语法结构;基于所述各个标记符的语法结构,生成所述目标方法的go语言代码对应的初始抽象语法树;对所述初始抽象语法树进行语义分析,并基于语义分析结果调整所述初始抽象语法树,得到用于描述所述目标方法的go语言代码的目标抽象语法树。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。以上所揭露的仅为本发明的局部实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或局部流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。当前第1页1 2 3 
技术特征:1.一种基于区块链的数据处理方法,其特征在于,所述方法应用于区块链网络的节点设备,所述方法包括:
当接收到针对智能合约中目标方法的调用请求时,调用虚拟机获取用于描述所述目标方法的go语言代码的目标抽象语法树以及目标控制流程图;
基于所述目标控制流程图识别所述目标抽象语法树中的各个操作码,并确定所述各个操作码对应的操作逻辑以及操作数;
对所述各个操作码对应的操作数执行各自对应的操作逻辑,以运行所述目标方法的go语言代码。
2.根据权利要求1所述的方法,其特征在于,所述调用虚拟机获取用于描述所述目标方法的go语言代码的目标抽象语法树以及目标控制流程图,包括:
调用虚拟机从缓存空间中读取用于描述所述目标方法的go语言代码的目标抽象语法树以及目标控制流程图,所述缓存空间包括用于描述所述智能合约中各个方法的go语言代码的抽象语法树以及控制流程图。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
若从所述缓存空间中未读取到所述目标抽象语法树以及所述目标控制流程图,则调用虚拟机从存储的所述智能合约中各个方法的go语言代码中获取所述目标方法的go语言代码;
解析所述目标方法的go语言代码,并基于解析结果生成用于描述所述目标方法的go语言代码的目标抽象语法树;
根据所述目标抽象语法树生成用于描述所述目标方法的go语言代码的目标控制流程图。
4.根据权利要求3所述的方法,其特征在于,所述根据所述目标抽象语法树生成用于描述所述目标方法的go语言代码的目标控制流程图之后,所述方法还包括:
利用所述目标抽象语法树和所述目标控制流程图更新所述缓存空间中存储的所述抽象语法树以及所述控制流程图;
获取所述抽象语法树以及所述控制流程图对应的缓存生命周期;
当检测到所述缓存生命周期到达时,清空所述缓存空间中的所述抽象语法树以及所述控制流程图。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
获取所述智能合约包括的各个方法的调用频率,并基于所述调用频率更新所述缓存生命周期。
6.根据权利要求2所述的方法,其特征在于,所述缓存空间包括用于描述所述智能合约中各个方法的go语言代码的抽象语法树以及控制流程图,所述调用虚拟机从缓存空间中读取用于描述所述目标方法的go语言代码的目标抽象语法树以及目标控制流程图,包括:
调用虚拟机从缓存空间包括的所述抽象语法树中定位所述目标方法的入口节点和截止节点;
基于所述入口节点和截止节点读取所述抽象语法树中用于描述所述目标方法的go语言代码的目标抽象语法树,以及读取所述控制流程图中用于描述所述目标方法的go语言代码的目标控制流程图。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述方法还包括:
获取所述调用请求对应的接口类型;
若检测到所述接口类型不为查询接口,则将所述调用请求广播至区块链网络中的其它节点设备,以使所述其它节点设备基于所述调用请求,根据所述目标抽象语法树以及所述目标控制流程图运行所述目标方法的go语言代码。
8.根据权利要求3所述的方法,其特征在于,所述解析所述目标方法的go语言代码,并基于解析结果生成用于描述所述目标方法的go语言代码的目标抽象语法树,包括:
对所述目标方法的go语言代码进行词法分析,将所述目标方法的go语言代码对应的字符序列转换为标记序列;
对所述标记序列中的各个标记符进行语法分析,确定所述各个标记符的语法结构;
基于所述各个标记符的语法结构,生成所述目标方法的go语言代码对应的初始抽象语法树;
对所述初始抽象语法树进行语义分析,并基于语义分析结果调整所述初始抽象语法树,得到用于描述所述目标方法的go语言代码的目标抽象语法树。
9.一种基于区块链的数据处理装置,其特征在于,所述装置配置于区块链网络的节点设备,所述装置包括:
通信模块,用于接收针对智能合约中目标方法的调用请求;
处理模块,用于当所述通信模块接收到针对智能合约中目标方法的调用请求时,调用虚拟机获取用于描述所述目标方法的go语言代码的目标抽象语法树以及目标控制流程图;
所述处理模块,还用于基于所述目标控制流程图识别所述目标抽象语法树中的各个操作码,并确定所述各个操作码对应的操作逻辑以及操作数;
所述处理模块,还用于对所述各个操作码对应的操作数执行各自对应的操作逻辑,以运行所述目标方法的go语言代码。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序指令,所述计算机程序指令被处理器执行时,用于执行如权利要求1-8任一项所述的基于区块链的数据处理方法。
技术总结本发明实施例公开了一种基于区块链的数据处理方法、装置及存储介质,其中方法包括:在接收到针对智能合约中目标方法的调用请求时,可以调用虚拟机获取用于描述目标方法的GO语言代码的目标抽象语法树以及目标控制流程图;基于目标控制流程图识别目标抽象语法树中的各个操作码,并确定各个操作码对应的操作逻辑以及操作数,进而对各个操作码对应的操作数执行各自对应的操作逻辑,以运行目标方法的GO语言代码。实施本发明实施例,可以通过区块链节点设备的虚拟机运行智能合约中目标方法的GO语言代码,实现目标方法的调用,提高智能合约的通用性。
技术研发人员:李茂材;刘区城;王宗友;孔利;刘攀;周开班;杨常青;朱耿良;时一防;蓝虎;黄焕坤;张劲松
受保护的技术使用者:腾讯科技(深圳)有限公司
技术研发日:2020.01.22
技术公布日:2020.06.05