一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

生成智能合约文件的合约接口类的方法及装置与流程

2021-11-22 17:38:00 来源:中国专利 TAG:


1.本说明书一个或多个实施例涉及区块链技术领域,尤其涉及生成智能合约文件的合约接口类的方法及装置。


背景技术:

2.区块链(blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。由于区块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应用。其中区块链2.0时代中出现了智能合约,将区块链的应用范围提升到了一个新高度。有了智能合约,区块链能做的不再是单一的转账交易,还可以通过调用由用户自定义的代码实现用户期望实现的预定事务。
3.希望有一种新的方案,以期能够更加高效的构建智能合约的合约文件。


技术实现要素:

4.本说明书一个或多个实施例中提供了一种生成智能合约文件的合约接口类的方法及装置。
5.第一方面,提供了一种生成智能合约文件的合约接口类的方法,包括:获取由用户编写的合约代码作为智能合约的合约实现类;获取合约描述信息,所述合约描述信息中至少描述了用户定义的输入参数和输出参数;根据所述合约描述信息和所述合约实现类生成接口代码,并利用所述接口代码生成合约接口类,其中所述接口代码至少包括第一解码代码、合约调用代码和第一编码代码,所述第一解码代码用于对来自智能合约外部的输入数据进行解码以获得所述输入参数对应的输入参数值,所述合约调用代码用于调用所述合约实现类,获得与所述输出参数对应的输出参数值,所述第一编码代码用于对所述输出参数值进行编码,获得向智能合约外部提供的输出数据;所述合约接口类和所述合约实现类被用来构建所述智能合约的合约文件。
6.在一种可能的实施方式中,所述合约描述信息中还定义了所述输入数据对应的结构体,用于指示所述输入数据对应的若干字段名称和数据类型;所述输入参数值中包括基于所述结构体从所述输入数据中获得的若干第一业务数据。
7.在一种可能的实施方式中,所述合约描述信息中还定义了数据交换格式;所述根据所述合约描述信息和所述合约实现类生成接口代码,具体包括:
8.根据所述输入参数和所述合约实现类生成合约调用代码;以及,
9.根据所述数据交换格式从预设的代码模板集中确定编码代码模板和解码代码模板;
10.根据所述输入参数实例化所述解码代码模板以获得所述第一解码代码,以及根据所述输出参数实例化所述编码代码模板以获得所述第一编码代码。
11.在一种可能的实施方式中,还包括:根据所述合约描述信息从预设的合约工程模板集中确定目标合约工程模板;
12.所述利用所述接口代码生成合约接口类,具体包括:利用所述第一编码代码、所述合约调用代码和所述第一解码代码实例化所述目标合约工程模板,获得所述合约接口类。
13.在一种可能的实施方式中,所述合约描述信息中还定义了接口权限,用于指示被允许或禁止调用所述智能合约的第一账户;所述第一解码代码还用于对所述输入数据进行解码以获得请求调用所述智能合约的第二账户;所述接口代码还包括基于所述第一账户生成的权限校验代码,用于确定所述第二账户是否具有调用所述智能合约的权限;
14.所述利用所述接口代码生成合约接口类,具体包括:利用所述权限校验代码、所述第一解码代码、所述合约调用代码和所述第一编码代码生成合约接口类。
15.在一种可能的实施方式中,所述合约描述信息中还定义了事件日志的数据结构;所述第一解码代码还用于对所述输入数据进行解码以获得若干第二业务数据;所述接口代码还包括基于所述数据结构生成的日志代码,用于根据所述若干第二业务数据生成事件日志;
16.所述利用所述接口代码生成合约接口类,具体包括:利用所述日志代码、所述第一解码代码、所述合约调用代码和所述第一编码代码生成合约接口类。
17.在一种可能的实施方式中,所述合约描述信息中还定义了所述合约接口类的接口名称;所述方法还包括:根据所述合约描述信息生成访问代码,并利用所述访问代码生成合约访问类,所述访问代码包括第二编码代码、接口调用代码和第二解码代码,所述第二编码代码用于将由外部输入所述合约访问类的所述输入参数值编码为所述输入数据,所述接口调用代码用于基于所述接口名称调用所述合约接口类,所述第二解码代码用于对所述输出数据进行解码以获得所述输出参数值。
18.第二方面,提供了一种生成智能合约文件的合约解接口类的装置,包括:代码获取单元,配置为获取由用户编写的合约代码作为智能合约的合约实现类;信息获取单元,配置为获取合约描述信息,所述合约描述信息中描述了用户定义的输入参数和输出参数;接口生成单元,配置为根据所述合约描述信息和所述合约实现类生成接口代码,并利用所述接口代码生成合约接口类,其中所述接口代码至少包括第一解码代码、合约调用代码和第一编码代码,所述第一解码代码用于对来自智能合约外部的输入数据进行解码以获得所述输入参数对应的输入参数值,所述合约调用代码用于调用所述合约实现类,获得与所述输出参数对应的输出参数值,所述第一编码代码用于对所述输出参数值进行编码,获得向智能合约外部提供的输出数据;所述合约接口类和所述合约实现类被用来构建所述智能合约的合约文件。
19.在一种可能的实施方式中,所述合约描述信息中还定义了所述输入数据对应的结构体,用于指示所述输入数据对应的若干字段名称和数据类型;所述输入参数值中包括基于所述结构体从所述输入数据中获得的若干第一业务数据。
20.在一种可能的实施方式中,所述合约描述信息中还定义了数据交换格式;
21.所述接口生成单元具体配置为根据所述输入参数和所述合约实现类生成合约调用代码;以及,根据所述数据交换格式从预设的代码模板集中确定编码代码模板和解码代码模板;根据所述输入参数实例化所述解码代码模板以获得所述第一解码代码,以及根据所述输出参数实例化所述编码代码模板以获得所述第一编码代码。
22.在一种可能的实施方式中,还包括:模板选择单元,配置为根据所述合约描述信息
从预设的合约工程模板集中确定目标合约工程模板;
23.所述接口生成单元,具体配置为利用所述第一编码代码、所述合约调用代码和所述第一解码代码实例化所述目标合约工程模板,获得所述合约接口类。
24.在一种可能的实施方式中,所述合约描述信息中还定义了接口权限,用于指示被允许或禁止调用所述智能合约的第一账户;所述第一解码代码还用于对所述输入数据进行解码以获得请求调用所述智能合约的第二账户;所述接口代码还包括基于所述第一账户生成权限校验代码,用于确定所述第二账户是否具有调用所述智能合约的权限;
25.所述接口生成单元,具体配置为利用所述权限校验代码、所述第一解码代码、所述合约调用代码和所述第一编码代码生成合约接口类。
26.在一种可能的实施方式中,所述合约描述信息中还定义了事件日志的数据结构;所述第一解码代码还用于对所述输入数据进行解码以获得若干第二业务数据;所述接口代码还包括基于所述数据结构生成的日志代码,用于根据所述若干第二业务数据生成事件日志;
27.所述接口生成单元,具体配置为利用所述日志代码、所述第一解码代码、所述合约调用代码和所述第一编码代码生成合约接口类。
28.在一种可能的实施方式中,所述合约描述信息中还定义了所述合约接口类的接口名称;所述接口生成单元,还配置为根据所述合约描述信息生成访问代码,并利用所述访问代码生成合约访问类,所述访问代码包括第二编码代码、接口调用代码和第二解码代码,所述第二编码代码用于将由外部输入所述合约访问类的所述输入参数值编码为所述输入数据,所述接口调用代码用于基于所述接口名称调用所述合约接口类,所述第二解码代码用于对所述输出数据进行解码以获得所述输出参数值。
29.第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序/指令,当计算机程序/指令在计算设备中执行时,计算设备执行如第一方面中任一项所述的方法。
30.第四方面,提供了一种计算设备,包括存储器和处理器,存储器中存储有计算机程序/指令,处理器执行所述可计算机程序/指令,实现如第一方面中任一项所述的方法。
31.通过本说明书一个或多个实施例中提供的方法及装置,可以基于用户编写的合约实现类和用户定义的合约描述信息自动的生成合约接口类,合约接口类中已经包含用于调用合约实现类的合约调用代码,以及已经包含用于对智能合约与外部交互的数据进行编码及解码的编码代码和解码代码,因而可以基于合约实现类和合约接口类来完成对合约文件的构建。在此过程中,用户仅需要开发智能合约中用于实现预定事务的合约实现类而无需完整开发智能合约的源文件,可以更加高效的完成构建智能合约的合约文件。
附图说明
32.为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
33.图1为在区块链网络中部署智能合约的过程示意图。;
34.图2为本说明书实施例中提供的一种生成智能合约文件的合约接口类的方法的流
程图;
35.图3为本说明书实施例中提供的一种生成接口代码的过程示意图;
36.图4为本说明书实施例中提供的一种生成智能合约文件的合约接口类的装置的示意图。
具体实施方式
37.下面结合附图,对本说明书所提供的各个非限制性实施例进行详细描述。
38.区块链网络中,用户可以通过其注册在区块链网络中的账户发起交易,交易既可以是普通的转账交易,也可以用于部署智能合约或调用智能合约。如果合约开发者bob想要在区块链网络中部署智能合约,那么可以采用如图1所示的部署过程。
39.首先,bob可以以高级语言的形式编写智能合约的源代码并对应的形成源文件,其中源文件中可以包括一个或多个用于供智能合约外部的其它计算机程序进行调用的接口。
40.接着,可以通过编译器将源文件编译为字节码(byte code)文件,其中字节码是一种介于高级语言和机器码之间的中间码格式,其包括一系列操作码和数据对组成的二进制字符编码。字节码并不是可以直接执行的机器码,需要对应的虚拟机进行解析才能执行。
41.接着,bob可以以交易的形式向区块链网络中发布该合约。具体的,bob可以发起一笔交易,交易内容中的发起方from字段即为bob(更具体的可以为bob注册在区块链网络中的账户/账户地址),接收方to字段设为空值;该交易中还包括data字段,前述的源文件或者字节码文件可以作为智能合约的合约文件包含于data字段中。
42.最后,区块链网络可以通过执行bob发起的交易来完成在区块链网络中部署该智能合约。与之相应的是,注册在区块链网络上的其它账户可以通过在区块链网络中发起交易来调用该智能合约,使得区块链网络基于该智能合约的合约文件来执行智能合约。
43.经发明人研究发现,合约文件中不仅包括用于实现开发人员期望通过智能合约来实现的预定事务的代码/指令,还可能包括用于实现其它功能的代码,例如智能合约通常并不能直接与外部应用程序交互复杂类型的数据,这就需要在智能合约的合约文件中配置用于对来自智能合约外部的输入数据进行解码、用于对向智能合约外部提供的输出数据进行编码的解码代码和编码代码,而且不同的智能合约中实际使用不同的编码代码和解码代码。与之相应的是,构建智能合约的合约文件的过程中,即获得智能合约的源文件或者字节码文件的过程中,开发人员需要完整的编写智能合约的源文件,需要消耗较长的事件来完成构建智能合约的合约文件,效率极低。
44.考虑到以上问题,本说明书实施例中至少提供的一种生成智能合约文件的合约接口类的方法及装置,以期更加高效的完成构建智能合约的合约文件。
45.图2为本说明书实施例中提供的一种生成智能合约文件的合约接口类的方法的流程图。该方法可以由任何具有计算/处理能力的设备、装置、平台或集群执行,例如由集成了智能合约的开发和测试等功能的合约开发平台执行。该方法可以包括如下步骤201至步骤205。
46.首先,在步骤201,获取由用户编写的合约代码作为智能合约的合约实现类。
47.合约实现类具体用于实现用户期望通过智能合约来实现的预定事务,由用户主动编写/提供其包含的合约代码。下文中为了方便清楚且准确的描述本说明书实施例中提供
的技术方案,将主要以预定事务是对注册在区块链上的账户分配数字资源(例如某种类型的token)的智能合约为例进行示例性描述,然而可以理解的是预定事务还可以是其它事务,例如对注册在区块链上的账户之间转移数字资源等,本技术实施例中对此并不做任何限制。
48.接着,在步骤203,获取合约描述信息。
49.用户可以通过专用的描述文件来存储合约描述信息,通过从该描述文件中读取合约描述信息来完成对合约描述信息的获取。合约描述信息体现智能合约的设计方案,其中至少描述了用户定义的前述合约实现类的输入参数和输出参数。例如,针对用于实现为注册在区块链网络上的账户分配数字资源的智能合约,合约描述信息中具体可以定义合约实现类的输入参数为数组params,其中包括数据类型为string的receiver(其对应被分配数字资源的并且注册在区块链网络中的账户)和数据类型为unit32的amount(其对应被分配的数字资源的数量);还可以定义合约实现类的输出参数returns,其数据类型为bool,取值为表征的调用成功的true或表征调用失败的false。
50.合约描述信息中还可以描述由用户定义的以下各项信息中的至少一项:
51.智能合约的合约名称(contract name),例如针对用于实现为注册在区块链网络上的账户分配数字资源的智能合约,其合约名称可以被定义为token contract;
52.合约类型(contract type),例如可以通过合约类型指示token contract用于部署在蚂蚁链(mychain)上,并且token contract的合约文件的类型为wasm;
53.合约版本(version),例如token contract的版本号;
54.输入数据对应的结构体(types),其用于指示输入数据对应的若干字段名称和数据类型。例如对于前述的token contract,可以将输入数据对应的结构体的名称定义为transfer request,即输入数据可以被定义为transfer request,transfer request对应的字段名称可以包括send(其对应请求调用智能合约并且注册在区块链网络上的账户)、receiver和amount,并且定义send、receiver对应的数据类型为string,amount对应的数据类型为uint32;
55.数据交换格式,其用于指示智能合约外部的计算机程序提供给智能合约的输入数据以及智能合约向该计算机程序返回的输出数据的数据格式。例如对于前述的token contract,可以定义其对应的数据交换格式为json(javascript object notation)、xml(extensible markup language)或者其它数据交换格式;
56.合约接口类的接口名称,例如将前述token contract的接口名称定义为transfer;
57.接口权限,其用于指示被允许或禁止调用智能合约的第一账户。例如指示允许调用前述token contract的第一账户为minter;
58.事件日志的数据结构,其用于指示事件日志对应的若干字段和数据类型。例如,对于前述的token contract,数据结构中可以指示事件日志对应的字段包括数据类型为unit32的amount字段、数据类型为string的from字段(字段值为请求调用token contract的账户)和to(字段值为被分配数字资源的账户)字段,还可以定义事件日志的名称为transfer logs。
59.接着,在步骤205,根据合约描述信息和合约实现类生成接口代码,并利用接口代
码生成合约接口类。其中接口代码至少包括:第一解码代码,用于对来自智能合约外部的输入数据进行解码以获得输入参数对应的输入参数值;合约调用代码,用于调用合约实现类以获得与输出参数对应的输出参数值;第一编码代码,用于对输出参数值进行编码以获得向智能合约外部提供的输出数据。
60.在一个较为具体的示例中,可以预先设置代码模板集。例如,对于json和xml两种不同格式的输入数据/输出数据,需要通过不同的编码代码/解码代码来实现对输入数据/输出数据进行编码/解码,因此可以预先设置用于支持对json格式的输入数据进行解码的解码代码模板a1、用于支持对json格式的输出数据进行编码的编码代码模板a2,以及预先设置用于支持对xml格式的输入数据进行解码的解码代码模板a3、用于支持对xml格式的输出数据进行编码的编码代码模板a4。与之相应的,当合约描述信息中定义了数据交换格式的情况下,步骤205中至少可以基于该数据交换格式来生成前述的第一解码代码模板和第一编码代码。具体而言,请参见图3,步骤205中至少可以通过如下步骤2051至步骤2055获得接口代码中的部分或全部代码。
61.步骤2051,根据输入参数和合约实现类生成合约调用代码。即在已知合约实现类的类名和合约实现类的输入参数的情况下,基于合约实现类的类名和输入参数生成用于调用该合约实现类的合约调用代码,例如生成合约调用代码transfer

re(params),其中的transfer

re表征合约实现类的类名,params表征合约实现类的输入参数。
62.步骤2053,根据数据交换格式从预设的代码模板集中确定编码代码模板和解码代码模板。例如,合约描述信息中定义了数据交换格式json,则具体可以从代码模板集中确定数据交换格式json对应的前述解码代码模板a1和编码代码模板a2。
63.步骤2055,根据输入参数实例化解码代码模板以获得第一解码代码,以及根据输出参数实例化编码代码模板以获得第一编码代码。即基于输入参数在内的各种信息渲染解码代码模板;例如合约描述信息中定义的输入参数是包含receiver和amount在内的数组params,合约描述信息中定义的结构体是transfer request,则具体可以将transfer request和receiver、amount等参数对应的填充到解码代码模板中,得到能够用于对输入数据进行解码并且获得输入参数对应的输入参数值的第一解码代码。此外,获得第一编码代码的过程类似于前述获得第一解码代码的过程,不再赘述。
64.当合约描述信息中还定义了接口权限时,第一解码代码对输入数据进行解码时还可以获得请求调用智能合约的第二账户,例如将输入数据解码为前述的结构体transfer request,transfer request中位于字段名称send下的账户即为请求调用智能合约的第二账户。与之相应的,前述步骤205中除了可以生成第一解码代码、合约调用代码和第一编码代码外,还可以根据前述的第一账户(例如允许调用智能合约的第一账户minter)生成权限校验代码,该权限校验代码用于确定第二账户是否具有调用智能合约的权限,例如在send下的账户为minter的情况下确定minter具有调用智能合约的权限;此外,步骤205中根据接口代码生成合约接口类时,则具体可以根据权限校验代码、第一解码代码、合约调用代码和第一编码代码生成合约接口类。
65.当合约描述信息中还定义了事件日志的数据结构时,第一解码代码对输入数据进行解码时可以获得若干第二业务数据,例如将输入数据解码为结构体transfer request,transfer request中位于字段名称send下的账户、位于字段名称receive下的账户以及位
于字段名称amount下的字段值,即可作为用于生成事件日志的若干第二业务数据。与之相应的是,前述步骤205中除了可以生成第一解码代码、合约调用代码和第一编码代码外,还可以根据事件日志的数据结构生成日志代码,该日志代码用于根据前述的若干第二业务数据生成事件日志;此外,步骤205中根据接口代码生成合约接口类时,则具体可以根据日志代码、第一解码代码、合约调用代码和第一编码代码生成合约接口类。例如,事件日志的数据结构中指示事件日志对应的字段包括数据类型为unit32的amount字段、数据类型为string的from和to字段而且事件日志的名称为transfer log,则具体可以生成from字段的值为send下的账户、to字段的值为receive下的账户、amount字段的值为结构体transfer request中的amount字段下的字段值并且名称为transfer log的事件日志。
66.在一种可能的实施方式中,还可以预先配置用于支持对输入数据进行解码、用于支持对输出数据进行编码以及用于支持生成事件日志一个或多个方法类。例如,可以预先针对数据交换格式json配置方法类b1,第一解码代码中可以通过对该方法类b1进行调用来完成对输入数据进行解码。又如,可以预先针对事件日志配置方法类b2,日志代码中可以通过对该方法类b2进行调用来完成生成事件日志。
67.需要说明的是,日志代码可以作为接口代码的成员位于合约实现类的外部,也可以作为合约实现类的成员被插入到步骤201中获得的合约实现类中以形成新的合约实现类。
68.在一种可能的实施方式中,还可以预先配置合约过程模板集;对于合约工程模板集中的单个合约工程模板,其具体用于指示利用接口代码生成合约接口类的规则。例如,对于不需要进行权限校验且不需要记录事件日志的智能合约,可以配置其对应的合约工程模板c1,c1可以指示利用第一解码代码、合约调用代码和第一编码代码生成合约接口类的规则。又如,对于需要进行权限校验且不需要记录事件日志的智能合约,可以配置其对应的合约工程模板c2,c2可以指示利用第一解码代码、合约调用代码、第一编码代码和用于进行权限校验的权限校验代码生成合约接口类的规则。再如,对于需要进行权限校验且需要记录事件日志的智能合约,可以配置其对应的合约工程模板c3,c3可以指示利用第一解码代码、合约调用代码、第一编码代码和前述权限校验代码生成合约接口类的规则。
69.与前述方式相对应的,在执行步骤205之前,还可以根据合约描述信息从预设的合约工程模板集中确定目标合约工程模板。举例来说,当合约描述信息中未定义接口权限和事件日志的数据结构时,说明智能合约中不需要进行权限且不需要记录事件日志,可以将前述的合约工程模板c1确定为目标合约工程模板;当合约描述信息中定义了接口权限且未定义事件日志的数据结构时,说明智能合约中需要进行权限校验且不需要生成记录事件日志,可以将前述的合约工程模块c2确定为目标合约工程模板;当合约描述信息中定义了接口权限且定义了事件日志的数据结构时,说明智能合约中需要进行权限校验且需要生成记录事件日志,可以将前述的合约工程模块c3确定为目标合约工程模板。步骤205中则具体可以利用接口代码来来渲染/实例化目标合约工程模板以获得合约接口类;例如,当确定出目标合约工程模板为前述的合约工程模板c3时,步骤205中同时还可以通过前述的各种方式获得权限校验代码、第一解码代码、合约调用代码、第一编码代码和日志代码,此时可以按照合约工程模板c3指示的利用接口代码生成合约接口类的规则,对应的将第一解码代码、权限校验代码、合约调用代码、第一编码代码和日志代码填充到合约工程模板c3中,从而获
得相应的合约接口类。此外需要理解的是,可以将合约接口类的类名命名为合约描述信息中定义的接口名称,以便智能合约外部的应用程序调用合约接口类。
70.在一些实施例中,还可以基于合约接口类和合约实现类构建智能合约的合约文件。具体而言,可以利用合约接口类、合约实现类以及其请求调用的其它方法类组成智能合约的源文件,并将该源文件作为智能合约的合约文件;或者,还可以通过相应的编译器对前述的智能合约的源文件进行编译,得到相应的字节码文件并将其作为智能合约的合约文件。
71.通过以上各个实施例中提供的技术方案,可以基于用户编写的合约实现类和用户定义的合约描述信息自动的生成合约接口类,合约接口类中已经包含用于调用合约实现类的合约调用代码,以及已经包含用于对智能合约与外部交互的数据进行编码及解码的编码代码和解码代码,因而可以基于合约实现类和合约接口类来完成对合约文件的构建。在此过程中,用户仅需要开发智能合约中用于实现预定事务的合约实现类而无需完整开发智能合约的源文件,可以更加高效的完成构建智能合约的合约文件。
72.在一些实施例中,还可以根据合约描述信息生成访问代码,并利用访问代码生成合约访问类,访问代码包括第二编码代码、接口调用代码和第二解码代码,第二编码代码用于将由外部输入合约访问类的输入参数值编码为输入数据,接口调用代码用于基于接口名称调用合约接口类,第二解码代码用于对输出数据进行解码以获得输出参数值。其中合约访问类也可以被表述为区块链访问(blockchain access object,bao)类,实质上是一种可以以远程过程调用(remote procedure call,rpc)函数调用形式访问智能合约的代码,专用于处理外部的计算机程序与智能合约的数据交互。与之相应的,可以在本地搭建用于对智能合约进行测试的容器(例如docker),在该容器中通过合约访问类来调用合约文件中的合约接口类,从而完成对智能合约的自动化测试。
73.与前述方法实施例基于相同的构思,本说明书实施例中还提供了一种生成智能合约文件的合约接口类的装置。如图4所示,该装置至少包括:代码获取单元401,配置为获取由用户编写的合约代码作为智能合约的合约实现类;信息获取单元403,配置为获取合约描述信息,所述合约描述信息中描述了用户定义的输入参数和输出参数;接口生成单元405,配置为根据所述合约描述信息和所述合约实现类生成接口代码,并利用所述接口代码生成合约接口类,其中所述接口代码至少包括第一解码代码、合约调用代码和第一编码代码,所述第一解码代码用于对来自智能合约外部的输入数据进行解码以获得所述输入参数对应的输入参数值,所述合约调用代码用于调用所述合约实现类,获得与所述输出参数对应的输出参数值,所述第一编码代码用于对所述输出参数值进行编码,获得向智能合约外部提供的输出数据;所述合约接口类和所述合约实现类被用来构建所述智能合约的合约文件。
74.在一种可能的实施方式中,所述合约描述信息中还定义了所述输入数据对应的结构体,用于指示所述输入数据对应的若干字段名称和数据类型;所述输入参数值中包括基于所述结构体从所述输入数据中获得的若干第一业务数据。
75.在一种可能的实施方式中,所述合约描述信息中还定义了数据交换格式;所述接口生成单元405,具体配置为根据所述输入参数和所述合约实现类生成合约调用代码;以及,根据所述数据交换格式从预设的代码模板集中确定编码代码模板和解码代码模板;根据所述输入参数实例化所述解码代码模板以获得所述第一解码代码,以及根据所述输出参
数实例化所述编码代码模板以获得所述第一编码代码。
76.在一种可能的实施方式中,还包括:模板选择单元407,配置为根据所述合约描述信息从预设的合约工程模板集中确定目标合约工程模板;所述接口生成单元405,具体配置为利用所述第一编码代码、所述合约调用代码和所述第一解码代码实例化所述目标合约工程模板,获得所述合约接口类。
77.在一种可能的实施方式中,所述合约描述信息中还定义了接口权限,用于指示被允许或禁止调用所述智能合约的第一账户;所述第一解码代码还用于对所述输入数据进行解码以获得请求调用所述智能合约的第二账户;所述接口代码还包括基于所述第一账户生成的权限校验代码,用于确定所述第二账户是否具有调用所述智能合约的权限。所述接口生成单元405,具体配置为利用所述权限校验代码、所述第一解码代码、所述合约调用代码和所述第一编码代码生成合约接口类。
78.在一种可能的实施方式中,所述合约描述信息中还定义了事件日志的数据结构;所述第一解码代码还用于对所述输入数据进行解码以获得若干第二业务数据;所述接口代码还包括基于所述数据结构生成的日志代码,用于根据所述若干第二业务数据生成事件日志。所述接口生成单元405,具体配置为利用所述日志代码、所述第一解码代码、所述合约调用代码和所述第一编码代码生成合约接口类。
79.在一种可能的实施方式中,所述合约描述信息中还定义了所述合约接口类的接口名称;所述接口生成单元405,还配置为根据所述合约描述信息生成访问代码,并利用所述访问代码生成合约访问类,所述访问代码包括第二编码代码、接口调用代码和第二解码代码,所述第二编码代码用于将由外部输入所述合约访问类的所述输入参数值编码为所述输入数据,所述接口调用代码用于基于所述接口名称调用所述合约接口类,所述第二解码代码用于对所述输出数据进行解码以获得所述输出参数值。
80.本领域技术人员应该可以意识到,在上述一个或多个示例中,本说明书所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能所对应的计算机程序存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令/代码进行传输,以便这些功能所对应的计算机程序被计算机执行时,通过计算机实现本说明书任意一个实施例中所述的方法。
81.本说明书实施例中还提供了一种计算机可读存储介质,其上存储有计算机程序/指令,当所述计算机程序/指令在计算设备中执行时,计算设备执行本说明书任意一个实施例中提供的生成智能合约文件的合约接口类的方法。
82.本说明书实施例中还提供了一种计算设备,包括存储器和处理器,所述存储器中存储有计算机程序/指令,所述处理器执行所述计算机程序/指令时,实现本说明书任意一个实施例中提供的生成智能合约文件的合约接口类的方法。
83.本说明书中的各个实施例均采用递进的方式描述,各个实施例中相同、相似的部分互相参见即可,每个实施例中重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
84.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来
执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
85.以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献