CN118295638A - 一种区块链服务生成方法及相关设备 - Google Patents
一种区块链服务生成方法及相关设备 Download PDFInfo
- Publication number
- CN118295638A CN118295638A CN202211688957.0A CN202211688957A CN118295638A CN 118295638 A CN118295638 A CN 118295638A CN 202211688957 A CN202211688957 A CN 202211688957A CN 118295638 A CN118295638 A CN 118295638A
- Authority
- CN
- China
- Prior art keywords
- contract
- function
- blockchain
- intelligent
- information
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 81
- 230000006870 function Effects 0.000 claims abstract description 198
- 230000003993 interaction Effects 0.000 claims abstract description 30
- 230000015654 memory Effects 0.000 claims description 28
- 238000004458 analytical method Methods 0.000 claims description 25
- 238000004590 computer program Methods 0.000 claims description 7
- 230000001960 triggered effect Effects 0.000 claims description 3
- 238000011161 development Methods 0.000 description 18
- 238000010586 diagram Methods 0.000 description 14
- 238000004891 communication Methods 0.000 description 10
- 230000002452 interceptive effect Effects 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 7
- 239000004744 fabric Substances 0.000 description 7
- 238000007726 management method Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013497 data interchange Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 238000004573 interface analysis Methods 0.000 description 1
- 230000002427 irreversible effect Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000002184 metal Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 239000002994 raw material Substances 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000013068 supply chain management Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Abstract
本申请提供了一种区块链服务生成方法,包括:接收用户输入的智能合约的元信息,根据智能合约的元信息解析该智能合约,获得该智能合约中的至少一个合约函数的元信息,根据至少一个合约函数的元信息,生成区块链服务,其中,区块链服务用于提供至少一个合约函数的应用程序编程接口API,至少一个合约函数的API被调用时,触发与区块链的交互。该方法对于智能合约的编写语言没有限制,针对用户提供的通用语言编写的智能合约,均可以生成能够提供合约函数API的区块链服务,从而能够降低用户接入区块链网络的成本,提升用户使用区块链应用的简便性。
Description
技术领域
本申请涉及区块链技术领域,尤其涉及一种区块链服务生成方法、系统、计算设备集群、计算机可读存储介质、计算机程序产品。
背景技术
区块链(block chain)技术是利用加密链式区块结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用自动化脚本代码(通常为智能合约)来编程和操作数据的一种全新的去中心化基础架构与分布式计算范式。
随着区块链技术的不断发展,区块链应用应运而生。在传统的区块链应用开发中,除了要编写智能合约外,还需要使用区块链软件开发套件(software development kit,SDK)调用相应的智能合约,与链上数据进行交互。
考虑到区块链SDK的使用较为复杂,学习成本较高,区块链SDK可能与用户的应用不匹配,导致无法很好地使用区块链SDK进行开发,以及合约开发者与应用开发者之间的协调困难,业界提出了一种自动生成应用的方法,该方法可以实现基于Solidity智能合约的应用二进制接口(application binary interface,ABI)文件自动生成Java客户端程序。
然而,上述方法支持的智能合约比较单一,区块链平台除了Solidity智能合约,还支持使用其他通用语言来进行智能合约编写,如广泛使用的开源企业级许可的分布式账本框架Hyperledger Fabric中就支持Go、Java和Node语言的智能合约,对于这种通用语言的智能合约,上述方案难以满足业务需求。
发明内容
本申请提供了一种区块链服务生成方法,该方法对于智能合约的编写语言没有限制,能够降低用户接入区块链网络的成本,提升用户使用区块链应用的简便性。本申请还提供了该方法对应的区块链服务生成系统、计算设备集群、计算机可读存储介质以及计算机程序产品。
第一方面,本申请提供了一种区块链服务生成方法。该方法可以由区块链服务生成系统执行。区块链服务生成管理系统可以是软件系统,该软件系统可以部署在计算设备集群中。计算设备集群通过执行软件系统的程序代码,从而执行本申请的区块链服务生成方法。在一些实施例中,区块链服务生成系统也可以是具有区块链服务生成功能的硬件系统,该硬件系统运行时,执行本申请的区块链服务生成方法。例如,区块链服务生成系统可以是具有代码管理功能的计算设备集群。
具体地,区块链服务生成系统接收用户输入的智能合约的元信息,然后根据智能合约的元信息解析智能合约,获得智能合约中的至少一个合约函数的元信息,接着根据至少一个合约函数的元信息生成区块链服务。该区块链服务用于提供至少一个合约函数的应用程序编程接口API,当该API被调用时,触发与区块链的交互。
该方法对于智能合约的编写语言没有限制,针对用户提供的通用语言编写的智能合约,均可以生成能够提供合约函数API的区块链服务,用户无需编写复杂的调用代码,仅需要调用该区块链服务的API,即可触发与区块链的交互,从而能够降低用户接入区块链网络的成本,提升用户使用区块链应用的简便性。
在一些可能的实现方式中,区块链服务生成系统可以根据至少一个合约函数的元信息生成与智能合约相关的第一代码块,以及根据与智能合约无关的代码模板生成与智能合约无关的第二代码块。其中,第一代码块包括结构体的代码以及调用智能合约的代码,第二代码块包括使用区块链软件开发套件SDK调用区块链接口的代码、对外提供服务的代码。
该方法将生成区块链服务的代码分为与智能合约相关的代码和与智能合约无关的代码,分别生成对应代码块,从而提升区块链服务的生成效率。
在一些可能的实现方式中,区块链服务生成系统可以根据至少一个合约函数的结构体以及该结构体对应的代码模板,生成该结构体的代码,接着根据至少一个合约函数的代码以及函数调用模板,生成调用智能合约的代码。
该方法通过合约结构体对应代码模板和函数调用模板,生成合约结构体代码和调用智能合约的代码,从而简化生成区块链服务的逻辑,提升区块链服务的生成效率。
在一些可能的实现方式中,区块链服务生成系统可以确定至少一个合约函数共同继承的类,接着根据至少一个合约函数共同继承的类的函数的代码以及函数调用模板,生成调用智能合约的代码。
该方法通过合约函数共同继承的类,利用函数调用模板生成对应的代码,从而实现调用智能合约或查询智能合约。
在一些可能的实现方式中,智能合约的元信息包括智能合约的源代码,至少一个合约函数的元信息包括入参、出参和结构体。区块链服务生成系统可以根据智能合约的源代码确定接口类,并从该接口类提取至少一个合约函数,解析至少一个合约函数的入参和出参,然后根据至少一个合约函数的入参和出参,从源代码中确定结构体。
在该方法中,用户提供的智能合约的元信息可以为智能合约的源代码,通过解析智能合约的源代码可以确定接口类,从而从源代码中确定合约函数的结构体信息,以便生成对应的区块链服务。
在一些可能的实现方式中,区块链服务生成系统可以将智能合约转换为语法树,根据该语法树解析至少一个合约函数的入参和出参,或者区块链服务生成系统也可以对该智能合约进行编译,根据编译结果反射提取至少一个合约函数的入参和出参。
该方法可以利用编译解析和反射解析两种方式对智能合约进行解析,用户可以根据智能合约的编写语言选择适合的解析方式,从而提升智能合约解析方法的通用性。
在一些可能的实现方式中,智能合约的元信息包括用户提供的智能合约的接口信息,至少一个合约函数的元信息包括入参、出参和结构体。区块链服务生成系统可以识别智能合约的接口信息,获得智能合约中的至少一个合约函数的元信息。
在该方法中,用户提供的智能合约的元信息可以为智能合约的接口信息,通过识别智能合约的接口信息可以获得合约函数的元信息,以便生成对应的区块链服务。
在一些可能的实现方式中,智能合约可以包括采用通用语言编写的智能合约。该方法对于智能合约的编写语言没有限制,针对用户提供的通用语言编写的智能合约,均可以生成能够提供合约函数API的区块链服务。
在一些可能的实现方式中,区块链服务生成系统可以是集成开发环境IDE等能够生成区块链服务的独立软件系统,例如可以为区块链服务生成工具,用户下载该区块链服务生成工具后,可以生成对应的区块链服务。
在一些可能的实现方式中,区块链服务生成系统可以是集成于区块链开发平台的插件、扩展和区块链功能模块,用户安装部署智能合约后,可以自动生成对应的区块链服务,从而实现调用智能合约。
第二方面,本申请提供了一种区块链服务生成系统。所述系统包括:交互模块、智能合约解析模块和区块链服务生成模块;
所述交互模块,用于接收用户输入的智能合约的元信息;
所述智能合约解析模块,用于根据所述智能合约的元信息解析所述智能合约,获得所述智能合约中的至少一个合约函数的元信息;
所述区块链服务生成模块,用于根据所述至少一个合约函数的元信息,生成区块链服务,所述区块链服务用于提供所述至少一个合约函数的应用程序编程接口API,所述至少一个合约函数的API被调用时,触发与区块链的交互。
在一些可能的实现方式中,所述区块链服务生成模块具体用于:
根据所述至少一个合约函数的元信息生成与所述智能合约相关的第一代码块,以及根据与所述智能合约无关的代码模板生成与所述智能合约无关的第二代码块,所述第一代码块包括结构体的代码以及调用所述智能合约的代码,所述第二代码块包括使用区块链软件开发套件SDK调用区块链接口的代码、对外提供服务的代码。
在一些可能的实现方式中,所述区块链服务生成模块具体用于:
根据所述至少一个合约函数的结构体以及所述结构体对应的代码模板,生成所述结构体的代码;
根据所述至少一个合约函数的代码以及函数调用模板,生成调用所述智能合约的代码。
在一些可能的实现方式中,所述区块链服务生成模块具体用于:
确定所述至少一个合约函数共同继承的类;
根据所述至少一个合约函数共同继承的类的函数的代码以及函数调用模板,生成调用所述智能合约的代码。
在一些可能的实现方式中,所述智能合约的元信息包括所述智能合约的源代码,所述至少一个合约函数的元信息包括入参、出参和结构体;
所述智能合约解析模块具体用于:
根据所述智能合约的源代码确定接口类;
从所述接口类提取所述至少一个合约函数,解析所述至少一个合约函数的入参和出参;
根据所述至少一个合约函数的入参和出参,从所述源代码中确定所述结构体。
在一些可能的实现方式中,所述智能合约解析模块具体用于:
将所述智能合约转换为语法树,根据所述语法树解析至少一个合约函数的入参和出参;或者,
对所述智能合约进行编译,根据编译结果反射提取所述至少一个合约函数的入参和出参。
在一些可能的实现方式中,所述智能合约的元信息包括用户提供的所述智能合约的接口信息,所述至少一个合约函数的元信息包括入参、出参和结构体;
所述智能合约解析模块具体用于:
识别所述智能合约的接口信息,获得所述智能合约中的至少一个合约函数的元信息。
在一些可能的实现方式中,所述智能合约包括采用通用语言编写的智能合约。
第三方面,本申请提供了一种计算设备集群。所述计算设备集群包括至少一台计算设备,所述至少一台计算设备包括至少一个处理器和至少一个存储器。所述至少一个处理器、所述至少一个存储器进行相互的通信。所述至少一个处理器用于执行所述至少一个存储器中存储的指令,以使得计算设备或计算设备集群执行如第一方面或第一方面的任一种实现方式所述的区块链服务生成方法。
第四方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,所述指令指示计算设备或计算设备集群执行上述第一方面或第一方面的任一种实现方式所述的区块链服务生成方法。
第五方面,本申请提供了一种包含指令的计算机程序产品,当其在计算设备或计算设备集群上运行时,使得计算设备或计算设备集群执行上述第一方面或第一方面的任一种实现方式所述的区块链服务生成方法。
本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
为了更清楚地说明本申请实施例的技术方法,下面将对实施例中所需使用的附图作以简单地介绍。
图1为本申请实施例提供的一种区块链服务生成系统的架构示意图;
图2为本申请实施例提供的一种区块链服务生成方法的流程图;
图3A至图3B为本申请实施例提供的一种智能合约元信息配置界面的示意图;
图4为本申请实施例提供的一种合约函数元信息呈现界面的示意图;
图5A至图5C为本申请实施例提供的一种结构体代码生成界面的示意图;
图6为本申请实施例提供的一种调用智能合约代码生成界面的示意图;
图7为本申请实施例提供的一种计算设备的结构示意图;
图8为本申请实施例提供的一种计算设备集群的结构示意图;
图9为本申请实施例提供的另一种计算设备集群的结构示意图;
图10为本申请实施例提供的又一种计算设备集群的结构示意图。
具体实施方式
本申请实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
首先对本申请实施例中所涉及到的一些技术术语进行介绍。
区块链(block chain),是一种去中心化的数字账本,具体表现为一个又一个区块形成的链条。每一个区块中保存有数据,区块按照各自产生的时间顺序连接成链条。区块链的一个典型示例是Hyperledger Fabric。Hyperledger Fabric是一个企业级许可的分布式分类账本框架,用于开发解决方案和应用程序。Hyperledger Fabric模块化和多功能的设计满足了广泛的行业使用案例,并提供了一种独特的共识方法,在保护隐私的同时具有较高的性能。
其中,Hyperledger Fabric等区块链中的数据分布在计算机网络中,并且利用分布式节点共识算法保证其安全。向区块链序列增加新记录(称为区块)需要由连接到区块链网络的多个成员进行验证,区块相互链接形成链。每一个区块包括了前一个区块的加密散列、相应时间戳记以及交易资料,从而使得区块内容具有难以篡改的特性。
区块链应用,是指基于区块链进行数据管理的应用。区块链应用可以用于多种行业或领域。例如,当区块链技术应用于供应链管理时,可以利用区块链记录供应链的相关数据,从而实现供应链中对原材料、制作过程、物流的可靠跟踪。又例如,当区块链技术应用于医疗记录时,可以建立去中心化的医疗记录,从而实现医疗记录在患者与医生间的安全共享。再例如,当区块链技术应用于政务服务时,可以利用区块链进行身份管理、税收监督。
智能合约(smart contract),是一种在区块链上、旨在以信息化方式传播、验证或执行合约的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。因此,智能合约能够提供优于传统合约的安全方法,并减少与合约相关的其他交易成本。
智能合约工作时遵循简单的“if/when…then…”条件语句,这些条件语句被写入区块链上的代码中。当满足条件语句时,计算机网络将执行对应的交易。例如,交易可以包括向各方发放资金、登记车辆、开具凭单等。当交易操作完成后,计算机网络会更新区块链,从而确保交易无法更改。
在传统的区块链应用开发中,开发者除了要编写智能合约外,还需要使用区块链软件开发套件(software development kit,SDK)调用相应的智能合约,与链上数据(区块链所存储的数据)进行交互。然而,上述区块链应用的开发模式可能为用户以及开发者带来一定的困扰。
首先,区块链SDK的使用较为复杂,学习成本较高。为了使用区块链SDK调用智能合约,用户需要进行复杂的SDK配置,不利于用户简单、便捷地使用区块链应用。另外,在实际的使用过程中,若用户使用不当,可能出现内存泄漏、资源未释放或者连接数量过多等安全问题。
其次,区块链SDK可能与用户的区块链应用不匹配,导致无法很好地使用区块链SDK进行开发。例如,为了适配区块链应用与区块链SDK,用户可能需要对区块链应用的逻辑进行修改。又例如,为了解决区块链SDK的依赖不兼容的问题,用户可能需要对区块链应用进行升级改造,从而增加了区块链应用的开发成本和维护成本。
此外,合约开发者与应用开发者之间可能存在协调困难的问题。通常情况下,应用开发者需要调用合约开发者提供的合约接口,从而调用智能合约。然而,由于目前没有合约接口文档生成工具,导致合约开发者需要手动撰写合约接口文档。如此,降低了开发效率,同时增加了合约接口文档的错误率。
针对上述问题,业界提出了一种自动生成应用的方法,该方法可以实现基于Solidity智能合约的应用二进制接口(application binary interface,ABI)文件自动生成Java客户端程序。具体地,该方法首先根据智能合约的ABI或者源代码,解析智能合约的接口,接着根据接口解析结果,自动生成智能合约接口的入参的实体类和返回参数的实体类、智能合约接口的调用方法,然后根据配套的调用层框架设计模式,生成智能合约Java客户端的调用层程序。
然而,上述方法支持的智能合约比较单一,仅支持生成Solidity智能合约的客户端程序。这是因为Solidity智能合约在编译成字节码的过程中提供了ABI文件,在该ABI文件中包括智能合约的接口,无需额外解析。但由于区块链平台除了Solidity智能合约,还支持使用其他通用语言来进行智能合约编写,如广泛使用的开源企业级许可的分布式账本框架Hyperledger Fabric中就支持Go、Java和Node语言的智能合约。对于这种使用通用语言编写的智能合约,上述方法难以满足业务需求。
有鉴于此,本申请提供一种区块链服务生成方法。该方法可以由区块链服务生成系统执行。具体地,区块链服务生成系统接收用户输入的智能合约的元信息,然后根据智能合约的元信息解析智能合约,获得智能合约中的至少一个合约函数的元信息,接着根据至少一个合约函数的元信息生成区块链服务。该区块链服务用于提供至少一个合约函数的应用程序编程接口(application program interface,API),当该API被调用时,触发与区块链的交互。
该方法对于智能合约的编写语言没有限制,针对用户提供的通用语言编写的智能合约,均可以生成能够提供合约函数API的区块链服务,用户无需编写复杂的调用代码,仅需要调用该区块链服务的API,即可触发与区块链的交互,从而能够降低用户接入区块链网络的成本,提升用户使用区块链应用的简便性。
进一步地,该方法无需用户使用区块链SDK接入区块链,从而不会侵入区块链应用。因此,区块链应用的业务逻辑与底层的区块链接入逻辑解耦,使得区块链应用的开发变得模块化与结构化,用户可以在原有区块链应用的开发代码上调用区块链服务,以接入区块链,,从而能够降低区块链应用的开发成本和维护成本。
为了使得本申请的技术方案更加清楚、易于理解,下面结合附图对区块链服务生成系统的系统架构进行介绍。
参见图1所示的区块链服务生成系统的架构示意图,该区块链服务生成系统100包括交互模块102、智能合约解析模块104和区块链服务生成模块106。其中,交互模块102用于接收用户输入的智能合约的元信息,智能合约解析模块104用于根据智能合约的元信息解析智能合约,获得智能合约中的至少一个合约函数的元信息,区块链服务生成模块106用于根据至少一个合约函数的元信息,生成区块链服务。
下面,对区块链服务生成系统100中的交互模块102、智能合约解析模块104和区块链服务生成模块106进行详细说明。
交互模块102可以接收用户输入的智能合约的元信息。其中,智能合约的元信息可以包括智能合约的源代码或智能合约的接口信息。例如,交互模块102可以提供交互界面,该交互界面也可以称作用户接口(user interface,UI)界面,交互模块102可以通过UI界面接收用户输入的智能合约的元信息。其中,UI界面可以包括图形化用户界面(graphicaluser interface,GUI)或者是命令用户界面(command user interface,CUI)。
智能合约解析模块104可以根据智能合约的元信息解析智能合约,获得智能合约中的至少一个合约函数的元信息。其中,合约函数的元信息可以包括入参、出参和结构体。例如,智能合约解析模块104可以根据智能合约的源代码确定接口类,通过该接口类提取合约函数,从而解析获得合约函数的元信息。又例如,智能合约解析模块104可以识别智能合约中的至少一个合约函数的接口信息,从而获得该智能合约的元信息。
区块链服务生成模块106可以根据至少一个合约函数的元信息,生成区块链服务。其中,该区块链服务可以提供至少一个合约函数API,当该合约函数API被调用时,触发与区块链200的交互。
需要说明的是,区块链服务生成系统100可以以多种形式向用户提供区块链服务生成方法。区块链服务生成系统100可以为软件系统。例如,区块链服务生成系统100可以是集成开发环境(Integrated Development Environment,IDE)等能够生成区块链服务的独立软件系统,或者区块链服务生成系统100可以是集成于区块链开发平台的插件、扩展和区块链功能模块。区块链服务生成系统100可以部署在计算设备集群中,计算设备集群执行软件系统的代码,从而执行本申请的区块链服务生成方法。在一些可能的实现方式中,区块链服务生成系统100也可以是硬件系统,例如是具有区块链服务生成能力的计算设备集群,包括但不限于提供区块链服务生成能力的云服务器,该云服务器提供软件即服务(softwareas a service,SaaS)。硬件系统运行时,执行本申请的区块链服务生成方法。
接下来,从区块链服务生成系统100的角度对本申请实施例的区块链服务生成方法进行介绍。
参见图2所示的区块链服务生成方法的流程图,该方法包括:
S202:区块链服务生成系统100接收用户输入的智能合约的元信息。
其中,智能合约包括采用通用语言编写的智能合约。例如,智能合约可以为采用Go语言、Java语言或者Node语言中的一种或多种语言编写的智能合约。在一些实施例中,智能合约也可以包括采用指定语言如Solidity编写的智能合约。本实施例对智能合约的编写语言不作限制。
进一步地,智能合约的元信息可以包括智能合约的源代码或智能合约的接口信息。其中,智能合约存在多种编写方式。例如,用户可以在智能合约的合约函数的入参中定义全部参数的参数信息。又例如,用户可以在智能合约的合约函数的入参中未定义全部参数的参数信息,全部参数的参数信息需要在合约函数中通过调用区块链提供的接口获取。
因此,用户可以根据智能合约的编写方式,向区块链服务生成系统100输入智能合约的源代码或者智能合约的接口信息。针对使用第一种编写方式进行编写的智能合约,由于区块链服务生成系统100可以直接对智能合约的源代码进行解析,因此,用户可以向区块链服务生成系统100直接输入智能合约的源代码。针对使用第二种编写方式进行编写的智能合约,由于区块链服务生成系统100无法直接从智能合约的合约函数定义中获取全部参数的参数信息,而是需要用户提供合约函数的参数信息,因此,用户可以向区块链服务生成系统100输入智能合约的接口信息,区块链服务生成系统100通过该接口信息,获取合约函数的参数信息。
具体实现时,区块链服务生成系统100可以提供交互界面,该交互界面可以是图形用户界面(graphical user interface,GUI)或者是命令用户界面(command userinterface,CUI),用户可以通过上述交互界面输入智能合约的元信息,区块链服务生成系统100可以接收用户通过交互界面输入的智能合约的元信息。
为了便于理解,下面以交互界面为GUI示例说明。参见图3A和图3B所示的一种智能合约元信息配置界面的示意图。该交互界面300承载有菜单组件302,用户可以通过菜单组件302中的控件新建区块链服务项目,并通过代码文件列表304查看区块链服务项目的相关文件。
在一些实施例中,该交互界面300可以向用户呈现提示框306,并在提示框306中提示用户上传智能合约的元信息。用户可以通过拖拽文件的方式,上传智能合约的源代码或者智能合约的接口信息。如此,实现区块链服务生成系统100接收用户输入的智能合约的元信息。
在另一些实施例中,该交互界面300包括代码编辑窗口308。用户可以在代码编辑窗口308中编写智能合约的源代码或者智能合约的接口信息。如此,实现区块链服务生成系统100接收用户输入的智能合约的元信息。
S204:区块链服务生成系统100根据智能合约的元信息解析智能合约,获得智能合约中的至少一个合约函数的元信息。
其中,至少一个合约函数的元信息可以包括入参、出参和结构体。入参(inputparameters),也可以称为输入参数,是指输入至合约函数中,用于合约函数运算的参数。出参(output parameters),也可以称为输出参数,是指合约函数运算后的结果。例如,在合约函数语句“function arithmetics(uint_a,uint_b)returns(uint o_sum,uinto_product)”中,入参为_a和_b,出参为o_sum和o_product。结构体是由一组数据组合而成的数据结构,用于表示类型不同但彼此相关的多个数据。例如,在合约函数语句“structFunder{addressaddr;uint amount;}”中,结构体名称为Funder,该结构体包括类型为address、参数为addr的数据和类型为uint、参数为amount的数据。
在一些实施例中,智能合约的元信息包括智能合约的源代码,区块链服务生成系统100可以首先根据智能合约的源代码确定接口类。其中,接口类是指智能合约中用于实现特定接口的类。由于在编写智能合约时,用户需要遵循一定的开发规则,以便在开发区块链应用时调用该智能合约。例如,在Hyperledger Fabric中,智能合约中需要提供特定的接口以满足智能合约的编写规范。因此,区块链服务生成系统100可以首先确定接口类,从而通过接口类解析获得合约函数的元信息。
进一步地,区块链服务生成系统100可以从接口类提取至少一个合约函数,解析至少一个合约函数的入参和出参,接着根据至少一个合约函数的入参和出参,从源代码中确定结构体。
若从源代码中确定的结构体为递归结构体,区块链服务生成系统100可以进一步解析该递归结构体包括的参数信息,再根据该递归结构体的参数信息进一步确定结构体。
进一步地,为了适配不同语言编写的智能合约,区块链服务生成系统100可以采用多种方法解析合约函数的入参和出参。在一些实施例中,区块链服务生成系统100可以将智能合约转换为语法树,根据语法树解析至少一个合约函数的入参和出参。在另一些实施例中,区块链服务生成系统100可以对智能合约进行编译,根据编译结果反射提取至少一个合约函数的入参和出参。
具体地,语法树(syntax tree)可以包括具象语法树(concret syntax tree,CST)和抽象语法树(abstract syntax tree,AST)。语法树是源代码语法结构的一种表示,它以树状的形式表现编程语言的语法结构,树上的节点表示源代码中的结构。其中,CST包括源代码的所有语法信息,而AST作为CST的精简,忽略了CST中一些不重要的语法信息。在具体实现时,区块链服务生成系统100可以使用词法分析或者语法分析的方法将智能合约转换为语法树,从语法树中提取至少一个合约函数的入参和出参。为了便于说明,将该解析方法称为编译解析。
反射是指在程序运行时获取类的相关信息。在本申请实施例中,区块链服务生成系统100可以在智能合约编译时,将编译结果导入内存,并利用反射的方式提取至少一个合约函数的入参和出参。为了便于说明,将该解析方法称为反射解析。
在具体实现时,用户可以根据不同解析方法的特性和智能合约的编写语言选择适合的解析方法。其中,编译解析和反射解析的特性如表1所示。
表1
特性 | 编译解析 | 反射解析 |
简便性 | 低 | 高 |
安全性 | 高 | 低 |
解析效率 | 高 | 低 |
从简便性的角度看,编译解析在将智能合约转换为语法树后,还需要根据语法树解析合约函数的入参和出参,而反射解析可以直接根据反射结果提取合约函数的入参和出参,因此,反射解析的简便性较高。从安全性的角度看,由于反射解析需要对智能合约进行编译,并将编译结果导入内存中,可能对区块链服务生成系统100的安全性造成一定影响,因此,编译解析的安全性较高。从解析效率的角度看,编译解析中将智能合约转换为语法树仅是对智能合约的一部分内容编译与转换,而反射解析需要对智能合约整体进行编译,需要花费较长的时间,因此,编译解析的解析效率较高。
在另一些实施例中,智能合约的元信息包括用户提供的智能合约的接口信息,相应地,区块链服务生成系统100可以识别智能合约的接口信息,获得智能合约中的至少一个合约函数的元信息。
可以理解的是,针对前述的利用第二种编写方式进行编写的智能合约,区块链服务生成系统100无法直接从智能合约的合约函数定义中解析获得合约函数的元信息。因此,区块链服务生成系统100可以通过识别用户提供的智能合约的接口信息,获得智能合约中的至少一个合约函数的入参、出参和结构体。
具体实现时,区块链服务生成系统100可以在交互界面中呈现智能合约中的合约函数的元信息。参见图4所示的一种合约函数元信息呈现界面的示意图。当区块链服务生成系统100完成智能合约解析后,会在代码文件列表304中出现“合约函数元信息”、“智能合约参数”和“合约函数结构体”的代码文件名称,用户可以通过点击对应的代码文件名称,在代码编辑窗口308查看对应的代码。
S206:区块链服务生成系统100根据至少一个合约函数的元信息,生成区块链服务。
其中,区块链服务用于提供至少一个合约函数的API,至少一个合约函数的API被调用时,触发与区块链的交互。
在本申请实施例中,合约函数的API可以包括超文本传输协议(hyper texttransferprotocol,HTTP)接口。HTTP接口具有通用性,通过调用HTTP接口,可以提升用户接入区块链、与区块链交互的简便性。
为了提升区块链服务生成的效率,区块链服务生成系统100可以根据至少一个合约函数的元信息生成与智能合约相关的第一代码块,以及根据与智能合约无关的代码模板生成与智能合约无关的第二代码块。
其中,第一代码块包括结构体的代码以及调用智能合约的代码。具体地,区块链服务生成系统100可以根据至少一个合约函数的结构体以及结构体对应的代码模板,生成结构体的代码,根据至少一个合约函数的代码以及函数调用模板,生成调用智能合约的代码。
下面,将对结构体的代码的生成进行具体说明。
由于合约函数的结构体中包括多个字段,而各个字段有对应的字段类型。因此,为了使得合约函数的结构体与结构体对应的代码模板匹配,首先,区块链服务生成系统100需要对合约函数的结构体进行字段类型转化。例如,区块链服务生成系统100可以将Go语言编写的智能合约中的string类型转化为Java语言中的String类型,以匹配使用Java语言编写的结构体对应的代码模板。又例如,区块链服务生成系统100可以将Go语言中string类型转化为C语言中的char list类型,以匹配使用C语言编写的的结构体对应的代码模板。
此外,区块链服务生成系统100还可以对合约函数的结构体进行序列化和反序列化操作。其中,序列化指将合约函数的结构体转换为字节序列,反序列化指将该字节序列恢复为原本的合约函数的结构体。通过序列化操作,可以将合约函数的结构体转换为字节序列,从而便于持久化存储和数据传输。由于通常使用轻量级数据交换格式(javascriptobjectnotation,JSON)语言进行序列化操作,因此,区块链服务生成系统100可以生成对应的JSON配置。
具体实现时,用户可以通过交互界面300生成结构体代码。参见图5A至图5C所示的一种结构体代码生成界面的示意图。
如图5A所示,交互界面300包括区块链服务生成窗口310。用户可以在区块链服务生成窗口310中选取需要的代码文件以及模板。例如,用户可以点击区块链服务生成窗口310中的控件“合约函数结构体”,然后点击添加,从而选取合约函数结构体为需要的代码文件。类似地,用户可以点击区块链服务生成窗口310中的控件“结构体代码模板”,然后点击添加,从而选取结构体代码模板为需要的模板文件。
在一些实施例中,如图5B所示,用户可以通过预览窗口312对代码文件以及模板进行预览。例如,用户可以双击区块链服务生成窗口310中的控件“结构体代码模板”,从而在预览窗口312中对结构体代码模板的模板代码进行预览。
进一步地,当用户点击区块链服务生成窗口310中的控件“确认”后,区块链服务生成系统100会生成相应的结构体代码,用户可以通过代码编辑窗口308对结构体代码进行查看。
下面,将对调用智能合约的代码的生成进行详细说明。
正如前文所述,用户在编写智能合约时,需要在智能合约中提供固定的接口类,以满足智能合约的编写规范。也就是说,不同的智能合约中存在着共同继承的类。因此,区块链服务生成系统100可以确定至少一个合约函数共同继承的类,根据至少一个合约函数共同继承的类以及函数调用模板,生成调用智能合约的代码。
需要说明的是,调用智能合约包括调用上链合约和查询合约两种方式。根据调用智能合约方式的不同,可以向区块链发起交易或查询区块链上的数据,因此,区块链服务生成系统100可以根据调用智能合约的方式生成对应的调用智能合约的代码。
具体实现时,用户可以通过交互界面300生成调用智能合约代码。参见图6所示的一种调用智能合约代码生成界面的示意图。区块链服务生成系统100在生成调用智能合约代码后,用户可以通过代码编辑窗口308对调用智能合约代码进行查看。
下面,将对第二代码块的生成进行详细说明。
由于第二代码块与用户提供的智能合约无关,因此,区块链服务生成系统100可以通过与智能合约无关的代码模板,生成第二代码块。例如,代码模板可以包括区块链服务生成系统100中内置的代码模板。
其中,第二代码块包括使用SDK调用区块链接口的代码、对外提供服务的代码。在本申请实施例中,通过将使用SDK调用区块链接口的功能封装为区块链服务,使得用户可以通过区块链服务的方式触发与区块链的交互,避免使用SDK侵入区块链的风险。
基于上述内容描述,本申请实施例提供了一种区块链服务生成方法。该方法针对用户提供的通用语言编写的智能合约,均可生成对应的区块链服务,对智能合约的编写语言没有限制。用户通过调用该区块链服务中合约函数的API即可与区块链进行交互,从而提升用户接入区块链的简便性。此外,该方法可以在用户原有的开发代码上接入区块链,不会侵入用户开发的区块链应用,从而解决区块链应用与区块链SDK的兼容适配问题。
基于本申请实施例提供的区块链服务生成方法,本申请实施例还提供了一种如前述的区块链服务生成系统100。下面结合附图对区块链服务生成系统100进行介绍。
参见图1所示的区块链服务生成系统100的结构示意图,该系统100包括:
交互模块102,用于接收用户输入的智能合约的元信息;
智能合约解析模块104,用于根据所述智能合约的元信息解析所述智能合约,获得所述智能合约中的至少一个合约函数的元信息;
区块链服务生成模块106,用于根据所述至少一个合约函数的元信息,生成区块链服务,所述区块链服务用于提供所述至少一个合约函数的应用程序编程接口API,所述至少一个合约函数的API被调用时,触发与区块链的交互。
示例性地,上述交互模块102、智能合约解析模块104和区块链服务生成模块106可以通过硬件实现,或者可以通过软件实现。其中,交互模块102可以通过收发器或者收发器上的软件实现。智能合约解析模块104和区块链服务生成模块106可以通过计算设备或者计算设备上的计算引擎实现。下面,以智能合约解析模块104示例说明。
当通过软件实现时,智能合约解析模块104可以是运行在计算设备上的应用程序,如计算引擎等。该应用程序可以以虚拟化服务的方式提供给用户使用。虚拟化服务可以包括虚拟机(virtual machine,VM)服务、裸金属服务器(bare metal server,BMS)服务以及容器(container)服务。其中,VM服务可以是通过虚拟化技术在多个物理主机(如计算设备)上虚拟出虚拟机(virtual machine,VM)资源池以为用户按需提供VM进行使用的服务。BMS服务是在多个物理主机上虚拟出BMS资源池以为用户按需提供BMS进行使用的服务。容器服务是在多个物理主机上虚拟出容器资源池以为用户按需提供容器进行使用的服务。VM是模拟出来的一台虚拟的计算机,也即逻辑上的一台计算机。BMS是一种可弹性伸缩的高性能计算服务,计算性能与传统物理机无差别,具有安全物理隔离的特点。容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以达到隔离用户空间、进程和资源的目的。应理解,上述虚拟化服务中的VM服务、BMS服务以及容器服务仅仅是作为具体的示例,在实际应用中,虚拟化服务还可以是其他轻量级或者重量级的虚拟化服务,此处不作具体限定。
当通过硬件实现时,智能合约解析模块104中可以包括至少一个计算设备,如服务器等。或者,智能合约解析模块104也可以是利用专用集成电路(application-specificintegratedcircuit,ASIC)实现、或可编程逻辑器件(programmable logic device,PLD)实现的设备等。其中,上述PLD可以是复杂程序逻辑器件(complex programmable logicaldevice,CPLD)、现场可编程门阵列(field-programmable gate array,FPGA)、通用阵列逻辑(generic array logic,GAL)或其任意组合实现。
在一些可能的实现方式中,区块链服务生成模块106具体用于:
根据至少一个合约函数的元信息生成与智能合约相关的第一代码块,以及根据与智能合约无关的代码模板生成与智能合约无关的第二代码块,其中,第一代码块包括结构体的代码以及调用智能合约的代码,第二代码块包括使用区块链软件开发套件SDK调用区块链接口的代码、对外提供服务的代码。
在一些可能的实现方式中,区块链服务生成模块106具体用于:
根据至少一个合约函数的结构体以及结构体对应的代码模板,生成结构体的代码;
根据至少一个合约函数的代码以及函数调用模板,生成调用智能合约的代码。
在一些可能的实现方式中,区块链服务生成模块106具体用于:
确定至少一个合约函数共同继承的类;
根据至少一个合约函数共同继承的类的函数的代码以及函数调用模板,生成调用智能合约的代码。
在一些可能的实现方式中,智能合约的元信息包括智能合约的源代码,至少一个合约函数的元信息包括入参、出参和结构体;
智能合约解析模块104具体用于:
根据智能合约的源代码确定接口类;
从该接口类提取至少一个合约函数,解析至少一个合约函数的入参和出参;
根据至少一个合约函数的入参和出参,从源代码中确定结构体。
在一些可能的实现方式中,智能合约解析模块104具体用于:
将智能合约转换为语法树,根据语法树解析至少一个合约函数的入参和出参;或者,
对智能合约进行编译,根据编译结果反射提取至少一个合约函数的入参和出参。
在一些可能的实现方式中,智能合约的元信息包括用户提供的智能合约的接口信息,至少一个合约函数的元信息包括入参、出参和结构体;
智能合约解析模块104具体用于:
识别智能合约的接口信息,获得智能合约中的至少一个合约函数的元信息。
在一些可能的实现方式中,智能合约包括采用通用语言编写的智能合约。
本申请还提供一种计算设备700。如图7所示,计算设备700包括:总线702、处理器704、存储器706和通信接口708。处理器704、存储器706和通信接口708之间通过总线702通信。计算设备700可以是服务器或终端设备。应理解,本申请不限定计算设备700中的处理器、存储器的个数。
总线702可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条线表示,但并不表示仅有一根总线或一种类型的总线。总线704可包括在计算设备700各个部件(例如,存储器706、处理器704、通信接口708)之间传送信息的通路。
处理器704可以包括中央处理器(central processing unit,CPU)、图形处理器(graphicsprocessing unit,GPU)、微处理器(micro processor,MP)或者数字信号处理器(digital signalprocessor,DSP)等处理器中的任意一种或多种。
存储器706可以包括易失性存储器(volatile memory),例如随机存取存储器(randomaccess memory,RAM)。处理器704还可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM),快闪存储器,机械硬盘(hard diskdrive,HDD)或固态硬盘(solid state drive,SSD)。存储器706中存储有可执行的程序代码,处理器704执行该可执行的程序代码以实现前述区块链服务生成方法。具体的,存储器706上存有区块链服务生成系统100用于执行区块链服务生成方法的指令。
通信接口703使用例如但不限于网络接口卡、收发器一类的收发模块,来实现计算设备700与其他设备或通信网络之间的通信。
本申请实施例还提供了一种计算设备集群。该计算设备集群包括至少一台计算设备。该计算设备可以是服务器,例如是中心服务器、边缘服务器,或者是本地数据中心中的本地服务器。在一些实施例中,计算设备也可以是台式机、笔记本电脑或者智能手机等终端设备。
如图8所示,所述计算设备集群包括至少一个计算设备700。计算设备集群中的一个或多个计算设备700中的存储器706中可以存有相同的区块链服务生成系统100用于执行区块链服务生成方法的指令。
在一些可能的实现方式中,该计算设备集群中的一个或多个计算设备700也可以用于执行区块链服务生成系统100用于执行区块链服务生成方法的部分指令。换言之,一个或多个计算设备700的组合可以共同执行区块链服务生成系统100用于执行区块链服务生成方法的指令。
需要说明的是,计算设备集群中的不同的计算设备700中的存储器706可以存储不同的指令,用于执行区块链服务生成系统100的部分功能。
图9示出了一种可能的实现方式。如图9所示,两个计算设备700A和700B通过通信接口708实现连接。计算设备700A中的存储器上存有用于执行交互模块102和智能合约解析模块104的功能的指令。计算设备700B中的存储器上存有用于执行区块链服务生成模块106的功能的指令。换言之,计算设备700A和700B的存储器706共同存储了区块链服务生成系统100用于执行区块链服务生成方法的指令。
图9所示的计算设备集群之间的连接方式可以是考虑到本申请提供的区块链服务生成方法需要根据用户输入的智能合约元信息解析智能合约和生成区块链服务。因此考虑将交互模块102和智能合约解析模块104实现的功能交由计算设备700A执行,区块链服务生成模块106实现的功能由计算设备700B执行。
应理解,图9中示出的计算设备700A的功能也可以由多个计算设备700完成。同样,计算设备700B的功能也可以由多个计算设备700完成。
在一些可能的实现方式中,计算设备集群中的一个或多个计算设备可以通过网络连接。其中,所述网络可以是广域网或局域网等等。图10示出了一种可能的实现方式。如图10所示,两个计算设备700C和700D之间通过网络进行连接。具体地,通过各个计算设备中的通信接口与所述网络进行连接。在这一类可能的实现方式中,计算设备700C中的存储器706中存有执行交互模块102和智能合约解析模块104的功能的指令。同时,计算设备700D中的存储器706中存有执行区块链服务生成模块106的功能的指令。
图10所示的计算设备集群之间的连接方式可以是考虑到本申请提供的区块链服务生成方法需要根据用户输入的智能合约元信息解析智能合约和生成区块链服务。因此考虑将交互模块102和智能合约解析模块104实现的功能交由计算设备700C执行,区块链服务生成模块106实现的功能由计算设备700D执行。应理解,图10中示出的计算设备700C的功能也可以由多个计算设备700完成。同样,计算设备700D的功能也可以由多个计算设备700完成。
本申请实施例还提供了一种计算机可读存储介质。所述计算机可读存储介质可以是计算设备能够存储的任何可用介质或者是包含一个或多个可用介质的数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘)等。该计算机可读存储介质包括指令,所述指令指示计算设备执行上述应用于区块链服务生成系统用于执行区块链服务生成方法。
本申请实施例还提供了一种包含指令的计算机程序产品。所述计算机程序产品可以是包含指令的,能够运行在计算设备上或被储存在任何可用介质中的软件或程序产品。当所述计算机程序产品在至少一个计算设备上运行时,使得至少一个计算设备执行上述区块链服务生成方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的保护范围。
Claims (19)
1.一种区块链服务生成方法,其特征在于,由区块链服务生成系统执行,所述方法包括:
接收用户输入的智能合约的元信息;
根据所述智能合约的元信息解析所述智能合约,获得所述智能合约中的至少一个合约函数的元信息;
根据所述至少一个合约函数的元信息,生成区块链服务,所述区块链服务用于提供所述至少一个合约函数的应用程序编程接口API,所述至少一个合约函数的API被调用时,触发与区块链的交互。
2.根据权利要求1所述的方法,其特征在于,所述根据所述至少一个合约函数的元信息,生成区块链服务,包括:
根据所述至少一个合约函数的元信息生成与所述智能合约相关的第一代码块,以及根据与所述智能合约无关的代码模板生成与所述智能合约无关的第二代码块,所述第一代码块包括结构体的代码以及调用所述智能合约的代码,所述第二代码块包括使用区块链软件开发套件SDK调用区块链接口的代码、对外提供服务的代码。
3.根据权利要求2所述的方法,其特征在于,所述根据所述至少一个合约函数的元信息,生成与所述智能合约相关的第一代码块,包括:
根据所述至少一个合约函数的结构体以及所述结构体对应的代码模板,生成所述结构体的代码;
根据所述至少一个合约函数的代码以及函数调用模板,生成调用所述智能合约的代码。
4.根据权利要求3所述的方法,其特征在于,所述根据所述至少一个合约函数的代码以及函数调用模板,生成调用所述智能合约的代码,包括:
确定所述至少一个合约函数共同继承的类;
根据所述至少一个合约函数共同继承的类的函数的代码以及函数调用模板,生成调用所述智能合约的代码。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述智能合约的元信息包括所述智能合约的源代码,所述至少一个合约函数的元信息包括入参、出参和结构体;
所述根据所述智能合约的元信息解析所述智能合约,获得所述智能合约中的至少一个合约函数的元信息,包括:
根据所述智能合约的源代码确定接口类;
从所述接口类提取所述至少一个合约函数,解析所述至少一个合约函数的入参和出参;
根据所述至少一个合约函数的入参和出参,从所述源代码中确定所述结构体。
6.根据权利要求5所述的方法,其特征在于,所述解析所述至少一个合约函数的入参和出参,包括:
将所述智能合约转换为语法树,根据所述语法树解析至少一个合约函数的入参和出参;或者,
对所述智能合约进行编译,根据编译结果反射提取所述至少一个合约函数的入参和出参。
7.根据权利要求1至4任一项所述的方法,其特征在于,所述智能合约的元信息包括用户提供的所述智能合约的接口信息,所述至少一个合约函数的元信息包括入参、出参和结构体;
所述根据所述智能合约的元信息解析所述智能合约,获得所述智能合约中的至少一个合约函数的元信息,包括:
识别所述智能合约的接口信息,获得所述智能合约中的至少一个合约函数的元信息。
8.根据权利要求1至7任一项所述的方法,其特征在于,所述智能合约包括采用通用语言编写的智能合约。
9.一种区块链服务生成系统,其特征在于,所述系统包括:交互模块、智能合约解析模块和区块链服务生成模块;
所述交互模块,用于接收用户输入的智能合约的元信息;
所述智能合约解析模块,用于根据所述智能合约的元信息解析所述智能合约,获得所述智能合约中的至少一个合约函数的元信息;
所述区块链服务生成模块,用于根据所述至少一个合约函数的元信息,生成区块链服务,所述区块链服务用于提供所述至少一个合约函数的应用程序编程接口API,所述至少一个合约函数的API被调用时,触发与区块链的交互。
10.根据权利要求9所述的系统,其特征在于,所述区块链服务生成模块具体用于:
根据所述至少一个合约函数的元信息生成与所述智能合约相关的第一代码块,以及根据与所述智能合约无关的代码模板生成与所述智能合约无关的第二代码块,所述第一代码块包括结构体的代码以及调用所述智能合约的代码,所述第二代码块包括使用区块链软件开发套件SDK调用区块链接口的代码、对外提供服务的代码。
11.根据权利要求10所述的系统,其特征在于,所述区块链服务生成模块具体用于:
根据所述至少一个合约函数的结构体以及所述结构体对应的代码模板,生成所述结构体的代码;
根据所述至少一个合约函数的代码以及函数调用模板,生成调用所述智能合约的代码。
12.根据权利要求11所述的系统,其特征在于,所述区块链服务生成模块具体用于:
确定所述至少一个合约函数共同继承的类;
根据所述至少一个合约函数共同继承的类的函数的代码以及函数调用模板,生成调用所述智能合约的代码。
13.根据权利要求9至12任一项所述的系统,其特征在于,所述智能合约的元信息包括所述智能合约的源代码,所述至少一个合约函数的元信息包括入参、出参和结构体;
所述智能合约解析模块具体用于:
根据所述智能合约的源代码确定接口类;
从所述接口类提取所述至少一个合约函数,解析所述至少一个合约函数的入参和出参;
根据所述至少一个合约函数的入参和出参,从所述源代码中确定所述结构体。
14.根据权利要求13所述的系统,其特征在于,所述智能合约解析模块具体用于:
将所述智能合约转换为语法树,根据所述语法树解析至少一个合约函数的入参和出参;或者,
对所述智能合约进行编译,根据编译结果反射提取所述至少一个合约函数的入参和出参。
15.根据权利要求9至12任一项所述的系统,其特征在于,所述智能合约的元信息包括用户提供的所述智能合约的接口信息,所述至少一个合约函数的元信息包括入参、出参和结构体;
所述智能合约解析模块具体用于:
识别所述智能合约的接口信息,获得所述智能合约中的至少一个合约函数的元信息。
16.根据权利要求9至15任一项所述的系统,其特征在于,所述智能合约包括采用通用语言编写的智能合约。
17.一种计算设备集群,其特征在于,所述计算设备集群包括至少一台计算设备,所述至少一台计算设备包括至少一个处理器和至少一个存储器,所述至少一个存储器中存储有计算机可读指令;所述至少一个处理器执行所述计算机可读指令,以使得所述计算设备集群执行如权利要求1至8中任一项所述的方法。
18.一种计算机可读存储介质,其特征在于,包括计算机可读指令;所述计算机可读指令用于实现权利要求1至8任一项所述的方法。
19.一种计算机程序产品,其特征在于,包括计算机可读指令;所述计算机可读指令用于实现权利要求1至8任一项所述的方法。
Publications (1)
Publication Number | Publication Date |
---|---|
CN118295638A true CN118295638A (zh) | 2024-07-05 |
Family
ID=
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10169034B2 (en) | Verification of backward compatibility of software components | |
US8997070B2 (en) | Extension mechanism for scripting language compiler | |
US10481884B2 (en) | Systems and methods for dynamically replacing code objects for code pushdown | |
US8863082B2 (en) | Transformational context-aware data source management | |
TWI556170B (zh) | 將作業系統之原始應用程式介面投射至其它程式語言(二) | |
US8448132B2 (en) | Systems and methods for modifying code generation templates | |
US8924944B2 (en) | Implementation of distributed methods that support generic functions | |
US10303449B2 (en) | Compiling non-native constants | |
CN110059456B (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
US9459986B2 (en) | Automatic generation of analysis-equivalent application constructs | |
US10310827B2 (en) | Flow-based scoping | |
US11288062B2 (en) | Automatic source code refactoring | |
WO2024045382A1 (zh) | 区块链中实现反射机制 | |
US20210326237A1 (en) | Configuration content integration | |
US9116713B1 (en) | System and method for expression evaluation in a distributed networking environment | |
US10120777B1 (en) | Remediating serialization incompatibilities | |
US11366657B2 (en) | Inferring code deprecation from module deprecation | |
US10394610B2 (en) | Managing split packages in a module system | |
US8825708B1 (en) | Program language binding generation for system interfaces | |
JP2011514596A (ja) | 公称的に互換性のない型を効率的に相関させること | |
CN114174983B (zh) | 用于高级构造的优化的自动验证的方法和系统 | |
CN118295638A (zh) | 一种区块链服务生成方法及相关设备 | |
US9720660B2 (en) | Binary interface instrumentation | |
CN117234466B (zh) | 企业管理软件开发方法、系统、设备及存储介质 | |
US12001860B1 (en) | Methods and apparatus to generate code as a plug-in in a cloud computing environment |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication |