CN112104709B - 智能合约的处理方法、装置、介质及电子设备 - Google Patents
智能合约的处理方法、装置、介质及电子设备 Download PDFInfo
- Publication number
- CN112104709B CN112104709B CN202010886761.7A CN202010886761A CN112104709B CN 112104709 B CN112104709 B CN 112104709B CN 202010886761 A CN202010886761 A CN 202010886761A CN 112104709 B CN112104709 B CN 112104709B
- Authority
- CN
- China
- Prior art keywords
- source
- target
- language
- code
- intelligent 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/565—Conversion or adaptation of application format or content
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/133—Protocols for remote procedure calls [RPC]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请属于区块链技术领域,具体涉及一种智能合约的处理方法、装置、介质以及电子设备。该方法包括:获取智能合约的源语言代码,源语言代码是基于源编程语言编写的合约代码;对源语言代码进行语法结构解析得到源语言代码的源语法结构树;遍历源语法结构树中的源语法节点,得到各个源语法节点的源语法节点类型;根据源语法节点类型的代码功能,将源语法结构树中的各个源语法节点替换为对应于目标编程语言的目标语法节点,得到由目标语法节点构成的目标语法结构树;对目标语法结构树进行反向解析,得到智能合约的目标语言代码,目标语言代码是基于目标编程语言编写的合约代码。该方法可以对智能合约进行自动化地语言转换,提高智能合约的处理效率。
Description
技术领域
本申请属于区块链技术领域,具体涉及一种智能合约的处理方法、智能合约的处理装置、计算机可读介质以及电子设备。
背景技术
随着区块链技术逐渐被人们所熟知与信任,各种业务应用也对区块链技术提出了更高的性能要求。作为区块链技术的核心部分,智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议,可以提供优于传统合约的安全方法,并减少与合约相关的交易成本。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。
要承托未来各方业务区块链化,将会有越来越多的去中心化的业务应用通过智能合约运行在区块链网络上。在区块链网络上实现的业务应用需要调用相应的智能合约,智能合约的运行性能也在一定程度上决定了区块链网络的整体性能。
为了满足不同业务应用方的智能合约使用需求,区块链网络需要对各种不同的智能合约编程语言进行适配,这无疑给智能合约编程人员带来了大量的繁琐且重复的智能合约编写任务,也极大地增加了区块链网络的建立和运行成本。因此,如何能够提高智能合约的多语言编写效率,降低区块链网络的相关成本是目前亟待解决的问题。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本申请的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本申请的目的在于提供一种智能合约的处理方法、智能合约的处理装置、计算机可读介质以及电子设备,至少在一定程度上克服相关技术中存在的智能合约编写效率低、成本高等技术问题。
本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。
根据本申请实施例的一个方面,提供一种智能合约的处理方法,该方法包括:获取智能合约的源语言代码,所述源语言代码是基于源编程语言编写的合约代码;对所述源语言代码进行语法结构解析得到所述源语言代码的源语法结构树;遍历所述源语法结构树中的源语法节点,得到各个所述源语法节点的源语法节点类型;根据所述源语法节点类型的代码功能,将所述源语法结构树中的各个源语法节点替换为对应于目标编程语言的目标语法节点,得到由所述目标语法节点构成的目标语法结构树;对所述目标语法结构树进行反向解析,得到所述智能合约的目标语言代码,所述目标语言代码是基于所述目标编程语言编写的合约代码。
根据本申请实施例的一个方面,提供一种智能合约的处理装置,该装置包括:源代码获取模块,被配置为获取智能合约的源语言代码,所述源语言代码是基于源编程语言编写的合约代码;语法结构解析模块,被配置为对所述源语言代码进行语法结构解析得到所述源语言代码的源语法结构树;节点类型确定模块,被配置为遍历所述源语法结构树中的源语法节点,得到各个所述源语法节点的源语法节点类型;节点替换模块,被配置为根据所述源语法节点类型的代码功能,将所述源语法结构树中的各个源语法节点替换为对应于目标编程语言的目标语法节点,得到由所述目标语法节点构成的目标语法结构树;反向解析模块,被配置为对所述目标语法结构树进行反向解析,得到所述智能合约的目标语言代码,所述目标语言代码是基于所述目标编程语言编写的合约代码。
在本申请的一些实施例中,基于以上技术方案,所述语法结构解析模块包括:词法分析单元,被配置为对所述源语言代码进行词法分析,得到与所述源语言代码相对应的词法单元序列;语法分析单元,被配置为按照所述词法单元序列中的各个词法单元的语法结构关系,将所述词法单元序列由数组结构转换为树形结构,得到所述源语言代码的源语法结构树。
在本申请的一些实施例中,基于以上技术方案,所述词法分析单元包括:字符流分割子单元,被配置为依次读取所述源语言代码中的代码字符流,并按照构词规则将所述代码字符流分割为字符串序列;词法单元识别子单元,被配置为识别所述字符串序列中的词法单元,得到与所述字符串序列相对应的词法单元序列。
在本申请的一些实施例中,基于以上技术方案,所述节点替换模块包括:数据库获取单元,被配置为获取用于表示所述源编程语言与目标编程语言之间的映射关系的语法映射数据库;节点查找单元,被配置为根据所述源语法节点类型的代码功能,在所述语法映射数据库中查找与所述源语法节点类型具有相同代码功能的目标语法节点类型;节点替换单元,被配置为基于所述目标语法节点类型将所述语法结构树中的各个源语法节点替换为对应于目标编程语言的目标语法节点,得到由所述目标语法节点构成的目标语法结构树。
在本申请的一些实施例中,基于以上技术方案,所述数据库获取单元包括:节点类型采集子单元,被配置为采集基于源编程语言的源语法节点类型以及基于目标编程语言的目标语法节点类型;代码功能获取子单元,被配置为分别获取所述源语法节点类型的代码功能以及所述目标语法节点类型的代码功能;映射关系建立子单元,被配置为将具有相同代码功能的源语法节点类型和目标语法节点类型建立映射关系,形成语法映射数据库。
在本申请的一些实施例中,基于以上技术方案,所述数据库获取单元还包括:节点类型筛选子单元,被配置为对所述源语法节点类型以及所述目标语法节点类型进行筛选得到适用于区块链网络的语法节点类型。
在本申请的一些实施例中,基于以上技术方案,所述源代码获取模块包括:测试请求接收单元,被配置为通过区块链网络接收由合约测试节点发出的合约测试请求;第一签名校验单元,被配置为从所述合约测试请求中获取所述合约测试节点的数字签名,并对所述数字签名进行签名校验;第一代码获取单元,被配置为若校验通过,则根据所述合约测试请求获取待测试智能合约的源语言代码。
在本申请的一些实施例中,基于以上技术方案,所述智能合约的处理装置还包括:源代码执行模块,被配置为执行所述源语言代码,得到基于源编程语言的待测试智能合约的源语言测试结果;目标代码执行模块,被配置为执行所述目标语言代码,得到基于目标编程语言的待测试智能合约的目标语言测试结果;测试结果确定模块,被配置为根据所述源语言测试结果以及所述目标语言测试结果确定所述待测试智能合约的多语言测试结果。
在本申请的一些实施例中,基于以上技术方案,所述测试结果确定模块包括:测试结果认证单元,被配置为将所述源语言测试结果以及所述目标语言测试结果广播至所述区块链网络,以通过所述区块链网络对所述源语言测试结果以及所述目标语言测试结果进行共识认证;测试结果确定单元,被配置为当共识认证通过时,将所述源语言测试结果以及所述目标语言测试结果确定为所述待测试智能合约的多语言测试结果。
在本申请的一些实施例中,基于以上技术方案,所述源代码获取模块包括:部署请求接收单元,被配置为通过区块链网络接收由合约部署节点发出的合约部署请求;第二签名校验单元,被配置为从所述合约部署请求中获取所述合约部署节点的数字签名,并对所述数字签名进行签名校验;第二代码获取单元,被配置为若校验通过,则根据所述合约部署请求获取待部署至区块链网络的智能合约的源语言代码。
在本申请的一些实施例中,基于以上技术方案,所述智能合约的处理装置还包括:合约摘要模块,被配置为对所述智能合约的目标语言代码进行摘要处理,以得到作为合约地址信息的智能合约摘要;合约保存模块,被配置为建立所述智能合约的目标语言代码与所述合约地址信息的关联关系,并将所述智能合约的目标语言代码保存至区块链。
在本申请的一些实施例中,基于以上技术方案,所述源代码获取模块包括:合约摘要获取单元,被配置为响应于智能合约调用请求,获取待调用智能合约的智能合约摘要;第三代码获取单元,被配置为根据所述智能合约摘要在区块链上进行检索,得到与所述智能合约摘要相关联的所述待调用智能合约的源语言代码。
根据本申请实施例的一个方面,提供一种计算机可读介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如以上技术方案中的智能合约的处理方法。
根据本申请实施例的一个方面,提供一种电子设备,该电子设备包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器被配置为经由执行所述可执行指令来执行如以上技术方案中的智能合约的处理方法。
根据本申请实施例的一个方面,提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行如以上技术方案中的智能合约的处理方法。
在本申请实施例提供的技术方案中,通过语法结构树建立源编程语言与目标编程语言之间的映射关系,并基于映射关系对具有相同代码功能的源语法节点和目标语法节点进行替换,进一步反向解析得到智能合约的目标语言代码,从而实现了将智能合约由源语言代码自动化地转换至目标语言代码。对智能合约进行自动化地语言转换,可以避免编程人员对相同智能合约的多语言重复编写,提高智能合约的处理效率,并可以降低区块链网络的建立和运行成本。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示意性地示出了应用本申请技术方案的示例性***架构框图。
图2示意性地示出了本申请实施例中的区块链的组成结构。
图3示意性地示出了本申请一个实施例中的智能合约的处理方法的步骤流程图。
图4示意性地示出了本申请实施例中的语法结构树示意图。
图5示意性地示出了本申请实施例在一应用场景中基于源语言代码解析得到源语法结构树的原理示意图。
图6示意性地示出了本申请实施例在一应用场景中由语法映射数据库提供的语法节点类型映射关系示意图。
图7示意性地示出了本申请实施例在一应用场景中语法结构树的结构转换示意图。
图8示意性地示出了本申请实施例在一应用场景中语法结构树的反向解析示意图。
图9示意性地示出了本申请实施例提供的智能合约的处理装置的结构框图。
图10示意性示出了适于用来实现本申请实施例的电子设备的计算机***结构框图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本申请将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
图1示意性地示出了应用本申请技术方案的示例性***架构框图。
如图1所示,***架构100可以包括至少一个客户端110和区块链网络120,区块链网络120包括至少一个节点设备121。客户端110可以是智能手机、平板电脑、笔记本电脑、台式电脑等各种电子设备。节点设备121可以是终端设备或者服务器等任意形式的电子设备,例如节点设备121可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群,还可以是提供云计算服务的云服务器。
在区块链网络120中,每个节点设备121在进行正常工作时可以接收到输入信息,并基于接收到的输入信息维护区块链网络内的共享数据。为了保证信息互通,各个节点设备121之间可以存在信息连接,各个节点设备121相互可以通过信息连接进行信息传输。例如,当区块链网络120中的任意节点设备121接收到输入信息,并将输入信息在区块链网络120中进行广播时,区块链网络120中的其他节点设备可以根据共识算法获取该输入信息,将该输入信息作为共享数据进行存储。
区块链网络120中的各个节点设备121上可以存储一条相同的区块链(BlockChain)。区块链是一种按照时间顺序将数据区块以顺序相连的方式组合而成的一种链式数据结构,并以密码学方式保证数据不可篡改和不可伪造的分布式数据库。图2示意性地示出了本申请实施例中的区块链的组成结构。如图2所示,区块链由多个顺次连接的区块组成,每当有新的数据需要写入区块链时,这些数据会汇总到一个新生成的区块中,新生成的区块将被链接至区块链的末端,通过共识算法可以保证每个节点设备121上新增的区块是完全相同的。在每个区块的区块体中记录了当前区块的数据,同时在其区块头中保存与之相连的前一区块的哈希值(Hash),若前一区块中的交易数据发生变化,那么当前区块的哈希值也将随之改变。因此,上传至区块链网络中的数据难以被篡改,可以提高共享数据的可靠性。
当用户想要在区块链网络上部署智能合约时,可以通过客户端110将智能合约的合约代码发送至区块链网络120中的任意一个节点设备121,该节点设备121可以与区块链网络中的其他节点设备对待部署的智能合约进行共识认证,在共识认证通过后,可以生成包含该智能合约的合约代码的新区块,该新区块将被链接至区块链上以供节点设备进行调用和运行。
下面结合具体实施方式对本申请提供的智能合约的处理方法做出详细说明。
图3示意性地示出了本申请一个实施例中的智能合约的处理方法的步骤流程图,该智能合约的处理方法可以应用于区块链网络120中的节点设备121,或者可以应用于能够与节点设备121进行数据通信的客户端110。如图3所示,该智能合约的处理方法主要可以包括如下的步骤S310至步骤S350。
步骤S310:获取智能合约的源语言代码,源语言代码是基于源编程语言编写的合约代码。
步骤S320:对源语言代码进行语法结构解析得到源语言代码的源语法结构树。
步骤S330:遍历源语法结构树中的源语法节点,得到各个源语法节点的源语法节点类型。
步骤S340:根据源语法节点类型的代码功能,将源语法结构树中的各个源语法节点替换为对应于目标编程语言的目标语法节点,得到由目标语法节点构成的目标语法结构树。
步骤S350:对目标语法结构树进行反向解析,得到智能合约的目标语言代码,目标语言代码是基于目标编程语言编写的合约代码。
在本申请实施例提供的智能合约的处理方法中,通过语法结构树建立源编程语言与目标编程语言之间的映射关系,并基于映射关系对具有相同代码功能的源语法节点和目标语法节点进行替换,进一步反向解析得到智能合约的目标语言代码,从而实现了将智能合约由源语言代码自动化地转换至目标语言代码。对智能合约进行自动化地语言转换,可以避免编程人员对相同智能合约的多语言重复编写,提高智能合约的处理效率,并可以降低区块链网络的建立和运行成本。
下面结合具体实施方式对本申请实施例提供的智能合约的处理方法的各个步骤做详细说明。
在步骤S310中,获取智能合约的源语言代码,源语言代码是基于源编程语言编写的合约代码。
针对用于对于区块链网络的不用应用需求,在智能合约的测试、部署以及调用等应用场景中均可能涉及对多种不同类型的编程语言之间的转换。其中,用于编写智能合约的编程语言例如可以包括Go语言、JavaScript语言、Solidity语言、Serpent语言、Mutan语言、LLL语言等等。
针对智能合约的测试需求,本申请实施例可以编写基于某种类型编程语言的智能合约测试用例,然后通过自动化地语言转换得到其他类型编程语言的智能合约测试用例,从而可以对基于多种不同类型的编程语言编写而成的智能合约进行测试,获得区块链网络对于不同类型编程语言的适配能力。在该应用场景下,测试人员只需要利用源编程语言编写一套智能合约测试用例,通过执行本申请实施例提供的智能合约处理方法便可以得到目标编程语言编写的智能合约测试用例,从而能够降低测试工作量并提高测试效率。
针对智能合约的测试需求,在本申请的一个实施例中,获取智能合约的源语言代码,可以包括如下的步骤S3111至步骤S3113。
步骤S3111:通过区块链网络接收由合约测试节点发出的合约测试请求。
步骤S3112:从合约测试请求中获取合约测试节点的数字签名,并对数字签名进行签名校验。
步骤S3113:若校验通过,则根据合约测试请求获取待测试智能合约的源语言代码。
合约测试节点可以是区块链网络上请求进行智能合约测试的任意区块链节点,当合约测试节点在区块链网络中广播合约测试请求时,各个区块链节点可以通过区块链网络接收这一合约测试请求,并对其做出响应处理。
合约测试节点在请求进行合约测试时,会利用其自身的节点私钥进行电子签名处理得到携带待测试智能合约的源语言代码和数字签名的合约测试请求。其中,电子签名的方法是先对待测试智能合约的源语言代码进行摘要处理得到请求合约摘要,然后再利用节点私钥对请求合约摘要进行加密得到数字签名。在当前区块链节点接收到这一合约测试请求时,可以对其数字签名进行签名校验,以验证数据来源的可靠性。
在对合约测试请求进行签名校验时,可以首先获取区块链网络上公开的***公钥,然后利用***公钥对合约测试请求中携带的数字签名进行解密处理,以得到待测试合约摘要。对合约测试请求中携带的源语言代码进行摘要处理可以得到请求合约摘要,最后再对待测试合约摘要和请求合约摘要进行一致性校验可以得到数字签名的签名校验结果。
合约测试节点在进行电子签名处理时使用的节点私钥与区块链网络上公开的***公钥可以组成一对非对称秘钥对。当前区块链节点使用与合约测试节点相同的摘要算法对合约测试请求中携带的源语言代码进行摘要处理,可以得到待测试智能合约的请求合约摘要。如果数据来源无误,而且数据传输过程中没有经过篡改,那么通过***公钥解密后得到的待测试合约摘要应当与加密前的请求合约摘要是一致的。因此,如果待测试合约摘要和请求合约摘要校验一致,便可以确定签名校验通过;如果待校验合约摘要和请求合约摘要校验不一致,则可以确定签名校验失败。
在校验通过的情况下,当前区块链节点可以从合约测试请求中获取待测试智能合约的源语言代码,并在后续步骤中对其进行代码语言转换得到基于目标编程语言的目标语言代码。
在得到待测试智能合约的目标语言代码之后,可以对源语言代码和目标语言代码共同进行测试以确定区块链网络是否能够适配不同语言类型的智能合约。举例而言,当前区块链节点可以执行源语言代码,得到基于源编程语言的待测试智能合约的源语言测试结果;并且可以执行目标语言代码,得到基于目标编程语言的待测试智能合约的目标语言测试结果;最后根据源语言测试结果以及目标语言测试结果确定待测试智能合约的多语言测试结果。
在一些可选的实施方式中,执行待测试智能合约的区块链节点可以是区块链网络中某一个或者某几个指定的区块链节点。为了提高智能合约执行结果的测试准确性,本申请实施例也可以由区块链网络中的全部或者部分的区块链节点进行测试并对测试结果加以共识认证。
例如,本申请实施例可以将当前区块链节点测试得到的源语言测试结果以及目标语言测试结果广播至区块链网络,以通过区块链网络对源语言测试结果以及目标语言测试结果进行共识认证;当共识认证通过时,将源语言测试结果以及目标语言测试结果确定为待测试智能合约的多语言测试结果。
针对智能合约的部署需求,本申请实施例可以响应于各个区块链节点的智能合约部署请求,将智能合约部署在区块链网络上,以实现相应智能合约的业务功能。在一些可选的实施方式中,为了降低区块链网络的运行成本,本申请实施例可以将不同编程语言编写的智能合约代码统一转换为同一种指定的编程语言代码。
针对智能合约的部署需求,在本申请的一个实施例中,获取智能合约的源语言代码,可以包括如下的步骤S3121至步骤S3123。
步骤S3121:通过区块链网络接收由合约部署节点发出的合约部署请求。
步骤S3122:从合约部署请求中获取合约部署节点的数字签名,并对数字签名进行签名校验。
步骤S3123:若校验通过,则根据合约部署请求获取待部署至区块链网络的智能合约的源语言代码。
合约部署节点可以是区块链网络上请求进行智能合约部署的任意区块链节点,当合约部署节点在区块链网络中广播合约部署请求时,各个区块链节点可以通过区块链网络接收这一合约部署请求,并对其做出响应处理。
合约部署节点在请求进行合约部署时,会利用其自身的节点私钥进行电子签名处理得到携带智能合约的合约代码和数字签名的合约部署请求。其中,电子签名的方法是先对智能合约的合约代码进行摘要处理得到请求合约摘要,然后再利用节点私钥对请求合约摘要进行加密得到数字签名。在当前区块链节点接收到这一合约部署请求时,可以对其数字签名进行签名校验,以验证数据来源的可靠性。
在对合约部署请求进行签名校验时,可以首先获取区块链网络上公开的***公钥,然后利用***公钥对合约部署请求中携带的数字签名进行解密处理,以得到待校验合约摘要。对合约部署请求中携带的智能合约进行摘要处理可以得到请求合约摘要,最后再对待校验合约摘要和请求合约摘要进行一致性校验可以得到数字签名的签名校验结果。
合约部署节点在进行电子签名处理时使用的节点私钥与区块链网络上公开的***公钥可以组成一对非对称秘钥对。当前区块链节点使用与合约部署节点相同的摘要算法对合约部署请求中携带的智能合约进行摘要处理,可以得到智能合约的请求合约摘要。如果数据来源无误,而且数据传输过程中没有经过篡改,那么通过***公钥解密后得到的待校验合约摘要应当与加密前的请求合约摘要是一致的。因此,如果待校验合约摘要和请求合约摘要校验一致,便可以确定签名校验通过;如果待校验合约摘要和请求合约摘要校验不一致,则可以确定签名校验失败。
在校验通过的情况下,当前区块链节点可以从合约部署请求中获取待优化智能合约的合约代码,并在后续步骤中对其进行代码语言转换得到基于目标编程语言的目标语言代码。
在得到待部署至区块链网络的智能合约的目标语言代码之后,本申请实施例可以对智能合约的目标语言代码进行摘要处理,以得到作为合约地址信息的智能合约摘要;然后建立智能合约的目标语言代码与合约地址信息的关联关系,并将智能合约的目标语言代码保存至区块链。如此一来,无论用户采用何种编码语言编写智能合约,在区块链网络上都只会保存基于目标编程语言的合约代码,降低智能合约调用和执行的编译难度,进而可以降低区块链网络的运行成本。
在完成对智能合约的部署后,智能合约的合约地址信息与其合约代码将以键值对的形式保存在区块链上,当区块链节点需要调用智能合约时,可以利用合约地址信息准确地获取并执行智能合约的合约代码。对于不同的业务需求方而言,区块链网络上保存的合约代码可能并非自身适合编译的代码,因此在调用智能合约的过程中也可以对智能合约的编程语言进行转换。
针对智能合约的调用需求,在本申请的一个实施例中,获取智能合约的源语言代码,可以包括如下的步骤S3131至步骤S3132。
步骤S3131:响应于智能合约调用请求,获取待调用智能合约的智能合约摘要。
步骤S3132:根据智能合约摘要在区块链上进行检索,得到与智能合约摘要相关联的待调用智能合约的源语言代码。
在本申请实施例中,区块链节点在调用智能合约时,可以通过执行以上步骤从区块链网络上获取待调用智能合约的源语言代码,然后基于自身需求对源语言代码进行编程语言转换,得到适合当前区块链节点编译执行的目标语言代码。
在步骤S320中,对源语言代码进行语法结构解析得到源语言代码的源语法结构树。
语法结构树以树状的形式表现合约代码的语法结构,语法结构树上的每一个节点都表示合约代码中的一个结构。本申请实施例中获得的语法结构树可以是抽象语法树(Abstract Syntax Tree,AST),AST是编程语言代码的抽象语法结构的树状表现形式。树上的每个节点均表示编程语言代码中的一种语法结构。之所以说语法是“抽象”的,是因为这里的语法不会表现出真实语法中出现的每个细节。例如,嵌套括号将被隐藏在AST的结构中,并不会以节点的形式呈现。类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。一旦AST被创建出来,在后续的处理过程中,例如进行AST的反向解析形成代码时,需要添加一些被隐藏的信息以还原机器可读的编程语言代码。AST是程序编译阶段的一个中间表示形式,含有源程序结果显示所需要的全部静态信息,具有较高的存储效率。此外,在AST的基础上可以进行程序优化,生成机器代码,生成数据流、控制流等等应用。
在构建语法结构树时,可以首先对源语言代码进行词法分析(lexicalanalysis),得到与源语言代码相对应的词法单元序列;然后按照词法单元序列中的各个词法单元的语法结构关系,将词法单元序列由数组结构转换为树形结构,得到源语言代码的语法结构树。
其中,通过词法分析可以将源语言代码中的字符序列转换为词法单元序列。具体可以依次读取源语言代码中的代码字符流,并按照构词规则将代码字符流分割为字符串序列;然后识别字符串序列中的词法单元,得到与字符串序列相对应的词法单元序列。词法分析通过扫描代码字符流可以逐个读取其中的字符,基于构词规则可以在扫描过程中对读取到的字符进行适时分割形成字符串。例如,每当遇到空格、操作符或者其他特殊符号时,便可以进行一次分割形成字符串,不断进行扫描和分割即形成由字符串组成的字符串序列。
对字符串序列按照语言的词法规则进行识别可以得到各种类型的词法单元(Token),词法单元是构成源代码的最小语法单位。词法单元的类型例如可以包括标识符、操作符、操作数等等。
举例而言,一段合约代码表示为“slice[i]=i*(3+4)”,在对其进行语法结构解析后可以得到如图4所示的语法结构树,语法结构树中的每一个节点均对应于合约代码中的一个词法单元。其中,slice和i为两个标识符,=表示赋值操作符,[]表示取下标的操作符,*表示乘法操作符,+表示加法操作符,3和4为参与加法操作的操作数。
图5示意性地示出了本申请实施例在一应用场景中基于源语言代码解析得到源语法结构树的原理示意图。如图5所示,本申请实施例在该应用场景中的源语言代码是采用Go编程语言编写的智能合约(合约内容仅为示例,并非真实完整代码)。针对Go编程语言编写的智能合约,其源语言代码进行语法结构解析形成抽象语法树的算法可以集成为一个抽象语法树解析器,将源语言代码传入抽象语法树解析器后,可以由抽象语法树解析器对其进行语法结构解析生成与其编程语言对应的抽象语法树,该抽象语法树即为源语言代码的源语法结构树。
在步骤S330中,遍历源语法结构树中的源语法节点,得到各个源语法节点的源语法节点类型。
源语法结构树中的每个节点均代表一种语法结构,可以用于实现不同的代码功能,如图4所示的各种不同类型的标识符、操作符、操作数等等。为了保证智能合约的合约代码在经过编程语言转换后能够保持其合约内容的完整一致性,本申请实施例可以依次遍历源语法结构树中的各个源语法节点,获得每个源语法节点的源语法节点类型,不同的源语法节点类型可用于实现不同的代码功能。
在步骤S340中,根据源语法节点类型的代码功能,将源语法结构树中的各个源语法节点替换为对应于目标编程语言的目标语法节点,得到由目标语法节点构成的目标语法结构树。
本申请实施例可以基于代码功能建立源语法节点与目标语法节点的映射关系,从而对具有相同代码功能的两种编程语言的语法节点进行替换。
在本申请的一个实施例中,可以获取用于表示源编程语言与目标编程语言之间的映射关系的语法映射数据库;根据源语法节点类型的代码功能,在语法映射数据库中查找与源语法节点类型具有相同代码功能的目标语法节点类型;基于目标语法节点类型将语法结构树中的各个源语法节点替换为对应于目标编程语言的目标语法节点,得到由目标语法节点构成的目标语法结构树。
在本申请的一个实施例中,可以预先对各种不同的编程语言建立语法映射数据库,当需要进行语法节点替换时,可以直接在相应的语法映射数据库中进行查询。针对用于表示源编程语言与目标编程语言之间的映射关系的语法映射数据库,本申请实施例可以先采集基于源编程语言的源语法节点类型以及基于目标编程语言的目标语法节点类型,然后分别获取源语法节点类型的代码功能以及目标语法节点类型的代码功能,最后再将具有相同代码功能的源语法节点类型和目标语法节点类型建立映射关系,形成语法映射数据库。在本申请实施例中,对于源语法节点类型以及目标语法节点类型可以进行筛选得到适用于区块链网络的语法节点类型,仅对能够适配区块链场景的语法节点类型进行映射,可以简化语法映射数据库,提高语法映射数据库的可用性。
图6示意性地示出了本申请实施例在一应用场景中由语法映射数据库提供的语法节点类型映射关系示意图,该语法映射数据库为编程语言Go和编程语言JavaScript建立了语法节点类型的映射关系。如图6所示,编程语言Go的函数语法节点类型为ast.FuncDecl,而在编程语言JavaScript中与之具有相同代码功能的函数语法节点类型为FunctionDeclartion。相应的,实现其他代码功能的两种编程语言的语法节点类型之间均建立了一一对应的映射关系。
通过查询语法映射数据库,可以对具有映射关系的源语法节点和目标语法节点进行逐个替换,并最终得到由目标语法节点构成的目标语法结构树。图7示意性地示出了本申请实施例在一应用场景中语法结构树的结构转换示意图,在该应用场景中,对于语法节点的类型确认和替换算法可以集成为一个抽象语法树映射转换器,将编程语言Go的抽象语法树传入抽象语法树映射转换器后,抽象语法树映射转换器可以对其语法节点进行类型确认,并基于确定的源语法节点类型查找与之具有相同代码功能的目标语法节点类型,利用图6所示的映射关系可以将各个源语法节点替换为相应的目标语法节点,最终得到编程语言JavaScript的抽象语法树。
在步骤S350中,对目标语法结构树进行反向解析,得到智能合约的目标语言代码,目标语言代码是基于目标编程语言编写的合约代码。
图8示意性地示出了本申请实施例在一应用场景中语法结构树的反向解析示意图,在该应用场景中,对目标语法结构树进行反向解析的算法可以集成为一个抽象语法树反解析器,将编程语言JavaScript的抽象语法树传入抽象语法树反解析器后,抽象语法树反解析器可以对其进行语法结构的反向解析,生成基于JavaScript编程语言的智能合约。
应当注意,尽管在附图中以特定顺序描述了本申请中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
以下介绍本申请的装置实施例,可以用于执行本申请上述实施例中的智能合约的处理方法。图9示意性地示出了本申请实施例提供的智能合约的处理装置的结构框图。如图9所示,智能合约的处理装置900主要可以包括:源代码获取模块910,被配置为获取智能合约的源语言代码,源语言代码是基于源编程语言编写的合约代码;语法结构解析模块920,被配置为对源语言代码进行语法结构解析得到源语言代码的源语法结构树;节点类型确定模块930,被配置为遍历源语法结构树中的源语法节点,得到各个源语法节点的源语法节点类型;节点替换模块940,被配置为根据源语法节点类型的代码功能,将源语法结构树中的各个源语法节点替换为对应于目标编程语言的目标语法节点,得到由目标语法节点构成的目标语法结构树;反向解析模块950,被配置为对目标语法结构树进行反向解析,得到智能合约的目标语言代码,目标语言代码是基于目标编程语言编写的合约代码。
在本申请的一些实施例中,基于以上各实施例,语法结构解析模块920包括:词法分析单元,被配置为对源语言代码进行词法分析,得到与源语言代码相对应的词法单元序列;语法分析单元,被配置为按照词法单元序列中的各个词法单元的语法结构关系,将词法单元序列由数组结构转换为树形结构,得到源语言代码的源语法结构树。
在本申请的一些实施例中,基于以上各实施例,词法分析单元包括:字符流分割子单元,被配置为依次读取源语言代码中的代码字符流,并按照构词规则将代码字符流分割为字符串序列;词法单元识别子单元,被配置为识别字符串序列中的词法单元,得到与字符串序列相对应的词法单元序列。
在本申请的一些实施例中,基于以上各实施例,节点替换模块940包括:数据库获取单元,被配置为获取用于表示源编程语言与目标编程语言之间的映射关系的语法映射数据库;节点查找单元,被配置为根据源语法节点类型的代码功能,在语法映射数据库中查找与源语法节点类型具有相同代码功能的目标语法节点类型;节点替换单元,被配置为基于目标语法节点类型将语法结构树中的各个源语法节点替换为对应于目标编程语言的目标语法节点,得到由目标语法节点构成的目标语法结构树。
在本申请的一些实施例中,基于以上各实施例,数据库获取单元包括:节点类型采集子单元,被配置为采集基于源编程语言的源语法节点类型以及基于目标编程语言的目标语法节点类型;代码功能获取子单元,被配置为分别获取源语法节点类型的代码功能以及目标语法节点类型的代码功能;映射关系建立子单元,被配置为将具有相同代码功能的源语法节点类型和目标语法节点类型建立映射关系,形成语法映射数据库。
在本申请的一些实施例中,基于以上各实施例,数据库获取单元还包括:节点类型筛选子单元,被配置为对源语法节点类型以及目标语法节点类型进行筛选得到适用于区块链网络的语法节点类型。
在本申请的一些实施例中,基于以上各实施例,源代码获取模块910包括:测试请求接收单元,被配置为通过区块链网络接收由合约测试节点发出的合约测试请求;第一签名校验单元,被配置为从合约测试请求中获取合约测试节点的数字签名,并对数字签名进行签名校验;第一代码获取单元,被配置为若校验通过,则根据合约测试请求获取待测试智能合约的源语言代码。
在本申请的一些实施例中,基于以上各实施例,智能合约的处理装置900还包括:源代码执行模块,被配置为执行源语言代码,得到基于源编程语言的待测试智能合约的源语言测试结果;目标代码执行模块,被配置为执行目标语言代码,得到基于目标编程语言的待测试智能合约的目标语言测试结果;测试结果确定模块,被配置为根据源语言测试结果以及目标语言测试结果确定待测试智能合约的多语言测试结果。
在本申请的一些实施例中,基于以上各实施例,测试结果确定模块包括:测试结果认证单元,被配置为将源语言测试结果以及目标语言测试结果广播至区块链网络,以通过区块链网络对源语言测试结果以及目标语言测试结果进行共识认证;测试结果确定单元,被配置为当共识认证通过时,将源语言测试结果以及目标语言测试结果确定为待测试智能合约的多语言测试结果。
在本申请的一些实施例中,基于以上各实施例,源代码获取模块910包括:部署请求接收单元,被配置为通过区块链网络接收由合约部署节点发出的合约部署请求;第二签名校验单元,被配置为从合约部署请求中获取合约部署节点的数字签名,并对数字签名进行签名校验;第二代码获取单元,被配置为若校验通过,则根据合约部署请求获取待部署至区块链网络的智能合约的源语言代码。
在本申请的一些实施例中,基于以上各实施例,智能合约的处理装置900还包括:合约摘要模块,被配置为对智能合约的目标语言代码进行摘要处理,以得到作为合约地址信息的智能合约摘要;合约保存模块,被配置为建立智能合约的目标语言代码与合约地址信息的关联关系,并将智能合约的目标语言代码保存至区块链。
在本申请的一些实施例中,基于以上各实施例,源代码获取模块910包括:合约摘要获取单元,被配置为响应于智能合约调用请求,获取待调用智能合约的智能合约摘要;第三代码获取单元,被配置为根据智能合约摘要在区块链上进行检索,得到与智能合约摘要相关联的待调用智能合约的源语言代码。
本申请各实施例中提供的智能合约的处理装置的具体细节已经在对应的方法实施例中进行了详细的描述,此处不再赘述。
图10示意性地示出了用于实现本申请实施例的电子设备的计算机***结构框图。
需要说明的是,图10示出的电子设备的计算机***1000仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图10所示,计算机***1000包括中央处理器1001(Central Processing Unit,CPU),其可以根据存储在只读存储器1002(Read-Only Memory,ROM)中的程序或者从存储部分1008加载到随机访问存储器1003(Random Access Memory,RAM)中的程序而执行各种适当的动作和处理。在随机访问存储器1003中,还存储有***操作所需的各种程序和数据。中央处理器1001、在只读存储器1002以及随机访问存储器1003通过总线1004彼此相连。输入/输出接口1005(Input/Output接口,即I/O接口)也连接至总线1004。
以下部件连接至输入/输出接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如局域网卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至输入/输出接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
特别地,根据本申请的实施例,各个方法流程图中所描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被中央处理器1001执行时,执行本申请的***中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本申请实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
Claims (13)
1.一种智能合约的处理方法,其特征在于,包括:
获取智能合约的源语言代码,所述源语言代码是基于源编程语言编写的合约代码;
对所述源语言代码进行语法结构解析得到所述源语言代码的源语法结构树;
遍历所述源语法结构树中的源语法节点,得到各个所述源语法节点的源语法节点类型;
根据所述源语法节点类型的代码功能,将所述源语法结构树中的各个源语法节点替换为对应于目标编程语言的目标语法节点,得到由所述目标语法节点构成的目标语法结构树;
对所述目标语法结构树进行反向解析,得到所述智能合约的目标语言代码,所述目标语言代码是基于所述目标编程语言编写的合约代码;
执行所述源语言代码,得到基于源编程语言的待测试智能合约的源语言测试结果;
执行所述目标语言代码,得到基于目标编程语言的待测试智能合约的目标语言测试结果;
根据所述源语言测试结果以及所述目标语言测试结果确定所述待测试智能合约的多语言测试结果;
将所述源语言测试结果以及所述目标语言测试结果广播至所述区块链网络,以通过所述区块链网络对所述源语言测试结果以及所述目标语言测试结果进行共识认证;
当共识认证通过时,将所述源语言测试结果以及所述目标语言测试结果确定为所述待测试智能合约的多语言测试结果。
2.根据权利要求1所述的智能合约的处理方法,其特征在于,所述对所述源语言代码进行语法结构解析得到所述源语言代码的源语法结构树,包括:
对所述源语言代码进行词法分析,得到与所述源语言代码相对应的词法单元序列;
按照所述词法单元序列中的各个词法单元的语法结构关系,将所述词法单元序列由数组结构转换为树形结构,得到所述源语言代码的源语法结构树。
3.根据权利要求2所述的智能合约的处理方法,其特征在于,所述对所述源语言代码进行词法分析,得到与所述源语言代码相对应的词法单元序列,包括:
依次读取所述源语言代码中的代码字符流,并按照构词规则将所述代码字符流分割为字符串序列;
识别所述字符串序列中的词法单元,得到与所述字符串序列相对应的词法单元序列。
4.根据权利要求1所述的智能合约的处理方法,其特征在于,所述根据所述源语法节点类型的代码功能,将所述源语法结构树中的各个源语法节点替换为对应于目标编程语言的目标语法节点,得到由所述目标语法节点构成的目标语法结构树,包括:
获取用于表示所述源编程语言与目标编程语言之间的映射关系的语法映射数据库;
根据所述源语法节点类型的代码功能,在所述语法映射数据库中查找与所述源语法节点类型具有相同代码功能的目标语法节点类型;
基于所述目标语法节点类型将所述语法结构树中的各个源语法节点替换为对应于目标编程语言的目标语法节点,得到由所述目标语法节点构成的目标语法结构树。
5.根据权利要求4所述的智能合约的处理方法,其特征在于,所述获取用于表示所述源编程语言与目标编程语言之间的映射关系的语法映射数据库,包括:
采集基于源编程语言的源语法节点类型以及基于目标编程语言的目标语法节点类型;
分别获取所述源语法节点类型的代码功能以及所述目标语法节点类型的代码功能;
将具有相同代码功能的源语法节点类型和目标语法节点类型建立映射关系,形成语法映射数据库。
6.根据权利要求5所述的智能合约的处理方法,其特征在于,在采集基于源编程语言的源语法节点类型以及基于目标编程语言的目标语法节点类型之后,所述方法还包括:
对所述源语法节点类型以及所述目标语法节点类型进行筛选得到适用于区块链网络的语法节点类型。
7.根据权利要求1所述的智能合约的处理方法,其特征在于,所述获取智能合约的源语言代码,包括:
通过区块链网络接收由合约测试节点发出的合约测试请求;
从所述合约测试请求中获取所述合约测试节点的数字签名,并对所述数字签名进行签名校验;
若校验通过,则根据所述合约测试请求获取待测试智能合约的源语言代码。
8.根据权利要求1所述的智能合约的处理方法,其特征在于,所述获取智能合约的源语言代码,包括:
通过区块链网络接收由合约部署节点发出的合约部署请求;
从所述合约部署请求中获取所述合约部署节点的数字签名,并对所述数字签名进行签名校验;
若校验通过,则根据所述合约部署请求获取待部署至区块链网络的智能合约的源语言代码。
9.根据权利要求8所述的智能合约的处理方法,其特征在于,在得到所述智能合约的目标语言代码之后,所述方法还包括:
对所述智能合约的目标语言代码进行摘要处理,以得到作为合约地址信息的智能合约摘要;
建立所述智能合约的目标语言代码与所述合约地址信息的关联关系,并将所述智能合约的目标语言代码保存至区块链。
10.根据权利要求1所述的智能合约的处理方法,其特征在于,所述获取智能合约的源语言代码,包括:
响应于智能合约调用请求,获取待调用智能合约的智能合约摘要;
根据所述智能合约摘要在区块链上进行检索,得到与所述智能合约摘要相关联的所述待调用智能合约的源语言代码。
11.一种智能合约的处理装置,其特征在于,包括:
源代码获取模块,被配置为获取智能合约的源语言代码,所述源语言代码是基于源编程语言编写的合约代码;
语法结构解析模块,被配置为对所述源语言代码进行语法结构解析得到所述源语言代码的源语法结构树;
节点类型确定模块,被配置为遍历所述源语法结构树中的源语法节点,得到各个所述源语法节点的源语法节点类型;
节点替换模块,被配置为根据所述源语法节点类型的代码功能,将所述源语法结构树中的各个源语法节点替换为对应于目标编程语言的目标语法节点,得到由所述目标语法节点构成的目标语法结构树;
反向解析模块,被配置为对所述目标语法结构树进行反向解析,得到所述智能合约的目标语言代码,所述目标语言代码是基于所述目标编程语言编写的合约代码;
源代码执行模块,被配置为执行所述源语言代码,得到基于源编程语言的待测试智能合约的源语言测试结果;
目标代码执行模块,被配置为执行所述目标语言代码,得到基于目标编程语言的待测试智能合约的目标语言测试结果;
测试结果确定模块,被配置为根据所述源语言测试结果以及所述目标语言测试结果确定所述待测试智能合约的多语言测试结果;
所述测试结果确定模块包括:
测试结果认证单元,被配置为将所述源语言测试结果以及所述目标语言测试结果广播至所述区块链网络,以通过所述区块链网络对所述源语言测试结果以及所述目标语言测试结果进行共识认证;
测试结果确定单元,被配置为当共识认证通过时,将所述源语言测试结果以及所述目标语言测试结果确定为所述待测试智能合约的多语言测试结果。
12.一种计算机可读介质,其上存储有计算机程序,该计算机程序被处理器执行时实现权利要求1至10中任意一项所述的智能合约的处理方法。
13.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1至10中任意一项所述的智能合约的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010886761.7A CN112104709B (zh) | 2020-08-28 | 2020-08-28 | 智能合约的处理方法、装置、介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010886761.7A CN112104709B (zh) | 2020-08-28 | 2020-08-28 | 智能合约的处理方法、装置、介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112104709A CN112104709A (zh) | 2020-12-18 |
CN112104709B true CN112104709B (zh) | 2022-06-07 |
Family
ID=73758164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010886761.7A Active CN112104709B (zh) | 2020-08-28 | 2020-08-28 | 智能合约的处理方法、装置、介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112104709B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112015396B (zh) * | 2020-08-28 | 2024-02-13 | 深圳赛安特技术服务有限公司 | 基于dsl的智能合约代码生成方法、装置、设备及存储介质 |
CN112612482A (zh) * | 2020-12-28 | 2021-04-06 | 杭州趣链科技有限公司 | 执行智能合约的方法、装置、设备及存储介质 |
CN112988163B (zh) * | 2021-04-01 | 2024-02-02 | 中国工商银行股份有限公司 | 编程语言智能适配方法、装置、电子设备和介质 |
CN113472512A (zh) * | 2021-06-10 | 2021-10-01 | 东软集团股份有限公司 | 智能合约执行方法、装置、存储介质及电子设备 |
CN113778440B (zh) * | 2021-08-18 | 2024-01-26 | 上海瑞家信息技术有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
CN114168159A (zh) * | 2021-12-14 | 2022-03-11 | 深圳前海微众银行股份有限公司 | 智能合约部署方法、交易方法、装置及电子设备 |
CN117014445B (zh) * | 2023-10-07 | 2024-03-01 | 腾讯科技(深圳)有限公司 | 一种基于区块链的数据处理方法、装置、设备及存储介质 |
CN117574320B (zh) * | 2024-01-15 | 2024-04-26 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、计算机可读介质及电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108536445A (zh) * | 2018-03-28 | 2018-09-14 | 成都链安科技有限公司 | 面向区块链智能合约的高度自动化形式化验证***及方法 |
CN110659494A (zh) * | 2019-09-27 | 2020-01-07 | 重庆邮电大学 | 一种可扩展的智能合约漏洞检测方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8762962B2 (en) * | 2008-06-16 | 2014-06-24 | Beek Fund B.V. L.L.C. | Methods and apparatus for automatic translation of a computer program language code |
CN109523383B (zh) * | 2018-10-30 | 2022-01-21 | 广州斯拜若科技有限公司 | 一种智能合约转换***及方法 |
CN110532176B (zh) * | 2019-07-31 | 2024-07-05 | 平安科技(深圳)有限公司 | 一种智能合约的形式化验证方法、电子装置及存储介质 |
CN111249736B (zh) * | 2020-01-16 | 2023-03-21 | 网易(杭州)网络有限公司 | 代码处理方法及装置 |
CN111309301B (zh) * | 2020-01-17 | 2023-09-01 | 广东三维家信息科技有限公司 | 程序语言转换方法、装置和转换设备 |
CN111240772B (zh) * | 2020-01-22 | 2024-06-18 | 腾讯科技(深圳)有限公司 | 一种基于区块链的数据处理方法、装置及存储介质 |
-
2020
- 2020-08-28 CN CN202010886761.7A patent/CN112104709B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108536445A (zh) * | 2018-03-28 | 2018-09-14 | 成都链安科技有限公司 | 面向区块链智能合约的高度自动化形式化验证***及方法 |
CN110659494A (zh) * | 2019-09-27 | 2020-01-07 | 重庆邮电大学 | 一种可扩展的智能合约漏洞检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112104709A (zh) | 2020-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112104709B (zh) | 智能合约的处理方法、装置、介质及电子设备 | |
CN110297689B (zh) | 智能合约执行方法、装置、设备及介质 | |
CN112187558B (zh) | 数据校验方法、装置、电子设备 | |
CN112070608B (zh) | 信息处理方法、装置、介质及电子设备 | |
CN111736840A (zh) | 小程序应用的编译方法、运行方法、存储介质及电子设备 | |
CN110858172A (zh) | 一种自动化测试代码生成方法和装置 | |
US20220138074A1 (en) | Method, electronic device and computer program product for processing data | |
CN111488573A (zh) | 链接库检测方法、装置、电子设备和计算机可读存储介质 | |
CN113742005A (zh) | 一种平台对接方法和装置 | |
CN110737631A (zh) | 一种基于Flink引擎的数据解析方法及装置 | |
CN113778897B (zh) | 接口的自动测试方法、装置、设备及存储介质 | |
CN113900704A (zh) | 应用程序安装包的发布方法、装置、可读介质及电子设备 | |
CN113238739A (zh) | 一种插件开发和数据获取方法、装置、电子设备及介质 | |
CN116795701A (zh) | 一种接口程序的通用测试实例的生成方法和装置 | |
US8607201B2 (en) | Augmenting visualization of a call stack | |
CN110457040B (zh) | 用于源代码分布式构建的方法和装置 | |
CN113672233B (zh) | 一种基于Redfish的服务器带外管理方法、装置及设备 | |
CN111400623B (zh) | 用于搜索信息的方法和装置 | |
CN115640279A (zh) | 一种数据血缘关系的构建方法和装置 | |
CN114138679A (zh) | 测试数据构造方法、装置、计算机可读介质及电子设备 | |
CN113050987B (zh) | 一种接口文档的生成方法、装置、存储介质及电子设备 | |
CN110968497A (zh) | 基于树形***的请求校验方法、装置、介质及电子设备 | |
CN115022312A (zh) | 多智能合约引擎的实现方法、装置、电子设备及存储介质 | |
CN114416103A (zh) | 代码编译方法及装置、计算机可读介质、电子设备 | |
CN116467156A (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 |