智能合约部署、执行方法、装置、电子设备及存储介质与流程

文档序号:20949026发布日期:2020-06-02 20:01阅读:226来源:国知局
智能合约部署、执行方法、装置、电子设备及存储介质与流程

本公开涉及区块链与智能合约技术领域,具体的,涉及一种区块链智能合约的部署及执行方法以及智能合约管理装置、电子设备及计算机可读存储介质。



背景技术:

区块链是一种互联网数据库技术,其本质是由多个区块链节点共同参与,通过多方存储与计算的方式来实现数据不可篡改、结果公开可靠的分布式账本技术。区块链的发展使得智能合约成为可能,其本质是将一段具有一台智能终端设备按照所签署的合约的权利和义务的计算机代码发布到区块链上,无需中介的参与即在区块链上自动执行,不仅提高了智能合约的执行效率,而且保证了合约条款的不可篡改。

目前区块链中的智能合约都必须部署并存储在区块链网络的每一个节点上,这样做一方面是为了保证各节点执行状态的一致性,另一方面是则是因为公示而具有了更好的可信性。但是当智能合约涉及到拥有方的核心算法、核心逻辑、资金资产的时候,是没有人愿意将合约公共部署在不受自己控制的节点上的。这样一方面暴露了自己的核心竞争能力,另一方面也要承担因公开而带来的攻击。



技术实现要素:

本发明提供一种智能合约部署和执行方法以及智能合约管理装置、电子设备及计算机可读存储介质,以解决现有技术中智能合约因部署并存储在公开的区块链网络中而带来的隐私泄露问题。

为了实现上述目的,本发明第一方面提供一种智能合约部署方法,包括:

用户向区块链网络发送智能合约部署指令;

所述区块链网络对所述部署指令进行解析;

根据所述部署指令中的类型与所述智能合约建立连接,并将所述智能合约在所述区块链网络上部署运行。

优选的,所述用户在向区块链网络发送智能合约部署指令前,首先通过账号登录合约管理模块,由所述合约管理模块与所述区块链网络建立通信连接;

若所述智能合约为链内合约,则直接将所述智能合约在所述区块链网络内部署运行;

若所述智能合约为链外合约,则所述区块链网络将所述部署命令发送至所述合约管理模块,之后所述合约管理模块对所述部署命令进行核验,并与所述智能合约建立通信连接,最后所述合约管理模块将所述智能合约在所述区块链网络上部署运行。

优选的,所述合约管理模块对所述部署命令进行核验包括:所述用户身份的核验和/或所述智能合约的核验。

优选的,所述用户身份的核验是指验证所述用户是否为合约拥有者,具体过程为:所述合约管理模块计算所述用户登录账号的哈希值,并与所述部署命令中的智能合约拥有者的登录账号的哈希值进行对比,若二者相同则验证通过,若二者不同则终止部署,其中所述登录账号为所述用户登录所述合约管理模块的账号。

优选的,所述智能合约的核验是指验证所述智能合约是否被修改,具体过程为:所述合约管理模块根据所述部署指令中的地址读取所述智能合约文件,之后根据所述部署指令中指定的算法计算所述智能合约文件的哈希值,并与所述部署指令中所述智能合约的哈希值进行对比,若二者相同则验证通过,若二者不同则终止部署。

优选的,所述合约管理模块与所述智能合约建立通信连接时如果在设定的时间内未建立成功,则终止合约部署。

为了实现上述目的,本发明第二方面提供一种智能合约执行方法,包括:

用户向区块链网络内发送智能合约执行指令;

区块链网络分析所述执行命令,并查验所述区块链网络内有无部署所述执行命令中的智能合约,若未部署则终止执行,若已部署则核查所述智能合约的类型,若所述智能合约为链内合约,则执行所述智能合约,若所述智能合约为链外合约,则将所述执行命令发送至合约管理模块;

所述合约管理模块计算所述执行指令中的所述智能合约的哈希值,并与所述智能合约在部署时的哈希值进行对比,若二者不同则终止执行,若二者相同则执行所述智能合约。

为了实现上述目的,本发明第三方面提供一种智能合约管理装置,用于在区块链网络中部署和/或执行智能合约,包括:

合约存储模块,存储位于区块链网络外的智能合约;

合约管理模块,包括:通信单元和核验单元,其中,所述通信单元用于在所述合约管理模块与所述智能合约之间建立通信连接,以及在所述合约管理模块与所述区块链网络之间建立通信连接;所述核验单元用于核验部署指令和执行指令;

登录模块,供用户登录所述合约管理模块。

为了实现上述目的,本发明第四方面提供一种电子设备,包括:

存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现:

如上所述的智能合约部署方法的步骤;或如上所述的智能合约执行方法的步骤。

为了实现上述目的,本发明第五方面提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现:

如上所述的智能合约部署方法的步骤;或如上所述的智能合约执行方法的步骤。

根据上面的描述和实践可知,本发明所述的智能合约部署方法能够根据实际需求对智能合约进行部署,若智能合约为不涉密的合约,便可直接将该智能合约存储在区块链网络中并部署运行;若智能合约为涉密的合约,便可将该智能合约存储在区块链网络外同时在该区块链网络上部署运行。此外,在本发明所述的智能合约部署方法中还加入了审核机制,能够对存储在区块链网络外的智能合约进行审核,判断智能合约是否被修改,保证了智能合约的唯一性;同时还对部署智能合约的人员进行身份审核,判断部署人员是否为智能合约的拥有者,增加了智能合约的安全性。

附图说明

图1为本发明的一个实施例中涉及的智能合约部署方法的流程图;

图2为本发明的一个实施例中涉及的智能合约执行方法的流程图。

具体实施方式

现在将参考附图更全面地描述示例性实施方式。然而,示例性实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例性实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。

此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。

需要说明的是,本公开中,用语“包括”、“配置有”、“设置于”用以表示开放式的包括在内的意思,并且是指除了列出的要素/组成部分/等之外还可存在另外的要素/组成部分/等;用语“第一”、“第二”等仅作为标记使用,不是对其对象数量或次序的限制。

在本公开的示例性实施例中,提供了一种智能合约部署方法,应用于具有一定存储空间、可连接网络和参与区块链的智能终端设备。具体而言,该智能终端设备可以是手机、平板电脑、笔记本电脑、pda、矿机等各种具有一定存储空间、可连接网络和参与区块链的电子终端设备。

参考图1中所示,该智能合约部署方法主要可以包括以下步骤:

步骤s11、用户向区块链网络发送智能合约部署指令。

步骤s12、所述区块链网络对所述部署指令进行解析。

步骤s13、根据所述部署指令中的类型与所述智能合约建立连接,并将所述智能合约在所述区块链网络上部署运行。

具体的,用户通过所述终端设备将部署命令发送至区块链网络中的某一区块链节点,该节点对所述部署指令进行分析,分析之后根据部署指令中的类型及地址与智能合约建立连接,并在该节点中部署运行,之后通过网络在区块链中的各个节点之间传播部署交易,从而使得全部节点都执行部署交易,保证智能合约信息在各个节点都进行了部署。

在该实施例中,所述终端设备为一电脑,在该电脑上安装有合约管理模块,该合约管理模块中包含有合约管理程序,该程序提供标准的grpc服务,能够与区块链节点进行通信交互,通过grpcs://$host:$port/deploy执行部署指令的服务,通过grpcs://$host:$port/execue交易执行指令的服务;同时能够跟智能合约进行通信交互。用户在登录该合约管理模块时需要账号,在该实施例中以电脑生成的随机数uuid作为用户登录的唯一账号,在合约管理模块启动后,将该账号保存在内存之中。uuid能保证任何时间任何机器上生成的识别码都是唯一的。

具体的,智能合约部署指令中包含有该智能合约的类型、名称、地址等信息。例如,本实施例中的一种链外智能合约的部署指令为:{“type”:“remote”,“contractid”:“account/v1”,“randhash”:“hash(uuid)”,“lang”:“java”,“url”:“https://192.180.2.23:9021”,“programhash”:“es1fsfgedsldsdppfmh”,“path”:“/home/abu/pay.jar”,“programhashalgo”:“sha256”}。另外,本实施例中的一种链内智能合约的部署指令为:{“type”:“local”,“contractid”:“account/v1”,“lang”:“java”,“bytesload”:bytes,“path”:“/home/abu/pay.jar”}。其中,type指智能合约的类型,其值为remote代表本合约为链外合约,其值为local代表本合约为链内合约;contractid为该合约的名称;randhash为合约拥有者登录合约管理模块的账号的哈希值;lang为合约的语言类型;url为合约的服务地址;path为合约程序的存储路径;programhash为合约程序的哈希值;programhashalgo为指定的哈希算法;bytesload为合约程序字节码。

用户通过合约管理模块向区块链中节点发送部署指令,当然也可以直接通过所述终端设备向区块链中节点发送部署指令,该部署指令包含有智能合约的类型及地址。若该智能合约存储于所述的区块链节点内,即该智能合约为链内合约,则该区块链节点将所述的智能合约在节点内部署运行,之后通过互联网在各个节点之间传播部署交易,使区块链网络内的所有节点上都部署运行该智能合约。若该智能合约存储于所述区块链节点外,即该智能合约为链外合约,则该节点将所述部署命令发送至合约管理模块,由所述合约管理模块对所述部署命令进行核验,并与所述智能合约建立通信连接,最后所述合约管理模块将所述智能合约在所述区块链的节点上部署运行,之后通过互联网在各个节点之间传播部署交易,使区块链网络内的所有节点上都部署运行该智能合约。若区块链网络中的不同节点向合约管理模块发送相同的部署指令时,合约管理模块仅向其中的一个节点进行合约部署,之后由该已部署合约的节点通过网络向其他未部署合约的节点传播部署交易。

具体的,合约管理模块在对所述部署命令进行核验时包括对提交部署指令的用户身份的核验和/或对智能合约的核验。其中用户身份的核验是指验证所述用户是否为智能合约拥有者,具体过程为:根据部署指令中指定的哈希算法programhashalgo计算该用户登录合约管理模块时所输入的账号的哈希值,并将该哈希值与部署指令中的randhash进行对比,若二者的值相同,则该用户为待部署的智能合约的拥有者,若二者不同,则该用户并非是待部署的智能合约的拥有者,进而终止部署该智能合约。

而智能合约的核验是指验证所述智能合约是否被修改,具体过程为:根据所述部署指令中的url和path读取所述待部署的智能合约文件,之后根据部署指令中指定的哈希算法programhashalgo计算所述智能合约文件的哈希值,并将该哈希值与所述部署指令中智能合约的哈希值programhash进行对比,若二者的值相同则验证通过,即合约文件未被修改,若二者不同则终止部署。在该实施例中,只有在用户身份和智能合约核验通过后,才继续对所述智能合约进行部署。

在部署时合约管理模块使用grpc与所述智能合约建立通信通道,并根据部署指令中的lang指定的语言类型,启动path路径下的智能合约程序,比如java即java–jarprogram.jar,将所述智能合约程序在区块链节点中部署运行。此外,在合约管理模块与所述智能合约建立通信连接时如果在设定的时间内未建立成功,则终止合约部署防止无限处理。例如设定的通信建立时间为30秒,则在30秒内合约管理模块与智能合约未建立通信连接,即终止该合约部署。

具体地说,链内合约为存储在区块链网络中每个节点中的合约,其对外公开,任何能够访问该区块链网络的人员都能获取该合约的内容,因此其不具有私密性,但是因为其是公开的,因此所述合约一旦被修改就能够显而易见地知晓,同时由于区块链的特性,存储于区块链网络内的智能合约也不易被修改。链外合约为存储在区块链网络外的智能合约,该智能合约通过所述合约管理模块与区块链网络建立连接,并在所述区块链网络内部署运行,链外合约为私密性合约,其不对外公示,能够有效地保护拥有方的核心算法、核心逻辑、资金资产等隐私,同时为了防止该智能合约的内容被修改,在部署该智能合约时加入了审核机制,能够审核智能合约有无被修改的情况,若智能合约被修改,则部署无法进行,因此保证了智能合约的唯一性和安全性。

通过上述的智能合约部署方法,既能在区块链网络中部署存储于区块链网络中的链内合约,又能在区块链网络中部署存储于区块链网络外的链外合约,在保护智能合约的隐私性的同时,还确保了智能合约的唯一性和安全性。

另外,在本公开的示例性实施例中,还提供了一种智能合约执行方法,应用于具有一定存储空间、可连接网络和参与区块链的智能终端设备。具体而言,该智能终端设备可以是手机、平板电脑、笔记本电脑、pda、矿机等各种具有一定存储空间、可连接网络和参与区块链的电子终端设备。

参考图2中所示,该智能合约执行方法,包括如下步骤:

步骤s21、用户通过所述智能终端设备向区块链网络内发送执行指令。

在该实施例中,所述智能终端设备为一电脑,在该电脑上安装有合约管理模块,该合约管理模块中包含有合约管理程序,该程序提供标准的grpc服务,能够与区块链节点进行通信交互,通过grpcs://$host:$port/deploy执行部署指令的服务,通过grpcs://$host:$port/execue接受交易执行的服务;同时能够跟智能合约进行通信交互。

执行指令中包含待执行的智能合约的名称、执行方法和该执行方法的参数。例如在该实施例中的一种执行指令为:{“contractid”:“account/v1”,“invoke”:[“query”,”zhangsan”]}。其含义为:执行名称为account/v1的智能合约,执行的方法为invoke,该方法的参数为query/zhangsan。

步骤s22、区块链网络中的某一节点分析所述执行指令,并查验所述区块链网络内有无部署所述执行命令中的智能合约,若无部署则终止该执行指令,若已部署则查看所部署的智能合约的类型,若该智能合约为链内合约,则在该节点内按照该执行指令以及该智能合约的既定逻辑运行处理;若该智能合约为链外合约,则将所述执行指令发送至合约管理模块。

步骤s23、所述合约管理模块在收到执行指令后,根据执行指令中的合约名称找到已部署的智能合约,并计算所述智能合约的哈希值,所用的算法为该智能合约在部署时部署指令中所含的哈希算法,之后将计算结果所述智能合约在部署时的哈希值进行对比,若二者不同,则意味着所述智能合约在部署完毕后被修改,则终止执行,若二者相同则按照该执行指令以及该智能合约的既定逻辑运行处理。

用户向区块链网络内发送的执行指令首先到达该区块链网络中的某一节点,在该节点对所述执行命令分析、核验通过后,再经由互联网向区块链中的其他节点传播执行交易。

通过该合约执行方法既能在区块链网络中执行存储于区块链网络中的链内合约,又能在区块链网络中执行存储于区块链网络外的链外合约,在保护智能合约的隐私性的同时,还确保了智能合约的唯一性和安全性。

此外,在本公开的示例性实施例中,还提供了一种智能合约管理装置,用于在区块链网络中部署和/或执行智能合约。该智能合约管理装置包括:合约存储模块、合约管理模块、登录模块。其中:

合约存储模块,被配置为存储智能合约,该智能合约为链外合约,属于私密合约,不对外公示,避免了智能合约因公开而带来的隐私泄露问题。合约管理模块,其包含有通信单元和核验单元。其中,通信单元提供标准的grpc服务,能够在合约管理模块与区块链网络之间建立通信连接,还能在合约管理模块与智能合约之间建立通信连接。核验单元用于验证部署指令和执行指令,在验证部署指令时,对提交部署指令的用户的身份进行核验,验证该用户是否为智能合约的拥有者,同时也可以对部署指令所指的智能合约进行核验,验证该部署指令所指的智能合约有无被修改的情况;在验证执行指令时,对执行指令所指的智能合约进行核验,验证该部署指令所指的智能合约有无被修改的情况。登录模块,被配置为供用户使用账号登录所述合约管理模块,每个用户的账号是唯一的,用户登录后其账号会缓存在登录模块内,供后续验证使用。

应当注意,尽管在上文详细描述中提及了智能合约管理装置的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。

另外,在本公开的示例性实施例中,还提供了一种能够实现上述方法的电子设备。该电子设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。所述电子设备以通用计算设备的形式表现。电子设备的组件可以包括但不限于:至少一个处理单元、至少一个存储单元、连接不同系统组件(包括存储单元和处理单元)的总线、显示单元。

其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元执行,使得所述处理单元执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施例的步骤。

存储单元可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(ram)和/或高速缓存存储单元,还可以进一步包括只读存储单元(rom)。

存储单元还可以包括具有一组(至少一个)程序模块的程序/实用工具,这样的程序模块包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。

总线可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。

电子设备也可以与一个或多个外部设备(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备交互的设备通信,和/或与使得该电子设备能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口进行。并且,电子设备还可以通过网络适配器与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。网络适配器通过总线与电子设备的其它模块通信。应当明白,可以结合该电子设备使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。

通过以上的实施例的描述,本领域的技术人员易于理解,这里描述的示例实施例可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd-rom,u盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施例的方法。

此外,在本公开的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施例中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施例的步骤。

本发明中用于实现上述方法的程序产品,其可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。

计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、rf等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施例。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1