数据结构的读取及更新方法、装置、电子设备
技术领域
本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种数据结构的读取及更新方法、装置、电子设备。
背景技术
区块链技术(也被称之为,分布式账本技术)是一种去中性化的分布式数据库技术,具有去中心化、公开透明、不可篡改、可信任等多种特点,适用于诸多对数据可靠性具有高需求的应用场景中。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种数据结构的读取及更新方法、装置、电子设备。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种数据结构的读取方法,包括:
区块链网络中的区块链节点获取针对第一智能合约的调用请求;
响应于所述调用请求,所述区块链节点运行所述第一智能合约包含的合约代码,以对第二智能合约包含的元数据所描述的数据结构进行解析,并通过计算机编程语言对所述数据结构进行表征;
所述区块链节点将所述计算机编程语言表征的数据结构返回至所述调用请求的发起方。
根据本说明书一个或多个实施例的第二方面,提出了一种数据结构的更新方法,包括:
区块链网络中的区块链节点获取针对第一智能合约的调用请求;
所述区块链节点获取基于计算机编程语言的更新后数据结构;
响应于所述调用请求,所述区块链节点运行所述第一智能合约包含的第一合约代码,所述第一合约代码用于对所述更新后数据结构进行解析,并表征为基于定义描述语言的更新后元数据,以对第二智能合约包含的更新前元数据进行更新。
根据本说明书一个或多个实施例的第三方面,提出了一种数据结构的读取装置,包括:
获取单元,使区块链网络中的区块链节点获取针对第一智能合约的调用请求;
响应单元,响应于所述调用请求,使所述区块链节点运行所述第一智能合约包含的合约代码,以对第二智能合约包含的元数据所描述的数据结构进行解析,并通过计算机编程语言对所述数据结构进行表征;
返回单元,使所述区块链节点将所述计算机编程语言表征的数据结构返回至所述调用请求的发起方。
根据本说明书一个或多个实施例的第四方面,提出了一种数据结构的更新装置,包括:
请求获取单元,使区块链网络中的区块链节点获取针对第一智能合约的调用请求;
结构获取单元,使所述区块链节点获取基于计算机编程语言的更新后数据结构;
请求响应单元,响应于所述调用请求,使所述区块链节点运行所述第一智能合约包含的第一合约代码,所述第一合约代码用于对所述更新后数据结构进行解析,并表征为基于定义描述语言的更新后元数据,以对第二智能合约包含的更新前元数据进行更新。
根据本说明书一个或多个实施例的第五方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为实现如上述实施例中任一所述的数据结构的读取方法。
根据本说明书一个或多个实施例的第六方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为实现如上述实施例中任一所述的数据结构的更新方法。
附图说明
图1是一示例性实施例提供的一种数据结构的读取方法的流程图。
图2是一示例性实施例提供的一种数据结构的更新方法的流程图。
图3是一示例性实施例提供的一种智能合约的结构示意图。
图4是一示例性实施例提供的一种读取数据结构的示意图。
图5是一示例性实施例提供的一种更新数据结构的示意图。
图6是一示例性实施例提供的一种设备的结构示意图。
图7是一示例性实施例提供的一种数据结构的读取装置的框图。
图8是一示例性实施例提供的另一种设备的结构示意图。
图9是一示例性实施例提供的一种数据结构的更新装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
图1是一示例性实施例提供的一种数据结构的读取方法的流程图。如图1所示,该方法可以包括以下步骤:
步骤102,区块链网络中的区块链节点获取针对第一智能合约的调用请求。
在一实施例中,调用请求可以承载于区块链网络中创建的一笔交易,并通过在该交易中指明所需调用的该第一智能合约的合约地址、端口信息等,使得该调用请求被确认为“针对”上述的第一智能合约,从而执行该第一智能合约包含的合约代码。
在一实施例中,本说明书中所描述的交易(transfer),是指通过区块链节点对应的客户端创建,并需要最终发布至区块链网络的分布式数据库中的一笔数据。其中,区块链网络中的交易,存在狭义的交易以及广义的交易之分。狭义的交易是指向区块链网络发布的一笔价值转移;例如,在传统的比特币区块链网络中,交易可以是在区块链网络中发起的一笔转账。而广义的交易是指向区块链网络发布的一笔具有业务意图的业务数据;例如,运营方可以基于实际的业务需求搭建一个联盟链,依托于联盟链部署一些与价值转移无关的其它类型的在线业务(比如,租房业务、车辆调度业务、保险理赔业务、信用服务、医疗服务等),而在这类联盟链中,交易可以是在联盟链中发布的一笔具有业务意图的业务消息或者业务请求。
在一实施例中,所述调用请求的发起方可以包括:所述区块链网络中的某一角色。例如,该角色可以包括区块链网络的开发人员或普通用户,该角色能够基于对该第一智能合约的调用,对第二智能合约包含的数据的数据结构进行快速读取。
在一实施例中,第一智能合约可以经过区块链网络中的各个区块链节点之间共识,并记录于区块链网络中,可供区块链节点进行调用。
在一实施例中,所述第一智能合约可以为所述区块链网络的系统功能提供的系统合约。譬如,该第一智能合约可以被写入区块链网络的源代码中,使得该第一智能合约可以作为预设“工具”,供区块链节点对该第一智能合约进行调用,譬如用于对第二智能合约包含的数据的数据结构进行读取,但普通用户或一般开发人员无法对该第一智能合约进行修改,以确保其可靠性。
步骤104,响应于所述调用请求,所述区块链节点运行所述第一智能合约包含的合约代码,以对第二智能合约包含的元数据所描述的数据结构进行解析,并通过计算机编程语言对所述数据结构进行表征。
在一实施例中,开发人员等角色可以读取和编辑基于计算机编程语言的数据结构,而元数据采用定义描述语言进行表征、无法被直接读取和编辑。因此,第一智能合约包含的合约代码可以用于实现在计算机编程语言与定义描述语言之间的转换功能模块,可以对定义描述语言表征的元数据进行解析,并进一步转换为采用计算机编程语言进行表征,以使得上述角色能够便捷地读取第二智能合约包含的数据的数据结构。
在一实施例中,第一智能合约可以包括code结构,该code结构中包含上述的合约代码。第二智能合约可以包括storage结构,该storage结构用于记录数据集合和元数据。第一智能合约也可以包括storage结构或其他结构,以用于记录相应数据或其他内容,本说明书并不对此进行限制。第二智能合约也可以包括code结构,该code结构用于记录合约代码,比如该合约代码被执行后可以对第二智能合约包含的元数据进行解析,以针对第二智能合约包含的数据进行读写操作、更新操作等,本说明书并不对此进行限制。
在一实施例中,数据结构可以包括:包含的数据字段、各个数据字段之间的层级关系、各个数据字段之间的取值关系等,本说明书并不对此进行限制。
步骤106,所述区块链节点将所述计算机编程语言表征的数据结构返回至所述调用请求的发起方。
在一实施例中,所述计算机编程语言可以包括:预设类型的语言。例如,可以预先设定为均采用Solidity语言、JavaScript语言、Python语言甚至混合语言等,本说明书并不对此进行限制。采用跨合约的调用,还可以实现不同语言编写的合约之间的调用;而且,在合约升级时,可以采用相同或者不同语言重新编写已有合约,而不影响其它合约。采用跨合约的调用,还可以实现不同语言编写的合约访问相同的数据。
在一实施例中,所述计算机编程语言可以包括:所述调用请求中指示类型的语言。换言之,调用请求的发起方可以指定希望采用的计算机编程语言的类型,这种指定可以针对任意类型,也可以在预先配置的多种类型中进行选择,本说明书并不对此进行限制。
图2是一示例性实施例提供的一种数据结构的更新方法的流程图。如图2所示,该方法可以包括以下步骤:
步骤202A,区块链网络中的区块链节点获取针对第一智能合约的调用请求。
在一实施例中,调用请求可以承载于区块链网络中创建的一笔交易,并通过在该交易中指明所需调用的该第一智能合约的合约地址、端口信息等,使得该调用请求被确认为“针对”上述的第一智能合约,从而执行该第一智能合约包含的第一合约代码。
在一实施例中,本说明书中所描述的交易(transfer),是指通过区块链节点对应的客户端创建,并需要最终发布至区块链网络的分布式数据库中的一笔数据。其中,区块链网络中的交易,存在狭义的交易以及广义的交易之分。狭义的交易是指向区块链网络发布的一笔价值转移;例如,在传统的比特币区块链网络中,交易可以是在区块链网络中发起的一笔转账。而广义的交易是指向区块链网络发布的一笔具有业务意图的业务数据;例如,运营方可以基于实际的业务需求搭建一个联盟链,依托于联盟链部署一些与价值转移无关的其它类型的在线业务(比如,租房业务、车辆调度业务、保险理赔业务、信用服务、医疗服务等),而在这类联盟链中,交易可以是在联盟链中发布的一笔具有业务意图的业务消息或者业务请求。
在一实施例中,所述调用请求的发起方可以包括:所述区块链网络中的某一角色。例如,该角色可以包括区块链网络的开发人员、维护人员、普通用户或者授权用户,该角色能够基于对该第一智能合约的调用,从而便捷地实现对第二智能合约包含的数据的数据结构的更新,或者便捷的实现对第二智能合约包含的数据进行访问或者更新。
在一实施例中,第一智能合约可以经过区块链网络中的各个区块链节点之间共识,并记录于区块链网络中,可供区块链节点进行调用。
在一实施例中,所述第一智能合约可以为所述区块链网络的系统功能提供的系统合约。譬如,该第一智能合约可以被写入区块链网络的源代码中,使得该第一智能合约可以作为预设“工具”,供区块链节点对该第一智能合约进行调用,譬如用于对第二智能合约包含的元数据进行更新、以进一步修改第二智能合约包含的数据的数据结构,但普通用户或一般开发人员无法对该第一智能合约进行修改,以确保其可靠性。
步骤202B,所述区块链节点获取基于计算机编程语言的更新后数据结构。
在一实施例中,开发人员可以通过诸如图1所示的实施读取第二智能合约包含的数据的数据结构,并基于计算机编程语言对该数据结构实施更新,从而得到更新后数据结构。
在一实施例中,所述计算机编程语言可以包括:预设类型的语言。例如,可以预先设定为均采用Solidity语言、JavaScript语言、Python语言等,本说明书并不对此进行限制。
在一实施例中,数据结构可以包括:包含的数据字段、各个数据字段之间的层级关系、各个数据字段之间的取值关系等,本说明书并不对此进行限制。
在一实施例中,步骤202A与步骤202B之间并不存在必然的先后顺序,只要发生于步骤204之前即可,本说明书并不对此进行限制。
步骤204,响应于所述调用请求,所述区块链节点运行所述第一智能合约包含的第一合约代码,所述第一合约代码用于对所述更新后数据结构进行解析,并表征为基于定义描述语言的更新后元数据,以对第二智能合约包含的更新前元数据进行更新。
在一实施例中,开发人员等角色可以读取和编辑基于计算机编程语言的数据结构,而元数据采用定义描述语言进行表征、无法被直接读取和编辑。因此,第一智能合约包含的第一合约代码可以用于实现在计算机编程语言与定义描述语言之间的转换功能模块,可以对定义描述语言表征的元数据进行解析,并进一步转换为采用计算机编程语言进行表征,以使得上述角色能够通过计算机编程语言对数据的数据结构进行更新,并通过第一智能合约将更新后数据结构便捷地更新为第二智能合约包含的元数据,以通过更新后的元数据对第二智能合约包含的数据的数据结构进行更新。那么,尤其是在开发阶段或维护阶段,使得开发人员等角色能够快捷地读取、修改第二智能合约包含的数据的数据结构。
在一实施例中,第一智能合约可以包括code结构,该code结构中包含上述的第一合约代码;第一智能合约也可以包括storage结构或其他结构,以用于记录相应数据或其他内容,本说明书并不对此进行限制。第二智能合约可以包括code结构,该code结构中包含上述的第二合约代码,第二智能合约还可以包括storage结构,该storage结构用于记录数据集合和元数据。其中,若第二智能合约包含的更新前元数据被更新为更新后元数据,上述的第二合约代码可以被执行,以用于对该第二智能合约包含的更新后元数据进行解析,从而确定更新后数据结构,并据此对该第二智能合约包含的数据的数据结构进行更新。
在一实施例中,所述第一合约代码还用于:将所述更新前元数据对应的更新前数据结构与所述更新后数据结构进行比较,以校验所述更新后数据结构的合理性;其中,在所述更新后数据结构的合理性通过校验的情况下,所述更新后元数据被用于对所述更新前元数据进行更新。例如,假定第二智能合约中的数据包含账户ID、年龄、电话号码等字段,并且在记录时采用“01”代表“账户ID”、采用“02”代表“年龄”、采用“03”代表“电话号码”等,那么在更新后数据结构中如果将“02”修改为代表“电话号码”,而“03”仍然代表“电话号码”,就会导致“电话号码”字段出现混乱,造成更新后数据结构不合理,应当避免直接对更新前元数据进行更新,而应当对第一智能合约的调用方(如开发人员)发出告警,提示其作出修改。
图3是一示例性实施例提供的一种智能合约的结构示意图。如图3所示,本说明书中涉及智能合约1和智能合约2。智能合约1可以包括结构301,比如该结构301可以称为code结构,用于记录该智能合约1的合约代码(简称为代码1);智能合约1还可以包括其他的结构302,比如相关技术中的storage结构、balance结构、nonce结构等,本说明书并不对此进行限制。智能合约2可以包括结构303,比如该结构303可以称为code结构,用于记录该智能合约2的合约代码(简称为代码2);智能合约2可以包括结构304,比如该结构304可以称为storage结构,用于记录该智能合约2中的合约数据(简称为数据)、该合约数据对应的元数据,该元数据用于描述相应的合约数据;智能合约2还可以包括其他的结构305,比如相关技术中的balance结构、nonce结构等,本说明书并不对此进行限制。
其中,智能合约1可以向外部提供针对结构301中的代码1的API接口,以实现针对该代码1的调用。以及,智能合约2可以向外部提供针对结构303中的代码2的API接口,以实现针对该代码2的调用。而在本说明书的实施例中,工作人员可以通过智能合约1提供的API接口,对该智能合约1包含的代码1进行调用,而该代码1被执行后可以通过智能合约2提供的API接口而对该代码2进行调用,以针对该智能合约2包含的元数据进行解析或更新,从而读取或更新智能合约2包含的数据采用的数据结构。
在本说明书的技术方案中,假定由用户A对智能合约2进行开发或维护(譬如用户A为开发人员),由于智能合约2中的元数据采用定义描述语言进行描述,而工作人员擅长于通过计算机编程语言进行开发或维护,而上述的智能合约1可以在定义描述语言与计算机编程语言之间实现切换,从而有助于工作人员通过调用该智能合约1而便捷地开发或维护智能合约2包含的元数据,以进一步读取或更新智能合约2包含的数据的数据结构。
图4是一示例性实施例提供的一种读取数据结构的示意图。如图4所示,读取数据结构的过程可以包括以下步骤:
步骤401,创建交易。
在一实施例中,假定用户A需要读取上述的智能合约2包含的数据的数据结构,以针对该数据结构进行更改。因此,该用户A可以创建用于读取数据结构的交易——相当于结构读取请求,并向区块链网络发布这条交易。假定由区块链节点G对用户A发布的上述交易进行响应,该区块链节点G通常为距离用户A最近的区块链节点,当然本说明书并不对此进行限制。
在一实施例中,基于如图3所示的实施例,智能合约2包含的元数据记录了相关数据的数据结构,而上述的智能合约1可以对元数据采用的定义描述语言与用户A熟知的计算机编程语言进行相互转换,因而用户A可以通过上述交易对智能合约1进行调用,以使得该智能合约1可以对智能合约2包含的元数据进行处理,从而获知智能合约2包含的数据的数据结构。
在一实施例中,区块链网络中可以存在很多的智能合约,以分别用于实现相应的事件或目的。因此,上述交易中可以包含智能合约1的合约地址、端口信息等,以使得区块链节点G可以基于该合约地址确定该交易需要调用该智能合约1,并基于端口信息对该智能合约1包含的代码1进行调用。
在一实施例中,智能合约1被创建并发布至区块链网络后,在该区块链网络中的各个区块链节点之间达成共识,并记录于各个区块链节点上,比如上述的区块链节点G上同样记录有该智能合约1。类似地,智能合约2被创建并发布至区块链网络后,也可以基于共识而被建立于区块链节点G中。
在一实施例中,智能合约1可以被配置为区块链网络所提供的基础功能,比如该智能合约1可以被写入区块链网络的源代码中,而并非基于各个区块链节点的共识而产生,使得该智能合约1更加安全、可靠。
步骤402,区块链节点G验证用户A对智能合约1的调用权限。
在一实施例中,智能合约1可以设定有调用权限,类似于白名单或黑名单的形式,以避免智能合约1被随意用于对其他智能合约的元数据进行读取或更改,防止造成安全性风险。例如,当区块链网络属于公有链时,具有调用权限的用户可以为预先约定的部分用户;又例如,当区块链网络属于联盟链时,具有调用权限的用户可以为联盟成员。因此,当区块链节点G获取用户A发布的交易,并确定该交易需要对智能合约1进行调用时,可以首先确定该用户A是否具有相应的调用权限,并在具有调用权限时继续实施后续步骤,否则可以返回失败信息。
步骤403,区块链节点G调用智能合约1,执行智能合约1包含的代码1。
在一实施例中,用户A可以在上述交易中添加针对智能合约1的入参,比如该入参可以包括智能合约2的合约地址、端口信息等,以使得智能合约1包含的代码1被执行时,可以据此对智能合约2实现调用。
在一实施例中,用户A在上述交易中添加的入参还可以包括操作类型,比如该操作类型可以包括“读取元数据”,使得智能合约1包含的代码1被执行时,可以基于对智能合约2的调用,读取该智能合约2包含的元数据、对基于定义描述语言的该元数据进行解析,并将解析出的数据结构表征为计算机编程语言,以提供至用户A进行查看。
步骤404,区块链节点G调用智能合约2,执行代码2,读取元数据。
在一实施例中,基于被执行的上述代码1,区块链节点G可以对智能合约2进行调用。例如,可以通过调用并执行该智能合约2包含的上述代码2,读取该智能合约2包含的元数据,并将该元数据返回至智能合约1。
在一实施例中,智能合约2可以设定有调用权限,类似于白名单或黑名单的形式,以避免智能合约2被随意调用,防止其包含的元数据或数据被随意读取或更改,防止产生安全性风险。例如,当区块链网络属于公有链时,具有调用权限的用户可以为预先约定的部分用户;又例如,当区块链网络属于联盟链时,具有调用权限的用户可以为联盟成员。因此,当智能合约1被用户A所调用,以针对智能合约2发起调用时,可以确定该用户A是否针对该智能合约2具有调用权限,并在具有调用权限时继续实施后续步骤,否则可以返回失败信息。
需要说明的是:基于区块链网络的分布式数据存储的特点,使得发布至区块链网络的数据需要被记录于所有区块链节点上,使得这些数据不可篡改、可溯源。但是,一些数据可能具有一定私密性,如果发布至区块链网络则可能造成私密性无法保障,而如果不发布至区块链网络则可能存在数据内容不可靠的问题,并且不利于各个区块链节点对于相关数据的数据结构进行快捷读取和调用等。因此,本说明书中通过将上述具有私密性需求的数据及其元数据记录于智能合约(如智能合约2)中,并通过对调用权限的管理而限制无权限用户对相关数据及其元数据的随意访问,使得这些数据及其元数据既能够公布至区块链网络、以享有区块链网络所带来的可靠性与便利性,又能够确保数据及其元数据具有足够的私密性和安全性。
步骤405,区块链节点G解析元数据,对元数据进行语言转换。
在一实施例中,针对智能合约2返回的元数据,被执行的上述代码1还可以对基于定义描述语言的该元数据进行解析,并将解析出的数据结构表征为计算机编程语言,以提供至用户A进行查看。
在一实施例中,用户A可以在上述交易中添加针对智能合约1的入参,比如该入参可以包括计算机编程语言的类型,即用户A可以据此指定某一类型的计算机编程语言,使得智能合约1包含的代码1被执行后,可以将解析出的数据结构采用该类型的计算机编程语言进行表征,以便用户A进行查看或编辑。
在一实施例中,本说明书中的数据结构可以包括:数据所涉及的数据字段、各个数据字段之间的层级关系、各个数据字段之间的取值关系等,凡是能够用于描述智能合约2所包含的数据的信息,均可以作为此处的数据结构而提供至用户A。
在一实施例中,用户A在上述交易中添加的入参可以包括数据结构的类型,比如该用户A关注的若干类型的数据结构,使得智能合约1包含的代码1被执行后,可以筛选出这些类型的数据结构并提供至用户A,而其他类型的数据结构可以不提供至用户A,使得用户A查看到的数据结构更加具有针对性、更加符合用户A的实际需求,而且免去了对其他类型的数据结构进行解析和表征的过程,有助于提升对数据结构的读取效率。
步骤406,区块链节点G向用户A返回处理结果。
用户A可以对智能合约2包含的数据实施数据结构的更新。例如,在通过如图4所示的实施例读取该智能合约2包含的数据的更新前数据结构后,用户A可以针对该更新前数据结构进行修改,得到更新后数据结构,并基于该更新后数据结构对智能合约2包含的元数据进行更新,然后根据更新后元数据对相应数据的数据结构进行更新。当然,用户A还可以通过其他方式获得智能合约2包含的数据的更新前数据结构,本说明书并不对此进行限制。
相应地,图5是一示例性实施例提供的一种更新数据结构的示意图。如图5所示,更新数据结构的过程可以包括以下步骤:
步骤501,创建交易。
在一实施例中,假定用户A需要更新上述的智能合约2包含的数据的数据结构,该用户A可以创建用于更新数据结构的交易——相当于结构更新请求,并向区块链网络发布这条交易。假定由区块链节点G对用户A发布的上述交易进行响应,该区块链节点G通常为距离用户A最近的区块链节点,当然本说明书并不对此进行限制。
在一实施例中,基于如图3所示的实施例,用户A可以对智能合约2包含的数据采用的更新前数据结构进行更改,得到更新后数据结构;其中,该更新后数据结构采用用户A熟知的计算机编程语言进行表征,而上述的智能合约1可以对该计算机编程语言表征的更新后数据结构与元数据采用的定义描述语言进行相互转换,从而得到更新后元数据,并据此对智能合约2包含的数据的数据结构进行更新。
在一实施例中,上述交易中可以包含智能合约1的合约地址、端口信息等,以使得区块链节点G可以基于该合约地址确定该交易需要调用该智能合约1,并基于端口信息对该智能合约1包含的代码1进行调用。
在一实施例中,本实施例中的智能合约1可以参考图4所示实施例中的相关描述,此处不再赘述。
步骤502,区块链节点G验证用户A对智能合约1的调用权限。
在一实施例中,步骤502可以参考图4所示的步骤402,此处不再赘述。
步骤503,区块链节点G调用智能合约1,对更新后数据结构进行语言转换,并生成为更新后元数据。
在一实施例中,用户A在上述交易中添加的入参可以包括更新后数据结构,使得智能合约1包含的代码1被执行时,可以对基于计算机编程语言进行表征的该更新后数据结构进行转换,得到基于定义描述语言进行表征的更新后元数据。
在一实施例中,本说明书中的数据结构可以包括:数据所涉及的数据字段、各个数据字段之间的层级关系、各个数据字段之间的取值关系等,凡是能够用于描述智能合约2所包含的数据的信息,均可以作为此处的数据结构而提供至用户A。
在一实施例中,用户A对于数据结构的更新可以涉及上述任意方面的数据结构,比如对数据字段进行添加、删除或修改,再比如对数据字段之间的层级关系进行增加、删除或修改,又比如对数据字段之间的取值关系进行增加、删除或修改等。
下面以针对数据字段的增加、删除或修改为例,对更新前后的数据结构进行详细说明:
假定智能合约2包含的数据的更新前数据结构可以表征为如下表1所示,包括各个账户所属用户的个人信息(如账户ID、年龄、地址等),以及各个账户对于各个类型的区块链资产的持有情况。
表1
在一种情况下,假定用户A对于数据结构的更新方式为:添加数据字段。譬如,在上述表1的基础上添加新的数据字段“Balance-Type X(余额-类型X)”,相应的更新后数据结构如下表2所示。
表2
在另一种情况下,假定用户A对于数据结构的更新方式为:删除数据字段。譬如,在上述表2的基础上删除了原有的数据字段“Balance-Type X(余额-类型X)”,相应的更新后数据结构如下表1所示。
在又一种情况下,假定用户A对于数据结构的更新方式为:修改数据字段。譬如,在上述表1的基础上将原有的数据字段“Total-RMB(总额-人民币)”更改为“Total-Dollar(总额-美元)”,即原本采用人民币对各个账户持有的区块链资产总额进行统计,更改为采用美元对各个账户持有的区块链资产总额进行统计,相应的更新后数据结构如下表3所示。
表3
在一实施例中,智能合约1包含的代码1被执行时,还可以针对更新后数据结构进行校验,以确定用户A实施的更新是否合理。例如,假定智能合约2中对于数据字段的管理,采用“标识”的方式来实现;譬如,采用标识“01”表示上述的字段“账户ID”、采用标识“02”表示上述的字段“年龄”、采用标识“03”表示上述的字段“电话”等。那么,如果在更新后数据结构中在表1的基础上添加了表2所示的“Balance-Type X(余额-类型X)”字段,并且采用标识“02”表示该“Balance-Type X(余额-类型X)”字段,那么标识“02”同时对应于两个不同字段,表明用户A实施的更新不合理,可以向用户A返回提示信息,并暂停或终止对数据结构的更新操作。
当然,除了基于“标识”的管理方式之外,智能合约2还可以采用其他方式,本说明书并不对此进行限制。譬如,智能合约2还可以采用“偏移量”方式,比如“账户ID”字段作为起始字段,该“账户ID”对应的偏移量为0,“年龄”字段为“账户ID”字段右侧的第一个字段,该“年龄”字段相对于“账户ID”的偏移量为1,类似地,“电话”字段相对于“账户ID”的偏移量为2等,以此对各个数据字段及其位置关系进行管理,并据此确定更新后数据结构的合理性,此处不再赘述。
步骤504,区块链节点G调用智能合约2,对智能合约2包含的更新前元数据进行更新。
在一实施例中,用户A可以在上述交易中添加针对智能合约1的入参,比如该入参可以包括智能合约2的合约地址、端口信息等,以使得智能合约1包含的代码1被执行时,可以据此对智能合约2实现调用。
在一实施例中,智能合约2可以设定有调用权限,类似于白名单或黑名单的形式,以避免智能合约2被随意调用,防止其包含的元数据被随意读取或更改,防止产生安全性风险。例如,当区块链网络属于公有链时,具有调用权限的用户可以为预先约定的部分用户;又例如,当区块链网络属于联盟链时,具有调用权限的用户可以为联盟成员。因此,当智能合约1被用户A所调用,以针对智能合约2发起调用时,可以确定该用户A是否针对该智能合约2具有调用权限,并在具有调用权限时继续实施后续步骤,否则可以返回失败信息。
需要说明的是:基于区块链网络的分布式数据存储的特点,使得发布至区块链网络的数据需要被记录于所有区块链节点上,使得这些数据不可篡改、可溯源。但是,一些数据可能具有一定私密性,如果发布至区块链网络则可能造成私密性无法保障,而如果不发布至区块链网络则可能存在数据内容不可靠的问题,并且不利于各个区块链节点对于相关数据的数据结构进行快捷读取和调用等。因此,本说明书中通过将上述具有私密性需求的数据及其元数据记录于智能合约(如智能合约2)中,并通过对调用权限的管理而限制无权限用户对相关数据及其元数据的随意访问,使得这些数据及其元数据既能够公布至区块链网络、以享有区块链网络所带来的可靠性与便利性,又能够确保数据及其元数据具有足够的私密性和安全性。
在一实施例中,智能合约1包含的代码1被执行后,生成的更新后元数据可以被作为调用智能合约2时的入参,使得智能合约2包含的代码2被执行时,可以将智能合约2原本包含的更新前元数据更换为该更新后元数据,从而对智能合约2包含的元数据进行更新。
步骤505,区块链节点G向用户A返回处理结果。
在一实施例中,由于智能合约2包含的更新后元数据采用了用户A更新后的数据结构,因而当智能合约2包含的代码2被执行时,可以对该更新后元数据进行解析,并基于解析结果对智能合约2包含的数据进行更新,从而最终实现了对智能合约2包含的数据的数据结构的更新操作。
在一实施例中,智能合约2包含的元数据被更新后,可以通过执行智能合约2包含的代码2对该更新后元数据进行解析,并基于解析结果对智能合约2包含的所有数据进行更新。例如,当数据结构的更新方式为将表1所示的“Total-RMB(总额-人民币)”字段更改为“Total-Dollar(总额-美元)”字段时,更新后的数据可以如表3所示。
在一实施例中,智能合约2包含的元数据被更新后,可以不对智能合约2包含的所有数据进行数据结构更新,而仅当涉及到相关数据时,才针对这些数据的数据结构进行更新。例如,智能合约2包含的元数据被更新后,智能合约2包含的数据可以仍然暂时采用表1所示的数据结构。
表4
而假定智能合约2被调用,以针对账户ID为002的区块链资产总额进行查询,那么智能合约2包含的代码2被执行,以针对智能合约2包含的更新后元数据进行解析,由于更新后数据结构采用“Total-Dollar(总额-美元)”字段,因而如上表4所示,可以为该“账户ID=0002”的用户信息添加“Total-Dollar(总额-美元)”字段,将原本对应于“Total-RMB(总额-人民币)”字段的数据“13000”删除,而更改为“Total-Dollar(总额-美元)”字段下的“1999.1696”,表明用户B所持有的区块链资产的总额相当于1999.1696美元。由于仅涉及到“账户ID=0002”的数据,因而对于该账户而言,相当于将“Total-RMB(总额-人民币)”字段更改为“Total-Dollar(总额-美元)”字段,但其他账户仍然采用“Total-RMB(总额-人民币)”字段,直至相关数据被涉及到,这样尤其是当被涉及到的账户数量较少时,可以极大地减少工作量。
图6是一示例性实施例提供的一种设备的示意结构图。请参考图6,在硬件层面,该设备包括处理器602、内部总线604、网络接口606、内存608以及非易失性存储器610,当然还可能包括其他业务所需要的硬件。处理器602从非易失性存储器610中读取对应的计算机程序到内存608中然后运行,在逻辑层面上形成数据结构的读取装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图7,在软件实施方式中,该数据结构的读取装置可以包括:
获取单元71,使区块链网络中的区块链节点获取针对第一智能合约的调用请求;
响应单元72,响应于所述调用请求,使所述区块链节点运行所述第一智能合约包含的合约代码,以对第二智能合约包含的元数据所描述的数据结构进行解析,并通过计算机编程语言对所述数据结构进行表征;
返回单元73,使所述区块链节点将所述计算机编程语言表征的数据结构返回至所述调用请求的发起方。
可选的,所述元数据用于描述所述第二智能合约包含的数据。
可选的,所述计算机编程语言包括:预设类型的语言或所述调用请求中指示类型的语言。
可选的,所述第一智能合约为所述区块链网络的系统功能提供的系统合约。
图8是一示例性实施例提供的一种设备的示意结构图。请参考图8,在硬件层面,该设备包括处理器802、内部总线804、网络接口806、内存808以及非易失性存储器810,当然还可能包括其他业务所需要的硬件。处理器802从非易失性存储器810中读取对应的计算机程序到内存808中然后运行,在逻辑层面上形成数据结构的更新装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图9,在软件实施方式中,该数据结构的更新装置可以包括:
请求获取单元91,使区块链网络中的区块链节点获取针对第一智能合约的调用请求;
结构获取单元92,使所述区块链节点获取基于计算机编程语言的更新后数据结构;
请求响应单元93,响应于所述调用请求,使所述区块链节点运行所述第一智能合约包含的第一合约代码,所述第一合约代码用于对所述更新后数据结构进行解析,并表征为基于定义描述语言的更新后元数据,以对第二智能合约包含的更新前元数据进行更新。
可选的,所述第二智能合约包含的元数据用于描述所述第二智能合约包含的数据。
可选的,所述第二智能合约包含第二合约代码,所述第二合约代码用于对所述更新后元数据进行解析,以对所述第二智能合约包含的数据的数据结构进行更新。
可选的,所述第一智能合约为所述区块链网络的系统功能提供的系统合约。
可选的,所述第一合约代码还用于:将所述更新前元数据对应的更新前数据结构与所述更新后数据结构进行比较,以校验所述更新后数据结构的合理性;其中,在所述更新后数据结构的合理性通过校验的情况下,所述更新后元数据被用于对所述更新前元数据进行更新。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。