区块链中智能合约的存储、执行方法及装置和电子设备
技术领域
本说明书实施例涉及区块链技术领域,尤其涉及一种区块链中智能合约的存储、执行方法及装置和电子设备。
背景技术
区块链技术,也被称之为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式数据库的新兴技术。由于区块链技术具有去中心化、公开透明、每台计算设备可以参与数据库记录、并且各计算设备之间可以快速的进行数据同步的特性,使得区块链技术在众多的领域中广泛的进行应用。
发明内容
本说明书实施例提供的一种区块链中智能合约的存储、执行方法及装置和电子设备:
根据本说明书实施例的第一方面,提供一种区块链中智能合约的存储方法,所述方法包括:
接收存储目标智能合约的交易;
响应所述交易,调用发布于所述区块链的智能合约的存储逻辑;
查询所述目标智能合约中是否存在与已存储智能合约相同的逻辑方法;
如果存在,将所述目标智能合约中除所述相同的逻辑方法外的其它逻辑方法,以及所述目标智能合约与所述已存储智能合约相同的逻辑方法的对应关系存储在所述区块链。
可选的,查询所述目标智能合约是否存在与已存储智能合约相同的逻辑方法,具体包括:
计算所述目标智能合约中的各逻辑方法的唯一标识;
如果所述唯一标识与所述区块链中存储的逻辑方法的唯一标识一致,确定所述一致的唯一标识对应的逻辑方法为已存储智能合约相同的逻辑方法。
可选的,所述目标智能合约与所述已存储智能合约相同的逻辑方法的对应关系存储在所述区块链,具体包括:
将所述目标智能合约中相同的逻辑方法转换为所述相同的逻辑方法的唯一标识后存储在所述区块链。
可选的,所述唯一标识包括唯一路径或者数字摘要;
所述唯一路径包括逻辑方法的文件名和方法名;
所述数字摘要包括针对逻辑方法进行哈希计算得到的哈希值。
可选的,所述区块链包括联盟链、公有链或者私有链。
根据本说明书实施例的第二方面,提供一种区块链中智能合约的执行方法,所述智能合约由前述任一项区块链中智能合约的存储方法存储在所述区块链,所述方法包括:
接收执行目标业务的交易;
响应所述交易,查询所述区块链中执行所述目标业务所需的目标智能合约;
基于所述目标智能合约与已存储智能合约相同的逻辑方法的对应关系获取所述相同的逻辑方法,以及所述目标智能合约中除所述相同的逻辑方法外的其它逻辑方法;
在实例化的虚拟机中将所述其它逻辑方法和相同的逻辑方法组装为完整的合约逻辑方法,执行所述合约逻辑方法。
可选的,所述基于所述目标智能合约与已存储智能合约相同的逻辑方法的对应关系获取所述相同的逻辑方法,具体包括:
获取所述目标智能合约中存储的唯一标识;
如果所述唯一标识与已存储智能合约的逻辑方法的唯一标识相同,获取所述已存储智能合约的逻辑方法。
可选的,所述唯一标识包括唯一路径或者数字摘要所述唯一标识包括唯一路径或者数字摘要;
所述唯一路径包括逻辑方法的文件名和方法名;
所述数字摘要包括针对逻辑方法进行哈希计算得到的哈希值。
可选的,所述方法还包括:
如果所述目标智能合约执行需要状态数据,从目标智能合约的数据域中获取状态数据;
所述在实例化的虚拟机中将所述其它逻辑方法和相同的逻辑方法组装为完整的合约逻辑方法,执行所述合约逻辑方法,具体包括:
在实例化的虚拟机中将所述其它逻辑方法和相同的逻辑方法组装为完整的合约逻辑方法,并将所述状态数据加载到所述合约逻辑方法后执行。
可选的,所述方法还包括:
区块链中的节点设备在启动时,实例化一个虚拟机;其中,所述虚拟机用于执行所述节点设备中任意的智能合约。
可选的,所述区块链包括联盟链、公有链或者私有链。
根据本说明书实施例的第三方面,提供一种区块链中智能合约的存储装置,所述装置包括:
接收单元,接收存储目标智能合约的交易;
响应单元,响应所述交易,调用发布于所述区块链的智能合约的存储逻辑;
查询单元,查询所述目标智能合约中是否存在与已存储智能合约相同的逻辑方法;
存储单元,如果存在,将所述目标智能合约中除所述相同的逻辑方法外的其它逻辑方法,以及所述目标智能合约与所述已存储智能合约相同的逻辑方法的对应关系存储在所述区块链。
可选的,所述查询单元,具体包括:
计算子单元,计算所述目标智能合约中的各逻辑方法的唯一标识;
确定单元,如果所述唯一标识与所述区块链中存储的逻辑方法的唯一标识一致,确定所述一致的唯一标识对应的逻辑方法为已存储智能合约相同的逻辑方法。
可选的,所述存储单元中,目标智能合约与所述已存储智能合约相同的逻辑方法的对应关系存储在所述区块链,具体包括:
将所述目标智能合约中相同的逻辑方法转换为所述相同的逻辑方法的唯一标识后存储在所述区块链。
可选的,所述唯一标识包括唯一路径或者数字摘要;
所述唯一路径包括逻辑方法的文件名和方法名;
所述数字摘要包括针对逻辑方法进行哈希计算得到的哈希值。
可选的,所述区块链包括联盟链、公有链或者私有链。
根据本说明书实施例的第四方面,提供一种区块链中智能合约的执行装置,所述智能合约由前述任一项区块链中智能合约的存储方法存储在所述区块链,所述装置包括:
接收单元,接收执行目标业务的交易;
响应单元,响应所述交易,查询所述区块链中执行所述目标业务所需的目标智能合约;
获取单元,基于所述目标智能合约与已存储智能合约相同的逻辑方法的对应关系获取所述相同的逻辑方法,以及所述目标智能合约中除所述相同的逻辑方法外的其它逻辑方法;
执行单元,在实例化的虚拟机中将所述其它逻辑方法和相同的逻辑方法组装为完整的合约逻辑方法,执行所述合约逻辑方法。
可选的,所述获取单元中,基于所述目标智能合约与已存储智能合约相同的逻辑方法的对应关系获取所述相同的逻辑方法,具体包括:
第一获取子单元,获取所述目标智能合约中存储的唯一标识;
第二获取子单元,如果所述唯一标识与已存储智能合约的逻辑方法的唯一标识相同,获取所述已存储智能合约的逻辑方法。
可选的,所述唯一标识包括唯一路径或者数字摘要所述唯一标识包括唯一路径或者数字摘要;
所述唯一路径包括逻辑方法的文件名和方法名;
所述数字摘要包括针对逻辑方法进行哈希计算得到的哈希值。
可选的,所述装置还包括:
状态数据获取子单元,如果所述目标智能合约执行需要状态数据,从目标智能合约的数据域中获取状态数据;
所述执行单元,具体包括:
在实例化的虚拟机中将所述其它逻辑方法和相同的逻辑方法组装为完整的合约逻辑方法,并将所述状态数据加载到所述合约逻辑方法后执行。
可选的,所述装置还包括:
实例化单元,区块链中的节点设备在启动时,实例化一个虚拟机;其中,所述虚拟机用于执行所述节点设备中任意的智能合约。
可选的,所述区块链包括联盟链、公有链或者私有链。
根据本说明书实施例的第五方面,提供一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为上述任一项区块链中智能合约的存储方法。
根据本说明书实施例的第六方面,提供一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为上述任一项区块链中智能合约的执行方法。
本说明书实施例,提供了一种区块链中智能合约的存储、执行方案,首先通过将运行智能合约所需的合约逻辑方法和状态数据分离,使得合约逻辑方法不再受到数据存储关联的制约。然后针对不同智能合约中相同的逻辑方法仅存储一次,使得相同的智能合约不再需要存储多次。如此,降低了存储智能合约所需的存储资源。在执行智能合约过程中,基于目标智能合约与已存储智能合约相同的逻辑方法的对应关系获取相同的逻辑方法,从而还原完整的目标智能合约代码。并且,由于合约逻辑方法和状态数据分离,每个节点设备仅需要实例化一个虚拟机,并通过一个虚拟机就可以执行各个智能合约,减少了实例化虚拟机所消耗的资源。
附图说明
图1是传统区块链中智能合约存储的示意图;
图2是本说明书一实施例提供的区块链中智能合约的存储方法的流程图;
图3是本说明书提供的区块链中智能合约存储的示意图;
图4是传统区块链中智能合约执行的示意图;
图5是本说明书一实施例提供的区块链中智能合约的执行方法的流程图;
图6是本说明书提供的区块链中智能合约执行的示意图;
图7是本说明书一实施例提供的区块链中的存储装置的硬件结构图;
图8是本说明书一实施例提供的区块链中的存储装置的模块;
图9是本说明书一实施例提供的区块链中的执行装置的硬件结构图;
图10是本说明书一实施例提供的区块链中的执行装置的模块。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
智能合约(Smart contract)是一种旨在应用在可以部署在区块链上的以信息化方式传播、验证或执行合同的计算机协议。通过在智能合约中声明业务逻辑可以实现执行相应操作。智能合约允许在没有第三方的情况下进行可信交易。这些交易可追踪且不可逆转。智能合约能够提供优于传统合同方法的安全,并减少与合同相关的其他交易成本。
在传统区块链系统中,一方面在响应创建的智能合约时,即使该智能合约已经由其它请求方创建并上链存储了,依然需要再次存储一份。从而导致了存储资源的浪费。
另一方面,在节点设备执行不同智能合约时,每个智能合约都需要实例化一个虚拟机VM。从而到导致计算资源的浪费,并且随着智能合约的逻辑越来越复杂,这种浪费乘阶递增。
以下通过介绍传统区块链智能合约设计,来进一步理解出现上述问题的原因。
在传统区块链智能合约的设计中,每个智能合约的方法逻辑(或业务逻辑)都是合约发布者根据自身的业务需求进行编写的。正是由于智能合约是外部的合约发布者发布的,因此可能存在由于编写者的疏忽导致智能合约运算逻辑异常的问题。而智能合约上链后,区块链中各个节点设备均可以使用,为了避免异常智能合约对调用方造成损失,每个智能合约都需要在各自封闭的环境中才可以运行。
以下对本说明书中智能合约中的通用方法逻辑进行介绍。
随着区块链技术的不断发展,区块链在不同领域不同场景中都有所应用。通常,在同一个领域特别是同一个业务场景中,业务流程一般具有一定的通用性,因此就会存在通用的方法逻辑。甚至在不同领域、不同业务场景中也会存在一些交叉通用的方法逻辑。
例如,在编程层面上也有很多方法逻辑是通用的,本说明书中称为通用逻辑方法,如加密签名算法、数据解析、工作流转、状态存储等。
相同业务公司之间也具有相同的方法逻辑,本说明书中称为业务逻辑方法,例如两个旅游公司,对于旅游业务通常也具有通用的业务逻辑,例如购买机票、火车票、订酒店等。
这些通用的方法逻辑可以来自智能合约平台、权威组织、活跃的开源爱好者等等。好的方法会得到认可并会积极采用。虽则业务的不断成熟、通用化,底层方法的不断完善、优化。一个智能合约依赖与此,其开发效率、性能等才能有所提升,健壮性、稳定性才能有更大保障。
同时,传统区块链中的智能合约还具有局限性,调用方只能在智能合约中实现部分的核心业务逻辑。一方面是因为风险太大,一方面则是因为区块链平台的局限性。无论是在性能还是扩展性上,在区块链上执行智能合约都有各种束缚。
在一些智能合约中,因为业务流程等的不同,只是在上层逻辑调用有些差异,底层逻辑可能完全一致。然而不同业务需要部署不同甚至相同的智能合约。每个智能合约会被拷贝多份存储在各个区块链节点上。在执行智能合约时,每个智能合约需要实例化并在一个独有的完全封闭的虚拟机中运行。这不论是对服务器的存储资源还是计算资源都会造成浪费。
如图1所示的传统区块链智能合约存储的示意图。
图1中,区块链中存储有智能合约1-1、智能合约1-2和智能合约2-1。
其中,智能合约1-1和智能合约1-2是不同合约发布者发布的相同的智能合约。智能合约2-1与智能合约1-1、智能合约1-2是不同的智能合约。
如图1所示,智能合约1-1和智能合约1-2具有相同的业务逻辑方法A和通用逻辑方法A。
智能合约2-1与智能合约1-1或1-2具有相同的通用逻辑方法A,具有不同的业务逻辑方法B。
虽然这3个智能合约存在相同的通用逻辑方法A,而且智能合约1-1和智能合约1-2还存在相同的业务逻辑方法A;但如图1所示,每个智能合约依然是相互独立的,3个合约中的通用逻辑方法A虽然完全相同,但依然需要存储3份;2个合约中的业务逻辑方法A虽然完全相同,但依然需要存储2份。
另一方面,每个智能合约的逻辑方法还关联有对应的数据域,即逻辑方法和数据域是强耦合、强关联的。如智能合约1-1对应有唯一的数据域1-1;智能合约1-1对应有唯一的数据域1-2;智能合约2-1对应有唯一的数据域2-1。所述数据域是用于存放智能合约执行所需的状态数据的。
需要说明的是,这仅是针对区块链中1个节点设备中存储的智能合约,而区块链中的其它节点设备存储智能合约同样如此,因此各个节点设备都会需要重复存储相同的逻辑代码,从而导致存储资源的浪费。
针对上述提出的传统区块链中智能合约的问题,本说明书提出了一种区块链中智能合约的存储以及执行方案。从根源上减少存储、计算资源的浪费。并且可以使得智能合约执行更稳定,逻辑方法趋于标准化。
请参考图2,图2为本说明书一实施例提供的区块链中智能合约的存储方法的流程图,所述方法应用于所述区块链中任一节点设备,所述方法包括:
步骤110:接收存储目标智能合约的交易;
步骤120:响应所述交易,调用发布于所述区块链的智能合约的存储逻辑;
步骤130:查询所述目标智能合约中是否存在与已存储智能合约相同的逻辑方法;
步骤140:如果存在,将所述目标智能合约中除所述相同的逻辑方法外的其它逻辑方法,以及所述目标智能合约与所述已存储智能合约相同的逻辑方法的对应关系存储在所述区块链。
在本说明书所描述的区块链,具体可以包括私有链、公有链以及联盟链等,在本说明书中不进行特别限定。所述区块链中的节点设备可以无限制的添加,各个节点设备可以同步一个系统时间,以保障智能合约执行的时效性。
需要说明的是,在本说明书中所描述的交易(Transaction),是指通过区块链的客户端创建,并需要最终发布至区块链的数据存储系统中的一笔数据。
区块链中的交易,通常存在狭义的交易以及广义的交易之分。狭义的交易是指用户向区块链发布的一笔价值转移;例如,在传统的比特币区块链网络中,交易可以是用户在区块链中发起的一笔转账。而广义的交易是指用户向区块链发布的一笔具有业务意图的业务数据;例如,运营方可以基于实际的业务需求搭建一个联盟链,依托于联盟链部署一些与价值转移无关的其它类型的在线业务(比如,宽泛的可以分为查询业务、调用业务等),而在这类联盟链中,交易可以是用户在联盟链中发布的一笔具有业务意图的业务消息或者业务请求。
上述客户端,可以包括任意类型的以区块链中存储的底层业务数据作为数据支撑,来实现特定的业务功能的上层应用。
以下结合图3所示的本说明书提供的区块链中智能合约存储的示意图。
图3中,可以将智能合约独立为一个独立的智能合约模块。并且将智能合约的状态数据和合约逻辑进行分离,即将每个智能合约的逻辑方法和数据域解耦。如此,相同的智能合约不再需要实例化存储多次。
在前述图1传统区块链中智能合约存储示意图中,智能合约1-1具有业务逻辑方法A和通用逻辑方法A;
智能合约1-2具有业务逻辑方法A和通用逻辑方法A;
智能合约2-1具有业务逻辑方法B和通用逻辑方法A。
图3同样是针对这3个智能合约进行存储;可见由于智能合约1-1、1-2和3-1具有完全相同的通用逻辑方法A,因此,仅需要存储一次通用逻辑方法A;即智能合约1-1、1-2、2-1共用通用逻辑方法A。
由于智能合约1-1和1-2具有完全相同的业务逻辑方法A,因此,也只要存储一次业务逻辑方法A;即智能合约1-1、1-2共用业务逻辑方法A。
另一方方面,由于逻辑方法和数据域分离,相同的业务逻辑方法A需要分别对应智能合约1-1和1-2的数据域。
值得一提的是,各个智能合约中的通用逻辑方法可以下沉,开发者只需要将这些通用逻辑方法按照业务逻辑拼凑在一起即可实现智能合约的开发。同时开发者可以分享平台更多的通用逻辑方法(对现有逻辑方法的优化、业务逻辑优化及创建、bug修改等等),供自己和他人调用。
在一实施例中,所述步骤130查询所述目标智能合约是否存在与已存储智能合约相同的逻辑方法,具体包括:
计算所述目标智能合约中的各逻辑方法的唯一标识;
如果所述唯一标识与所述区块链中存储的逻辑方法的唯一标识一致,确定所述一致的唯一标识对应的逻辑方法为已存储智能合约相同的逻辑方法。
所述唯一标识包括唯一路径或者数字摘要;
所述唯一路径包括逻辑方法的文件名和方法名;
所述数字摘要包括针对逻辑方法进行哈希计算得到的哈希值。
需要说明的是,所述唯一路径和数字摘要仅是唯一标识的几种示例,所述唯一标识还可以是其它任何具有唯一性的内容。
在实际应用中,由于逻辑方法实际是一系列用于实现运行逻辑的代码;而查询相同的代码所消耗的计算资源较大;而将逻辑方法转换为数字摘要或者唯一路径后,由于数字摘要或者唯一路径的内容相对于代码的内容大大缩小,因此查询效率会提高,所消耗的计算资源也会降低。
在一实施例中,所述步骤140中,目标智能合约与所述已存储智能合约相同的逻辑方法的对应关系存储在所述区块链,具体包括:
将所述目标智能合约中相同的逻辑方法转换为所述相同的逻辑方法的唯一标识(例如数字摘要、唯一路径等)后存储在所述区块链。
以下以数字摘要为例进行说明,某目标智能合约存在逻辑方法A、逻辑方法B和逻辑方法C;记为目标智能合约{A,B,C}。
假设其中逻辑方法A与一个已存储在区块链的智能合约1的逻辑方法A相同;逻辑方法B与另一个已存储在区块链的智能行业2的逻辑方法B相同;逻辑方法C与存储在区块链的所有逻辑方法均不同。
那么,在存储目标智能合约{A,B,C}时,将逻辑方法A的代码整个转换为逻辑方法A的数字摘要,记为hash(A);
将逻辑方法B的代码整个转换为逻辑方法B的数字摘要,记为hash(B);
这样最终存储在区块链中的目标智能合约实际为{hash(A),hash(B),C},逻辑方法A和B均是数字摘要,只有逻辑方法C是代码本身。所述hash(A)、hash(B)即为目标智能合约与已存储的相同逻辑方法之间的对应关系。
通过上述区块链中智能合约的存储方案,首先通过将运行智能合约所需的合约逻辑方法和状态数据分离,使得合约逻辑方法不再受到数据存储关联的制约。然后针对不同智能合约中相同的逻辑方法仅存储一次,使得相同的智能合约不再需要存储多次。如此,降低了存储智能合约所需的存储资源。
在存储智能合约的基础上,本说明书还提供了智能合约的执行实施例。
首先,通过图4的传统区块链中智能合约的执行示意图(对应图1的传统区块链中智能合约的存储方案),介绍传统区块链的缺陷。
图4中,由于传统区块链中智能合约的逻辑方法和数据域是强耦合、强关联的。如智能合约1-1对应有唯一的数据域1-1;智能合约1-1对应有唯一的数据域1-2;智能合约2-1对应有唯一的数据域2-1。所述数据域是用于存放智能合约执行所需的状态数据的。因此,执行每个智能合约都需要实例化一个虚拟机VM。然后将智能合约的逻辑方法和状态数据在对应的虚拟机中执行。一个节点设备的资源(内存资源、计算资源)是有限的;随着节点设备的智能合约不断增加,虚拟机消耗的资源也会不断增加,无疑是一种资源浪费。
针对上述问题,请参考图5,图5为本说明书一实施例提供的区块链中智能合约的执行方法的流程图,所述方法应用于所述区块链的节点设备,所述智能合约通过前述区块链中智能合约的存储方法存储在所述区块链,所述方法包括:
步骤210:接收执行目标业务的交易;
步骤220:响应所述交易,查询所述区块链中执行所述目标业务所需的目标智能合约;
步骤230:基于所述目标智能合约与已存储智能合约相同的逻辑方法的对应关系获取所述相同的逻辑方法,以及所述目标智能合约中除所述相同的逻辑方法外的其它逻辑方法;
步骤240:在实例化的虚拟机中将所述其它逻辑方法和相同的逻辑方法组装为完整的合约逻辑方法,执行所述合约逻辑方法。
在本说明书所描述的区块链,具体可以包括私有链、公有链以及联盟链等,在本说明书中不进行特别限定。所述区块链中的节点设备可以无限制的添加,各个节点设备可以同步一个系统时间,以保障智能合约执行的时效性。
需要说明的是,在本说明书中所描述的交易(Transaction),是指通过区块链的客户端创建,并需要最终发布至区块链的数据存储系统中的一笔数据。
区块链中的交易,通常存在狭义的交易以及广义的交易之分。狭义的交易是指用户向区块链发布的一笔价值转移;例如,在传统的比特币区块链网络中,交易可以是用户在区块链中发起的一笔转账。而广义的交易是指用户向区块链发布的一笔具有业务意图的业务数据;例如,运营方可以基于实际的业务需求搭建一个联盟链,依托于联盟链部署一些与价值转移无关的其它类型的在线业务(比如,宽泛的可以分为查询业务、调用业务等),而在这类联盟链中,交易可以是用户在联盟链中发布的一笔具有业务意图的业务消息或者业务请求。
上述客户端,可以包括任意类型的以区块链中存储的底层业务数据作为数据支撑,来实现特定的业务功能的上层应用。
在一实施例中,所述方法还包括:
区块链中的节点设备在启动时,实例化一个虚拟机;其中,所述虚拟机用于执行所述节点设备中任意的智能合约。
以下结合图6所示的本说明书提供的区块链中智能合约执行的示意图(对应图3所示的本说明书提供的区块链中智能合约存储方案)。
如前图3中所述:将智能合约的状态数据和合约逻辑进行分离,即将每个智能合约的逻辑方法和数据域解耦。如此图6中,一个节点设备只需要实例化一个虚拟机即可。不同的智能合约作为该虚拟机的不同业务接口对外提供服务。与图4的对比中可以看出,虚拟机实例化数量、智能合约加载数量、通用逻辑方法加载数量等都会精简到最少。
在一实施例中,所述步骤230中基于所述目标智能合约与已存储智能合约相同的逻辑方法的对应关系获取所述相同的逻辑方法,具体包括:
获取所述目标智能合约中存储的唯一标识;
如果所述唯一标识与已存储智能合约的逻辑方法的唯一标识相同,获取所述已存储智能合约的逻辑方法。
其中,所述唯一标识包括唯一路径或者数字摘要所述唯一标识包括唯一路径或者数字摘要;
所述唯一路径包括逻辑方法的文件名和方法名;
所述数字摘要包括针对所述逻辑方法进行哈希计算得到的哈希值。
依然沿用前述智能合约存储示例为例:目标智能合约{A,B,C}最终存储在区块链中的目标智能合约实际为{hash(A),hash(B),C}。
本实施例中,假设执行目标业务所需的目标智能合约同样是{A,B,C}。那么由于其存储在区块链中内容为{hash(A),hash(B),C};只有逻辑方法C是代码,两个逻辑方法A和B实际存储的是数字摘要。此时,需要获取这两个数字摘要对应的代码内容。
通过上述存储过程可知,每个数字摘要实际是对应的已存储在区块链的其它智能合约中的逻辑方法;这样,只需要查询已存储的各个智能合约中各个逻辑方法的数字摘要是否与hash(A),hash(B)一致就可以还原hash(A),hash(B)原始的代码内容。
以前述智能合约存储中示例的内容可知,智能合约1的逻辑方法A实际与目标智能合约的逻辑方法A相同,因此,智能合约1的逻辑方法A的数字摘要必定与hash(A)是相同的;所以可以确定目标智能合约的hash(A)对应的代码内容为智能合约1的逻辑方法A的代码内容。
同样地,智能合约2的逻辑方法B实际与目标智能合约的逻辑方法B相同,因此,智能合约2的逻辑方法B的数字摘要必定与hash(B)是相同的;所以可以确定目标智能合约的hash(B)对应的代码内容为智能合约2的逻辑方法B的代码内容;
如此,就可以还原出目标智能合约原始的逻辑方法A、B、C的代码。
最后,节点设备可以在实例化的虚拟机中将所述逻辑方法A、B、C组装为完整的合约逻辑方法,执行所述合约逻辑方法。
在一实施例中,所述方法还包括:
如果所述目标智能合约执行需要状态数据,从目标智能合约的数据域中获取状态数据;
所述在实例化的虚拟机中将所述其它逻辑方法和相同的逻辑方法组装为完整的合约逻辑方法,执行所述合约逻辑方法,具体包括:
在实例化的虚拟机中将所述其它逻辑方法和相同的逻辑方法组装为完整的合约逻辑方法,并将所述状态数据加载到所述合约逻辑方法后执行。
如图6所示,假设节点设备需要执行智能合约1-1,则需要获取业务逻辑方法A和通用逻辑方法A,以及从数据域1-1中获取相应的状态数据;
然后在虚拟机中,将业务逻辑方法A和通用逻辑方法A组装为一个完整的合约逻辑方法,并将状态数据加载到该合约逻辑方法后执行。
值得一提的是,在虚拟机执行合约逻辑方法后,还需要根据执行结果中各状态数据更新数据域中状态数据的状态值;以及将执行结果返回给请求方。
通过上述区块链中智能合约的执行方案,在执行智能合约过程中,需要基于目标智能合约与已存储智能合约相同的逻辑方法的对应关系获取相同的逻辑方法,从而还原完整的目标智能合约代码。并且,由于合约逻辑方法和状态数据分离,每个节点设备仅需要实例化一个虚拟机,并通过一个虚拟机就可以执行各个智能合约,减少了实例化虚拟机所消耗的资源。
综上所述,本说明书提供的区块链中智能合约的存储、执行方案,通过共享相同逻辑方法,使得相同的逻辑方法仅需存储一次;各个逻辑方案可以相互调用。同时对业务核心数据即数据域的状态数据进行隔离、加密等处理。保障核心数据、夯实业务相关的逻辑方法。通用逻辑方法全系统可调用,可发布。避免了各个合约都有相同的通用逻辑方法造成冗余。每个节点设备的各个智能合约可以采用同一个实例化虚拟机。各个合约接口作为服务方法提供。区块链系统的逻辑方法和状态数据存储相分离,避免了智能合约对数据的依赖。
与前述图5所示区块链中智能合约的存储方法实施例相对应,本说明书还提供了区块链中智能合约的存储装置的实施例。所述装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机业务程序指令读取到内存中运行形成的。从硬件层面而言,如图7所示,为本说明书区块链中智能合约的存储装置所在设备的一种硬件结构图,除了图7所示的处理器、网络接口、内存以及非易失性存储器之外,实施例中装置所在的设备通常根据区块链中智能合约的存储逻辑的实际功能,还可以包括其他硬件,对此不再赘述。
请参见图8,为本说明书一实施例提供的区块链中智能合约的存储装置的模块图,所述装置对应了图5所示实施例,所述装置包括:
接收单元310,接收存储目标智能合约的交易;
响应单元320,响应所述交易,调用发布于所述区块链的智能合约的存储逻辑;
查询单元330,查询所述目标智能合约中是否存在与已存储智能合约相同的逻辑方法;
存储单元340,如果存在,将所述目标智能合约中除所述相同的逻辑方法外的其它逻辑方法,以及所述目标智能合约与所述已存储智能合约相同的逻辑方法的对应关系存储在所述区块链。
可选的,所述查询单元330,具体包括:
计算子单元,计算所述目标智能合约中的各逻辑方法的数字摘要;
确定单元,如果所述数字摘要与所述区块链中存储的逻辑方法的数字摘要一致,确定所述一致的数字摘要对应的逻辑方法为已存储智能合约相同的逻辑方法。
可选的,所述存储单元340中,目标智能合约与所述已存储智能合约相同的逻辑方法的对应关系存储在所述区块链,具体包括:
将所述目标智能合约中相同的逻辑方法转换为所述相同的逻辑方法的数字摘要后存储在所述区块链。
可选的,所述逻辑方法的数字摘要包括:
针对所述逻辑方法进行哈希计算得到的哈希值。
可选的,所述区块链包括联盟链、公有链或者私有链。
与前述图6所示区块链中智能合约的执行方法实施例相对应,本说明书还提供了区块链中智能合约的执行装置的实施例。所述装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机业务程序指令读取到内存中运行形成的。从硬件层面而言,如图9所示,为本说明书区块链中智能合约的执行装置所在设备的一种硬件结构图,除了图9所示的处理器、网络接口、内存以及非易失性存储器之外,实施例中装置所在的设备通常根据区块链中智能合约的执行逻辑的实际功能,还可以包括其他硬件,对此不再赘述。
请参见图10,为本说明书一实施例提供的区块链中智能合约的执行装置的模块图,所述装置对应了图6所示实施例,所述智能合约通过前述区块链中智能合约的存储方法存储在所述区块链,所述装置包括:
接收单元410,接收执行目标业务的交易;
响应单元420,响应所述交易,查询所述区块链中执行所述目标业务所需的目标智能合约;
获取单元430,基于所述目标智能合约与已存储智能合约相同的逻辑方法的对应关系获取所述相同的逻辑方法,以及所述目标智能合约中除所述相同的逻辑方法外的其它逻辑方法;
执行单元440,在实例化的虚拟机中将所述其它逻辑方法和相同的逻辑方法组装为完整的合约逻辑方法,执行所述合约逻辑方法。
可选的,所述获取单元430中,基于所述目标智能合约与已存储智能合约相同的逻辑方法的对应关系获取所述相同的逻辑方法,具体包括:
第一获取子单元,获取所述目标智能合约中存储的数字摘要;
第二获取子单元,如果所述数字摘要与已存储智能合约的逻辑方法的数字摘要相同,获取所述已存储智能合约的逻辑方法。
可选的,所述逻辑方法的数字摘要包括:
针对所述逻辑方法进行哈希计算得到的哈希值。
可选的,所述装置还包括:
状态数据获取子单元,如果所述目标智能合约执行需要状态数据,从目标智能合约的数据域中获取状态数据;
所述执行单元440,具体包括:
在实例化的虚拟机中将所述其它逻辑方法和相同的逻辑方法组装为完整的合约逻辑方法,并将所述状态数据加载到所述合约逻辑方法后执行。
可选的,所述装置还包括:
实例化单元,区块链中的节点设备在启动时,实例化一个虚拟机;其中,所述虚拟机用于执行所述节点设备中任意的智能合约。
可选的,所述区块链包括联盟链、公有链或者私有链。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上图8描述了区块链中智能合约的存储装置的内部功能模块和结构示意,其实质上的执行主体可以为一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
接收存储目标智能合约的交易;
响应所述交易,调用发布于所述区块链的智能合约的存储逻辑;
查询所述目标智能合约中是否存在与已存储智能合约相同的逻辑方法;
如果存在,将所述目标智能合约中除所述相同的逻辑方法外的其它逻辑方法,以及所述目标智能合约与所述已存储智能合约相同的逻辑方法的对应关系存储在所述区块链。
以上图10描述了区块链中智能合约的执行装置的内部功能模块和结构示意,其实质上的执行主体可以为一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
接收执行目标业务的交易;
响应所述交易,查询所述区块链中执行所述目标业务所需的目标智能合约;
基于所述目标智能合约与已存储智能合约相同的逻辑方法的对应关系获取所述相同的逻辑方法,以及所述目标智能合约中除所述相同的逻辑方法外的其它逻辑方法;
在实例化的虚拟机中将所述其它逻辑方法和相同的逻辑方法组装为完整的合约逻辑方法,执行所述合约逻辑方法;
其中,所述智能合约通过前述任一项区块链中智能合约存储方法存储在所述区块链。
在上述电子设备的实施例中,应理解,该处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application SpecificIntegrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,而前述的存储器可以是只读存储器(英文:read-only memory,缩写:ROM)、随机存取存储器(英文:random access memory,简称:RAM)、快闪存储器、硬盘或者固态硬盘。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于电子设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。