CN117952748A - 智能合约处理方法、装置、设备、存储介质和程序产品 - Google Patents

智能合约处理方法、装置、设备、存储介质和程序产品 Download PDF

Info

Publication number
CN117952748A
CN117952748A CN202211366101.1A CN202211366101A CN117952748A CN 117952748 A CN117952748 A CN 117952748A CN 202211366101 A CN202211366101 A CN 202211366101A CN 117952748 A CN117952748 A CN 117952748A
Authority
CN
China
Prior art keywords
contract
intelligent
execution
result
transaction
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.)
Pending
Application number
CN202211366101.1A
Other languages
English (en)
Inventor
曾毅
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202211366101.1A priority Critical patent/CN117952748A/zh
Publication of CN117952748A publication Critical patent/CN117952748A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本申请涉及一种智能合约处理方法、装置、计算机设备、存储介质和程序产品。所述方法涉及区块链,包括:接收合约调用请求,若确定对合约调用请求的交易验证通过,获取与合约调用请求对应的交易业务数据,识别交易业务数据中的管道符,根据管道符对交易业务数据进行分割处理,获得分割处理后的合约调用数组。根据合约调用数组中各智能合约的调用顺序,依次调用并执行各智能合约对应的合约函数,直至合约调用数组中的所有智能合约调用结束,生成与交易业务数据对应的业务处理结果。采用本方法利用管道符可实现对不同的智能合约的灵活调用,在满足实际业务需求的同时,减少了实际业务处理过程中的繁琐操作,提升了对智能合约调用的处理工作效率。

Description

智能合约处理方法、装置、设备、存储介质和程序产品
技术领域
本申请涉及区块链技术领域,特别是涉及一种智能合约处理方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术
随着区块链技术的发展,智能合约技术在不同区块链平台上得到推广应用,其中,区块链技术可通过块链式数据结构验证和存储数据,并根据分布式节点共识算法生成和更新数据,同时还可利用密码学的方式保证数据传输和访问的安全,以及通过执行由自动化脚本代码组成的智能合约,来实现实际业务场景下的业务逻辑。其中,智能合约具体可以理解为在区块链网络上运行的程序,区块链网络可以作为执行智能合约的操作系统,而智能合约的执行过程可以理解为操作系统执行可运行程序的执行过程。
传统技术中,基于区块链网络,同一交易业务通常只能调用一个智能合约的函数,如果需要调用多个合约,则需要采用合约改造的方式,以跨合约调用或者事件触发的方式在合约内部实现两个合约的逻辑串行处理。比如,如果实际业务执行过程中,比如需要调用A合约、B合约两个合约时,则需要改造A合约的逻辑代码,通过改造逻辑代码的方式,实现在A合约中配置跨合约调用的功能,从而通过跨合约调用功能实现对B合约的调用。
然而传统的改造合约的方式,由于需要预先进行合约改造,而不能根据用户自身的业务需求,实时进行合约调用的修改,比如调用的合约数量、以及每个合约各自的调用顺序等,都无法直接进行调整和修改,只能采用从头改造合约的方式。因此,传统上采用合约改造实现多个智能合约的调用的方式,不具有灵活性,无法满足实际业务场景的不同逻辑处理需求,存在智能合约调用处理工作效率低的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种能够灵活调用不同智能合约以满足实际业务需求,提升智能合约调用处理工作效率的智能合约处理方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种智能合约处理方法。所述方法包括:
接收合约调用请求,若确定对所述合约调用请求的交易验证通过,获取与所述合约调用请求对应的交易业务数据;
识别所述交易业务数据中的管道符,并根据所述管道符对所述交易业务数据进行分割处理,获得分割处理后的合约调用数组;
根据所述合约调用数组中各智能合约的调用顺序,依次调用并执行各所述智能合约对应的合约函数,直至所述合约调用数组中的所有智能合约调用结束,生成与所述交易业务数据对应的业务处理结果。
在一个实施例中,在接收合约调用请求之前,还包括:
根据业务执行逻辑、以及区块链网络支持的交易数据结构,构建交易业务数据;所述交易业务数据包括管道符、待调用的智能合约、待执行的合约函数、以及需传入的合约参数;
获取所述交易业务数据的签名数据;所述签名数据用于进行交易验证。
第二方面,本申请还提供了一种智能合约处理装置。所述装置包括:
交易业务数据获取模块,用于接收合约调用请求,若确定对所述合约调用请求的交易验证通过,获取与所述合约调用请求对应的交易业务数据;
管道符识别处理模块,用于识别所述交易业务数据中的管道符,并根据所述管道符对所述交易业务数据进行分割处理,获得分割处理后的合约调用数组;
合约调用处理模块,用于根据所述合约调用数组中各智能合约的调用顺序,依次调用并执行各所述智能合约对应的合约函数,直至所述合约调用数组中的所有智能合约调用结束,生成与所述交易业务数据对应的业务处理结果。
第三方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
接收合约调用请求,若确定对所述合约调用请求的交易验证通过,获取与所述合约调用请求对应的交易业务数据;
识别所述交易业务数据中的管道符,并根据所述管道符对所述交易业务数据进行分割处理,获得分割处理后的合约调用数组;
根据所述合约调用数组中各智能合约的调用顺序,依次调用并执行各所述智能合约对应的合约函数,直至所述合约调用数组中的所有智能合约调用结束,生成与所述交易业务数据对应的业务处理结果。
第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
接收合约调用请求,若确定对所述合约调用请求的交易验证通过,获取与所述合约调用请求对应的交易业务数据;
识别所述交易业务数据中的管道符,并根据所述管道符对所述交易业务数据进行分割处理,获得分割处理后的合约调用数组;
根据所述合约调用数组中各智能合约的调用顺序,依次调用并执行各所述智能合约对应的合约函数,直至所述合约调用数组中的所有智能合约调用结束,生成与所述交易业务数据对应的业务处理结果。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
接收合约调用请求,若确定对所述合约调用请求的交易验证通过,获取与所述合约调用请求对应的交易业务数据;
识别所述交易业务数据中的管道符,并根据所述管道符对所述交易业务数据进行分割处理,获得分割处理后的合约调用数组;
根据所述合约调用数组中各智能合约的调用顺序,依次调用并执行各所述智能合约对应的合约函数,直至所述合约调用数组中的所有智能合约调用结束,生成与所述交易业务数据对应的业务处理结果。
上述智能合约处理方法、装置、计算机设备、存储介质和计算机程序产品中,通过接收合约调用请求,若确定对合约调用请求的交易验证通过,获取与合约调用请求对应的交易业务数据,并识别交易业务数据中的管道符,从而根据管道符对交易业务数据进行分割处理,获得分割处理后的合约调用数组,以根据合约调用数组中各智能合约的调用顺序,依次调用并执行各智能合约对应的合约函数,直至合约调用数组中的所有智能合约调用结束,生成与交易业务数据对应的业务处理结果。实现了根据管道符对待调用的多个智能合约的连接、以及依次处理,能够灵活调用不同的智能合约以满足实际业务需求,直至所有智能合约调用结束,生成得到业务处理结果,而无需对不同智能合约进行合约改造,减少实际业务处理过程中的繁琐操作以及资源消耗,进一步提升智能合约调用处理工作效率。
附图说明
图1为一个实施例中智能合约处理方法的应用环境图;
图2为一个实施例中智能合约处理方法的流程示意图;
图3为一个实施例中生成与交易业务数据对应的业务处理结果的流程示意图;
图4为另一个实施例中智能合约处理方法的流程示意图;
图5为一个实施例中智能合约处理方法串行交易的打包流程示意图;
图6为一个实施例中智能合约处理装置的结构框图;
图7为一个实施例中智能合约处理装置的结构框图;
图8为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的智能合约处理方法,涉及区块链技术以及云技术,其中,区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(即Blockchain),其本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块,进而区块链具体可以包括区块链底层平台、平台产品服务层以及应用服务层。而云技术(Cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术,也就是说,云技术是基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。
其中,区块链底层平台可以包括用户管理、基础服务、智能合约以及运营管理等处理模块。其中,用户管理模块负责所有区块链参与者的身份信息管理,包括维护公私钥生成(账户管理)、密钥管理以及用户真实身份和区块链地址对应关系维护(权限管理)等,并且在授权的情况下,监管和审计某些真实身份的交易情况,提供风险控制的规则配置(风控审计);基础服务模块部署在所有区块链节点设备上,用来验证业务请求的有效性,并对有效请求完成共识后记录到存储上,对于一个新的业务请求,基础服务先对接口适配解析和鉴权处理(接口适配),然后通过共识算法将业务信息加密(共识管理),在加密之后完整一致的传输至共享账本上(网络通信),并进行记录存储;智能合约模块负责合约的注册发行以及合约触发和合约执行,开发人员可以通过某种编程语言定义合约逻辑,发布到区块链上(合约注册),根据合约条款的逻辑,调用密钥或者其它的事件触发执行,完成合约逻辑,同时还提供对合约升级注销的功能;运营管理模块主要负责产品发布过程中的部署、配置的修改、合约设置、云适配以及产品运行中的实时状态的可视化输出,例如:告警、管理网络情况、管理节点设备健康状态等。同样地,平台产品服务层提供典型应用的基本能力和实现框架,开发人员可以基于这些基本能力,叠加业务的特性,完成业务逻辑的区块链实现。应用服务层提供基于区块链方案的应用服务给业务参与方进行使用。
本申请实施例提供的智能合约处理方法,涉及区块链技术以及云技术,可以应用于如图1所示的应用环境中。参照图1可知,本申请实施例提供的智能合约处理方法,具体应用于由客户端102、多个节点104(接入网络中的任意形式的计算设备,如服务器、终端设备)通过网络通信的形式连接形成的分布式系统。其中,以分布式系统为区块链系统为例,分布式系统100由多个节点104(接入网络中的任意形式的计算设备,如服务器、用户终端)和客户端102形成,节点之间形成组成的点对点(P2P,PeerToPeer)网络,P2P协议是一个运行在传输控制协议(即TCP,Transmission Control Protocol)协议之上的应用层协议。其中,客户端102、以及节点104可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑、物联网设备和便携式可穿戴设备,物联网设备可为智能音箱、智能电视、智能空调、智能车载设备、飞行器等,便携式可穿戴设备可为智能手表、智能手环、头戴设备等。
其中,在分布式系统中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作系统层和应用层。具体地,参见图1示出的区块链系统中各节点的功能,涉及的功能包括:
1)路由,节点具有的基本功能,用于支持节点之间的通信。
2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链系统中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
例如,应用实现的业务包括:2.1)钱包,用于提供进行电子货币的交易的功能,包括发起交易(即将当前交易的交易记录发送给区块链系统中的其他节点,其他节点验证成功后,作为承认交易有效的响应,将交易的记录数据存入区块链的临时区块中,其中,钱包还支持查询电子货币地址中剩余的电子货币。2.2)共享账本,用于提供账目数据的存储、查询和修改等操作的功能,将对账目数据的操作的记录数据发送到区块链系统中的其他节点,其他节点验证有效后,作为承认账目数据有效的响应,将记录数据存入临时区块中,并向发起操作的节点发送确认。2.3)智能合约,可以理解为计算机化的协议,用于执行某个合约的条款,通过部署在共享账本上的用于在满足一定条件时而执行的代码实现,根据实际的业务需求代码用于完成自动化的交易,例如查询买家所购买商品的物流状态,在买家签收货物后将买家的电子货币转移到商户的地址。其中,智能合约不仅限于执行用于交易的合约,还可以执行对接收的信息进行处理的合约。
3)区块链,包括一系列按照产生的先后时间顺序相互接续的区块(Block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点提交的记录数据。
进一步地,本申请实施例的提供的智能合约函数,具体调用部署在区块链中的应用所实现的智能合约调用、执行、处理功能,可根据实际业务需求而实现特定业务。具体来说,分布式系统100中的客户端102通过触发交易业务,则节点104通过接收合约调用请求,并在确定对合约调用请求的交易验证通过时,获取与合约调用请求对应的交易业务数据,进一步识别交易业务数据中的管道符,以根据管道符对交易业务数据进行分割处理,获得分割处理后的合约调用数组。进一步地,节点104可根据合约调用数组中各智能合约的调用顺序,依次调用并执行各智能合约对应的合约函数,直至合约调用数组中的所有智能合约调用结束,生成与交易业务数据对应的业务处理结果,从而将业务处理结果反馈至客户端102。
在一个实施例中,如图2所示,提供了一种智能合约处理方法,以该方法应用于图1中的分布式系统为例进行说明,具体包括以下步骤:
步骤S202,接收合约调用请求,若确定对合约调用请求的交易验证通过,获取与合约调用请求对应的交易业务数据。
其中,根据不同的实际业务需求,可确定与各实际业务需求匹配的业务执行逻辑,而不同的业务执行逻辑可调用所需的智能合约,通过执行智能合约,执行相应的交易业务,以获得与实际业务需求对应的业务处理结果。
举例来说,比如用户在某应用平台进行注册、报名活动、以及参与活动时,涉及不同的业务执行逻辑,具体包括注册执行逻辑、活动报名执行逻辑、以及活动参与执行逻辑。其中,不同的业务执行逻辑各自对应相应的智能合约,具体可包括与注册执行逻辑对应的注册会员合约A、与活动报名执行逻辑对应的活动报名合约B、以及与活动参与执行逻辑对应的活动参与合约C,具体来说,调用注册会员合约A后,可实现用户注册后返回会员号的功能。进一步地,调用并执行活动报名合约B时,则需要注册合约A返回的会员号作为参数,报名成功后可返回门票号,而调用并执行活动参与合约C时,则需要将活动报名合约B返回的门票号作为参数传入,从而可为用户提供参与实际活动的接口,比如通过接口参与实际的产品购买活动等。
具体地,在获取与合约调用请求对应的交易业务数据之前,需要对合约调用请求进行交易验证,只有当确定合约调用请求的交易验证通过时,才进一步执行获取与合约调用请求对应的交易业务数据的操作。其中,交易业务数据具体可以包括管道符、通过管道符连接的与交易业务的执行逻辑对应的智能合约、智能合约对应的合约函数、以及需传入的合约参数等。
进一步地,在将根据与实际业务需求匹配的业务执行逻辑、以区块链网络支持的交易数据结构,构造的交易业务数据,广播至区块链网络中后,如果检测到合约调用请求,则在获取合约调用请求对应交易业务数据之前,需要区块链网络中的各区块链节点对交易业务数据进行交易验证。
具体来说,根据与实际业务需求对应的业务执行逻辑,可触发处理业务执行逻辑的合约调用请求,而区块链网络中的各区块链节点,则是对与交易业务数据中的交易业务字段进行交易验证。其中,交易业务字段具体包括签名数据、管道符数量以及保存点。可以理解的是,在接收到合约调用请求、且确定对合约调用请求的交易验证通过时,即对交易业务数据对应的各交易业务字段的验证通过时,则进一步获取与合约调用请求对应的交易业务数据。
其中,交易业务数据具体可以包括管道符、与交易业务的执行逻辑对应的智能合约、智能合约对应的合约函数、以及需传入的合约参数等。具体来说,交易业务数据可以理解为通过管道符连接一个或多个字符串,比如为多个字符串时,则可以包括由管道符连接的一个或多个智能合约名的字符串、由管道符连接的一个或多个合约函数名的字符串、以及由管道符连接的一个或多个合约参数的字符串,其中,由于合约参数通常需要设置具体取值,则由管道符连接的合约参数的字符串中,还包括有合约参数的具体参数值。
举例来说,交易业务数据为通过管道符连接的多个字符串时,某用户UserA根据实际业务需求,需要依次调用智能合约A(即ConstractA,其对应的合约函数为MethodA)和智能合约B(即ConstractB,其对应的合约函数为MethodB),并且需要将ConstractA的输出结果作为ConstractB的合约函数MethodB的参数Input1,则可构建得到字符串ContractA|ContractB、字符串MethodA|MethodB、以及字符串|Input1={0}等,作为交易业务的业务属性数据。
同样地,交易业务数据为一个字符串时,可以包括由管道符连接的智能合约、智能合约对应的合约函数、以及需传入的合约参数组成的字符串。比如某用户UserA根据实际业务需求,需要依次调用智能合约A(即ConstractA,其对应的合约函数为MethodA)和智能合约B(即ConstractB,其对应的合约函数为MethodB),并且需要将ConstractA的输出结果作为ConstractB的合约函数MethodB的参数Input1,其中区块链交易的数据结构中“调用的合约名、调用的函数名、以及传入的合约参数”作为一个字符串出现,则可构建得到ContractA.MethodA|ContractB.MethodB--Input1={0}作为完整的一个字符串出现,即作为交易业务的业务属性数据。
步骤S204,识别交易业务数据中的管道符,并根据管道符对交易业务数据进行分割处理,获得分割处理后的合约调用数组。
其中,交易业务数据可以看作是携带有管道符的一个或多个字符串,通过对交易业务数据进行识别,以识别出其中的管道符,并获取管道符所在的位置,进而根据管道符对交易业务数据进行分割处理,获得分割处理后的合约调用数组。
具体地,在识别出交易业务数据中的管道符后,根据管道符在交易业务数据中的所在位置,对交易业务数据进行分割处理,比如交易业务数据包括3个字符串时,即智能合约、合约函数以及合约参数各自对应一个字符串,则基于每个字符串中识别到的管道符“|”进行分割处理,将字符串划分为位于管道符“|”之前、以及位于管道符“|”之后的两个部分,比如字符串ContractA|ContractB则划分为两个智能合约ContractA、以及ContractB,同样地,字符串MethodA|MethodB划分为两个合约函数MethodA、以及MethodB。同样地,|Input1={0},则可以理解为第一个智能合约没有参数输入,第二个智能合约(即ConstractB)的合约函数MethodB的参数Input1,是第一个智能合约(即ConstractA)的输出结果。
进一步地,通过根据管道符“|”,对交易业务数据进行分割处理,获得分割处理后的合约调用数组,比如[ContractA MethodA|ContractB MethodB Input1={0}]的形式,也可以是[ContractA|ContractB,MethodA|MethodB,|Input1={0}]的形式,即只要是有序的、可识别的合约调用数组即可,不对数组的具体形式进行限定。
同样地,如果一个字符串中存在多个管道符“|”时,比如字符串ContractA|ContractB|ContractC,可识别出2个管道符“|”,则根据管道符“|”进行分割时,可获得ContractA、ContractB、以及ContractC这3个智能合约名,同样地,比如字符串MethodA|MethodB|MethodC,可识别出2个管道符“|”,则根据管道符“|”进行分割时,可获得MethodA、MethodB以及MethodC这三个合约函数。
步骤S206,根据合约调用数组中各智能合约的调用顺序,依次调用并执行各智能合约对应的合约函数,直至合约调用数组中的所有智能合约调用结束,生成与交易业务数据对应的业务处理结果。
其中,通过对交易业务数据进行分割处理后,可获得包括所调用的智能合约名、合约函数名、以及传入的合约参数的合约调用数组,且在合约调用数组中智能合约、合约函数等,均按照调用的顺序进行排列,比如需要依次调用智能合约A(即ContractA)和智能合约B(即ContractB),则ContractA、ContractB在合约调用数组中的顺序为ContractA在ContractB之前,同样地,ContractA的合约函数MethodA、以及ContractB的合约函数MethodB,在合约调用数组中的顺序为MethodA在MethodB之前。
具体地,根据合约调用数组中各智能合约的调用顺序,依次调用并执行各智能合约对应的合约函数,将在前执行的智能合约的执行返回结果,作为在后执行的智能合约的合约参数传入,直至合约调用数组中的所有智能合约调用结束,生成与交易业务数据对应的业务处理结果。
进一步地,比如合约调用数组中存在3个需要调用的智能合约,在合约调用数组中的顺序依次为ContractA、ContractB、以及ContractC,相应的合约函数包括MethodA、MethodB、以及MethodC,合约调用数组中的合约参数包括Input1={0}(作为ContractB的输入)、Name={0},Age=18(作为ContractC的输入),则具体是依次调用并执行各智能合约对应的合约函数,即依次调用ContractA、ContractB、以及ContractC,并依次执行与每个智能合约对应的MethodA、MethodB、以及MethodC,且将在前执行的智能合约的执行返回结果,作为在后执行的智能合约的合约参数传入,具体来说,是将ContractA的输出结果作为MethodB的参数Input1,然后将ContractB的输出结果作为MethodC的输入参数Name的值,而且在调用MethodC时还需要输入参数Age=18。
其中,当合约调用数组中的所有智能合约调用结束,每个智能合约均会生成相应的执行结果,基于所获得的每个智能合约的执行结果,进一步确定得到与交易业务数据对应的业务处理结果。
上述智能合约处理方法中,通过接收合约调用请求,若确定对合约调用请求的交易验证通过,获取与合约调用请求对应的交易业务数据,并识别交易业务数据中的管道符,从而根据管道符对交易业务数据进行分割处理,获得分割处理后的合约调用数组,以根据合约调用数组中各智能合约的调用顺序,依次调用并执行各智能合约对应的合约函数,直至合约调用数组中的所有智能合约调用结束,生成与交易业务数据对应的业务处理结果。实现了根据管道符对待调用的多个智能合约的连接、以及依次处理,能够灵活调用不同的智能合约以满足实际业务需求,直至所有智能合约调用结束,生成得到业务处理结果,而无需对不同智能合约进行合约改造,减少实际业务处理过程中的繁琐操作以及资源消耗,进一步提升智能合约调用处理工作效率。
在一个实施例中,提供了一种智能合约处理方法,在接收合约调用请求时,还包括:
根据业务执行逻辑、以及区块链网络支持的交易数据结构,构建交易业务数据;交易业务数据包括管道符、待调用的智能合约、待执行的合约函数、以及需传入的合约参数;获取交易业务数据的签名数据;签名数据用于进行交易验证。
具体地,通过获取与实际业务需求对应的业务执行逻辑,以及区块链网络支持的交易数据结构,比如具体是多个字符串的方式表示交易业务数据的数据格式,还是通过完整的存储字段(比如以太坊的InputData字段)存储一个字符串的数据格式,进而根据业务执行逻辑、以及区块链网络支持的交易数据结构,构建交易业务数据。其中,所构造的交易业务数据具体包括管道符、待调用的智能合约、待执行的合约函数以及需传入的合约参数。
其中,还需要获取与交易业务对应的签名数据,即发起对象比如UserA使用自身私钥对本次交易业务的签名数据,并将交易业务和签名数据广播至区块链网络中。其中,区块链网络中的其他节点可根据签名数据对交易业务数据进行交易验证,具体是进行交易验证中的签名正确性验证,针对其他交易业务字段,比如管道符数量以及保存点,同样需要进行交易验证,以得到针对交易业务数据的各交易业务字段的交易验证结果。
在一个实施例中,由于根据业务实际需求可确定业务执行逻辑,而根据业务执行逻辑可确定出需要调用的智能合约,交易业务数据具体包括管道符、待调用的智能合约、待执行的合约函数、以及需传入的合约参数,则具体是根据管道符“|”、所需要调用的智能合约、合约函数以及待传入的合约参数,构建得到交易业务对应的交易业务数据。
举例来说,比如某用户UserA根据实际业务需求,需要依次调用智能合约A(即ConstractA,其对应的合约函数为MethodA)和智能合约B(即ConstractB,其对应的合约函数为MethodB),并且需要将ConstractA的输出结果作为ConstractB的合约函数MethodB的参数Input1,则可构建得到如以下表1(即依次调用两个合约所构造的交易业务数据表)所示的交易业务数据:
表1依次调用两个合约所构造的交易业务数据表
其中,参照表1可知,当交易业务数据包括多个字符串时,具体包括ContractA|ContractB、MethodA|MethodB以及|Input1={0},其中,ContractA|ContractB理解为通过管道符“|”连接的智能合约名,MethodA|MethodB则理解为通过管道符“|”连接的合约函数名,|Input1={0}则表示为将ConstractA的输出结果作为ConstractB的合约函数MethodB的参数Input1,同样需要用到管道符“|”。其中,传入参数的{0}表示的就是上一个合约(即智能合约A)的返回结果的第0个值(通常一般从0开始计数),且一般合约就只有一个返回值,如果有多个返回值,比如想取返回值中的第二个值,则传入参数则通过{1}进行表示。
同样地,比如交易业务数据为一个字符串时,则可以包括由管道符连接的智能合约、智能合约对应的合约函数、以及需传入的合约参数,同样地,由管道符连接的合约参数的字符串中,还包括有合约参数的具体参数值。
举例来说,比如某用户UserA根据实际业务需求,需要依次调用智能合约A(即ConstractA,其对应的合约函数为MethodA)和智能合约B(即ConstractB,其对应的合约函数为MethodB),且区块链交易的数据结构中“调用的合约名、调用的函数名、以及传入的合约参数”作为一个字符串出现,比如类似以太坊的交易结构定义,将所需要的信息都放入到一个存储字段(比如以太坊定义的InputData字段)中,则可构建得到如以下表2(即依次调用两个合约所构造的存储交易业务属性信息的字段表)所示的交易业务数据:
表2依次调用两个合约所构造的存储交易业务属性信息的字段表
发起对象 UserA
存储字段 ContractA.MethodA|ContractB.MethodB--Input={0}
其他附加信息 XXX(比如保存点信息)
发起对象签名 UserA使用其私钥对本交易的签名
其中,参照表1可知,当交易业务数据通过一个字符串进行表示时,具体为ContractA.MethodA|ContractB.MethodB--Input={0},其中,ContractA.MethodA表示为调用的是智能合约A的合约函数MethodA,ContractB.MethodB则表示调用的是智能合约A的合约函数MethodB,两者之间通过管道符“|”连接,Input={0}则表示为将ConstractA的输出结果作为ConstractB的合约函数MethodB的参数Input1,传入参数的{0}表示的就是上一个合约(即合约A)的返回结果的第0个值(通常一般从0开始计数),同样可以取其他值,可根据实际需求进行调整,比如存在多个值时,还可取第二个、第三个值等,分别用{1}、{2}表示。
在一个实施例,如存在三个或更多智能合约的调用,比如用户UserA根据实际需要,需要依次调用合约A(即ContractA,其对应的合约函数为MethodA),智能合约B(即ContractB,其对应的合约函数为MethodB),合约C(即ContractC,其对应的合约函数为MethodC),并且把ContractA的输出结果作为MethodB的参数Input1,然后将ContractB的输出结果作为MethodC的输入参数Name的值,而且在调用MethodC时还需要输入参数Age=18,则可构建得到如下表3(即依次调用3个合约所构造的交易业务数据表)所示的交易业务数据:
表3依次调用3个合约所构造的交易业务数据表
发起对象 UserA
调用的合约名 ContractA|ContractB|ContractC
调用的函数名 MethodA|MethodB|MethodC
传入的参数列表 |Input1={0}|Name={0},Age=18
其他附加信息 XXX(比如保存点信息)
发起对象签名 UserA使用其私钥对本交易的签名
其中,参照表3可知,当交易业务数据包括多个字符串时,具体包括ContractA|ContractB|ContractC、MethodA|MethodB|MethodC、以及|Input1={0}|Name={0},Age=18,其中,ContractA|ContractB|ContractC理解为通过管道符“|”连接的3个智能合约名,MethodA|MethodB|MethodC理解为通过管道符“|”连接的3个合约函数名,|Input1={0}|Name={0},Age=18则理解为把ContractA的输出结果作为MethodB的参数Input1,然后将ContractB的输出结果作为MethodC的输入参数Name的值,而且在调用MethodC时还需要输入参数Age=18。
在一个实施例中,本申请实施例中智能合约处理的方式,兼容传统的单合约调用方式,比如传统的单合约调用时设置有“智能合约名、合约函数名、合约参数”3个字段,但本申请实施例中智能合约处理的方式需要使用管道符,所需要应用的3个字段同样为“智能合约名、合约函数名、合约参数”,但字段的值内容使用了管道符进行分割。也就是说,若是出现单合约调用的情况,由于不存在多个需要切割的合约,则可以直接识别单个需要调用的智能合约、合约函数以及待传入的合约参数,调用并执行识别到的智能合约以及合约函数。
进一步地,可采用复用单合约调用的交易构造函数,并在输入智能合约名、合约函数名、以及合约参数是,使用管道符“|”隔开多个智能合约。其中,若智能合约名、合约函数名、以及合约参数是3个独立的字符串,则每个字符串中包含相同数量的管道符。其中,管道符“|”可以连接同一个智能合约的不同合约函数,比如需要调用智能合约ContractA的合约函数MethodA1以及MethodA2,则调用的智能合约名为ContractA |ContractA,调用的合约函数名则为MethodA1|MethodA2。同样地,管道符“|”也可以连接同一个智能合约的同一个合约函数,比如需要两次调用需要调用智能合约ContractA的合约函数MethodA,则调用的智能合约名为ContractA|ContractA,调用的合约函数名则为MethodA|MethodA。
举例来说,比如某用户UserA根据实际业务需求,需要两次调用智能合约A(即ConstractA,其对应的合约函数为MethodA1和MethodA2),并且需要将智能合约ConstractA的MethodA1的输出结果,作为智能合约ConstractA的合约函数MethodA2的参数Input1,则可构建得到如以下表4(即两次调用一个合约所构造的交易业务数据表)所示的交易业务数据:
表4两次调用一个合约所构造的交易业务数据表
发起对象 UserA
调用的合约名 ContractA|ContractA
调用的函数名 MethodA1|MethodA2
传入的参数列表 |Input1={0}
其他附加信息 XXX(比如保存点信息)
发对象签名 UserA使用其私钥对本交易的签名
其中,参照表4可知,当交易业务数据包括多个字符串时,具体包括ContractA|ContractA、MethodA1|MethodA2以及|Input1={0},其中,ContractA|ContractA理解为通过管道符“|”连接的智能合约名,MethodA1|MethodA2则理解为通过管道符“|”连接的合约函数名,|Input1={0}则表示为将智能合约ConstractA的MethodA1的输出结果,作为智能合约ConstractA的合约函数MethodA2的参数Input1,同样需要用到管道符“|”。其中,传入参数的{0}表示的就是上一个合约(即智能合约A)的返回结果的第0个值(通常一般从0开始计数),且一般合约就只有一个返回值,如果有多个返回值,比如想取返回值中的第二个值,则传入参数则通过{1}进行表示。
在一个实施例中,构建交易业务数据对应的交易业务数据时,由于管道符“|”用于合约正确执行时调用后续合约,即用管道符“|”连接的多个智能合约,则需要将智能合约1的正确输出作为智能合约2的操作对象,也就是说,智能合约1必须有正确输出,而智能合约2必须可以处理智能合约1的输出结果,而且智能合约2只能处理智能合约1的正确输出,而不能处理错误输出。通过进一步定义异常管道符(比如定义异常管道符为!),并配合括号,可以实现定义一个合约在正确执行后调用另一个合约,且在错误执行后调用错误处理合约的能力。
举例来说,比如定义智能合约A成功后执行智能合约B,但是如果智能合约执行失败,则执行智能合约C,则可以写为:A|(B!C),即实现定义一个合约在正确执行后调用另一个合约,且在错误执行后调用错误处理合约的能力。
上述智能合约处理方法中,根据业务执行逻辑、以及区块链网络支持的交易数据结构,构建交易业务数据,其中,交易业务数据具体包括管道符、待调用的智能合约、待执行的合约函数、以及需传入的合约参数。进一步通过获取交易业务数据的签名数据,以便将签名数据用于进行交易验证,而如果交易验证通过,则可根据合约调用请求依次调用执行各智能合约,通过采用构建交易的方式,无需针对每个智能合约分别进行调用,也无需进行合约改造,即可实现对多个智能合约的灵活调用,满足实际业务处理过程中的多样化业务需求,提升业务处理效率。
在一个实施例中,如图3所示,生成与交易业务数据对应的业务处理结果的步骤,具体包括:
步骤S302,若检测到与合约调用请求对应的保存点信息,确定与保存点信息匹配的执行结果保存方式。
具体地,当使用管道符串行调用多个智能合约时,通常情况下,当前交易业务中的所有合约调用属于同一个事务操作,则保存点信息设置为默认值,具体来说是将保存点设置为0,而处于同一事务操作中的所有智能合约存在两种执行结果:全部执行成功、以及全部执行失败。举例来说,比如以串行调用智能合约A、智能合约B为例,智能合约A失败,则不调用智能合约B,认为当前事务操作执行失败。同样地,比如智能合约A成功、而智能合约B失败,则同样认为当前事务操作执行失败,即智能合约A的执行结果和状态修改都被撤销,相当于智能合约A也失败。
同样地,若存在其他保存需求,比如在串行调用智能合约A、智能合约B时,如果智能合约A成功,智能合约B失败,则不回滚智能合约A的执行结果,仍然将智能合约A的执行结果记账到区块链的保存需求时,可以在其他附加信息字段中设置保存点。具体来说,比如若设置保存点为1,则不回滚智能合约A的执行结果,并保存智能合约A的执行结果,无论智能合约B是否执行成功、其中,保存点的默认值设置为0,若不在其他附加信息字段中设置保存点,则保存点取默认值,会回滚到所有智能合约执行前的状态,不对所有智能合约的执行结果进行保存。
在一个实施例中,根据智能合约的调用数量不同,保存点设置情况不同,比如需要串行调用A|B|C三个智能合约,则保存点的设置情况具体包括:
1)执行到智能合约B时失败,智能合约A的执行结果不保留;保存点为0(默认值);
执行到智能合约B时失败,智能合约A的执行结果保留;保存点为1。
2)执行到智能合约C时失败,智能合约A的执行结果保留,智能合约B的执行结果不保留;保存点为1;
3)执行到智能合约B时失败,智能合约A的执行结果保留,执行到结果C时失败,智能合约A的执行结果保留,智能合约B的执行结果保留,保存点分别为1,2;
4)执行到智能合约B时失败,智能合约A的执行结果不保留,执行到结果C时失败,智能合约A、B的执行结果保留;保存点分别为0,2。
举例来说,若区块链网络有设置有一个存证合约EvidenceContract,存证合约EvidenceContract的合约函数(即存证保存函数Save)需要接收一个图片或者文字作为Input参数,并对传入的图片或文字进行存证,返回图片或文件的哈希值作为存证ID(即EvidenceID)。同样地,区块链网络中还设置有一个数字藏品合约CollectContract,数字藏品合约CollectContract的合约函数(即数字艺术品发行函数NewArt)的接收参数ArtHash的参数值为发行的艺术品的哈希值(即EvidenceID),调用并执行数字藏品合约CollectContract后,可返回数字藏品的唯一标识(即ArtId)。
可以理解的是,针对区块链网络中设置的两个智能合约,可单独调用其中的任何一个合约进行存证保存或者数字藏品发行。若存在将一张照片直接生成数字艺术品的需求,则可以构造如表5(即依次调用两个智能合约生成数字艺术品所构造的交易业务数据表)所示的交易业务数据:
表5依次调用两个智能合约生成数字艺术品所构造的交易业务数据表
发起人 UserA
调用的合约名 EvidenceContract|CollectContract
调用的方法名 Save|NewArt
传入的参数列表 Input=照片的二进制|ArtHash={0}
其他附加信息 保存点设置:SavePoint=1
发起人签名 UserA使用其私钥对本交易的签名
其中,参照表5可知,比如某用户UserA的实际业务需求为根据一张照片直接生成数字艺术品,需要依次调用智能合约EvidenceContract(即存证合约,其对应的合约函数为Save,即存证保存函数)、以及智能合约CollectContract(即数字藏品合约,其对应的合约函数为NewArt,即数字艺术品发行函数),并且需要将接收照片的二进制作为Save函数的Input参数,同时,将Save函数的输出结果即艺术品的哈希值(即EvidenceID),作为NewArt函数的接收参数(即ArtHash)的参数值,其中,ArtHash={0}表示将Save函数的输出结果的第一个取值,作为NewArt函数的接收参数的参数值。
进一步,参照表5可知,其他附加信息字段中,保存点设置为SavePoint=1,即保存点设置为1,具体来说,若使用某张照片构造了合约“EvidenceContract|CollectContract”并广播到区块链网络,若执行成功,则会获得该照片对应的数字藏品ArtId。其中,在保存点设置为1时,若智能合约CollectContract执行失败,则将获得其照片的存证信息EvidenceID,即由于设置保存点为1,则发行数字艺术品的智能合约(即CollectContract)执行失败,但是存证照片的智能合约(即EvidenceContract)执行成功了,则可根据照片的存证信息EvidenceID再次触发执行发行艺术品的合约,以获得照片对应的数字藏品。
步骤S304,根据执行结果保存方式,对各合约调用请求的执行返回结果进行保存。
具体地,保存点信息包括默认值,则执行结果保存方式包括与默认值对应的回滚保存方式,执行返回结果具体包括执行成功和执行失败。其中,在检测到执行返回结果为执行失败的合约调用请求时,根据与默认值对应的回滚保存方式,对各合约调用请求进行回滚处理,回滚至各合约调用请求执行前的状态。
其中,保存点信息为默认值,即保存点设置为默认值(比如设置为0)时,则执行结果保存方式为回滚保存,比如以串行调用智能合约A、智能合约B为例,包括智能合约A失败,不调用智能合约B的情况,以及智能合约A成功、而智能合约B失败两种情况,均认为智能合约A、智能合约B执行失败,由于执行结果保存方式为回滚保存,则在检测到执行返回结果为执行失败的合约调用请求时,根据与默认值对应的回滚保存方式,对各合约调用请求进行回滚处理,回滚至各合约调用请求执行前的状态,将智能合约A、以及智能合约B的执行结果和状态修改进行撤销,回滚至执行前的状态。
相反地,若未检测到执行返回结果为执行失败的合约调用请求,则将各合约调用请求的执行返回结果保存至执行结果集合。具体来说,以串行调用智能合约A、智能合约B为例,还包括智能合约A和智能合约B均执行成功的情况,而由于不存在执行失败的情况,进而无需对智能合约A或智能合约B的执行结果以及状态修改进行回滚处理,而是则将各合约调用请求的执行返回结果保存至执行结果集合。
在一个实施例中,保存点信息还包括预设值,而执行结果保存方式还包括与预设值对应的当前值保存方式,则可根据预设值、默认值、以及各合约调用请求的执行返回结果的结果分布,以确定待保存的执行返回结果。进一步地根据与预设值对应的当前值保存方式,将各待保存的执行返回结果保存至执行结果集合。
其中,保存点信息除了可将保存点设置为默认值,还可根据需要调用的智能合约的数量确定出其他取值,即可预先根据所需要调用的智能合约数量确定出相应的预设值,举例来说,比如需要串行调用A|B|C三个智能合约,则可根据调用的智能合约数量所确定出相应的预设值、默认值、以及各合约调用请求的执行返回结果的结果分布,确定待保存的执行返回结果。具体来说,当需要串行调用A|B|C三个智能合约时,待保存的执行返回结果,具体可以包括以下几种情况:
1)执行到智能合约B时失败,智能合约A的执行结果不保留;保存点为0(默认值);执行到智能合约B时失败,智能合约A的执行结果保留;保存点为1。
其中,合约调用请求的执行返回结果包括执行到智能合约B时失败,且保存点为0时,即就算智能合约A执行成功,由于保存点为0,则需要保存的执行返回结果为空。
同样地,合约调用请求的执行返回结果包括执行到智能合约B时失败,即智能合约A执行成功,且保存点为1时,则需要保存的执行返回结果为智能合约A的执行返回结果。
2)执行到智能合约C时失败,智能合约A的执行结果保留,智能合约B的执行结果不保留;保存点为1。
其中,合约调用请求的执行返回结果包括执行到智能合约C时失败,则智能合约A、智能合约B均执行成功,而由于保存点为1,则需要保存的执行返回结果为智能合约A的执行返回结果。
3)执行到智能合约B时失败,智能合约A的执行结果保留,执行到结果C时失败,智能合约A的执行结果保留,智能合约B的执行结果保留,保存点分别为1,2。
其中,合约调用请求的执行返回结果包括执行到智能合约B时失败,则智能合约A执行成功、智能合约C不执行,由于保存点为1,则需要保存的执行返回结果为智能合约A的执行返回结果。
同样地,合约调用请求的执行返回结果包括执行到智能合约C时失败,则智能合约A、智能合约B均执行成功,而由于保存点为2,则需要保存的执行返回结果为智能合约A的执行返回结果、以及智能合约B的执行返回结果。
4)执行到智能合约B时失败,智能合约A的执行结果不保留,执行到结果C时失败,智能合约A、B的执行结果保留;保存点分别为0,2。
其中,合约调用请求的执行返回结果包括执行到智能合约B时失败,则智能合约A执行成功、智能合约C不执行,即就算智能合约A执行成功,由于保存点为0,则需要保存的执行返回结果为空。
同样地,合约调用请求的执行返回结果包括执行到智能合约C时失败,则智能合约A、智能合约B均执行成功,而由于保存点为2,则需要保存的执行返回结果为智能合约A的执行返回结果、以及智能合约B的执行返回结果。
进一步地,在确定得到待保存的执行返回结果后,进一步根据与预设值对应的当前值保存方式,将各待保存的执行返回结果保存至执行结果集合中。
步骤S306,对所保存的各执行返回结果进行归集处理,获得归集结果集,并根据归集结果集,生成与交易业务数据对应的业务处理结果。
具体地,由于保存点设置不同,相应所需要保存的执行返回结果不同,且不同情况下保存或更新的执行返回结果,均属于临时保存结果,因此需要将所保存的各执行返回结果进行归集处理,以获得完整的归集结果集。进一步地,根据完整的归集结果集,可生成得到与交易业务数据对应的业务处理结果。
本实施例中,若检测到与合约调用请求对应的保存点信息,确定与保存点信息匹配的执行结果保存方式,并根据执行结果保存方式,对各合约调用请求的执行返回结果进行保存。进一步通过对所保存的各执行返回结果进行归集处理,获得归集结果集,从而可根据归集结果集,生成与交易业务数据对应的业务处理结果。实现了通过设置不同的保存点信息,可满足不同情况下的实际业务需求,也可灵活对所需要保存的执行返回结果进行调整和修改,无需从头进行合约改造,减少业务处理过程中的繁琐操作,在满足实际业务处理过程中的多样化业务需求的同时,提升业务处理效率。
在一个实施例中,提供了一种智能合约处理方法,在接收到合约调用请求后,还包括:
获取与合约调用请求对应的交易业务字段;对交易业务字段进行交易验证,生成与合约调用请求对应的交易验证结果;将交易验证结果广播至区块链网络中的各节点。
其中,交易业务字段包括签名数据、管道符数量以及保存点,通过对签名数据、管道符数量以及保存点分别进行交易验证,可得到与各交易业务字段各自对应的交易验证结果。其中,只有当对所有的交易业务字段的交易验证通过时,才表明对述合约调用请求的交易验证通过。相反地,当存在任一交易业务字段的交易验证未通过时,则表明对当前的合约调用请求的交易验证未通过。
具体地,基于签名数据进行签名正确性验证,可生成对应的签名验证结果。其中,具体是验证发起对象的正确性,比如检测到发起对象为UserA,则判断UsearA是否为具有调用智能合约进行业务处理的权限,以及验证发起对象的签名数据的正确性,即验证发起对象使用自身的私钥对本次交易业务的签名数据的正确性。
同样地,根据管道符数量,可对与合约调用请求对应的智能合约、合约函数以及合约参数,进行一致性验证,生成对应的管道符验证结果。其中,智能合约的数量、合约函数的数量以及合约参数的数量,和管道符数量存在一致性要求,举例来说,比如构造的交易业务数据包括多个字符串:智能合约字符串ContractA|ContractB|ContractC、合约函数字符串MethodA|MethodB|MethodC、以及合约函数字符串|Input1={0}|Name={0},Age=18,则通过进行管道符“|”识别,比如识别到2个管道符“|”,则需要识别到3个智能合约(即ContractA、ContractB、ContractC),3个合约函数(即MethodA、MethodB、MethodC)以及2个合约参数(即Input1、Name),如果智能合约的数量、合约函数的数量、合约参数的数量、以及管道符数量,存在不满足一致性的要求的情况,则表明当前对签名数据的签名正确性验证未通过。
同样地,获取与合约调用请求对应的智能合约数量,并根据智能合约数量对保存点进行数值合理性验证,生成对应的保存点验证结果。其中,若检测到保存点,则进一步根据所调用的智能合约的数量,对保存点进行数值合理性验证。举例来说,比如依次调用3个智能合约,则保存点的取值可以是0、1、2,而不能是其他数值,即保存点的取值,需要小于智能合约的数量,如果保存点的数值超过智能合约的数量,则表明对保存点进行数值合理性验证未通过。
进一步地,验证通过的交易业务数据会广播给其他区块链节点,如果是区块链网络中的共识节点验证通过交易,则会将交易业务数据加入到交易池等待打包到区块链网络中的新区块。其中,在发起智能合约调用的交易业务时,可以使用管道符“|”来串联一个或者多个智能合约,由共识节点在打包区块时先执行管道符之前的智能合约,在智能合约执行完毕后将执行返回的结果作为第二个智能合约的合约函数的参数,再调用并执行第二个智能合约的合约函数,若还有后续的管道符,则继续把前一个智能合约的合约执行结果作为后一个智能合约的合约函数的参数传入,进一步调用并执行后续智能合约,直到所有智能合约的合约函数都执行完毕,则通过共识节点将所有合约结果打包到区块中。
其中,区块链网络中的共识节点即consensus node,理解为参与区块链网络中共识投票、交易执行、区块验证和记账的节点,也就是说,在区块链网络中,新区块的产生由多个节点负责,各区块链节点收集未打包交易,打包到新区块,而新区块由一定规则选出的某个节点生成,生成的新区块必须被大多数其他共识节点同意才算共识完成,新区块才生效。其中,区块链网络中还包括同步节点即sync node,也可称为见证节点,用于参与区块和交易同步、区块验证,交易执行,并记录完整账本数据,但不参与共识投票,以及轻节点(即light node),表示为参与同步和校验区块头信息、验证交易存在性的节点。
上述智能合约处理方法中,通过获取与合约调用请求对应的交易业务字段,并对交易业务字段进行交易验证,以生成与合约调用请求对应的交易验证结果,进而将交易验证结果广播至区块链网络中的各节点,以实现后续在交易验证结果为交易验证通过时,进一步根据合约调用请求对应的交易业务数据确定各智能合约的调用顺序,依次调用智能合约进行业务逻辑处理,从而快速获得业务处理结果,而无需对不同智能合约进行合约改造,减少实际业务处理过程中的繁琐操作以及资源消耗,进一步提升智能合约调用处理工作效率。
在一个实施例中,如图4所示,提供了一种智能合约处理方法,具体包括以下步骤:
步骤S401,根据业务执行逻辑、以及区块链网络支持的交易数据结构,构建交易业务数据,交易业务数据包括管道符、待调用的智能合约、待执行的合约函数、以及需传入的合约参数。
步骤S402,接收合约调用请求,获取与合约调用请求对应的交易业务字段,并对交易业务字段进行交易验证,生成与合约调用请求对应的交易验证结果。
其中,对交易业务字段进行交易验证,生成与合约调用请求对应的交易验证结果,具体包括:基于签名数据进行签名正确性验证,生成对应的签名验证结果;根据管道符数量,对与合约调用请求对应的智能合约、合约函数以及合约参数,进行一致性验证,生成对应的管道符验证结果;以及获取与合约调用请求对应的智能合约数量,并根据智能合约数量对保存点进行数值合理性验证,生成对应的保存点验证结果。
步骤S403,将交易验证结果广播至区块链网络中的各节点。
步骤S404,若确定对合约调用请求的交易验证通过,获取与合约调用请求对应的交易业务数据。
步骤S405,识别交易业务数据中的管道符,并根据管道符对交易业务数据进行分割处理,获得分割处理后的合约调用数组。
步骤S406,根据合约调用数组中各智能合约的调用顺序,依次调用并执行各智能合约对应的合约函数,将在前执行的智能合约的执行返回结果,作为在后执行的智能合约的合约参数传入,直至合约调用数组中的所有智能合约调用结束。
步骤S407,若检测到与合约调用请求对应的保存点信息,确定与保存点信息匹配的执行结果保存方式。
步骤S408,若检测到执行返回结果为执行失败的合约调用请求,根据与默认值对应的回滚保存方式,对各合约调用请求进行回滚处理,回滚至各合约调用请求执行前的状态。
步骤S409,若未检测到执行返回结果为执行失败的合约调用请求,将各合约调用请求的执行返回结果保存至执行结果集合。
执行步骤S407后,执行步骤S410至步骤S411,步骤S410:根据预设值、默认值、以及各合约调用请求的执行返回结果的结果分布,确定待保存的执行返回结果。
步骤S411,根据与预设值对应的当前值保存方式,将各待保存的执行返回结果保存至执行结果集合。
步骤S412,对所保存的各执行返回结果进行归集处理,获得归集结果集,并根据归集结果集,生成与交易业务数据对应的业务处理结果。
上述智能合约处理方法中,通过接收合约调用请求,若确定对合约调用请求的交易验证通过,获取与合约调用请求对应的交易业务数据,并识别交易业务数据中的管道符,从而根据管道符对交易业务数据进行分割处理,获得分割处理后的合约调用数组,以根据合约调用数组中各智能合约的调用顺序,依次调用并执行各智能合约对应的合约函数,直至合约调用数组中的所有智能合约调用结束,生成与交易业务数据对应的业务处理结果。实现了根据管道符对待调用的多个智能合约的连接、以及依次处理,能够灵活调用不同的智能合约以满足实际业务需求,直至所有智能合约调用结束,生成得到业务处理结果,而无需对不同智能合约进行合约改造,减少实际业务处理过程中的繁琐操作以及资源消耗,进一步提升智能合约调用处理工作效率。
在一个实施例中,如图5所示,提供了一种智能合约处理方法的串行交易的打包流程示意图,具体涉及产块节点、交易池、智能合约虚拟机、临时结果集、以及保存点结果集,其中:
产块节点在接收到合约调用请求的交易验证通过结果时,具体是接收到多合约串行调用请求的交易验证通过结果时,则抓取待打包交易,并在交易池中查询该打包交易,获取与待打包交易对应的交易业务数据。
产块节点在查询到待打包交易的交易业务数据后,进一步对交易业务数据进行识别、解析处理,获得交易业务数据中的管道符,并根据管道符对交易业务数据进行分割处理,获得分割处理后的合约调用数组。
产块节点通过检测是否存在保存点信息,并在检测到与合约调用请求对应的保存点信息时,确定出与保存点信息匹配的执行结果保存方式。
产块节点根据合约调用数组中各智能合约的调用顺序,根据智能合约名运行对应的智能合约虚拟机传入对应的合约参数,执行指定的合约函数。
基于智能合约虚拟机,判断智能合约是否执行成功,其中,若执行成功,则将各合约调用请求的执行返回结果保存至临时结果集中。其中,若确定存在保存点,且确定出与保存点对应的执行结果保存方式时,则根据执行结果保存方式,对各合约调用请求的执行返回结果进行保存。其中,具体是将各合约调用请求的执行返回结果,即将智能合约的读写集和结果写入保存点结果集中。
产块节点判断是否还有后续需要执行的智能合约,若后续还有需要继续执行的智能合约,则将结果集按照后续的参数定义进行填充,并新启动智能合约虚拟机执行后续智能合约的合约函数、以及传入填充后的参数,直到所有智能合约执行完毕。
其中,如果智能合约执行失败,则停止继续循环执行后续的智能合约,同时将合约失败结果、以及执行失败前的保存点结果集一起返回。
同样地,若所有智能合约正确执行完毕,则对所保存的各执行返回结果进行归集处理,获得归集结果集。其中,具体是将之前的临时结果集中的执行返回结果进行归集处理,从而根据归集结果集,生成与交易业务数据对应的业务处理结果。
上述智能合约处理方法中,通过接收合约调用请求,若确定对合约调用请求的交易验证通过,获取与合约调用请求对应的交易业务数据,并识别交易业务数据中的管道符,从而根据管道符对交易业务数据进行分割处理,获得分割处理后的合约调用数组,以根据合约调用数组中各智能合约的调用顺序,依次调用并执行各智能合约对应的合约函数,直至合约调用数组中的所有智能合约调用结束,生成与交易业务数据对应的业务处理结果。实现了根据管道符对待调用的多个智能合约的连接、以及依次处理,能够灵活调用不同的智能合约以满足实际业务需求,直至所有智能合约调用结束,生成得到业务处理结果,而无需对不同智能合约进行合约改造,减少实际业务处理过程中的繁琐操作以及资源消耗,进一步提升智能合约调用处理工作效率。
应该理解的是,虽然如上的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的智能合约处理方法的智能合约处理装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个智能合约处理装置实施例中的具体限定可以参见上文中对于智能合约处理方法的限定,在此不再赘述。
在一个实施例中,如图6所示,提供了一种智能合约处理装置,包括:交易业务数据获取模块602、管道符识别处理模块604、以及合约调用处理模块606,其中:
交易业务数据获取模块602,用于接收合约调用请求,若确定对合约调用请求的交易验证通过,获取与合约调用请求对应的交易业务数据。
管道符识别处理模块604,用于识别交易业务数据中的管道符,并根据管道符对交易业务数据进行分割处理,获得分割处理后的合约调用数组。
合约调用处理模块606,用于根据合约调用数组中各智能合约的调用顺序,依次调用并执行各智能合约对应的合约函数,直至合约调用数组中的所有智能合约调用结束,生成与交易业务数据对应的业务处理结果。
上述智能合约处理装置中,通过接收合约调用请求,若确定对合约调用请求的交易验证通过,获取与合约调用请求对应的交易业务数据,并识别交易业务数据中的管道符,从而根据管道符对交易业务数据进行分割处理,获得分割处理后的合约调用数组,以根据合约调用数组中各智能合约的调用顺序,依次调用并执行各智能合约对应的合约函数,直至合约调用数组中的所有智能合约调用结束,生成与交易业务数据对应的业务处理结果。实现了根据管道符对待调用的多个智能合约的连接、以及依次处理,能够灵活调用不同的智能合约以满足实际业务需求,直至所有智能合约调用结束,生成得到业务处理结果,而无需对不同智能合约进行合约改造,减少实际业务处理过程中的繁琐操作以及资源消耗,进一步提升智能合约调用处理工作效率。
在一个实施例中,如图7所示,提供了一种智能合约处理装置,具体包括:
交易验证模块702,用于获取与合约调用请求对应的交易业务字段,并对交易业务字段进行交易验证,生成与合约调用请求对应的交易验证结果。
其中,交易验证模块702具体包括:
签名验证结果生成模块7022,用于基于签名数据进行签名正确性验证,生成对应的签名验证结果。
管道符验证结果生成模块7024,用于根据管道符数量,对与合约调用请求对应的智能合约、合约函数以及合约参数,进行一致性验证,生成对应的管道符验证结果。
保存点验证结果生成模块7026,用于获取与合约调用请求对应的智能合约数量,并根据智能合约数量对保存点进行数值合理性验证,生成对应的保存点验证结果。
交易验证结果广播模块704,用于将交易验证结果广播至区块链网络中的各节点。
上述智能合约处理装置中,通过获取与合约调用请求对应的交易业务字段,并对交易业务字段进行交易验证,以生成与合约调用请求对应的交易验证结果,进而将交易验证结果广播至区块链网络中的各节点,以实现后续在交易验证结果为交易验证通过时,进一步根据合约调用请求对应的交易业务数据确定各智能合约的调用顺序,依次调用智能合约进行业务逻辑处理,从而快速获得业务处理结果,而无需对不同智能合约进行合约改造,减少实际业务处理过程中的繁琐操作以及资源消耗,进一步提升智能合约调用处理工作效率。
在一个实施例中,合约调用处理模块,还用于:
根据合约调用数组中各智能合约的调用顺序,依次调用并执行各智能合约对应的合约函数,将在前执行的智能合约的执行返回结果,作为在后执行的智能合约的合约参数传入,直至合约调用数组中的所有智能合约调用结束,生成与交易业务数据对应的业务处理结果。
在一个实施例中,合约调用处理模块,还用于:
若检测到与合约调用请求对应的保存点信息,确定与保存点信息匹配的执行结果保存方式;根据执行结果保存方式,对各合约调用请求的执行返回结果进行保存;对所保存的各执行返回结果进行归集处理,获得归集结果集;根据归集结果集,生成与交易业务数据对应的业务处理结果。
在一个实施例中,保存点信息包括默认值,执行结果保存方式包括与默认值对应的回滚保存方式,执行返回结果包括执行成功和执行失败;合约调用处理模块,还用于:
若检测到执行返回结果为执行失败的合约调用请求,根据与默认值对应的回滚保存方式,对各合约调用请求进行回滚处理,回滚至各合约调用请求执行前的状态;或若未检测到执行返回结果为执行失败的合约调用请求,将各合约调用请求的执行返回结果保存至执行结果集合。
在一个实施例中,保存点信息还包括预设值,执行结果保存方式还包括与预设值对应的当前值保存方式;合约调用处理模块,还用于:
根据预设值、默认值、以及各合约调用请求的执行返回结果的结果分布,确定待保存的执行返回结果;根据与预设值对应的当前值保存方式,将各待保存的执行返回结果保存至执行结果集合。
在一个实施例中,提供了一种智能合约处理装置,还包括:
交易业务数据构建模块,用于根据业务执行逻辑、以及区块链网络支持的交易数据结构,构建交易业务数据;交易业务数据包括管道符、待调用的智能合约、待执行的合约函数、以及需传入的合约参数;
签名数据获取模块,用于获取交易业务数据的签名数据;签名数据用于进行交易验证。
上述智能合约处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图8所示。该计算机设备包括处理器、存储器、输入/输出接口(Input/Output,简称I/O)和通信接口。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储合约调用请求、交易业务数据、管道符、合约调用数组、智能合约、合约函数以及业务处理结果等数据。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种智能合约处理方法。
本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(MagnetoresistiveRandomAccessMemory,MRAM)、铁电存储器(FerroelectricRandomAccessMemory,FRAM)、相变存储器(PhaseChangeMemory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(RandomAccessMemory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(StaticRandomAccessMemory,SRAM)或动态随机存取存储器(DynamicRandomAccessMemory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (11)

1.一种智能合约处理方法,其特征在于,所述方法包括:
接收合约调用请求,若确定对所述合约调用请求的交易验证通过,获取与所述合约调用请求对应的交易业务数据;
识别所述交易业务数据中的管道符,并根据所述管道符对所述交易业务数据进行分割处理,获得分割处理后的合约调用数组;
根据所述合约调用数组中各智能合约的调用顺序,依次调用并执行各所述智能合约对应的合约函数,直至所述合约调用数组中的所有智能合约调用结束,生成与所述交易业务数据对应的业务处理结果。
2.根据权利要求1所述的方法,其特征在于,所述根据所述合约调用数组中各智能合约的调用顺序,依次调用并执行各所述智能合约对应的合约函数,直至所述合约调用数组中的所有智能合约调用结束,生成与所述交易业务数据对应的业务处理结果,包括:
根据所述合约调用数组中各智能合约的调用顺序,依次调用并执行各所述智能合约对应的合约函数,将在前执行的所述智能合约的执行返回结果,作为在后执行的所述智能合约的合约参数传入,直至所述合约调用数组中的所有智能合约调用结束,生成与所述交易业务数据对应的业务处理结果。
3.根据权利要求1所述的方法,其特征在于,生成与所述交易业务数据对应的业务处理结果,包括:
若检测到与所述合约调用请求对应的保存点信息,确定与所述保存点信息匹配的执行结果保存方式;
根据所述执行结果保存方式,对各所述合约调用请求的执行返回结果进行保存;
对所保存的各所述执行返回结果进行归集处理,获得归集结果集;
根据所述归集结果集,生成与所述交易业务数据对应的业务处理结果。
4.根据权利要求3所述的方法,其特征在于,所述保存点信息包括默认值,所述执行结果保存方式包括与所述默认值对应的回滚保存方式,所述执行返回结果包括执行成功和执行失败;所述根据所述执行结果保存方式,对各所述合约调用请求的执行返回结果进行保存,包括:
若检测到执行返回结果为执行失败的合约调用请求,根据与所述默认值对应的回滚保存方式,对各所述合约调用请求进行回滚处理,回滚至各所述合约调用请求执行前的状态;
或若未检测到执行返回结果为执行失败的合约调用请求,将各所述合约调用请求的执行返回结果保存至执行结果集合。
5.根据权利要求4所述的方法,其特征在于,所述保存点信息还包括预设值,所述执行结果保存方式还包括与所述预设值对应的当前值保存方式;所述根据所述执行结果保存方式,对各所述合约调用请求的执行返回结果进行保存,包括:
根据所述预设值、所述默认值、以及各所述合约调用请求的执行返回结果的结果分布,确定待保存的执行返回结果;
根据与所述预设值对应的当前值保存方式,将各所述待保存的执行返回结果保存至执行结果集合。
6.根据权利要求1至5任意一项所述的方法,其特征在于,在接收合约调用请求时,还包括:
获取与所述合约调用请求对应的交易业务字段,并对所述交易业务字段进行交易验证,生成与所述合约调用请求对应的交易验证结果;
将所述交易验证结果广播至区块链网络中的各节点。
7.根据权利要求6所述的方法,其特征在于,所述交易业务字段包括签名数据、管道符数量以及保存点;对所述交易业务字段进行交易验证,生成与所述合约调用请求对应的交易验证结果,包括:
基于所述签名数据进行签名正确性验证,生成对应的签名验证结果;
根据所述管道符数量,对与所述合约调用请求对应的智能合约、合约函数以及合约参数,进行一致性验证,生成对应的管道符验证结果;
获取与所述合约调用请求对应的智能合约数量,并根据所述智能合约数量对所述保存点进行数值合理性验证,生成对应的保存点验证结果。
8.一种智能合约处理装置,其特征在于,所述装置包括:
交易业务数据获取模块,用于接收合约调用请求,若确定对所述合约调用请求的交易验证通过,获取与所述合约调用请求对应的交易业务数据;
管道符识别处理模块,用于识别所述交易业务数据中的管道符,并根据所述管道符对所述交易业务数据进行分割处理,获得分割处理后的合约调用数组;
合约调用处理模块,用于根据所述合约调用数组中各智能合约的调用顺序,依次调用并执行各所述智能合约对应的合约函数,直至所述合约调用数组中的所有智能合约调用结束,生成与所述交易业务数据对应的业务处理结果。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
11.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
CN202211366101.1A 2022-10-31 2022-10-31 智能合约处理方法、装置、设备、存储介质和程序产品 Pending CN117952748A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211366101.1A CN117952748A (zh) 2022-10-31 2022-10-31 智能合约处理方法、装置、设备、存储介质和程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211366101.1A CN117952748A (zh) 2022-10-31 2022-10-31 智能合约处理方法、装置、设备、存储介质和程序产品

Publications (1)

Publication Number Publication Date
CN117952748A true CN117952748A (zh) 2024-04-30

Family

ID=90798730

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211366101.1A Pending CN117952748A (zh) 2022-10-31 2022-10-31 智能合约处理方法、装置、设备、存储介质和程序产品

Country Status (1)

Country Link
CN (1) CN117952748A (zh)

Similar Documents

Publication Publication Date Title
CN111416808B (zh) 跨区块链的数据互存方法、装置、设备及存储介质
CN110033244B (zh) 基于区块链的智能合约执行方法及装置和电子设备
US11176246B2 (en) Enclave pool shared key
CN109598598A (zh) 基于区块链的交易处理方法及装置、电子设备
CN111213340A (zh) 选择用于密码功能的证明委托并使其安全
CN112613877B (zh) 应用于区块链网络的智能合约触发方法、装置及相关设备
US20180330077A1 (en) Enclave pools
CN111416709B (zh) 基于区块链系统的投票方法、装置、设备及存储介质
CN112053271B (zh) 基于区块链的公益平台数据存证管理方法及系统
CN111488626A (zh) 基于区块链的数据处理方法、装置、设备及介质
CN110910143A (zh) 身份标识生成方法、装置、相关节点及介质
CN110955724A (zh) 基于区块链的数据处理方法、装置、节点设备及存储介质
Garcia Bringas et al. BlockChain platforms in financial services: current perspective
CN112101919A (zh) 一种数据处理方法、装置、电子设备及存储介质
CN112200680B (zh) 区块链节点管理方法、装置、计算机以及可读存储介质
CN112860805A (zh) 一种区块链数据交互方法及系统
CN111405027A (zh) 区块链共识结果筛选方法、装置、计算机设备和存储介质
CN110059097B (zh) 数据处理方法和装置
CN117010889A (zh) 数据处理方法、装置及设备、介质、产品
CN112039893B (zh) 私密交易处理方法、装置、电子设备及可读存储介质
CN117952748A (zh) 智能合约处理方法、装置、设备、存储介质和程序产品
CN116095074A (zh) 资源分配方法、装置、相关设备及存储介质
CN114677138A (zh) 一种数据处理方法、设备以及计算机可读存储介质
CN115701078B (zh) 跨链交易处理方法、装置、电子设备以及存储介质
CN113495982B (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