掌桥专利:专业的专利平台
掌桥专利
首页

智能合约类型的识别方法、装置及计算设备

文献发布时间:2023-06-19 19:27:02


智能合约类型的识别方法、装置及计算设备

技术领域

本申请涉及区块链技术领域,具体涉及一种智能合约类型的识别方法、装置及计算设备。

背景技术

区块链中很多数据类应用都需要判断智能合约的类型,才能进行后续的业务逻辑,比如数字产品交易平台,首先需要判断某个地址对应的智能合约是否符合智能合约标准,只有满足智能合约标准的情况下,才能按照标准中定义的方法,进行后续的上架、展示等操作。因此,智能合约的类型识别是至关重要的。

目前存在一些智能合约标准,符合标准的智能合约能够通过指定的接口来帮助外部判断其合约类型。但是,在智能合约标准发布之前,已经存在大量的已部署的智能合约,这些存量的智能合约并不一定符合标准。目前,尚没有能够有效识别未知智能合约的类型的方式。

发明内容

本申请实施例的目的是提供一种智能合约类型的识别方法、装置及计算设备,以解决现有技术缺乏能够有效识别未知智能合约类型的方式的问题。

根据本申请的一个方面,提供了一种智能合约类型的识别方法,包括:

解析智能合约的字节码,将字节码转换为操作码;

遍历操作码,识别操作码中的至少一个特征操作码;

根据至少一个特征操作码,得到与至少一个特征操作码对应的至少一个操作事件的操作对象标识符;

根据至少一个操作事件的操作对象标识符,识别智能合约的类型。

可选地,遍历操作码,识别操作码中的至少一个特征操作码进一步包括:

遍历操作码,根据操作码的定义,识别操作码中的至少一个特征操作码。

可选地,遍历操作码,根据操作码的定义,识别操作码中的至少一个特征操作码进一步包括:

针对任一操作码,根据该操作码的定义,判断该操作码是否为用于函数调用和/或事件定义的操作码,若是,则将该操作码识别为特征操作码。

可选地,根据至少一个特征操作码,得到与至少一个特征操作码对应的至少一个操作事件的操作对象标识符进一步包括:

若特征操作码为用于函数调用的操作码,则得到与该特征操作码对应的函数调用的函数标识符;

和/或,若特征操作码为用于事件定义的操作码,则得到与该特征操作码对应的事件定义的事件标识符。

可选地,根据至少一个操作事件的操作对象标识符,识别智能合约的类型进一步包括:

将至少一个操作事件的操作对象标识符与任一智能合约类型对应的各个方法的签名标识符进行比对,根据比对结果确定智能合约的类型。

可选地,方法进一步包括:

对于任一智能合约类型,获取该智能合约类型的智能合约所需实现的各个方法的签名信息;

按照预设编码算法对各个方法的签名信息进行编码,得到该智能合约类型对应的各个方法的签名标识符。

可选地,方法进一步包括:

若识别出智能合约的类型,选择智能合约的类型对应的存储模型和索引模型部署智能合约所定义的业务;

若未识别出智能合约的类型,拒绝智能合约的部署事件。

根据本申请的另一方面,提供了一种智能合约类型的识别装置,装置包括:

转码模块,适于解析智能合约的字节码,将字节码转换为操作码;

第一识别模块,适于遍历操作码,识别操作码中的至少一个特征操作码;

处理模块,适于根据至少一个特征操作码,得到与至少一个特征操作码对应的至少一个操作事件的操作对象标识符;

第二识别模块,适于根据至少一个操作事件的操作对象标识符,识别智能合约的类型。

可选地,第一识别模块进一步适于:遍历操作码,根据操作码的定义,识别操作码中的至少一个特征操作码。

可选地,第一识别模块进一步适于:针对任一操作码,根据该操作码的定义,判断该操作码是否为用于函数调用和/或事件定义的操作码,若是,则将该操作码识别为特征操作码。

可选地,处理模块进一步适于:若特征操作码为用于函数调用的操作码,则得到与该特征操作码对应的函数调用的函数标识符;

和/或,若特征操作码为用于事件定义的操作码,则得到与该特征操作码对应的事件定义的事件标识符。

可选地,第二识别模块进一步适于:

将至少一个操作事件的操作对象标识符与任一智能合约类型对应的各个方法的签名标识符进行比对,根据比对结果确定智能合约的类型。

可选地,装置还包括:预处理模块,适于对于任一智能合约类型,获取该智能合约类型的智能合约所需实现的各个方法的签名信息;

按照预设编码算法对各个方法的签名信息进行编码,得到该智能合约类型对应的各个方法的签名标识符。

可选地,装置包括:部署模块,适于若识别出智能合约的类型,选择智能合约的类型对应的存储模型和索引模型部署智能合约所定义的业务;若未识别出智能合约的类型,拒绝智能合约的部署事件。

根据本申请的又一方面,提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;

所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述智能合约类型的识别方法对应的操作。

根据本申请的再一方面,提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如上述智能合约类型的识别方法对应的操作。

根据本申请的智能合约类型的识别方法、装置及计算设备,通过将智能合约的字节码转换为操作码,并识别出其中的各个特征操作码,确定各个特征操作码所对应的操作事件的操作对象标识符,根据至少一个操作事件的操作对象标识符,即可判定智能合约的类型;进一步地,通过识别出操作码中用于函数调用和/或用于事件定义的特征操作码,并获取特征操作码对应的函数标识符和/或事件标识符,将待识别的智能合约对应的函数标识符和/或事件标识符与标准智能合约所需实现的方法的签名标识符进行比对,判断待识别的智能合约是否实现了标准智能合约所需实现的全部方法,即可判定该待识别的智能合约所满足的智能合约标准,从而确定待识别的智能合约的类型。通过上述方式,不需要对区块链网络发出任何额外请求,只需要智能合约的字节码,即可高效、准确地判断智能合约的类型。

上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了本申请实施例提供的智能合约类型的识别方法的流程图;

图2示出了本申请另一实施例提供的智能合约类型的识别方法的流程图;

图3示出了本申请实施例提供的智能合约类型的识别装置的结构示意图;

图4示出了本申请实施例提供的计算设备的结构示意图。

具体实施方式

下面将参照附图更详细地描述本申请的示例性实施例。虽然附图中显示了本申请的示例性实施例,然而应当理解,可以以各种形式实现本申请而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本申请,并且能够将本申请的范围完整的传达给本领域的技术人员。

首先,对本申请一个或多个实施例涉及的名词术语进行解释。

智能合约:部署在区块链网络中,用于执行特定逻辑的计算机交易协议,其中包含了代码函数,可以完成决策的执行、资金的存储以及数据的读写等。

Solidity:是一种针对EVM(Ethereum Virtual Machine,以太坊虚拟机)的、面向对象的高级语言,用于实现智能合约,以Solidity开发的智能合约需要由EVM解释执行。

字节码:智能合约编写好之后需要通过编译器编译后才能在虚拟机上运行,智能合约的编译结果称为字节码。

操作码:EVM使用一系列称为“操作码”的指令来执行不同的任务,EVM中有140多个操作码可以执行不同的进程,智能合约代码被转换为操作码,因此它们可以在EVM环境中执行。

图1示出了本申请实施例提供的智能合约类型的识别方法的流程图,该方法应用于任意具有计算能力的设备中,如图1所示,该方法包括以下步骤:

步骤S110,解析智能合约的字节码,将字节码转换为操作码。

智能合约经过编译器编译后得到字节码,根据字节码与操作码之间的对应关系,将字节码转换为操作码。

步骤S120,遍历操作码,识别操作码中的至少一个特征操作码。

遍历所有的操作码,识别出其中包含的特征操作码,特征操作码是指用于实现特定操作的操作码,比如用于将元素压入栈的操作码等等。

步骤S130,根据至少一个特征操作码,得到与至少一个特征操作码对应的至少一个操作事件的操作对象标识符。

定位至少一个特征操作码,确定至少一个特征操作码对应的操作事件的操作对象标识符,沿用上述示例,确定入栈操作事件的操作对象标识符,即上述通过操作码压入栈的元素。

步骤S140,根据至少一个操作事件的操作对象标识符,识别智能合约的类型。

根据至少一个操作事件的操作对象标识符,判断智能合约是否实现了任一智能合约标准所需要的方法,进而能够判定智能合约是否符合该智能合约标准,从而识别出智能合约的类型。

根据本申请实施例所提供的智能合约类型的识别方法,通过将智能合约的字节码转换为操作码,并识别出其中的各个特征操作码,确定各个特征操作码所对应的操作事件的操作对象标识符,根据至少一个操作事件的操作对象标识符,即可判定智能合约的类型。通过上述方式,根据智能合约的字节码即可实现对智能合约的类型的识别,能够准确高效地完成智能合约的类型识别。

图2示出了本申请另一实施例提供的智能合约类型的识别方法的流程图,如图2所示,该方法包括以下步骤:

步骤S210,解析智能合约的字节码,将字节码转换为操作码。

智能合约经过编译器编译后得到字节码,根据字节码与操作码之间的对应关系,将字节码转换为操作码。

举例来说,首先通过对一个智能合约进行编译,得到字节码如下:0x6370a082311461022e578063715018a61461025e5780638da5cb5b1461026857806395d89b411461028657。

然后,按照以太坊黄皮书中所定义的操作码,将上述字节码转换为操作码,表一示出部分操作码及其字节码和操作备注。

表一

上述字节码中,起始字节是0x63,对应PUSH4操作码,PUSH4操作码用于将后续的四个字节压入栈,即0x70a08231;接下来是0x14,对应EQ操作码,用于比较栈顶的两个元素并将结果压入栈;再往后是0x61,对应的是PUSH2操作码,用于将两个字节压入栈,即0x022e,以此类推,可以将上述字节码转换为操作码,具体如下:

“PUSH4 70a08231 EQ PUSH2 022e JUMPI DUP1 PUSH4

715018a6 EQ PUSH2 025e JUMPI DUP1 PUSH4 8da5cb5b EQ PUSH2 0268JUMPIDUP1 PUSH4 95d89b41 EQ PUSH2 0286JUMPI”

步骤S220,遍历操作码,根据操作码的定义,识别操作码中的至少一个特征操作码。

遍历字节码转换后的操作码,识别操作码中具有特定定义的特征操作码。

具体地,针对任一操作码,根据该操作码的定义,判断该操作码是否为用于函数调用和/或事件定义的操作码,若是,则将该操作码识别为特征操作码。也即,将用在函数调用过程中将函数签名哈希压入栈的操作码和/或用在事件定义过程中的操作码作为特征操作码。

步骤S230,根据至少一个特征操作码,得到与至少一个特征操作码对应的至少一个操作事件的操作对象标识符。

识别出特征操作码后,再获取特征操作码所对应的操作事件的操作对象标识符。

若特征操作码为用于函数调用的操作码,则得到与该特征操作码对应的函数调用的函数标识符,例如上述PUSH3操作码或者PUSH4操作码,在函数调用过程中通过该操作码将函数签名哈希压入栈中,则函数调用的函数标识符也就是函数签名哈希结果。若特征操作码为用于事件定义的操作码,得到与该特征操作码对应的事件定义的事件标识符,如果是用于事件定义的操作码,则其对应的事件定义的事件标识符为事件签名的哈希结果。

以函数调用为例,根据EVM的操作码实现原理,在进行智能合约方法调用时,首先需要遍历所有函数方法进行函数的寻址,具体过程为:首先对于智能合约的每一个函数执行PUSH3操作码或者PUSH4操作码,将函数签名经过keccak256哈希计算后压入栈中;并且执行EQ操作码,与目标函数签名进行比对,并将比对结果压入栈中;之后,执行PUSH2操作码将函数地址压入栈中,并执行JUMPI操作码进行签名校验,如果校验通过,将会进行地址的跳转,目标地址会以JUMPDEST作为起始字节码,如果校验不通过,则会继续判断下一个函数。

由此可见,上述字节码所转换的操作码表示了函数寻址过程,其中,PUSH4操作码的入栈操作相关的字符(即0x70a08231、0x715018a6、0x8da5cb5b、0x95d89b41)即为操作对象标识符,本质上是函数签名的keccak256哈希的前8个字符。

步骤S240,将至少一个操作事件的操作对象标识符与任一智能合约类型对应的各个方法的签名标识符进行比对,根据比对结果确定智能合约的类型。

其中,识别智能合约的类型相当于识别智能合约是否符合智能合约标准,如果符合,则确定智能合约是该智能合约标准类型的。常见的智能合约标准有ERC721标准、ERC1155标准等等,针对于每一种智能合约标准,符合该标准的智能合约需要实现固定的多个方法,因此,通过识别智能合约是否实现了标准智能合约所需要实现的方法,即可确定该智能合约的类型。

预先针对于每一种智能合约类型,确定其对应的各个方法的签名标识符。具体地,对于任一智能合约类型,获取该智能合约类型的智能合约所需实现的各个方法(包括函数和/或事件)的签名信息;按照预设编码算法对各个方法的签名信息进行编码,得到该智能合约类型对应的各个方法的签名标识符。具体地,对智能合约所要实现的函数的签名和/或事件的签名进行keccak256哈希,得到该智能合约对应的各个签名标识符。

以ERC721标准为例,该标准类型的智能合约至少需要实现如下方法:

function balanceOf(address_owner)external view returns(uint256);

function ownerOf(uint256_tokenId)external view returns(address);

function safeTransferFrom(address_from,address_to,uint256_tokenId,bytes data)external payable;

function safeTransferFrom(address_from,address_to,uint256_tokenId)external payable;

function transferFrom(address_from,address_to,uint256_tokenId)external payable;

function approve(address_approved,uint256_tokenId)external payable;

function setApprovalForAll(address_operator,bool_approved)external;function getApproved(uint256_tokenId)external view returns(address);

function isApprovedForAll(address_owner,address_operator)externalview returns(bool)……

其中,函数balanceOf的签名为“balanceOf(address)”,将其进行keccak256哈希得到如下结果:

70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be

哈希结果的前8个字符即为签名标识符,因此,该函数在EVM寻址时的签名标识符为0x70a0823。

将待识别的智能合约所对应的至少一个操作事件的操作对象标识符,与各个标准智能合约所要实现的各个方法的签名标识符进行比对,能够确定待识别的智能合约是否实现了智能合约标准所需要的全部方法,比如上述示例中,对待识别的智能合约识别得到签名标识符0x70a0823,其与ERC721标准类型的智能合约所需要实现的函数balanceOf的签名标识符一致,则可以确定待识别的智能合约实现了该函数balanceOf,如果确定待识别的智能合约实现了智能合约标准所需要的全部方法,则判定待识别的智能合约是该智能合约标准类型的。

步骤S250,若识别出智能合约的类型,选择智能合约的类型对应的存储模型和索引模型部署智能合约所定义的业务。

如果识别出智能合约符合某一智能合约标准,则选择该智能合约标准对应的存储模型和索引模型部署智能合约所定义的业务,同时,选择该智能合约标准相应的展示模式进行展示。

进一步地,如果未识别出智能合约的类型,也即,智能合约不符合任意一个智能合约标准,则拒绝该智能合约的部署事件。

根据本申请实施例所提供的智能合约的识别方法,通过将智能合约的字节码转换为操作码,识别出其中用于操作事件的特征操作码(包括用于函数调用和/或用于事件定义的操作码),并获取特征操作码对应的操作事件的操作对象标识符(包括函数标识符和/或事件标识符),将待识别的智能合约对应的操作对象标识符与标准智能合约所需实现的方法的签名标识符进行比对,判断待识别的智能合约是否实现了标准智能合约所需实现的全部方法,即可判定该待识别的智能合约所满足的智能合约标准,从而确定待识别的智能合约的类型。通过上述方式,不需要对区块链网络发出任何额外请求,只需要智能合约的字节码,即可高效、准确地判断智能合约的类型。

图3示出了本申请实施例提供的智能合约类型的识别装置的结构示意图,如图3所示,该装置包括:

转码模块31,适于解析智能合约的字节码,将字节码转换为操作码;

第一识别模块32,适于遍历操作码,识别操作码中的至少一个特征操作码;

处理模块33,适于根据至少一个特征操作码,得到与至少一个特征操作码对应的至少一个操作事件的操作对象标识符;

第二识别模块34,适于根据至少一个操作事件的操作对象标识符,识别智能合约的类型。

在一种可选的方式中,第一识别模块32进一步适于:遍历操作码,根据操作码的定义,识别操作码中的至少一个特征操作码。

在一种可选的方式中,第一识别模块32进一步适于:针对任一操作码,根据该操作码的定义,判断该操作码是否为用于函数调用和/或事件定义的操作码,若是,则将该操作码识别为特征操作码。

在一种可选的方式中,处理模块33进一步适于:若特征操作码为用于函数调用的操作码,则得到与该特征操作码对应的函数调用的函数标识符;

和/或,若特征操作码为用于事件定义的操作码,则得到与该特征操作码对应的事件定义的事件标识符。

在一种可选的方式中,第二识别模块34进一步适于:

将至少一个操作事件的操作对象标识符与任一智能合约类型对应的各个方法的签名标识符进行比对,根据比对结果确定智能合约的类型。

在一种可选的方式中,装置还包括:预处理模块,适于对于任一智能合约类型,获取该智能合约类型的智能合约所需实现的各个方法的签名信息;

按照预设编码算法对各个方法的签名信息进行编码,得到该智能合约类型对应的各个方法的签名标识符。

在一种可选的方式中,装置包括:部署模块,适于若识别出智能合约的类型,选择智能合约的类型对应的存储模型和索引模型部署智能合约所定义的业务;若未识别出智能合约的类型,拒绝智能合约的部署事件。

本申请实施例提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的智能合约类型的识别方法。

图4示出了本申请计算设备实施例的结构示意图,本申请具体实施例并不对计算设备的具体实现做限定。

如图4所示,该计算设备可以包括:处理器(processor)402、通信接口(Communications Interface)404、存储器(memory)406、以及通信总线408。

其中:处理器402、通信接口404、以及存储器406通过通信总线408完成相互间的通信。通信接口404,用于与其它设备比如客户端或其它服务器等的网元通信。处理器402,用于执行程序410,具体可以执行上述用于计算设备的智能合约类型的识别方法实施例中的相关步骤。

具体地,程序410可以包括程序代码,该程序代码包括计算机操作指令。

处理器402可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本申请实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。

存储器406,用于存放程序410。存储器406可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。

在此提供的算法或显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本申请实施例也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本申请的内容,并且上面对特定语言所做的描述是为了披露本申请的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本申请的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本申请并帮助理解各个发明方面中的一个或多个,在上面对本申请的示例性实施例的描述中,本申请实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本申请要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本申请的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本申请的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本申请的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本申请实施例的一些或者全部部件的一些或者全部功能。本申请还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本申请的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本申请进行说明而不是对本申请进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本申请可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。上述实施例中的步骤,除有特殊说明外,不应理解为对执行顺序的限定。

相关技术
  • 智能电视外接存储设备类型的识别方法和装置
  • 异步执行智能合约的方法、装置、计算机设备及存储介质
  • 智能合约中算法的保护方法、装置、设备及存储介质
  • 基于深度学习模型的案件类型识别方法、装置、设备及介质
  • 声纹识别方法、装置、计算机设备和计算机可读存储介质
  • 一种海关数据风控类型识别方法、海关智能化风险布控方法、装置、计算机设备及存储介质
  • 一种海关数据风控类型识别方法、海关智能化风险布控方法、装置、计算机设备及存储介质
技术分类

06120115916915