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