智能合约部署方法和装置
技术领域
本申请涉及区块链领域,特别是涉及一种智能合约部署方法和装置。
背景技术
由于区块链智能合约的源代码有非法字符,必须编译成目标代码,代码以数字化的形式写入区块链中,以控制信息、执行生效,并在网上保存。当区块链接收到需要处理的事务,需要调用智能合约时,智能合约代码会在以太坊虚拟机(EVM)中运行,并返回执行结果。而EVM是一个专用于区块链的基于栈的虚拟机,其设计比较简单,存在区块链信息交互的效率较低、中间产生文件多、适用范围较窄以及安全性较差的问题。
发明内容
本发明针对上述不足或缺点,提供了一种智能合约部署方法和装置,本发明实施例能够将智能合约的源代码编译成可以保存在数据库、可以在虚拟机执行的目标代码,从智能合约的源代码编译、到智能合约的目标代码的生效和部署一键到位,期间不产生中间临时文件,并且可以在区块链网络中任何一个节点中完成部署。
本发明根据第一方面提供了一种智能合约部署方法,在一个实施例中,该方法包括:
客户端从本地获取由高级编程语言编写的智能合约的源代码;
将智能合约的源代码编译为能够在以太坊虚拟机中执行的目标代码;
使用自定义编码字符集对目标代码进行编码,得到编码后的目标代码;
将编码后的目标代码部署至智能合约服务器。
在一个实施例中,将智能合约的源代码编译为能够在以太坊虚拟机中执行的目标代码,包括:
对智能合约的源代码进行词法分析,得到单词流;
对单词流进行语法分析,得到抽象语法树;
对抽象语法树进行语义分析,获得目标代码。
在一个实施例中,自定义编码字符集为BASE100编码字符集。
在一个实施例中,将编码后的目标代码部署至智能合约服务器,包括:
客户端将编码后的目标代码向主链服务器上链,得到智能合约区块;
主链服务器将智能合约区块发送至智能合约服务器,智能合约服务器在确认智能合约区块通过合法性和一致性校验后,使智能合约区块生效,以完成智能合约的部署。
在一个实施例中,客户端在将编码后的目标代码部署至智能合约服务器之前,对编码后的目标代码进行多重电子签名。
本发明根据第二方面还提供了一种智能合约部署装置,在一个实施例中,该装置包括:
源代码获取模块,用于客户端从本地获取由高级编程语言编写的智能合约的源代码;
编译模块,用于将智能合约的源代码编译为能够在以太坊虚拟机中执行的目标代码;
编码模块,用于使用自定义编码字符集对目标代码进行编码,得到编码后的目标代码;
部署模块,用于将编码后的目标代码部署至智能合约服务器。
在一个实施例中,编译模块,包括:
词法分析子模块,用于对智能合约的源代码进行词法分析,得到单词流;
语法分析子模块,用于对单词流进行语法分析,得到抽象语法树;
语义分析子模块,用于对抽象语法树进行语义分析,获得目标代码。
在一个实施例中,自定义编码字符集为BASE100编码字符集。
在一个实施例中,部署模块,包括:
上链子模块,用于将编码后的目标代码向主链服务器上链,得到智能合约区块;
部署子模块,用于将智能合约区块发送至智能合约服务器,以指示智能合约服务器在确认智能合约区块通过合法性和一致性校验后,使智能合约区块生效,以完成智能合约的部署。
在一个实施例中,该智能合约部署装置还包括签名模块;签名模块,用于在将编码后的目标代码部署至智能合约服务器之前,对编码后的目标代码进行多重电子签名。
在本发明实施例中,客户端从本地获取由高级编程语言编写的智能合约的源代码;将智能合约的源代码编译为能够在以太坊虚拟机中执行的目标代码;使用自定义编码字符集对目标代码进行编码,得到编码后的目标代码;将编码后的目标代码部署至智能合约服务器,本实施例能够将智能合约的源代码编译成可以保存在数据库、可以在虚拟机执行的目标代码,从智能合约的源代码编译、到智能合约的目标代码的生效和部署一键到位,期间不产生中间临时文件,并且可以在区块链网络中任何一个节点中完成部署。
附图说明
图1为一个实施例中一种智能合约部署方法的流程示意图;
图2为一个实施例中BASE64编码字符集的示意图;
图3-1和图3-2为一个实施例中BASE100编码字符集的示意图;
图4为一个实施例中一种智能合约部署装置的结构框图;
图5为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅用以解释本申请,并不用于限定本申请。
本发明提供了一种智能合约部署方法。在一个实施例中,如图1所示,该智能合约部署方法包括:
S110:客户端从本地获取由高级编程语言编写的智能合约的源代码;
S120:将智能合约的源代码编译为能够在以太坊虚拟机中执行的目标代码;
S130:使用自定义编码字符集对目标代码进行编码,得到编码后的目标代码;
S140:将编码后的目标代码部署至智能合约服务器。
本实施例通过上述步骤能够实现将智能合约的源代码编译成可以保存在数据库、可以在虚拟机执行的目标代码,从智能合约的源代码编译、到智能合约的目标代码的生效和部署一键到位,期间不产生中间临时文件,并且可以在区块链网络中任何一个节点中完成部署。
以下对上述步骤进行详细说明。
在对本发明实施例进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。
交易(Transaction):等同于计算机术语“事务”,交易包括了需要提交到区块链网络执行的操作,并非单指商业语境中的交易,鉴于在区块链技术中约定俗称地使用了“交易”这一术语,本发明实施例遵循了这一习惯。例如,部署(Deploy)交易用于向区块链网络中的节点安装指定的智能合约并准备好被调用;调用(Invoke)交易用于通过调用智能合约在区块链中追加交易的记录,并对区块链的状态数据库进行操作,包括更新操作(包括增加、删除和修改状态数据库中的键值对)和查询操作(即查询状态数据库中的键值对)。
区块链(Blockchain):是由区块(Block)形成的加密的、链式的交易的存储结构。
区块链网络(Blockchain Network):通过共识的方式将新区块纳入区块链的一系列的节点的集合。其中,共识(Consensus)是区块链网络中的一个过程,用于在涉及的多个节点之间对区块中的交易达成一致,达成一致的区块将被追加到区块链的尾部,实现共识的机制包括工作量证明(PoW,Proof of Work)、权益证明(PoS,Proof of Stake)、股权授权证明(DPoS,Delegatd Proof-of-Stake)、消逝时间量证明(PoET,Proof of Elapsed Time)等。
智能合约(Smart Contracts):也称为链码(Chaincode)或应用代码,是部署在区块链网络的节点(或称为区块链节点)中的程序,节点执行接收的交易中所调用的智能合约,来对状态数据库的键值对数据进行更新或查询操作。
在本实施例中,基于开发效率、可读性等多方面的考虑,用户可以在本地采用高级编程语言编写需要部署的智能合约,其中,编写智能合约所采用的高级编程语言可以是Solidity、Serpent、LLL语言等以太坊支持的高级编程语言;编写好智能合约的源代码之后,将编写好的智能合约的源代码编译成目标代码(字节码),其中,传统的编译方式由词法分析、语法分析、语义检查和中间代码生成、代码优化、目标代码生成5个步骤组成,该编译方式会产生中间文件(如java.cast),为此,在本实施例中则是根据词法分析、语法分析和语义分析技术对编写好的智能合约的源代码进行处理,直接编译得到符合以太坊虚拟机要求的组码规则的可执行的目标代码,而不产生中间文件,进而加快编译速度。其中,将智能合约的源代码编译为能够在以太坊虚拟机中执行的目标代码的步骤,包括:对智能合约的源代码进行词法分析,得到单词流;对单词流进行语法分析,得到抽象语法树;对抽象语法树进行语义分析,获得目标代码。
在编译得到智能合约的目标代码后,使用自定义编码字符集对其进行编码,编码之后再将其部署到区块链网络中,使用自定义编码字符集进行编码可以方便在网上进行传输。其中,该自定义编码字符集为BASE100编码字符集。具体地,该BASE100编码字符集是在BASE64编码字符集(其中包含的字符请参见图2)的基础上增加了36个ASKII码字符,该BASE100编码字符集中的字符的选择规则首要的是不能产生歧义,具体请参见图3-1和图3-2。采用BASE100编码字符集对智能合约的源代码进行编译,能够使目标代码的表达范围更宽、单位区块容量比使用区块链常用的BASE58编码字符集编码得到的结果增加近1倍,即相同数据长度所能表达的区块容量增加近1倍,有效提升了效能。
在将编码后的目标目标代码部署至智能合约服务器之前,可以对编码后的目标代码进行多重电子签名,以提升智能合约的数据安全性。而在将编码后的目标目标代码部署至智能合约服务器时,具体是由客户端将编码后的目标代码向主链服务器上链,以得到智能合约区块;之后由主链服务器将智能合约区块发送至智能合约服务器,智能合约服务器在确认智能合约区块通过合法性和一致性校验后,使智能合约区块生效,以完成智能合约的部署。
图1为一个实施例中智能合约部署方法的流程示意图。应该理解的是,虽然图1的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,本发明还提供了一种智能合约部署装置。如图4所示,该智能合约部署装置包括以下模块:
源代码获取模块110,用于客户端从本地获取由高级编程语言编写的智能合约的源代码;
编译模块120,用于将智能合约的源代码编译为能够在以太坊虚拟机中执行的目标代码;
编码模块130,用于使用自定义编码字符集对目标代码进行编码,得到编码后的目标代码;
部署模块140,用于将编码后的目标代码部署至智能合约服务器。
本发明实施例通过该智能合约部署装置能够实现将智能合约的源代码编译成可以保存在数据库、可以在虚拟机执行的目标代码,从智能合约的源代码编译、到智能合约的目标代码的生效和部署一键到位,期间不产生中间临时文件,并且可以在区块链网络中任何一个节点中完成部署。
在一个实施例中,该编译模块,包括:
词法分析子模块,用于对智能合约的源代码进行词法分析,得到单词流;
语法分析子模块,用于对单词流进行语法分析,得到抽象语法树;
语义分析子模块,用于对抽象语法树进行语义分析,获得目标代码。
在一个实施例中,该自定义编码字符集为BASE100编码字符集。
在一个实施例中,该部署模块,具体包括:
上链子模块,用于将编码后的目标代码向主链服务器上链,得到智能合约区块;
部署子模块,用于将智能合约区块发送至智能合约服务器,以指示智能合约服务器在确认智能合约区块通过合法性和一致性校验后,使智能合约区块生效,以完成智能合约的部署。
在一个实施例中,该智能合约部署装置还包括签名模块;签名模块,用于在将编码后的目标代码部署至智能合约服务器之前,对编码后的目标代码进行多重电子签名。
关于智能合约部署装置的具体限定可以参见上文中对于智能合约部署方法的限定,在此不再赘述。上述智能合约部署装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储智能合约的源代码、目标代码等数据,具体存储的数据还可以参见上述方法实施例中的限定。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种智能合约部署方法。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本领域普通技术人员可以理解实现上述方法实施例中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
- 上一篇:石墨接头机器人自动装卡簧、装栓机
- 下一篇:一种wifi在线烧写装置及方法