首页> 中国专利> 用于开发智能合约的在线IDE的搭建方法及装置

用于开发智能合约的在线IDE的搭建方法及装置

摘要

本申请涉及一种用于开发智能合约的在线IDE的搭建方法及装置,该方法包括:通过Theia框架的第一预设扩展模块,对所述在线IDE的前端交互界面进行设置。本申请利用Theia框架中的扩展模块来构建在线IDE的前端交互界面,设置过程简单便捷。而且由于Theia框架的底层复用了很多开发工具代码模块和接口等,因此代码跳转、文件搜索等功能是Theia框架本身就支持的功能,因此本申请实施例能够提供类似桌面端IDE的开发体验。由于在利用Theia框架搭建在线IDE之前,各种语言插件和环境变量就是配置好的,因此在利用基于Theia框架所搭建的在线IDE开发智能合约时,不需要安装各种语言插件和进行环境变量配置,可以给开发者带来很好的开发体验。

著录项

  • 公开/公告号CN112650494A

    专利类型发明专利

  • 公开/公告日2021-04-13

    原文格式PDF

  • 申请/专利权人 杭州趣链科技有限公司;

    申请/专利号CN202011614623.X

  • 发明设计人 李伟;邱炜伟;蔡亮;谭锦志;苏可;

    申请日2020-12-30

  • 分类号G06F8/38(20180101);G06F8/30(20180101);G06F8/20(20180101);G06F8/36(20180101);

  • 代理机构44481 深圳智汇远见知识产权代理有限公司;

  • 代理人艾青;牛悦涵

  • 地址 310051 浙江省杭州市滨江区丹枫路399号2号楼A楼2001室

  • 入库时间 2023-06-19 10:35:20

说明书

技术领域

本申请涉及区块链技术领域,尤其涉及一种用于开发智能合约的在线IDE的搭建及装置、设备、存储介质。

背景技术

目前智能合约的开发方案有两种:

第一种是在桌面端IDE(Integrated Development Environment,即集成开发环境,是提供程序开发环境的应用程序)中编写和调试智能合约代码,但是在此之前要求开发者需要下载IDE工具,例如开发Solidity合约,开发者需要安装Solidity语言插件,开发Go合约,开发者需要安装Go语言插件。除此之外,开发者还需要配置不同开发语言的环境变量,而完成这一系列的过程,往往需要花费开发者大量的精力和时间,因此这种开发方案比较繁琐,给开发者特别是新手带来很不好的开发体验。

第二种是在在线IDE上编写和调试智能合约代码,目前以以太坊智能推出的RemixIDE最为流行,Remix IDE集成了Solidity语言支持,以及用于编译、部署和调试的各种工具,开发者可以开箱即用。但是目前只支持Solidity语言,而且它不支持代码中的引用跳转、文件搜索等功能,即不具备桌面端IDE常用的开发功能,对于复杂智能合约的开发不太友好。

发明内容

为了解决上述技术问题或者至少部分地解决上述技术问题,本申请提供了一种智能合约开发系统的搭建方法及装置、设备、存储介质。

第一方面,本申请提供了一种用于开发智能合约的在线IDE的搭建方法,包括:通过Theia框架的第一预设扩展模块,对所述在线IDE的前端交互界面进行设置。

第二方面,本申请提供了一种用于开发智能合约的在线IDE的搭建装置,包括:界面设置模块,用于通过Theia框架的第一预设扩展模块,对所述在线IDE的前端交互界面进行设置。

第三方面,本申请提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。

第四方面,本申请提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。

本实施例提供的方法中,通过Theia框架的第一预设扩展模块,对所述在线IDE的前端交互界面进行设置。本申请利用Theia框架中的扩展模块来构建在线IDE的前端交互界面,设置过程简单便捷。而且由于Theia框架的底层复用了很多开发工具代码模块和接口等,因此代码跳转、文件搜索等功能是Theia框架本身就支持的功能,因此本申请实施例能够提供类似桌面端IDE的开发体验。由于在利用Theia框架搭建在线IDE之前,各种语言插件(例如Go插件、Solidity插件、Java插件)和环境变量就是配置好的,因此在利用基于Theia框架所搭建的在线IDE开发智能合约时,不需要安装各种语言插件和进行环境变量配置,因此智能合约的开发过程比较简便,可以给开发者带来很好的开发体验。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的一种用于开发智能合约的在线IDE的搭建方法的流程示意图;

图2为本申请实施例提供的一种用于开发智能合约的在线IDE的搭建装置的结构框图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。

图1为本申请实施例提供的一种用于开发智能合约的在线IDE的搭建方法,如图1所示,该方法包括如下步骤:

S100、通过Theia框架的第一预设扩展模块,对所述在线IDE的前端交互界面进行设置。

可理解的是,智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议,智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约的目的是提供优于传统合约的安全方法,并减少与合约相关的其他交易成本。

可理解的是,在线IDE即在线集成开发环境,只要有网络,用户就可以打开浏览器,通过浏览器登录在线IDE,就可以随时随地编写代码了。

可理解的是,Theia框架是一个可扩展的平台,基于现代Web技术实现,用于开发成熟的、多语言的云计算和桌面类产品。Theia框架有许多扩展,而每一个扩展包括很多的扩展模块,每一个扩展都以NPM包的形式提供给Theia框架,NPM包是运行环境Node.js下的包管理器。

可理解的是,Theia框架作为一种开源框架,通过对其扩展模块的部署、设置,可以形成一个在线IDE的应用程序,该应用程序的主要框架是前端模块和后端模块,前端模块主要负责浏览器部分,后端模块主要负责服务器部分,对前端交互界面的设置、对前后端模块之间的通信方式进行设置等都是搭建一个在线IDE的重要组成部分。该步骤S100中通过Theia框架的第一预设扩展模块实现对组成前端交互界面的各项内容进行配置,即可以得到在线IDE的前端交互界面。

可理解的是,在利用前端交互界面对智能合约进行开发时,需要使用到前端交互界面上的各个子菜单,这些子菜单也就是在开发智能合约时常用的一些功能,例如,编译、部署、调用、调试等,因此需要对前端交互界面上的子菜单进行设置。

在具体实施时,子菜单设置时用到的第一预设扩展模块可以包括菜单扩展模块和命令扩展模块,其中,菜单扩展模块是菜单扩展类型的扩展模块,在菜单扩展模块中可以定义或设置开发智能合约所需的多个子菜单的注册信息(例如,子菜单的名称、位置、顺序等),在菜单扩展模块中设置好注册信息后,就可以用于实现各个子菜单的展示。命令扩展模块是命令扩展类型的扩展模块,在命令扩展模块中可以定义或设置有子菜单的执行命令,在命令扩展模块中设置好子菜单的执行命令后,在触发该子菜单后,该子菜单就可以执行相应的命令,完成相应的交互动作。例如,点击一个子菜单对应的按键,就会弹出一个对应的窗口等。也就是说,该步骤S100可以具体包括:

S101、在所述菜单扩展模块中编写用以展示开发智能合约所需的菜单栏中多个预设子菜单的业务代码,在所述命令扩展模块中编写所述预设子菜单的执行命令对应的业务代码;

可理解的是,在菜单栏下有多个子菜单,一个子菜单可以实现一个或多个相应的功能,例如,编译、部署、调用、调试。

可理解的是,由于菜单扩展模块中可以定义各个子菜单的名称、位置、顺序等简单基本信息,因此在所述菜单扩展模块中编写各个子菜单的相关注册信息,在编写完整后,就可用以实现各个子菜单的展示,也就是在前端交互界面上可以看到各个子菜单,但此时各个子菜单还不能具备其应有的功能。

可理解的是,由于命令扩展模块中可以设置各个子菜单的执行命令,所谓的执行命令可以包括指子菜单为完成其应具有的功能所需要执行的动作的指令。

举例来说,参见如下代码段:

在上述代码段中,首先对部署这一子菜单进行定义,例如部署这一子菜单的标题、标签、图标类等基本信息,然后编写部署这一子菜单的表单代码,表单代码用于在用户点击菜单栏的对应子菜单时,弹出子菜单对应的表单页面,这样用户可以在表单页面中对子菜单进行进一步的配置。

S102、触发所述的菜单栏中预设子菜单的对应按键,弹出所述预设子菜单对应的表单页面,所述表单页面为所述预设子菜单的配置页面;

可理解的是,一个表单页面是一个React组件,而React是用于构建用户界面的JavaScript库,在表单页面中可以对子菜单的具体信息进行配置。

S103、通过所述表单页面接收到所述预设子菜单对应的配置信息时,将所述配置信息对应的业务代码注入所述Theia框架的上下文中。

可理解的是,由于在表单页面输入的配置信息并非业务代码,因此需要将配置信息转换为业务代码,并注入Theia框架的上下文中,当需要使用子菜单时,就可以从Theia框架中调用配置信息相应的业务代码。而所述菜单扩展模块和命令扩展模块中编写的内容本身就是业务代码,所述菜单扩展模块和命令扩展模块与Theia框架中的容器模块绑定,所以菜单扩展模块和命令扩展模块中业务代码也可以在使用子菜单时进行调用,从而实现子菜单相应的功能。

在具体实施时,S103可以具体包括:通过所述表单页面接收到所述预设子菜单对应的配置信息时,采用预设编程语言编写所述配置信息对应的业务代码,采用预设装饰器将所述配置信息对应的业务代码注入所述Theia框架的上下文中。

其中,预设编程语言可以根据需要选择,例如,Typescript语言。预设装饰器可以根据需要选择,例如,injectable装饰器。具体可以通过Inversify.js采用injectable装饰器将Typescript语言开发的业务代码注入所述Theia框架的上下文中。其中,Inversify.js是一个强大的轻量级IoC容器框架,Inversify通过依赖注入的模式实现IoC容器。

在具体实施时,本申请实施例提供的方法还可以包括如下步骤:

S200、在所述Theia框架的第二预设扩展模块的描述文件中设置后端模块的业务代码文件的路径;所述路径用于在所述后端模块对应的网站服务器启动时,所述网站服务器根据所述路径加载所述业务代码文件中的业务代码,以实现所述后端模块的运行;所述网站服务器为所述后端模块提供Node.js运行环境。

可理解的是,前端模块和后端模块的业务代码虽然是部署在一起,均在Theia框架中,但是它们的执行环境不一样,前端模块是用户看到的部分,它的执行环境是在浏览器中,而后端模块的执行环境在服务器上,且运行在Node.js环境上。当用户通过网址访问在线IDE时,需要一个web服务器即网站服务器,网站服务器可以为后端模块提供Node.js运行环境。具体可以采用Express作为HTTP服务器使用,Express是Node.js Web应用程序开发框架,而Node.js是运行在服务端的JavaScript。

在具体实施时,不仅可以将后端模块的业务代码文件的路径设置在第二预设扩展模块的描述文件中,也可以将前端模块的业务代码文件的路径设置在第二预设扩展模块的描述文件中,这样在浏览器启动时也可以根据具体路径调用前端模块的业务代码文件中的业务代码,以实现前端模块的运行。

可理解的是,每一个扩展都包含一个描述文件—package.json文件,在该文件中可以包含几个关键字段,参见如下代码段:

在上述代码段中,第一个关键字“theia-extension”是将NPM包标记为一个扩展。当Theia框架启动时,会遍历所有的NPM包,并将所有的NPM包标记为一个扩展。第二个关键字“theiaExtensions”是枚举这个扩展中的所有模块,每一个模块都是扩展的入口,其中,字段“frontend”代表前端模块的入口,可以在在该字段中设置前端模块的业务代码文件的存储路径,“backend”代表后端模块的入口,可以在这个字段中设置后端模块的业务代码文件的存储路径。

可理解的是,第一预设扩展模块和第二预设扩展模块均为一个扩展中的模块,第二预设扩展模块的描述文件即第二预设扩展模块所属的扩展的描述文件。

可理解的是,通过在描述文件中定义前端模块和/或后端模块的业务代码文件的路径,就可以在浏览器和/或服务器启动时,调用相应的业务代码,从而实现前端模块和/或后端模块的运行。

在具体实施时,本申请实施例提供的方法还可以包括如下步骤:

S300、搭建所述前端模块和所述后端模块的通信机制。

可理解的是,由于前端模块在浏览器运行,而后端模块在服务端运行,因此在开发智能合约时,浏览器和服务器之间需要进行数据通信,步骤S300中的通信机制就是用来实现两者通信的。

在具体实施时,上述步骤S300可以具体包括如下步骤:

S301、在所述后端模块上设置一个对外暴露的后端服务接口,设置所述后端服务接口的业务代码,并将所述后端服务接口的业务代码注入Theia框架的上下文中;

可理解的是,对外暴露的接口是指别人可以引用并可以调用的接口。该步骤中定义了一个后端服务接口,对应的接口文件中包含各种方法,例如,智能合约编译方法、智能合约部署方法、智能合约调用方法等。参见如下代码段,该段代码用于对后端服务接口进行定义:

以上代码首先对后端服务接口进行定义,然后对对应的编译方法等进行声明,从而实现一个后端服务接口的设置。

可理解的是,设置所述后端服务接口的业务代码,即实现一个后端服务接口的实例,参见如下代码段,可以实现一个后端服务接口的实例ContractBackendService:

在设置好后端服务接口的实例后,便可以将将业务代码注入Theia框架上下文中,具体可以采用预设装饰器将所述后端服务接口的业务代码注入到Theia框架的上下文中,并绑定至所述Theia框架的依赖注入容器中。例如,通过Inversify.js采用injectable装饰器将业务代码注入到Theia框架的上下文中。

S302、在所述前端模块上设置一个与所述后端服务接口的定义名称相同的前端服务接口,将所述后端服务接口的业务代码注入Theia框架的上下文中;其中,所述前端服务接口和所述后端服务接口用于在开发智能合约时通过预设通信协议实现所述前端模块和所述后端模块之间的通信。

可理解的是,这里在前端模块上设置一个与后端服务接口同名的前端服务接口,是为了更加直接方便的利用后端服务接口的实例,不必再次设置实例,即直接将后端服务接口的业务代码作为前端服务接口的业务代码注入到Theia框架的上下文中。

参见如下代码段:

以上代码段介绍了在注册好后端服务接口和相应的业务代码后,前端模块如何调用后端服务接口的业务代码,具体首先建立websocket通信连接,并返回后端服务接口的实例。

在具体实施时,该步骤中将所述后端服务接口的业务代码注入Theia框架的上下文中,具体可以包括:将采用预设装饰器将所述后端服务接口的业务代码注入到Theia框架的上下文中,并绑定至所述Theia框架的依赖注入容器中。例如,通过Inversify.js采用injectable装饰器将业务代码注入到Theia框架的上下文中。

可理解的是,在开发智能合约时,前端模块的前端服务接口和后端模块的后端服务接口之间进行通信,就可以实现前端模块与后端模块的通信,也就是浏览器与服务器之间的通信。

其中,预设通信协议可以采用JSON-RPC协议,而JSON-RPC协议是一个无状态且轻量级的远程过程调用(RPC)传送协议,其传递内容透过JSON为主。这样前后端模块可以通过websocket上的JSON-RPC通信。

本申请实施例提供的用于开发智能合约的在线IDE的搭建方法,通过Theia框架的第一预设扩展模块,对所述在线IDE的前端交互界面进行设置。本申请利用Theia框架中的扩展模块来构建在线IDE的前端交互界面,设置过程简单便捷。而且由于Theia框架的底层复用了很多开发工具代码模块和接口等,因此代码跳转、文件搜索等功能是Theia框架本身就支持的功能,因此本申请实施例能够提供类似桌面端IDE的开发体验。由于在利用Theia框架搭建在线IDE之前,各种语言插件(例如Go插件、Solidity插件、Java插件)和环境变量就是配置好的,因此在利用基于Theia框架所搭建的在线IDE开发智能合约时,不需要安装各种语言插件和进行环境变量配置,因此智能合约的开发过程比较简便,可以给开发者带来很好的开发体验。

本申请实施例提供的用于开发智能合约的在线IDE的搭建装置,如图2所示,该装置包括:界面设置模块100,用于通过Theia框架的第一预设扩展模块,对所述在线IDE的前端交互界面进行设置。

在具体实施时,所述第一预设扩展模块包括菜单扩展模块和命令扩展模块;所述界面设置模块包括:

代码编写单元,用于在所述菜单扩展模块中编写用以展示开发智能合约所需的菜单栏中多个预设子菜单的业务代码,在所述命令扩展模块中编写所述预设子菜单的执行命令对应的业务代码;

表单配置单元,用于触发所述的菜单栏中预设子菜单的对应按键,弹出所述预设子菜单对应的表单页面,所述表单页面为所述预设子菜单的配置页面;

代码注入单元,用于通过所述表单页面接收到所述预设子菜单对应的配置信息时,将所述配置信息对应的业务代码注入所述Theia框架的上下文中。

在具体实施时,代码注入单元具体用于:通过所述表单页面接收到所述预设子菜单对应的配置信息时,采用预设编程语言编写所述配置信息对应的业务代码,采用预设装饰器将所述配置信息对应的业务代码注入所述Theia框架的上下文中。

在具体实施时,本申请实施例提供的装置还包括:

路径定义模块,用于在所述Theia框架的第二预设扩展模块的描述文件中设置后端模块的业务代码文件的路径;所述路径用于在所述后端模块对应的网站服务器启动时,所述网站服务器根据所述路径加载所述业务代码文件中的业务代码,以实现所述后端模块的运行;所述网站服务器为所述后端模块提供Node.js运行环境。

在具体实施时,本申请实施例提供的装置还包括:

通信配置模块,用于搭建所述前端模块和所述后端模块的通信机制。

在具体实施时,通信配置模块具体用于:在所述后端模块上设置一个对外暴露的后端服务接口,设置所述后端服务接口的业务代码,并将所述后端服务接口的业务代码注入Theia框架的上下文中;在所述前端模块上设置一个与所述后端服务接口的定义名称相同的前端服务接口,将所述后端服务接口的业务代码注入Theia框架的上下文中;其中,所述前端服务接口和所述后端服务接口用于在开发智能合约时通过预设通信协议实现所述前端模块和所述后端模块之间的通信。

在具体实施时,通信配置模块中所述将所述后端服务接口的业务代码注入Theia框架的后端上下文中,包括:采用预设装饰器将所述后端服务接口的业务代码注入到Theia框架的上下文中,并绑定至所述Theia框架的依赖注入容器中。

本申请实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时上述方法的步骤。

本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。

可理解的是,本申请实施例提供的装置、计算机设备、计算机可读存储介质,有关内容的解释、举例、有益效果等部分可以参考上述方法中的相应部分,此处不再赘述。

可理解的是,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号