CN108572986B - 一种数据更新的方法及节点设备 - Google Patents

一种数据更新的方法及节点设备 Download PDF

Info

Publication number
CN108572986B
CN108572986B CN201710146569.2A CN201710146569A CN108572986B CN 108572986 B CN108572986 B CN 108572986B CN 201710146569 A CN201710146569 A CN 201710146569A CN 108572986 B CN108572986 B CN 108572986B
Authority
CN
China
Prior art keywords
intelligent contract
data
snapshot
client
data snapshot
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201710146569.2A
Other languages
English (en)
Other versions
CN108572986A (zh
Inventor
谢军安
胡瑞丰
姜耀国
丁海洋
蒋飞虎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201710146569.2A priority Critical patent/CN108572986B/zh
Publication of CN108572986A publication Critical patent/CN108572986A/zh
Application granted granted Critical
Publication of CN108572986B publication Critical patent/CN108572986B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例公开了一种数据更新的方法,包括:接收客户端发送的智能合约部署请求,智能合约部署请求中携带数据快照映射关系所包含的第一智能合约的数据快照标识;根据智能合约部署请求获取第二智能合约和目标数据,目标数据为根据数据快照映射关系和第一智能合约的数据快照标识确定的;将第二智能合约和目标数据发送至客户端,以使客户端对第一智能合约和第一智能合约对应的待更新数据进行更新。本申请还提供一种节点设备。本申请在对智能合约进行更新时,可以直接从快照中提取已经存储过的目标数据,目标数据是智能合约历史版本中无缺陷的数据,因此也就不需要消耗较多的资源来推导这些无缺陷的数据,从而降低了数据更新的难度和复杂度。

Description

一种数据更新的方法及节点设备
技术领域
本申请涉及互联网技术领域,尤其涉及一种数据更新的方法及节点设备。
背景技术
目前,互联网上的比特币交易主要采用区块链技术,该技术基于密码学原理,对达成一致的双方直接进支付,从而不需要第三方中介的参与。区块链是一个分布式的账本,可采用智能合约对该账本进行管理。其中,每个区块内记录了若干条交易记录,同时包含了前一个区块的哈希值,所有的区块按顺序相连后就组成了区块链。
目前,关于能合约的部署过程如图1所示,背书节点包括背书模块(endorser)、生命周期智能合约模块以及背书系统智能合约模块,客户端向背书节点发送部署提案,由背书节点中的生命周期智能合约模块对该提案对应的智能合约进行模拟并产生数据,背书系统智能合约模块根据所产生的数据执行背书过程,最后将背书结果通过背书模块返回给客户端。客户端收到足够多满足策略的背书结果后,会将背书结果和数据发送给区块链中所有的节点设备,以此完成智能合约的升级。
当前版本所采用的数据是从上一版本智能合约中继承的。如果发现智能合约的上一版本有缺陷,则要对该智能合约进行更新以修复缺陷,而有缺陷的智能合约所模拟出的数据也是有问题的,因此还需要对该智能合约版本所产生的数据进行更新。然而,推导出智能合约历史版本中没有缺陷的数据往往需要较多的时间和复杂的计算,从而导致数据更新的难度增加。
发明内容
本申请实施例提供了一种数据更新的方法及节点设备,在对智能合约进行更新时,可以直接从快照中提取已经存储过的目标数据,目标数据是智能合约历史版本中无缺陷的数据,因此也就不需要消耗较多的资源来推导这些无缺陷的数据,从而降低了数据更新的难度和复杂度。
有鉴于此,本申请第一方面提供一种数据更新的方法,下面从节点设备的角度来描述,节点设备执行了以下的步骤:
首先,客户端需要部署一个新版本的智能合约,于是向节点设备发送智能合约部署请求,节点设备接收该智能合约部署请求,其中,智能合约部署请求中携带了数据快照映射关系所包含的第一智能合约的数据快照标识,第一智能合约是历史版本的智能合约,数据快照标识可以是第一智能合约对应的快照名称,在实际应用中,还可以是第一智能合约的其他信息,而数据快照映射关系具体可以是一个快照映射表。快照映射表中包含但并不仅限于智能合约名称、快照名称、快照数据以及时间戳;
接下来,节点设备根据收到的智能合约部署请求,可以获取待被部署的第二智能合约,第二智能合约的版本通常会比第一智能合约的版本更高。节点设备采用第一智能合约的数据快照标识,从数据快照映射关系中查找并确认对应的目标数据,那么目标数据也就可以认为是第一智能合约的数据快照标识对应的历史数据。通常情况下,目标数据是没有缺陷的数据;
最后,节点设备还可以将第二智能合约以及目标数据一起发送给客户端,客户端根据所接收的第二智能合约对第一智能合约进行更新,并且使用目标数据对第一智能合约对应的待更新数据进行更新。这样也就完成了将待更新数据回滚到目标数据的操作。
本申请实施例中,提供了一种用于数据更新的方法,节点设备接收客户端发送的智能合约部署请求,其中,智能合约部署请求中携带数据快照映射关系所包含的第一智能合约的数据快照标识,然后根据智能合约部署请求获取第二智能合约以及目标数据,其中,第二智能合约为根据第一智能合约更新后得到的,目标数据为根据数据快照映射关系以及第一智能合约的数据快照标识确定的,最后将第二智能合约以及目标数据发送至客户端,以使客户端根据第二智能合约以及目标数据对第一智能合约以及第一智能合约对应的待更新数据进行更新。采用上述方式,在对智能合约进行更新时,可以直接从快照中提取已经存储过的目标数据,目标数据是智能合约历史版本中无缺陷的数据,因此也就不需要消耗较多的资源来推导这些无缺陷的数据,从而降低了数据更新的难度和复杂度。
在一种可能的设计中,在本申请实施例的第一方面的第一种实现方式中,节点设备在接收客户端发送的智能合约部署请求之前,还可以包括如下的步骤:
首先,节点设备接收客户端发送的数据快照创建请求,其中,数据快照创建请求中携带第一智能合约的数据快照标识,通过这个数据快照标识就能够让节点设备知道需要进行快照的是第一智能合约。接着,节点设备会根据数据快照创建请求检测当前是否存在数据快照映射关系,如果存在,则再根据数据快照创建请求中携带的数据快照标识来获取第一智能合约所对应的目标数据。然后,节点设备可以在数据快照映射关系中添加关于目标数据以及第一智能合约的数据快照标识之间的对应关系,也就是能够在数据快照映射关系中找到关于第一智能合约的数据快照标识以及相应的目标数据。最后,节点设备应该向客户端发送已经添加了目标数据以及第一智能合约的数据快照标识的数据快照映射关系,以此实现了节点设备与客户端同步维护该数据快照映射关系的目的。
其次,本申请实施例中,节点设备在接收客户端发送的智能合约部署请求之前,还可以接收客户端发送的数据快照创建请求,并由此建立起数据快照映射关系,该数据快照映射关系中包含了目标数据以及对应的数据快照标识,最后将数据快照映射关系同步到客户端。通过上述方式,客户端可以主动创建快照请求,由节点设备响应快照请求并且进行相应的操作,从而完成对第一智能合约的快照,以此能够在后续进行数据回滚时可调用相应的目标数据。
在一种可能的设计中,在本申请实施例的第一方面的第二种实现方式中,节点设备接收客户端发送的数据快照创建请求之后,还可以包括如下的步骤:
对于节点设备而言,还需要根据数据快照创建请求检测当前是否存在数据快照映射关系,更具体地,检测当前是否存在快照映射表,如果存在快照映射表,则如上述方面所提到的内容,可以根据数据快照创建请求中携带的数据快照标识来获取第一智能合约所对应的目标数据。反之,如果不存在快照映射表,那么节点设备将会创建一个快照映射表,当然,这个时候的快照映射表可以是一个空表格,使得节点设备能够往表格中填写信息。
再次,本申请实施例中,节点设备在接收客户端发送的数据快照创建请求之后,需要检测当前是否存在数据快照映射关系,如果没有,则会创建数据快照映射关系。通过上述方式,节点设备只需要创建或者维护一个数据快照映射关系即可,不会重复创建多个数据快照映射关系,从而节省了维护和创建数据快照映射关系的资源,有利于提升方案的效率。
在一种可能的设计中,在本申请实施例的第一方面的第三种实现方式中,节点设备根据目标数据以及第一智能合约的数据快照标识确定数据快照映射关系,可以包括如下步骤:
如果节点设备检测到数据快照映射关系(即快照映射表)中不包含第一智能合约的数据快照标识,说明在数据快照映射关系中还没有记录与第一智能合约相关的信息,于是需要在该数据快照映射关系中添加第一智能合约的数据快照标识与目标数据之间的关联关系。
进一步地,本申请实施例中,在建立了数据快照映射关系的前提下,如果不包含第一智能合约的数据快照标识,则需要在该数据快照映射关系中添加第一智能合约的数据快照标识与目标数据的关联关系。通过上述方式,可以有效地在数据快照映射关系中增加关于第一智能合约的快照记录,便于节点设备直接从快照记录中提取已经存储过的目标数据,从而提升了方案使用的可行性,并且增强了方案的可操作性。
在一种可能的设计中,在本申请实施例的第一方面的第四种实现方式中,节点设备根据数据快照创建请求获取第一智能合约所对应的目标数据之后,还可以包括如下的步骤:
如果数据快照映射关系中已经包含了第一智能合约的数据快照标识,则说明关于第一智能合约所对应的信息已经被记录过了,这种情况下就没有必要再次对同样的信息进行记录,于是节点设备将会拒绝更新数据快照映射关系,即拒绝更新快照映射表。
其次,本申请实施例中,在节点设备根据数据快照创建请求获取第一智能合约所对应的目标数据之后,如果发现数据快照映射关系中已经包含第一智能合约的数据快照标识,那么就会拒绝更新数据快照映射关系。通过上述方式,可以避免在数据快照映射关系中存储重复的信息,从而提升节点设备中资源的利用率,与此同时,不必多次记录相同的信息,以此节省了记录的时间,提升方案使用效率。
在一种可能的设计中,在本申请实施例的第一方面的第五种实现方式中,节点设备根据数据快照创建请求获取第一智能合约所对应的目标数据,可以包括如下步骤:
为了更利于数据的存储和传输,还需要对数据进行打包处理,以此得到目标数据。具体地,首先节点设备根据数据快照创建请求获取第一智能合约中关键字以及数值,其中,关键字与数值一一对应,关键字即表示为key,数值即表示为value,因此也可以将关键字以及数值称为key/value。
接下来,节点设备对第一智能合约的关键字以及对应的数值进行打包处理,也就是对第一智能合约进行合并处理,然后得到处理结果,简单的说,处理结果可以是把所有key/value的长度和值进行串接后得到的结果,根据该处理结果确定目标数据。在实际应用中,目标数据除了可以包括关键字以及数值打包处理的结果,还可以包括快照名称以及快照生成的时间戳等。
其次,本申请实施例中,节点设备还可以将关于同一个智能合约的关键字和数值进行打包处理,合并到一个目标数据中,其中,关键字与数值之间存在着一一对应的关系。通过上述方式,能够将多组关键字和数值进行打包并存储,打包后的关键字和数值更便于进行存储和管理,同时有利于节点设备与客户端进行数据传输时更便利。
在一种可能的设计中,在本申请实施例的第一方面的第六种实现方式中,节点设备在接收客户端发送的智能合约部署请求之后,还可以包括如下步骤:
首先,节点设备接收客户端发送的智能合约部署请求,其中,智能合约部署请求中携带快照创建标识,通过这个快照创建标识能够让节点设备知道需要对第一智能合约的待更新数据进行快照,与目标数据不同的是,待更新数据是目标数据更新之后所得到的数据。接着,节点设备可以根据智能合约部署请求检测当前是否存在数据快照映射关系(即快照映射表),如果存在数据快照映射关系,则节点设备再根据智能合约部署请求中携带的快照创建标识来获取第一智能合约所对应的待更新数据。
然后,节点设备可以在数据快照映射关系中添加关于待更新数据以及第一智能合约的快照创建标识之间的对应关系,也就是能够在数据快照映射关系中找到关于第一智能合约的快照创建标识以及相应的快照创建标识。最后,节点设备应该向客户端发送已经添加了快照创建标识以及第一智能合约的快照创建标的数据快照映射关系,以此实现了节点设备与客户端同步维护该数据快照映射关系的目的。
其次,本申请实施例中,在节点设备接收客户端发送的智能合约部署请求之后,还可以接收客户端发送的智能合约部署请求,其中,该智能合约部署请求包含了快照创建标识,由此可以创建快照创建标识与待更新数据之间的关联关系,最后将数据快照映射关系同步到客户端。通过上述方式,可以在部署智能合约的时候做快照,由节点设备响应快照请求并且进行相应的操作,从而完成对第一智能合约的快照,以此能够在后续进行数据回滚时可调用相应的目标数据。
在一种可能的设计中,在本申请实施例的第一方面的第七种实现方式中,在如果节点设备接收客户端发送的智能合约部署请求中包含快照创建标识,则节点设备根据智能合约部署请求获取第一智能合约对应的待更新数据之前,还可以包括如下的步骤:
对于节点设备而言,还需要根据智能合约部署请求检测当前是否存在数据快照映射关系,更具体地,检测当前是否存在快照映射表,如果存在快照映射表,则如上述方面所提到的内容,可以根据智能合约部署请求中携带的快照创建标识来获取第一智能合约所对应的目标数据。反之,如果不存在快照映射表,那么节点设备将会创建一个快照映射表,当然,这个时候的快照映射表可以是一个空表格,使得节点设备能够往表格中填写信息。
再次,本申请实施例中,节点设备在根据智能合约部署请求获取第一智能合约对应的待更新数据之前,需要检测当前是否存在数据快照映射关系,如果不存在,则会自动创建数据快照映射关系。通过上述方式,节点设备只需要创建或者维护一个数据快照映射关系即可,不会重复创建多个数据快照映射关系,从而节省了维护和创建数据快照映射关系的资源,有利于提升方案的效率。
在一种可能的设计中,在本申请实施例的第一方面的第八种实现方式中,节点设备在数据快照映射关系中,确定快照创建标识与待更新数据之间的关联关系,可以包括如下步骤:
如果节点设备检测到数据快照映射关系(即快照映射表)中不包含第一智能合约的快照创建标识,说明在数据快照映射关系中还没有记录与第一智能合约相关的信息,于是需要在该数据快照映射关系中添加第一智能合约的快照创建标识与目标数据之间的关联关系。
其中,与数据快照标识不同的是,快照创建标识是被智能合约部署请求所携带的,而数据快照标识是被数据快照创建请求所携带的,这样的话,客户端就可以在部署智能合约的过程或者在部署智能合约之前进行数据快照,从而增加了方案的多样性。
进一步地,本申请实施例中,在建立了数据快照映射关系的前提下,如果不包含第一智能合约的数据快照标识,则需要在该数据快照映射关系中添加第一智能合约的数据快照标识与目标数据的关联关系。通过上述方式,可以有效地在数据快照映射关系中增加关于第一智能合约的快照记录,便于节点设备直接从快照记录中提取已经存储过的目标数据,从而提升了方案使用的可行性,并且增强了方案的可操作性。
在一种可能的设计中,在本申请实施例的第一方面的第九种实现方式中,节点设备根据智能合约部署请求获取第一智能合约对应的待更新数据之后,还可以包括如下的步骤:
如果数据快照映射关系中已经包含了第一智能合约的快照创建标识,则说明关于第一智能合约所对应的信息已经被记录过了,这种情况下就没有必要再次对同样的信息进行记录,于是节点设备将会拒绝更新数据快照映射关系,即拒绝更新快照映射表。
与上述第一方面的第四种实现方式类似,但是在数据快照映射关系中存储的是第一智能合约的快照创建标识,快照创建标识与数据快照标识都用于指示第一智能合约,不同的是,两者分别由不同的请求携带,且指示节点设备的时间也不一致。
其次,本申请实施例中,在节点设备根据智能合约部署请求获取第一智能合约对应的待更新数据之后,如果发现数据快照映射关系中已经包含第一智能合约的快照创建标识,那么就会拒绝更新数据快照映射关系。通过上述方式,可以避免在数据快照映射关系中存储重复的信息,从而提升节点设备中资源的利用率,与此同时,不必多次记录相同的信息,以此节省了记录的时间,提升方案使用效率。
在一种可能的设计中,在本申请实施例的第一方面的第十种实现方式中,节点设备根据智能合约部署请求获取第一智能合约对应的待更新数据,可以包括如下的步骤:
为了更利于数据的存储和传输,还需要对数据进行打包处理,以此得到待更新数据。具体地,首先节点设备根据智能合约部署请求获取第一智能合约中关键字以及数值,其中,关键字与数值一一对应,关键字即表示为key,数值即表示为value,因此也可以将关键字以及数值称为key/value。
接下来,节点设备对第一智能合约的关键字以及对应的数值进行打包处理,也就是对第一智能合约进行合并处理,然后得到处理结果,简单的说,处理结果可以是把所有key/value的长度和值进行串接后得到的结果,根据该处理结果确定待更新数据。在实际应用中,待更新数据除了可以包括关键字以及数值打包处理的结果,还可以包括快照名称以及快照生成的时间戳等。
其次,本申请实施例中,节点设备还可以将关于同一个智能合约的关键字和数值进行打包处理,合并到一个待更新数据中,其中,关键字与数值之间存在着一一对应的关系。通过上述方式,能够将多组关键字和数值进行打包并存储,打包后的关键字和数值更便于进行存储和管理,同时有利于节点设备与客户端进行数据传输时更便利。
本申请第二方面提供一种节点设备,包括:
第一接收模块,用于接收客户端发送的智能合约部署请求,其中,所述智能合约部署请求中携带数据快照映射关系所包含的第一智能合约的数据快照标识;
第一获取模块,用于根据第一接收模块接收的智能合约部署请求获取第二智能合约以及目标数据,其中,目标数据为根据数据快照映射关系以及第一智能合约的数据快照标识确定的;
第一发送模块,用于将第一获取模块获取的第二智能合约以及目标数据发送至客户端,以使客户端根据第二智能合约以及目标数据对第一智能合约以及第一智能合约对应的待更新数据进行更新。
在一种可能的设计中,在本申请实施例的第二方面的第一种实现方式中,节点设备还可以包括:
第二接收模块,用于第一接收模块接收客户端发送的智能合约部署请求之前,接收客户端发送的数据快照创建请求,其中,数据快照创建请求中携带第一智能合约的数据快照标识;
第二获取模块,用于根据第二接收模块接收的数据快照创建请求获取第一智能合约所对应的目标数据;
第一确定模块,用于根据第二获取模块获取的目标数据以及第一智能合约的数据快照标识确定数据快照映射关系;
第二发送模块,用于将第一确定模块确定的数据快照映射关系发送至客户端。
在一种可能的设计中,在本申请实施例的第二方面的第二种实现方式中,节点设备还可以包括:
第一检测模块,用于第二接收模块接收客户端发送的数据快照创建请求之后,根据数据快照创建请求检测是否存在数据快照映射关系;
第一创建模块,用于若第一检测模块检测到不存在数据快照映射关系,则创建数据快照映射关系。
在一种可能的设计中,在本申请实施例的第二方面的第三种实现方式中,第一确定模块可以包括:
第一添加单元,用于若数据快照映射关系中不包含第一智能合约的数据快照标识,则在数据快照映射关系中添加第一智能合约的数据快照标识与目标数据之间的关联关系。
在一种可能的设计中,在本申请实施例的第二方面的第四种实现方式中,节点设备还可以包括:
第一拒绝模块,用于第二获取模块根据数据快照创建请求获取第一智能合约所对应的目标数据之后,若数据快照映射关系中包含第一智能合约的数据快照标识,则拒绝更新数据快照映射关系。
在一种可能的设计中,在本申请实施例的第二方面的第五种实现方式中,第二获取模块可以包括:
第一获取单元,用于根据数据快照创建请求获取第一智能合约中关键字以及数值,其中,关键字与数值一一对应;
第一处理单元,用于根据第一获取单元获取的第一智能合约的关键字以及数值,对第一智能合约进行合并处理,并得到处理结果;
第一确定单元,用于根据第一处理单元得到的处理结果确定目标数据。
在一种可能的设计中,在本申请实施例的第二方面的第六种实现方式中,节点设备还可以包括:
第三获取模块,用于第一接收模块接收客户端发送的智能合约部署请求之后,若接收客户端发送的智能合约部署请求中包含快照创建标识,则根据智能合约部署请求获取第一智能合约对应的待更新数据;
第二确定模块,用于在数据快照映射关系中,确定快照创建标识与第三获取模块获取的待更新数据之间的关联关系;
第一发送模块可以包括:
发送单元,用于将第二智能合约、目标数据以及数据快照映射关系发送至客户端。
在一种可能的设计中,在本申请实施例的第二方面的第七种实现方式中,节点设备还可以包括:
第二检测模块,用于若接收客户端发送的智能合约部署请求中包含快照创建标识,则第三获取模块根据智能合约部署请求获取第一智能合约对应的待更新数据之前,根据智能合约部署请求检测是否存在数据快照映射关系;
第二创建模块,用于若第二检测模块检测到不存在数据快照映射关系,则创建数据快照映射关系。
在一种可能的设计中,在本申请实施例的第二方面的第八种实现方式中,第二确定模块可以包括:
第二添加单元,用于若数据快照映射关系中不包含第一智能合约的快照创建标识,则在数据快照映射关系中添加第一智能合约的快照创建标识与待更新数据之间的关联关系。
在一种可能的设计中,在本申请实施例的第二方面的第九种实现方式中,节点设备还可以包括:
第二拒绝模块,用于第三获取模块根据智能合约部署请求获取第一智能合约对应的待更新数据之后,若数据快照映射关系中包含第一智能合约的快照创建标识,则拒绝更新数据快照映射关系。
在一种可能的设计中,在本申请实施例的第二方面的第十种实现方式中,第三获取模块可以包括:
第二获取单元,用于根据智能合约部署请求获取第一智能合约中关键字以及数值,其中,关键字与数值一一对应;
第二处理单元,用于根据第二获取单元获取的第一智能合约的关键字以及数值,对第一智能合约进行合并处理,并得到处理结果;
第二确定单元,用于根据第二处理单元得到的处理结果确定待更新数据。
本申请第三方面提供一种终端设备,包括存储器、收发器、处理器以及总线系统;
其中,存储器用于存储程序和指令;
收发器用于在处理器的控制下接收或发送信息;
处理器用于执行存储器中的程序;
总线系统用于连接存储器、收发器以及处理器,以使存储器、
收发器以及处理器进行通信;
处理器用于调用存储器中的程序指令,具体可以包括如下步骤:
控制收发器接收客户端发送的智能合约部署请求,其中,智能合约部署请求中携带数据快照映射关系所包含的第一智能合约的数据快照标识;
根据智能合约部署请求获取第二智能合约以及目标数据,其中,目标数据为根据数据快照映射关系以及第一智能合约的数据快照标识确定的;
将第二智能合约以及目标数据发送至客户端,以使客户端根据第二智能合约以及目标数据对第一智能合约以及第一智能合约对应的待更新数据进行更新。
在一种可能的设计中,在本申请实施例的第三方面的第一种实现方式中,处理器还用于执行如下步骤:
控制收发器接收客户端发送的数据快照创建请求,其中,数据快照创建请求中携带第一智能合约的数据快照标识;
根据数据快照创建请求获取第一智能合约所对应的目标数据;
根据目标数据以及第一智能合约的数据快照标识确定数据快照映射关系;
将数据快照映射关系发送至客户端。
在一种可能的设计中,在本申请实施例的第三方面的第二种实现方式中,处理器还用于执行如下步骤:
根据数据快照创建请求检测是否存在数据快照映射关系;
若不存在数据快照映射关系,则创建数据快照映射关系。
在一种可能的设计中,在本申请实施例的第三方面的第三种实现方式中,处理器具体用于执行如下步骤:
若数据快照映射关系中不包含第一智能合约的数据快照标识,则在数据快照映射关系中添加第一智能合约的数据快照标识与目标数据之间的关联关系。
在一种可能的设计中,在本申请实施例的第三方面的第四种实现方式中,处理器还用于执行如下步骤:
若数据快照映射关系中包含第一智能合约的所述数据快照标识,则拒绝更新数据快照映射关系。
在一种可能的设计中,在本申请实施例的第三方面的第五种实现方式中,处理器具体用于执行如下步骤:
根据数据快照创建请求获取第一智能合约中关键字以及数值,其中,关键字与数值一一对应;
根据第一智能合约的关键字以及数值,对第一智能合约进行合并处理,并得到处理结果;
根据处理结果确定目标数据。
在一种可能的设计中,在本申请实施例的第三方面的第六种实现方式中,处理器还用于执行如下步骤:
若接收客户端发送的智能合约部署请求中包含快照创建标识,则根据智能合约部署请求获取第一智能合约对应的待更新数据;
在数据快照映射关系中,确定快照创建标识与待更新数据之间的关联关系;
处理器具体用于执行如下步骤:
将第二智能合约、目标数据以及数据快照映射关系发送至客户端。
在一种可能的设计中,在本申请实施例的第三方面的第七种实现方式中,处理器还用于执行如下步骤:
根据智能合约部署请求检测是否存在数据快照映射关系;
若不存在数据快照映射关系,则创建数据快照映射关系。
在一种可能的设计中,在本申请实施例的第三方面的第八种实现方式中,处理器具体用于执行如下步骤:
若数据快照映射关系中不包含第一智能合约的快照创建标识,则在数据快照映射关系中添加第一智能合约的快照创建标识与待更新数据之间的关联关系。
在一种可能的设计中,在本申请实施例的第三方面的第九种实现方式中,处理器还用于执行如下步骤:
若数据快照映射关系中包含第一智能合约的快照创建标识,则拒绝更新数据快照映射关系。
在一种可能的设计中,在本申请实施例的第三方面的第十种实现方式中,处理器具体用于执行如下步骤:
根据智能合约部署请求获取第一智能合约中关键字以及数值,其中,关键字与数值一一对应;
根据第一智能合约的关键字以及数值,对第一智能合约进行合并处理,并得到处理结果;
根据处理结果确定待更新数据。
本申请的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
从以上技术方案可以看出,本申请实施例具有以下优点:
本申请实施例中,提供了一种数据更新的方法,节点设备接收客户端发送的智能合约部署请求,其中,智能合约部署请求中携带数据快照映射关系所包含的第一智能合约的数据快照标识,然后根据智能合约部署请求获取第二智能合约以及目标数据,其中,第二智能合约为根据第一智能合约更新后得到的,目标数据为根据数据快照映射关系以及第一智能合约的数据快照标识确定的,最后将第二智能合约以及目标数据发送至客户端,以使客户端根据第二智能合约以及目标数据对第一智能合约以及第一智能合约对应的待更新数据进行更新。采用上述方式,在对智能合约进行更新时,可以直接从快照中提取已经存储过的目标数据,目标数据是智能合约历史版本中无缺陷的数据,因此也就不需要消耗较多的资源来推导这些无缺陷的数据,从而降低了数据更新的难度和复杂度。
附图说明
图1为现有技术中智能合约部署的流程示意图;
图2为本申请实施例中应用数据更新方法的一个区块链示意图;
图3为本申请实施例中数据更新方法的一个网络架构图;
图4为本申请实施例中节点设备的一个结构示意图;
图5为本申请实施例中数据更新的方法一个实施例示意图;
图6为本申请应用场景中数据更新的方法一个实施例示意图;
图7为本申请应用场景中在智能合约运行过程中创建快照的一个实施例示意图;
图8为本申请实施例中一个调用快照方法的流程示意图;
图9为本申请实施例中一个调用部署方法的流程示意图;
图10为本申请应用场景中在部署智能合约过程中创建快照的一个实施例示意图;
图11为本申请实施例中节点设备一个实施例示意图;
图12为本申请实施例中节点设备另一个实施例示意图;
图13为本申请实施例中节点设备另一个实施例示意图;
图14为本申请实施例中节点设备另一个实施例示意图;
图15为本申请实施例中节点设备另一个实施例示意图;
图16为本申请实施例中节点设备另一个实施例示意图;
图17为本申请实施例中节点设备另一个实施例示意图;
图18为本申请实施例中节点设备另一个实施例示意图;
图19为本申请实施例中节点设备另一个实施例示意图;
图20为本申请实施例中节点设备另一个实施例示意图;
图21为本申请实施例中节点设备另一个实施例示意图。
具体实施方式
本申请实施例提供了一种数据更新的方法及节点设备,在对智能合约进行更新时,可以直接从快照中提取已经存储过的目标数据,目标数据是智能合约历史版本中无缺陷的数据,因此也就不需要消耗较多的资源来推导这些无缺陷的数据,从而降低了数据更新的难度和复杂度。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
应理解,本实施例所提供的数据更新方法可以应用于区块链技术。请参阅图2,图2为本申请实施例中应用数据更新方法的一个区块链示意图,下面将以应用于区块链中的比特币交易为例进行介绍,每个区块中都记录了若干条交易记录,同时还包含了前一个区块的哈希值,例如区块2中包含了区块1的哈希值。这样所有的区块按顺序相连组成了区块链。
区块链具有如下特征:
一、由于使用分布式核算和存储,不存在中心化的硬件或管理机构,任意节点的权利和义务都是均等的,系统中的数据块由整个系统中具有维护功能的节点设备来共同维护;
二、系统是开放的,除了交易各方的私有信息被加密外,区块链的数据对所有人公开,任何人都可以通过公开的接口查询区块链数据和开发相关应用,因此整个系统信息高度透明;
三、区块链采用基于协商一致的规范和协议,使得整个系统中的所有节点设备能够在去信任的环境自由安全的交换数据,使得对用户的信任改成了对设备的信任,任何人为的干预不起作用;
四、一旦信息经过验证并添加至区块链,就会永久的存储起来,除非能够同时控制住系统中超过一定数量的节点设备,否则在单个节点设备上对数据库的修改是无效的,因此区块链的数据稳定性和可靠性极高;
五、由于节点设备之间的交换遵循固定的算法,其数据交互是无需信任的(区块链中的程序规则会自行判断活动是否有效),因此交易对手无须通过公开身份的方式让对方自己产生信任,对信用的累积非常有帮助。
然而,在区块链中需要采用智能合约来规范交易的规则和逻辑。智能合约是能够管理账本上数据的程序,具体可以是一段计算机执行程序,满足可准确自动执行即可。用户通过调用智能合约就意味着合约内容将会被执行并写入账本。以用区块链及智能合约来实现资产交易为例,一个可能的智能合约伪码如下,需要说明的是,下面的代码仅为一个示意,并不应理解为对智能合约代码的限定:
Figure BDA0001244308750000111
Figure BDA0001244308750000121
调用者如果要购买资产,就会发出一个调用BuyOneAsset这个智能合约函数的交易,智能合约会从区块链保存的数据中读取出调用者的资金余额、拥有者资产的剩余数量,判断满足交易条件后,执行交易,并修改调用者的资金余额及拥有者资产的剩余数量,当交易经过共识写入账本之后,调用者购买资产的交易就成功了。
因为区块链网络是一个对等网络(Peer to Peer,P2P)的分布式网络,校验交易记录并在众多节点之间共识是一个比较慢的过程。为了提升交易速度,目前采用一种比较快速的共识机制,即背书证明机制(proof of endorse,PoE)。请参阅图3,图3为本申请实施例中数据更新方法的一个网络架构图,如图所示,在对等节点集群中存在多个背书节点运行智能合约并对运行结果进行背书,背书结果则是对背书节点本身的合约执行结果进行签名,保证是由特定背书节点发出的结果。
用户可以根据实际需求设置自己的智能合约要信任的背书节点及对多个背书结果的验证策略。例如,可以向三个背书节点发送智能合约运行请求,验证策略可以要求三个背书结果的内容必须一致,也可以要求至少两个背书结果内容一致。客户端收集背书节点返回的背书结果,然后通过提供共识服务的节点或者集群,将背书结果广播到区块链网络中所有对等节点(包括背书节点)。对等节点校验接收到的交易,只有满足验证策略的交易才会被认为是有效交易,接受交易对数据的修改,写入区块链。
图4是本申请实施例节点设备20的结构示意图。节点设备20可包括输入设备210、输出设备220、处理器230和存储器240。本申请实施例中的输出设备可以是显示设备。
存储器240可以包括只读存储器和随机存取存储器,并向处理器230提供指令和数据。存储器240的一部分还可以包括非易失性随机存取存储器(Non-Volatile RandomAccess Memory,NVRAM)。
存储器240存储了如下的元素,可执行模块或者数据结构,或者它们的子集,或者它们的扩展集:
操作指令:包括各种操作指令,用于实现各种操作。
操作系统:包括各种系统程序,用于实现各种基础业务以及处理基于硬件的任务。
本申请实施例中处理器230用于:
控制输入设备210接收客户端发送的智能合约部署请求,其中,智能合约部署请求中携带数据快照映射关系所包含的第一智能合约的数据快照标识;
根据智能合约部署请求获取第二智能合约以及目标数据,其中,目标数据为根据数据快照映射关系以及第一智能合约的数据快照标识确定的;
控制输出设备220将第二智能合约以及目标数据发送至客户端,所述第二智能合约以及目标数据用于指示客户端对第一智能合约以及第一智能合约对应的待更新数据进行更新。
处理器230控制节点设备20的操作,处理器230还可以称为中央处理单元(CentralProcessing Unit,CPU)。存储器240可以包括只读存储器和随机存取存储器,并向处理器230提供指令和数据。存储器240的一部分还可以包括NVRAM。具体的应用中,节点设备20的各个组件通过总线系统250耦合在一起,其中总线系统250除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线系统250。
上述本申请实施例揭示的方法可以应用于处理器230中,或者由处理器230实现。处理器230可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器230中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器230可以是通用处理器、数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器240,处理器230读取存储器240中的信息,结合其硬件完成上述方法的步骤。
图4的相关描述可以参阅图5方法部分的相关描述和效果进行理解,本处不做过多赘述。
请参阅图5,本申请实施例中数据更新的处理方法一个实施例包括:
301、节点设备接收客户端发送的智能合约部署请求,其中,智能合约部署请求中携带数据快照映射关系所包含的第一智能合约的数据快照标识;
本实施例中,客户端当前需要部署新版本的智能合约,于是客户端向节点设备发送该新版本智能合约对应的智能合约部署请求,其中,智能合约部署请求可以是一个智能合约部署提案的请求,该请求中携带了数据快照映射关系,数据快照映射关系具体包括第一智能合约的数据快照标识。
第一智能合约具体为智能合约的历史版本,而数据快照标识则可以为第一智能合约对应的快照名称。
需要说明的是,数据快照映射关系中还可以包括待部署智能合约的名称、智能合约版本号、智能合约的下载地址以及初始化参数中的至少一项,在实际应用中,数据快照映射关系也可以包含其他的项目,此处仅为一个示意,并不应理解为对本申请的限定。
可以理解的是,节点设备具体可以指背书节点,而客户端还可以为软件开发工具包(Software Development Kit,SDK)。
302、节点设备根据智能合约部署请求获取第二智能合约以及目标数据,其中,目标数据为根据数据快照映射关系以及第一智能合约的数据快照标识确定的;
本实施例中,节点设备根据智能合约部署请求可以确定当前需要进行智能合约的版本更新,于是通过智能合约部署请求获取第一智能合约的数据快照标识,然后根据数据快照映射关系从中选择出第一智能合约的数据快照标识对应的历史数据,即目标数据。以外,节点设备根据智能合约部署请求中的下载地址,即统一资源定位符(URL,UniformResource Locator)下载第二智能合约。
目标数据是客户端在使用第一智能合约升级前所采用的数据,目标数据通常情况下是没有问题的,但是如果第一智能合约出现问题,那么目标数据经过第一智能合约的处理后也会出现问题。在客户端升级到第二智能合约的过程中,可以将出现问题的数据回滚到之前没有问题的目标数据,以此完成智能合约的升级。
303、节点设备将第二智能合约以及目标数据发送至客户端;
本实施例中,节点设备可以将下载得到的第二智能合约和调用的目标数据一起发送给客户端。
304、客户端根据第二智能合约以及目标数据对第一智能合约以及第一智能合约对应的待更新数据进行更新。
本实施例中,在部署新版本的智能合约的时候,客户端将采用第二智能合约对第一智能合约进行升级,而在升级智能合约版本的同时,还可以自动将待更新数据回滚到执行第二智能合约需要使用的目标数据。
需要说明的是,待更新数据可以为上述步骤302中提到的经过第一智能合约处理后出现问题的数据,也可以是在升级到第二智能合约前所采用的数据,此次不进行限定。
本申请实施例中,提供了一种数据更新的方法,节点设备接收客户端发送的智能合约部署请求,其中,智能合约部署请求中携带数据快照映射关系所包含的第一智能合约的数据快照标识,然后根据智能合约部署请求获取第二智能合约以及目标数据,其中,第二智能合约为根据第一智能合约更新后得到的,目标数据为根据数据快照映射关系以及第一智能合约的数据快照标识确定的,最后将第二智能合约以及目标数据发送至客户端,以使客户端根据第二智能合约以及目标数据对第一智能合约以及第一智能合约对应的待更新数据进行更新。采用上述方式,在对智能合约进行更新时,可以直接从快照中提取已经存储过的目标数据,目标数据是智能合约历史版本中无缺陷的数据,因此也就不需要消耗较多的资源来推导这些无缺陷的数据,从而降低了数据更新的难度和复杂度。
为便于理解,下面以一个具体应用场景对本申请中一种数据更新的方法进行详细描述,请参阅图6,图6为本申请应用场景中数据更新的方法一个实施例示意图,图中的背书节点即为本申请中的节点设备,且该背书节点包含了三个模块,分别为背书模块、生命周期管理智能合约模块以及背书系统智能合约模块,数据更新的方法具体可以为:
步骤401中,客户端向背书节点的背书模块发送一个部署提案,该提案包括的内容有待部署智能合约的名称、版本号、下载地址、初始化参数、时间戳以及该智能合约历史版本曾经做过的快照名称;
步骤402中,背书节点中的背书模块向生命周期管理智能合约模块发送一个调用请求,即开始调用部署方法,在调用请求中包含待部署智能合约的名称、版本号、下载地址、初始化参数、时间戳以及该智能合约历史版本曾经做过的快照名称;
步骤403中,生命周期管理智能合约模块先模拟部署待部署的智能合约,主要过程包括根据智能合约的下载地址(即URL)下载待部署智能合约,在容器中启动该智能合约,容器具体是指用来存储和组织其他对象的对象;
步骤404中,从生命周期管理智能合约模块中根据该智能合约历史版本曾经做过的快照名称读取该快照包含的所有key/value对(也就是该快照保存的智能合约的数据,例如key是用户名,value是用户的资金余额,不同用户持有不同的key和value),加入读写数据集(read/write set)中;
步骤405中,生命周期管理智能合约模块调用待部署智能合约的初始化方法(即Init方法),并把执行结果,也就是对Key/Value数据库的修改添加到一个读写数据集中;
步骤406中,生命周期管理智能合约模块在智能合约部署管理表中保存一条记录,并记录待部署智能合约的相关信息(智能合约名称,版本号,部署时间戳等);
步骤407中,生命周期管理智能合约模块关闭该智能合约对应的容器;
步骤408中,生命周期管理智能合约模块把读写数据集返回给背书模块,同时返回模拟部署的结果;
步骤409中,如果模拟部署成功,则背书模块调用背书系统智能合约模块的背书方法;
步骤410中,背书系统智能合约模块执行背书过程,主要把读写数据集和签名等信息打包成背书结果;
步骤411中,背书系统智能合约模块将背书结果返回给背书模块;
步骤412中,背书模块把背书结果封装在提案响应中,再将提案响应返回给客户端。
下面将通过两种具体的实现方式介绍本申请实施例中生成快照的方法,请参阅如下实施例:
一、在智能合约运行过程中客户端主动创建快照;
可选地,在上述图5对应的实施例的基础上,本申请实施例提供的数据更新的处理方法第一个可选实施例中,接收客户端发送的智能合约部署请求之前,还可以包括:
接收客户端发送的数据快照创建请求,其中,数据快照创建请求中携带第一智能合约的数据快照标识;
根据数据快照创建请求获取第一智能合约所对应的目标数据;
根据目标数据以及第一智能合约的数据快照标识确定数据快照映射关系;
将数据快照映射关系发送至客户端。
本实施例中,客户端在发送智能合约部署请求之前的任意时间可以向节点设备发起一个数据快照创建请求,其中,数据快照创建请求中携带第一智能合约的数据快照标识。在实际应用中,节点设备在接收数据快照创建请求之后,先根据数据快照创建请求检测是否存在数据快照映射关系,该数据快照映射关系具体可以是指快照映射表,如果当前不存在该快照映射表,则将需要创建这样一个快照映射表。
在已经存在快照映射表的情况下,可以根据数据快照创建请求获取目标数据,然后在存在快照映射表的情况下,如果快照映射表中不包含第一智能合约对应的数据快照标识,则在快照映射表中添加第一智能合约的数据快照标识与目标数据之间的关联关系,以此构成快照映射表。反之,如果快照映射表中包含了第一智能合约的数据快照标识,那么就会拒绝更新快照映射表。
为便于理解,下面以一个具体应用场景对本申请中创建快照的方法进行详细描述,请参阅图7,图7为本申请应用场景中在智能合约运行过程中创建快照的一个实施例示意图,其中,图中的背书节点即为本申请中的节点设备,且该背书节点包含了三个模块,分别为背书模块、生命周期管理智能合约模块以及背书系统智能合约模块,创建快照的方法具体可以为:
步骤501中,客户端先向背书节点中的背书模块发送一个数据快照创建请求,即快照提案,该快照提案可以包括的内容有:智能合约的名称(chaincode name)、快照的名称(snapshot name)以及快照时间戳(timestamp);
步骤502中,背书节点中背书模块向生命周期管理智能合约模块发送一个调用快照方法的请求,该请求中包括与快照提案中一致的智能合约的名称(chaincode name)、快照的名称(snapshot name)以及快照时间戳(timestamp);
步骤503中,生命周期管理智能合约模块根据快照映射表的名称,获取快照映射表(即snapshot表格),如果没有快照映射表,则需要为该智能合约创建一个新的快照映射表;
步骤504中,生命周期管理智能合约模块读取待快照智能合约的当前所有key/value数据对,并将所有的key/value数据对打包成一个快照数据;
步骤505中,生命周期管理智能合约模块根据智能合约名称和快照名称在快照映射表中查询该快照是否存在,如果存在,则向背书模块模块返回失败,如果不存在,在快照映射表中新增一条记录,其中,该记录包括智能合约名称、快照名称、快照数据以及快照时间戳;
步骤506中,生命周期管理智能合约模块把这条新条新增的记录加入到读写数据集(read/write set)中;
步骤507中,生命周期管理智能合约模块把读写数据集返回给背书模块,同时返回调用快照的结果;
步骤508中,如果快照调用成功,则背书模块调用背书系统智能合约模块的背书方法;
步骤509中,背书系统智能合约模块执行背书过程,主要把读写数据集和签名等信息打包成背书结果;
步骤510中,背书系统智能合约模块将背书结果返回给背书模块;
步骤511中,背书模块把背书结果封装在提案响应中,再将提案响应返回给客户端。
其次,本申请实施例中,提供了一种节点设备进行快照的方法,节点设备可以在接收客户端发送的智能合约部署请求之前,接收客户端发送的数据快照创建请求,数据快照创建请求中携带所述第一智能合约的数据快照标识,然后根据数据快照创建请求获取第一智能合约所对应的所述目标数据,再根据目标数据以及第一智能合约的数据快照标识确定数据快照映射关系,最后将数据快照映射关系发送至客户端。通过上述方式,客户端可以主动创建快照请求,并由节点设备响应快照请求并且进行相应的操作,从而完成对第一智能合约的快照,以此能够在后续进行数据回滚时可调用相应的目标数据。
可选地,在上述图5对应的实施例的基础上,本申请实施例提供的数据更新的处理方法第二个可选实施例中,根据数据快照创建请求获取第一智能合约所对应的目标数据,可以包括:
根据数据快照创建请求获取第一智能合约中关键字以及数值,其中,关键字与数值一一对应;
根据第一智能合约的关键字以及数值,对第一智能合约进行合并处理,并得到处理结果;
根据处理结果确定目标数据。
本实施例中,将具体介绍节点设备如何对第一智能合约的关键字以及数值进行打包,得到处理结果即为快照数据,再将快照数据、快照名称以及快照生成的时间戳确定为目标数据进行存储。最后,将目标数据作为一条新增记录加入到数据快照映射关系中,在交易阶段将该记录写到区块链中。
数据快照映射关系可以是快照映射表,下面将介绍一种快照映射表的设计方法,请参阅表1,表1为快照映射表的内容:
表1
智能合约名称 快照名称 快照数据 时间戳
Chaincode1 Snapshot1 Data1 2016/12/1 10:10:10
Chaincode1 Snapshot2 Data2 2016/12/2 11:11:11
Chaincode2 Snapshot1 Data3 2016/12/3 09:09:20
其中,表1中的字段包括智能合约名称(chaincodename),为字符串类型,属于主关键字;快照名称(snapshotname),为字符串类型,属于主关键字;快照数据(data),为字节类型;快照时间戳(timestamp),为字符串类型。快照名称在同一个智能合约的范围内必须唯一
需要说明的是,表1中的各项字段仅为一个示意,可根据实际情况进行调整,此处不进行限定。
此外,在节点设备中还部署了智能合约管理表格,该表格主要用于监控智能合约的运行情况,请参阅表2,表2为智能合约管理表格的内容:
表2
智能合约名称 版本号 部署日期 状态
Chaincode1 V1 2016/01/01 00:00:00 运行中
Chaincode2 V1 2016/01/01 00:00:00 运行中
其中,表2中的字段包括智能合约名称(chaincodename),为字符串类型,属于主关键字;版本号(version),为字符串类型,属于主关键字;状态(status),为字符串类型;部署日期(deploy_date),为字符串类型。
下面将具体介绍如何对关键字以及数值进行打包。可以理解的是,关键字可以为key,数值为value,智能合约的key/value相当于应用程序所保存的数据库数据,比如一个银行的智能合约的key/value值设计可能是key是用户名,value是用户的资金余额,不同用户对应不同的key,以及对应不同的value。本申请中的key/value即为中智能合约的关键字以及数值。在对关键字以及数值进行打包后得到的处理结果即为快照数据,打包方法是所有key/value的长度(固定为8个存储字节)和值(其存储字节为长度的值)进行串接。
假设某个智能合约有N个key/value对,其打包方法为:
Key1的长度,key1,value1长度,value1+
Key2的长度,key2,,value2长度,value2+
……+
KeyN的长度,keyN,valueN的长度,valueN
其中,N为大于或等于1的正整数。
为便于理解,下面以一个具体实施例对本申请中创建快照的流程进行详细描述,请参阅图8,图8为本申请实施例中一个调用快照方法的流程示意图,如图所示,具体地:
步骤601中,客户端可以通过发起一个快照提案在区块链上获取一个智能合约的数据快照,并把这个快照存储在区块链上。假设客户端希望生成智能合约chaincode1的一个快照,它首先向节点设备(即背书节点)发起一个快照提案,该提案的内容可以包括chaincode1(即为智能合约名称)、snapshot_20161001(快照名称)以及20161001101010(快照时间戳),由节点设备开始调用快照方法;
步骤602中,节点设备检测当前是否存在快照表格,即检测是否存在快照映射表,如果存在快照映射表,则跳转至步骤604,反之,如果不存在快照映射表,则进入步骤603;
步骤603中,创建快照映射表,该快照映射表具体可以以读写数据集的形式存储于节点设备中;
步骤604中,在节点设备正式做快照之前,需要根据智能合约名称和快照名称这两个字段到快照映射表中检查当前是否已经存在相同的快照,如果已经存在相同的快照,直接进入步骤607;
步骤605中,将智能合约中的每个key/value数据对进行编码,并且串接成一个比特类的数据。
具体地,其中对key的编码方法为:表格名称的长度(存储为14个字节)+表格名称(snapshot_table)+主键字段1(即智能合约名称)的长度+主键字段1(即智能合约名称)+主键字段2(即快照名称)的长度+主键字段2(即快照名称);对value的编码方法为:该记录各个字段的length-value的串接,也就是:字段1长度(存储为8个字节)+字段1+字段2长度+字段2+……+字段n长度+字段n(快照映射表中可以有4个字段,即智能合约名称、快照名称、快照数据以及时间戳);
步骤606中,节点设备中生命周期智能合约模块的快照方法开始运行,即可以把智能合约chaincode1的所有key/value数据对根据步骤605中的打包方法打成一个比特类型的数据,即data4,然后在快照映射表中添加一条记录,请参阅表3,表3为添加了一条记录的快照映射表:
表3
Figure BDA0001244308750000181
Figure BDA0001244308750000191
其中,智能合约名称为Chaincode1,快照名称为Snapshot_20161001,快照数据为Data4,时间戳为2016/10/01 10:10:10的这条记录就是新加入快照映射表的内容;
步骤607中,把步骤606中的这条记录按照步骤605的方法打包成一个key/value数据对,加入到读写数据集中,在交易阶段,以上快照记录就会存储到区块链上。
在快照数据存到区块链上之后,智能合约升级部署的时候就可以把数据回滚,比如chaincode1在V1版本的某个时刻做了一个快照,该快照名称为snapshot_20161001,然后需要升级到新版本V2,同时把数据回滚到snapshot_20161001,也就是快照时刻到升级时刻这段时间的所有交易全部废弃,请参阅图9,图9为本申请实施例中一个调用部署方法的流程示意图,其处理流程如下:
步骤701中,客户端向节点设备(即背书节点)提交一个部署提案,该部署提案中包智能合约名称chaincode1、版本号V2、V2版本下载地址对应的URL、回滚的快照数据snapshot_20161001以及初始化方法的init参数,节点设备调用智能合约的部署方法,;
步骤702中,节点设备根据调用的部署方法,开始模拟部署智能合约;
步骤703中,接下来节点设备可以检测智能合约的模拟部署是否成功,如果模拟部署成功,则进入步骤704,反之,如果模拟部署失败,则跳转至步骤707,记录下部署状态并且停止使用老的版本;
步骤704中,节点设备还需检测快照映射表中是否存在对应的快照记录,例如,部署方法是根据智能合约名称chaincode1,快照名称snapshot_20161001在快照表格中查询到该快照对应的快照记录,如果存在对应的快照记录,则进入步骤705,反之,若不存在快照记录,则跳转至步骤707,记录下部署状态并且停止使用老的版本;
步骤705中,部署方法根据智能合约名称chaincode1,快照名称snapshot_20161001在快照映射表中查询到该快照对应的快照记录,先按照步骤605中对key的编码方法编码key,具体为:表格名称长度(存储为14个字节)+表格名称(snapshot_table)+智能合约名称长度(存储为10个字节)+智能合约名称(chaincode1)+快照名称长度(存储为17个字节)+快照名称(snapshot_20161001),可以在智能合约的key/value对中查询该key对应的value,然后把value解码为智能合约名称、快照名称、快照数据以及时间戳。解码方法为先读取8个字节,获得智能合约名称的长度,然后根据该长度读取智能合约名称,同样方法读取快照名称,快照数据,时间戳,此处不做赘述。具体地,假设查询快照记录后,对该快照的数据(data4)进行解码,则解码的流程如下:
读取8个字节,获得key1的长度key1_length,然后读key1_length个字节,获取key1,然后读取8个字节,获得value1的长度value1_length,然后读value1_length个字节,获取value1,循环一直读到data4的末尾;
步骤706中,节点设备在对data4解码得到多个key/value数据对后,可以将多个key/value数据对加入到读写数据集,于是在执行完初始化方法后,节点设备维护的智能合约管理表格也发生了相应的变化,请参阅图4,表4为智能合约管理表格:
表4
智能合约名称 版本号 部署日期 状态
Chaincode1 V1 2016/01/01 00:00:00 停止
Chaincode1 V2 2016/01/01 00:00:00 运行中
Chaincode2 V1 2016/01/01 00:00:00 运行中
可以理解的是,在读写数据集中,快照的数据在前面,经过初始化方法导致修改的数据在后面,这样的话,客户端可以通过初始化方法和初始化参数对智能合约的一些特殊数据进行赋值,比如将某个key的value值直接修改为ValueX,而不是回滚到快照;
步骤707中,节点设备在表4中的智能合约管理表格中增加一条记录,该记录即为智能合约名称为Chaincode1,版本号为V2,部署日期为2016/01/01 00:00:00,状态为运行中。记录下新版本的部署状态,同时修改老版本为停止状态。
其次,本申请实施例中,节点设备还可以将关于同一个智能合约的关键字和数值进行打包处理,合并到一个目标数据中,其中,关键字与数值之间存在着一一对应的关系。通过上述方式,能够将多组关键字和数值进行打包并存储,打包后的关键字和数值更便于进行存储和管理,同时有利于节点设备与客户端进行数据传输时更便利。
二、在客户端部署智能合约的时候进行快照;
可选地,在上述图5对应的实施例的基础上,本申请实施例提供的数据更新的处理方法第三个可选实施例中,接收客户端发送的智能合约部署请求之后,还可以包括:
若接收客户端发送的智能合约部署请求中包含快照创建标识,则根据智能合约部署请求获取第一智能合约对应的待更新数据;
在数据快照映射关系中,确定快照创建标识与待更新数据之间的关联关系;
将第二智能合约以及目标数据发送至所述客户端,可以包括:
将第二智能合约、目标数据以及数据快照映射关系发送至客户端。
本实施例中,在客户端部署智能合约的时候也可以发起快照,且快照请求可以与客户端发出的智能合约部署请求相结合。具体地,在节点设备接收客户端发送的智能合约部署请求之后,检测该智能合约部署请求中是否包含了快照创建标识,如果包含该快照创建标识,则说明节点设备维护了数据快照映射关系,该数据快照映射关系具体可以是指快照映射表,如果当前不存在该快照映射表,则将需要创建这样一个快照映射表。
在已经存在快照映射表的情况下,可以根据数据快照创建请求获取第一智能合约对应的待更新数据,待更新数据可能是存在问题的数据,但是对于节点设备而言,也可以对待更新数据进行快照。在存在快照映射表的情况下,如果快照映射表中不包含第一智能合约对应的快照创建标识,则在快照映射表中添加第一智能合约的快照创建标识与待更新数据之间的关联关系,以此构成快照映射表。反之,如果快照映射表中包含了第一智能合约的快照创建标识,那么就会拒绝更新快照映射表。
为便于理解,下面以一个具体应用场景对本申请中创建快照的方法进行详细描述,请参阅图10,图10为本申请应用场景中在部署智能合约过程中创建快照的一个实施例示意图,其中,图中的背书节点即为本申请中的节点设备,且该背书节点包含了三个模块,分别为背书模块、生命周期管理智能合约模块以及背书系统智能合约模块,创建快照的方法具体流程可以为:
步骤801中,客户端向背书节点中的背书模块发送一个部署提案,该部署提案所包括的内容有智能合约的名称、版本号、智能合约存放的URL、回滚的快照名称、初始化参数、创建的快照名称以及快照的时间戳;
步骤802中,背书模块调用生命周期管理智能合约模块的部署方法,其中,在该方法中也同样携带了智能合约的名称、版本号、智能合约存放的URL、回滚的快照名称、初始化参数、创建的的快照名称以及时间戳;
步骤803中,生命周期管理智能合约模块根据快照映射表的名称,获取快照映射表(即snapshot表格),如果没有快照映射表,则需要为该智能合约创建一个新的快照映射表;
步骤804中,生命周期管理智能合约模块读取待快照智能合约的当前所有key/value数据对,并将所有的key/value数据对打包成一个快照数据;
步骤805中,生命周期管理智能合约模块根据智能合约名称和快照名称在快照映射表中查询该快照是否存在,如果存在,则向背书模块模块返回失败,如果不存在,在快照映射表中新增一条记录,其中,该记录包括智能合约名称、快照名称、快照数据以及快照时间戳;
步骤806中,生命周期管理智能合约模块把这条新条新增的记录加入到读写数据集(read/write set)中;
步骤807中,生命周期管理智能合约模块先模拟部署待部署的智能合约,主要过程包括根据智能合约的下载地址(即URL)下载待部署智能合约,在容器中启动该智能合约,容器具体是指用来存储和组织其他对象的对象;
步骤808中,从生命周期管理智能合约模块中根据该智能合约历史版本曾经做过的快照名称读取该快照包含的所有key/value对(也就是该快照保存的智能合约的数据,例如key是用户名,value是用户的资金余额,不同用户持有不同的key和value),加入读写数据集(read/write set)中;
步骤809中,生命周期管理智能合约模块调用待部署智能合约的初始化方法(即Init方法),并把执行结果,也就是对Key/Value数据库的修改添加到一个读写数据集中;
步骤810中,生命周期管理智能合约模块在智能合约部署管理表中保存一条记录,并记录待部署智能合约的相关信息(智能合约名称,版本号,部署时间戳等);
步骤811中,生命周期管理智能合约模块关闭该智能合约对应的容器;
步骤812中,生命周期管理智能合约模块把读写数据集返回给背书模块,同时返回模拟部署的结果;
步骤813中,如果模拟部署成功,则背书模块调用背书系统智能合约模块的背书方法;
步骤814中,背书系统智能合约模块执行背书过程,主要把读写数据集和签名等信息打包成背书结果;
步骤815中,背书系统智能合约模块将背书结果返回给背书模块;
步骤816中,背书模块把背书结果封装在提案响应中,再将提案响应返回给客户端。
其次,本申请实施例中,提供了一种节点设备进行快照的方法,节点设备可以在接收客户端发送的智能合约部署请求之前,接收客户端发送的数据快照创建请求,数据快照创建请求中携带所述第一智能合约的数据快照标识,然后根据数据快照创建请求获取第一智能合约所对应的所述目标数据,再根据目标数据以及第一智能合约的数据快照标识确定数据快照映射关系,最后将数据快照映射关系发送至客户端。通过上述方式,客户端可以主动创建快照请求,并由节点设备响应快照请求并且进行相应的操作,从而完成对第一智能合约的快照,以此能够在后续进行数据回滚时可调用相应的目标数据。
可选地,在上述图5对应的实施例的基础上,本申请实施例提供的数据更新的处理方法第四个可选实施例中,根据智能合约部署请求获取第一智能合约对应的待更新数据,可以包括:
根据智能合约部署请求获取第一智能合约中关键字以及数值,其中,关键字与数值一一对应;
根据第一智能合约的关键字以及数值,对第一智能合约进行合并处理,并得到处理结果;
根据处理结果确定待更新数据。
本实施例中,将具体介绍节点设备如何对第一智能合约的关键字以及数值进行打包,得到处理结果即为快照数据,再将快照数据、快照名称以及快照生成的时间戳确定为待更新数据进行存储。最后,将待更新数据作为一条新增记录加入到数据快照映射关系中,在交易阶段将该记录写到区块链中。
下面将通过一个例子介绍在部署智能合约的时候,如何生成老版本数据的快照。假设第一智能合约可以为chaincode1,在chaincode1从V1版本升级到V2版本的时候,客户端向背书节点发送一个V2版本智能合约的部署请求,该部署请求中包括智能合约名称(如chaincode1)、智能合约版本号(如V2)、智能合约的下载地址(如URL2),init参数,时间戳(如20161010000000),要生成的快照名称(如Chaincode1_v1_20161010000000)。
节点设备可以按照上述图5对应的第二个可选实施例所述的方式,对chaincode1的数据进行打包,此处不作赘述。假设将chaincode1的数据打包成data5,然后在快照映射表中添加一条记录,请参阅表5,表5为添加了一条记录的快照映射表:
表5
智能合约名称 快照名称 快照数据 时间戳
Chaincode1 Snapshot1 Data1 2016/12/1 10:10:10
Chaincode1 Snapshot2 Data2 2016/12/2 11:11:11
Chaincode2 Snapshot3 Data3 2016/12/3 09:09:20
Chaincode1 Chaincode1_v1_20161010000000 Data5 2016/10/01 00:00:00
客户端在升级部署chaincode1的新版本(如V3版本)的时候,就可以使用该快照,即调用快照中老版本对应的数据(如V1版本的数据),具体的调用过程如上述图9中调用部署方法的流程,此处不做赘述。
其次,本申请实施例中,节点设备还可以将关于同一个智能合约的关键字和数值进行打包处理,合并到一个待更新数据中,其中,关键字与数值之间存在着一一对应的关系。通过上述方式,能够将多组关键字和数值进行打包并存储,打包后的关键字和数值更便于进行存储和管理,同时有利于节点设备与客户端进行数据传输时更便利。
下面对本申请中一个实施例对应的节点设备进行详细描述,请参阅图11,本申请实施例中的节点设备包括:
第一接收模块901,用于接收客户端发送的智能合约部署请求,其中,所述智能合约部署请求中携带数据快照映射关系所包含的第一智能合约的数据快照标识;
第一获取模块902,用于根据所述第一接收模块901接收的所述智能合约部署请求获取第二智能合约以及目标数据,其中,所述目标数据为根据所述数据快照映射关系以及所述第一智能合约的数据快照标识确定的;
第一发送模块903,用于将所述第一获取模块902获取的所述第二智能合约以及所述目标数据发送至所述客户端,所述第二智能合约以及所述目标数据用于指示所述客户端对所述第一智能合约以及所述第一智能合约对应的待更新数据进行更新。
本实施例中,第一接收模块901接收客户端发送的智能合约部署请求,其中,所述智能合约部署请求中携带数据快照映射关系所包含的第一智能合约的数据快照标识,第一获取模块902根据所述第一接收模块901接收的所述智能合约部署请求获取第二智能合约以及目标数据,其中,所述目标数据为根据所述数据快照映射关系以及所述第一智能合约的数据快照标识确定的,第一发送模块903将所述第一获取模块902获取的所述第二智能合约以及所述目标数据发送至所述客户端,所述第二智能合约以及所述目标数据用于指示所述客户端对所述第一智能合约以及所述第一智能合约对应的待更新数据进行更新。
本申请实施例中,提供了一种用于数据更新的节点设备,该节点设备接收客户端发送的智能合约部署请求,其中,智能合约部署请求中携带数据快照映射关系所包含的第一智能合约的数据快照标识,然后根据智能合约部署请求获取第二智能合约以及目标数据,其中,第二智能合约为根据第一智能合约更新后得到的,目标数据为根据数据快照映射关系以及第一智能合约的数据快照标识确定的,最后将第二智能合约以及目标数据发送至客户端,以使客户端根据第二智能合约以及目标数据对第一智能合约以及第一智能合约对应的待更新数据进行更新。采用上述方式,在对智能合约进行更新时,可以直接从快照中提取已经存储过的目标数据,目标数据是智能合约历史版本中无缺陷的数据,因此也就不需要消耗较多的资源来推导这些无缺陷的数据,从而降低了数据更新的难度和复杂度。
可选地,在上述图11所对应的实施例的基础上,请参阅图12,本申请实施例提供的节点设备的另一实施例中,所述节点设备90还包括:
第二接收模块904A,用于所述第一接收模块901接收客户端发送的智能合约部署请求之前,接收所述客户端发送的数据快照创建请求,其中,所述数据快照创建请求中携带所述第一智能合约的数据快照标识;
第二获取模块904B,用于根据所述第二接收模块904A接收的所述数据快照创建请求获取所述第一智能合约所对应的所述目标数据;
第一确定模块904C,用于根据所述第二获取模块904B获取的所述目标数据以及所述第一智能合约的数据快照标识确定所述数据快照映射关系;
第二发送模块904D,用于将所述第一确定模块904C确定的所述数据快照映射关系发送至所述客户端。
其次,本申请实施例中,节点设备在接收客户端发送的智能合约部署请求之前,还可以接收客户端发送的数据快照创建请求,并由此建立起数据快照映射关系,该数据快照映射关系中包含了目标数据以及对应的数据快照标识,最后将数据快照映射关系同步到客户端。通过上述方式,客户端可以主动创建快照请求,由节点设备响应快照请求并且进行相应的操作,从而完成对第一智能合约的快照,以此能够在后续进行数据回滚时可调用相应的目标数据。
可选地,在上述图12所对应的实施例的基础上,请参阅图13,本申请实施例提供的节点设备的另一实施例中,所述节点设备90还包括:
第一检测模块905A,用于所述第二接收模块904A接收所述客户端发送的数据快照创建请求之后,根据所述数据快照创建请求检测是否存在所述数据快照映射关系;
第一创建模块905B,用于若所述第一检测模块905A检测到不存在所述数据快照映射关系,则创建所述数据快照映射关系。
再次,本申请实施例中,节点设备在接收客户端发送的数据快照创建请求之后,需要检测当前是否存在数据快照映射关系,如果没有,则会创建数据快照映射关系。通过上述方式,节点设备只需要创建或者维护一个数据快照映射关系即可,不会重复创建多个数据快照映射关系,从而节省了维护和创建数据快照映射关系的资源,有利于提升方案的效率。
可选地,在上述图12或13所对应的实施例的基础上,请参阅图14,本申请实施例提供的节点设备的另一实施例中,
所述第一确定模块904C包括:
第一添加单元904C1,用于若所述数据快照映射关系中不包含所述第一智能合约的所述数据快照标识,则在所述数据快照映射关系中添加所述第一智能合约的所述数据快照标识与所述目标数据之间的关联关系。
进一步地,本申请实施例中,在建立了数据快照映射关系的前提下,如果不包含第一智能合约的数据快照标识,则需要在该数据快照映射关系中添加第一智能合约的数据快照标识与目标数据的关联关系。通过上述方式,可以有效地在数据快照映射关系中增加关于第一智能合约的快照记录,便于节点设备直接从快照记录中提取已经存储过的目标数据,从而提升了方案使用的可行性,并且增强了方案的可操作性。
可选地,在上述图12所对应的实施例的基础上,请参阅图15,本申请实施例提供的节点设备的另一实施例中,所述节点设备90还包括:
第一拒绝模块905,用于所述第二获取模块904B根据所述数据快照创建请求获取所述第一智能合约所对应的所述目标数据之后,若所述数据快照映射关系中包含所述第一智能合约的所述数据快照标识,则拒绝更新所述数据快照映射关系。
其次,本申请实施例中,在节点设备根据数据快照创建请求获取第一智能合约所对应的目标数据之后,如果发现数据快照映射关系中已经包含第一智能合约的数据快照标识,那么就会拒绝更新数据快照映射关系。通过上述方式,可以避免在数据快照映射关系中存储重复的信息,从而提升节点设备中资源的利用率,与此同时,不必多次记录相同的信息,以此节省了记录的时间,提升方案使用效率。
可选地,在上述图12所对应的实施例的基础上,请参阅图16,本申请实施例提供的节点设备的另一实施例中,
所述第二获取模块904B包括:
第一获取单元904B1,用于根据所述数据快照创建请求获取所述第一智能合约中关键字以及数值,其中,所述关键字与所述数值一一对应;
第一处理单元904B2,用于根据所述第一获取单元904B1获取的所述第一智能合约的所述关键字以及所述数值,对所述第一智能合约进行合并处理,并得到处理结果;
第一确定单元904B3,用于根据所述第一处理单元904B2得到的所述处理结果确定所述目标数据。
其次,本申请实施例中,节点设备还可以将关于同一个智能合约的关键字和数值进行打包处理,合并到一个目标数据中,其中,关键字与数值之间存在着一一对应的关系。通过上述方式,能够将多组关键字和数值进行打包并存储,打包后的关键字和数值更便于进行存储和管理,同时有利于节点设备与客户端进行数据传输时更便利。
可选地,在上述图11所对应的实施例的基础上,请参阅图17,本申请实施例提供的节点设备的另一实施例中,所述节点设备90还包括:
第三获取模块906A,用于所述第一接收模块901接收客户端发送的智能合约部署请求之后,若所述接收客户端发送的智能合约部署请求中包含快照创建标识,则根据所述智能合约部署请求获取所述第一智能合约对应的所述待更新数据;
第二确定模块906B,用于在所述数据快照映射关系中,确定所述快照创建标识与所述第三获取模块906A获取的所述待更新数据之间的关联关系;
所述第一发送模块903包括:
发送单元9031,用于将所述第二智能合约、所述目标数据以及所述数据快照映射关系发送至所述客户端。
其次,本申请实施例中,在节点设备接收客户端发送的智能合约部署请求之后,还可以接收客户端发送的智能合约部署请求,其中,该智能合约部署请求包含了快照创建标识,由此可以创建快照创建标识与待更新数据之间的关联关系,最后将数据快照映射关系同步到客户端。通过上述方式,可以在部署智能合约的时候做快照,由节点设备响应快照请求并且进行相应的操作,从而完成对第一智能合约的快照,以此能够在后续进行数据回滚时可调用相应的目标数据。
可选地,在上述图17所对应的实施例的基础上,请参阅图18,本申请实施例提供的节点设备的另一实施例中,所述节点设备90还包括:
第二检测模块907A,用于若所述接收客户端发送的智能合约部署请求中包含快照创建标识,则所述第三获取模块906A根据所述智能合约部署请求获取所述第一智能合约对应的所述待更新数据之前,根据所述智能合约部署请求检测是否存在所述数据快照映射关系;
第二创建模块907B,用于若所述第二检测模块907A检测到不存在所述数据快照映射关系,则创建所述数据快照映射关系。
再次,本申请实施例中,节点设备在根据智能合约部署请求获取第一智能合约对应的待更新数据之前,需要检测当前是否存在数据快照映射关系,如果不存在,则会自动创建数据快照映射关系。通过上述方式,节点设备只需要创建或者维护一个数据快照映射关系即可,不会重复创建多个数据快照映射关系,从而节省了维护和创建数据快照映射关系的资源,有利于提升方案的效率。
可选地,在上述图17或18所对应的实施例的基础上,请参阅图19,本申请实施例提供的节点设备的另一实施例中,
所述第二确定模块906B包括:
第二添加单元906B1,用于若所述数据快照映射关系中不包含所述第一智能合约的所述快照创建标识,则在所述数据快照映射关系中添加所述第一智能合约的所述快照创建标识与所述待更新数据之间的关联关系。
进一步地,本申请实施例中,在建立了数据快照映射关系的前提下,如果不包含第一智能合约的数据快照标识,则需要在该数据快照映射关系中添加第一智能合约的数据快照标识与目标数据的关联关系。通过上述方式,可以有效地在数据快照映射关系中增加关于第一智能合约的快照记录,便于节点设备直接从快照记录中提取已经存储过的目标数据,从而提升了方案使用的可行性,并且增强了方案的可操作性。
可选地,在上述图17所对应的实施例的基础上,请参阅图20,本申请实施例提供的节点设备的另一实施例中,所述节点设备90还包括:
第二拒绝模块907,用于所述第三获取模块906A根据所述智能合约部署请求获取所述第一智能合约对应的所述待更新数据之后,若所述数据快照映射关系中包含所述第一智能合约的所述快照创建标识,则拒绝更新所述数据快照映射关系。
其次,本申请实施例中,在节点设备根据智能合约部署请求获取第一智能合约对应的待更新数据之后,如果发现数据快照映射关系中已经包含第一智能合约的快照创建标识,那么就会拒绝更新数据快照映射关系。通过上述方式,可以避免在数据快照映射关系中存储重复的信息,从而提升节点设备中资源的利用率,与此同时,不必多次记录相同的信息,以此节省了记录的时间,提升方案使用效率。
可选地,在上述图17所对应的实施例的基础上,请参阅图21,本申请实施例提供的节点设备的另一实施例中,
所述第三获取模块906A包括:
第二获取单元906A1,用于根据所述智能合约部署请求获取所述第一智能合约中关键字以及数值,其中,所述关键字与所述数值一一对应;
第二处理单元906A2,用于根据所述第二获取单元906A1获取的所述第一智能合约的所述关键字以及所述数值,对所述第一智能合约进行合并处理,并得到处理结果;
第二确定单元906A3,用于根据所述第二处理单元906A2得到的所述处理结果确定所述待更新数据。
其次,本申请实施例中,节点设备还可以将关于同一个智能合约的关键字和数值进行打包处理,合并到一个待更新数据中,其中,关键字与数值之间存在着一一对应的关系。通过上述方式,能够将多组关键字和数值进行打包并存储,打包后的关键字和数值更便于进行存储和管理,同时有利于节点设备与客户端进行数据传输时更便利。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(Digital Subscriber Line,DSL)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,数字通用光盘(Digital Versatile Disc,DVD))、或者半导体介质(例如固态硬盘(Solid State Disk,SSD)等。

Claims (24)

1.一种数据更新的方法,其特征在于,包括:
接收客户端发送的智能合约部署请求,其中,所述智能合约部署请求中携带数据快照映射关系所包含的第一智能合约的数据快照标识;
根据所述智能合约部署请求获取第二智能合约以及目标数据,其中,所述目标数据为根据所述数据快照映射关系以及所述第一智能合约的数据快照标识确定的,所述目标数据是所述客户端在使用所述第一智能合约升级前所采用的数据,在所述客户端升级到所述第二智能合约的过程中,出现问题的数据将回滚到之前没有问题的所述目标数据,所述目标数据是智能合约历史版本中无缺陷的数据;
将所述第二智能合约以及所述目标数据发送至所述客户端,以使所述客户端根据所述第二智能合约以及所述目标数据对所述第一智能合约以及所述第一智能合约对应的待更新数据进行更新。
2.根据权利要求1所述的方法,其特征在于,所述接收客户端发送的智能合约部署请求之前,所述方法还包括:
接收所述客户端发送的数据快照创建请求,其中,所述数据快照创建请求中携带所述第一智能合约的数据快照标识;
根据所述数据快照创建请求获取所述第一智能合约所对应的所述目标数据;
根据所述目标数据以及所述第一智能合约的数据快照标识确定所述数据快照映射关系;
将所述数据快照映射关系发送至所述客户端。
3.根据权利要求2所述的方法,其特征在于,所述接收所述客户端发送的数据快照创建请求之后,所述方法还包括:
根据所述数据快照创建请求检测是否存在所述数据快照映射关系;
若不存在所述数据快照映射关系,则创建所述数据快照映射关系。
4.根据权利要求2或3所述的方法,其特征在于,所述根据所述目标数据以及所述第一智能合约的数据快照标识确定所述数据快照映射关系,包括:
若所述数据快照映射关系中不包含所述第一智能合约的所述数据快照标识,则在所述数据快照映射关系中添加所述第一智能合约的所述数据快照标识与所述目标数据之间的关联关系。
5.根据权利要求2所述的方法,其特征在于,所述根据所述数据快照创建请求获取所述第一智能合约所对应的所述目标数据之后,所述方法还包括:
若所述数据快照映射关系中包含所述第一智能合约的所述数据快照标识,则拒绝更新所述数据快照映射关系。
6.根据权利要求2所述的方法,其特征在于,所述根据所述数据快照创建请求获取所述第一智能合约所对应的所述目标数据,包括:
根据所述数据快照创建请求获取所述第一智能合约中关键字以及数值,其中,所述关键字与所述数值一一对应;
根据所述第一智能合约的所述关键字以及所述数值,对所述第一智能合约进行合并处理,并得到处理结果;
根据所述处理结果确定所述目标数据。
7.根据权利要求1所述的方法,其特征在于,所述接收客户端发送的智能合约部署请求之后,所述方法还包括:
若所述接收客户端发送的智能合约部署请求中包含快照创建标识,则根据所述智能合约部署请求获取所述第一智能合约对应的所述待更新数据;
在所述数据快照映射关系中,确定所述快照创建标识与所述待更新数据之间的关联关系;
所述将所述第二智能合约以及所述目标数据发送至所述客户端,包括:
将所述第二智能合约、所述目标数据以及所述数据快照映射关系发送至所述客户端。
8.根据权利要求7所述的方法,其特征在于,所述若所述接收客户端发送的智能合约部署请求中包含快照创建标识,则根据所述智能合约部署请求获取所述第一智能合约对应的所述待更新数据之前,所述方法还包括:
根据所述智能合约部署请求检测是否存在所述数据快照映射关系;
若不存在所述数据快照映射关系,则创建所述数据快照映射关系。
9.根据权利要求7或8所述的方法,其特征在于,所述在所述数据快照映射关系中,确定所述快照创建标识与所述待更新数据之间的关联关系,包括:
若所述数据快照映射关系中不包含所述第一智能合约的所述快照创建标识,则在所述数据快照映射关系中添加所述第一智能合约的所述快照创建标识与所述待更新数据之间的关联关系。
10.根据权利要求7所述的方法,其特征在于,所述根据所述智能合约部署请求获取所述第一智能合约对应的所述待更新数据之后,所述方法还包括:
若所述数据快照映射关系中包含所述第一智能合约的所述快照创建标识,则拒绝更新所述数据快照映射关系。
11.根据权利要求7所述的方法,其特征在于,所述根据所述智能合约部署请求获取所述第一智能合约对应的所述待更新数据,包括:
根据所述智能合约部署请求获取所述第一智能合约中关键字以及数值,其中,所述关键字与所述数值一一对应;
根据所述第一智能合约的所述关键字以及所述数值,对所述第一智能合约进行合并处理,并得到处理结果;
根据所述处理结果确定所述待更新数据。
12.一种节点设备,其特征在于,包括:
第一接收模块,用于接收客户端发送的智能合约部署请求,其中,所述智能合约部署请求中携带数据快照映射关系所包含的第一智能合约的数据快照标识;
第一获取模块,用于根据所述第一接收模块接收的所述智能合约部署请求获取第二智能合约以及目标数据,其中,所述目标数据为根据所述数据快照映射关系以及所述第一智能合约的数据快照标识确定的,所述目标数据是所述客户端在使用所述第一智能合约升级前所采用的数据,在所述客户端升级到所述第二智能合约的过程中,出现问题的数据将回滚到之前没有问题的所述目标数据,所述目标数据是智能合约历史版本中无缺陷的数据;
第一发送模块,用于将所述第一获取模块获取的所述第二智能合约以及所述目标数据发送至所述客户端,以使所述客户端根据所述第二智能合约以及所述目标数据对所述第一智能合约以及所述第一智能合约对应的待更新数据进行更新。
13.根据权利要求12所述的节点设备,其特征在于,所述节点设备还包括:
第二接收模块,用于所述第一接收模块接收客户端发送的智能合约部署请求之前,接收所述客户端发送的数据快照创建请求,其中,所述数据快照创建请求中携带所述第一智能合约的数据快照标识;
第二获取模块,用于根据所述第二接收模块接收的所述数据快照创建请求获取所述第一智能合约所对应的所述目标数据;
第一确定模块,用于根据所述第二获取模块获取的所述目标数据以及所述第一智能合约的数据快照标识确定所述数据快照映射关系;
第二发送模块,用于将所述第一确定模块确定的所述数据快照映射关系发送至所述客户端。
14.根据权利要求13所述的节点设备,其特征在于,所述节点设备还包括:
第一检测模块,用于所述第二接收模块接收所述客户端发送的数据快照创建请求之后,根据所述数据快照创建请求检测是否存在所述数据快照映射关系;
第一创建模块,用于若所述第一检测模块检测到不存在所述数据快照映射关系,则创建所述数据快照映射关系。
15.根据权利要求13或14所述的节点设备,其特征在于,所述第一确定模块包括:
第一添加单元,用于若所述数据快照映射关系中不包含所述第一智能合约的所述数据快照标识,则在所述数据快照映射关系中添加所述第一智能合约的所述数据快照标识与所述目标数据之间的关联关系。
16.根据权利要求13所述的节点设备,其特征在于,所述节点设备还包括:
第一拒绝模块,用于所述第二获取模块根据所述数据快照创建请求获取所述第一智能合约所对应的所述目标数据之后,若所述数据快照映射关系中包含所述第一智能合约的所述数据快照标识,则拒绝更新所述数据快照映射关系。
17.根据权利要求13所述的节点设备,其特征在于,所述第二获取模块包括:
第一获取单元,用于根据所述数据快照创建请求获取所述第一智能合约中关键字以及数值,其中,所述关键字与所述数值一一对应;
第一处理单元,用于根据所述第一获取单元获取的所述第一智能合约的所述关键字以及所述数值,对所述第一智能合约进行合并处理,并得到处理结果;
第一确定单元,用于根据所述第一处理单元得到的所述处理结果确定所述目标数据。
18.根据权利要求12所述的节点设备,其特征在于,所述节点设备还包括:
第三获取模块,用于所述第一接收模块接收客户端发送的智能合约部署请求之后,若所述接收客户端发送的智能合约部署请求中包含快照创建标识,则根据所述智能合约部署请求获取所述第一智能合约对应的所述待更新数据;
第二确定模块,用于在所述数据快照映射关系中,确定所述快照创建标识与所述第三获取模块获取的所述待更新数据之间的关联关系;
所述第一发送模块包括:
发送单元,用于将所述第二智能合约、所述目标数据以及所述数据快照映射关系发送至所述客户端。
19.根据权利要求18所述的节点设备,其特征在于,所述节点设备还包括:
第二检测模块,用于若所述接收客户端发送的智能合约部署请求中包含快照创建标识,则所述第三获取模块根据所述智能合约部署请求获取所述第一智能合约对应的所述待更新数据之前,根据所述智能合约部署请求检测是否存在所述数据快照映射关系;
第二创建模块,用于若所述第二检测模块检测到不存在所述数据快照映射关系,则创建所述数据快照映射关系。
20.根据权利要求18或19所述的节点设备,其特征在于,所述第二确定模块包括:
第二添加单元,用于若所述数据快照映射关系中不包含所述第一智能合约的所述快照创建标识,则在所述数据快照映射关系中添加所述第一智能合约的所述快照创建标识与所述待更新数据之间的关联关系。
21.根据权利要求18所述的节点设备,其特征在于,所述节点设备还包括:
第二拒绝模块,用于所述第三获取模块根据所述智能合约部署请求获取所述第一智能合约对应的所述待更新数据之后,若所述数据快照映射关系中包含所述第一智能合约的所述快照创建标识,则拒绝更新所述数据快照映射关系。
22.根据权利要求18所述的节点设备,其特征在于,所述第三获取模块包括:
第二获取单元,用于根据所述智能合约部署请求获取所述第一智能合约中关键字以及数值,其中,所述关键字与所述数值一一对应;
第二处理单元,用于根据所述第二获取单元获取的所述第一智能合约的所述关键字以及所述数值,对所述第一智能合约进行合并处理,并得到处理结果;
第二确定单元,用于根据所述第二处理单元得到的所述处理结果确定所述待更新数据。
23.一种节点设备,其特征在于,包括:存储器、收发器、处理器以及总线系统;
其中,所述存储器用于存储程序和指令;
所述收发器用于在所述处理器的控制下接收或发送信息;
所述处理器用于执行所述存储器中的程序;
所述总线系统用于连接所述存储器、所述收发器以及所述处理器,以使所述存储器、
所述收发器以及所述处理器进行通信;
所述处理器用于调用所述存储器中的程序指令,执行如权利要求1至11中任一项所述的方法。
24.一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如权利要求1-11中任一项所述的方法。
CN201710146569.2A 2017-03-13 2017-03-13 一种数据更新的方法及节点设备 Active CN108572986B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710146569.2A CN108572986B (zh) 2017-03-13 2017-03-13 一种数据更新的方法及节点设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710146569.2A CN108572986B (zh) 2017-03-13 2017-03-13 一种数据更新的方法及节点设备

Publications (2)

Publication Number Publication Date
CN108572986A CN108572986A (zh) 2018-09-25
CN108572986B true CN108572986B (zh) 2022-05-17

Family

ID=63578357

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710146569.2A Active CN108572986B (zh) 2017-03-13 2017-03-13 一种数据更新的方法及节点设备

Country Status (1)

Country Link
CN (1) CN108572986B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109636599A (zh) * 2018-11-07 2019-04-16 广西师范大学 基于群签名的许可区块链隐私保护和监管方法
CN109684307B (zh) * 2018-12-26 2021-06-22 百度在线网络技术(北京)有限公司 一种数据存储方法、装置、设备及存储介质
CN109753767B (zh) * 2019-01-04 2020-12-18 嘉兴熠智软件科技有限公司 基于区块链的软件分发及更新方法和装置、服务器、客户端
US11790368B2 (en) * 2019-03-05 2023-10-17 International Business Machines Corporation Auto-evolving database endorsement policies
CN112491943B (zh) * 2019-09-12 2024-08-27 北京国双科技有限公司 数据请求方法、装置、存储介质和电子设备
CN110633076B (zh) * 2019-09-16 2021-05-04 杭州趣链科技有限公司 一种自动生成Solidity智能合约Java客户端程序的方法
CN111124421B (zh) * 2019-12-23 2023-04-21 卓尔智联(武汉)研究院有限公司 区块链智能合约的异常合约数据检测方法和装置
CN111340470B (zh) * 2020-02-24 2023-04-18 中国工商银行股份有限公司 区块链交易处理方法、节点及合约容器
CN112965729B (zh) * 2021-03-23 2024-08-02 工银科技有限公司 一键部署区块链智能合约的方法、装置、电子设备及介质
CN112883068A (zh) * 2021-04-30 2021-06-01 支付宝(杭州)信息技术有限公司 区块链交易执行方法、区块链节点及控制装置
CN113722273A (zh) * 2021-09-10 2021-11-30 北京沃东天骏信息技术有限公司 一种快照生成方法和装置

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103645967A (zh) * 2013-11-26 2014-03-19 华为技术有限公司 一种只读快照回滚方法及装置
CN103870362A (zh) * 2014-03-21 2014-06-18 华为技术有限公司 一种数据恢复方法、装置及备份系统
CN103902299A (zh) * 2012-12-24 2014-07-02 航天信息股份有限公司 一种软件版本的更新方法和系统
CN104657170A (zh) * 2013-11-25 2015-05-27 腾讯科技(上海)有限公司 一种数据更新方法、装置及系统
CN104714755A (zh) * 2013-12-13 2015-06-17 华为技术有限公司 一种快照管理方法及装置
CN105956923A (zh) * 2016-04-20 2016-09-21 上海如鸽投资有限公司 资产交易平台以及资产的数字化认证和交易方法
CN106055597A (zh) * 2016-05-24 2016-10-26 布比(北京)网络技术有限公司 数字交易系统、及用于其的账户信息查询方法
CN106101242A (zh) * 2016-06-24 2016-11-09 深圳前海微众银行股份有限公司 区块链云服务平台的构建方法和装置
CN106209947A (zh) * 2015-05-07 2016-12-07 中兴通讯股份有限公司 一种去中心化自治组织的数据处理方法及系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5569424B2 (ja) * 2011-02-14 2014-08-13 富士通株式会社 更新装置、更新方法、および更新プログラム
US9798763B2 (en) * 2013-09-23 2017-10-24 David D. Wright, SR. Method for using tags to manage client software across a life cycle
US10366204B2 (en) * 2015-08-03 2019-07-30 Change Healthcare Holdings, Llc System and method for decentralized autonomous healthcare economy platform

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103902299A (zh) * 2012-12-24 2014-07-02 航天信息股份有限公司 一种软件版本的更新方法和系统
CN104657170A (zh) * 2013-11-25 2015-05-27 腾讯科技(上海)有限公司 一种数据更新方法、装置及系统
CN103645967A (zh) * 2013-11-26 2014-03-19 华为技术有限公司 一种只读快照回滚方法及装置
CN104714755A (zh) * 2013-12-13 2015-06-17 华为技术有限公司 一种快照管理方法及装置
CN103870362A (zh) * 2014-03-21 2014-06-18 华为技术有限公司 一种数据恢复方法、装置及备份系统
CN106209947A (zh) * 2015-05-07 2016-12-07 中兴通讯股份有限公司 一种去中心化自治组织的数据处理方法及系统
CN105956923A (zh) * 2016-04-20 2016-09-21 上海如鸽投资有限公司 资产交易平台以及资产的数字化认证和交易方法
CN106055597A (zh) * 2016-05-24 2016-10-26 布比(北京)网络技术有限公司 数字交易系统、及用于其的账户信息查询方法
CN106101242A (zh) * 2016-06-24 2016-11-09 深圳前海微众银行股份有限公司 区块链云服务平台的构建方法和装置

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Step by Step Towards Creating a Safe Smart Contract: Lessons and Insights from a Cryptocurrency Lab;Kevin Delmolino等;《FC 2016: Financial Cryptography and Data Security》;20160831;第79-94页 *
Towards a Shared Ledger Business Collaboration Language Based on Data-Aware Processes;Richard Hull等;《ICSOC 2016: Service-Oriented Computing》;20160920;第18-36页 *
区块链开发(二)部署和运行第一个以太坊智能合约;李赫的博客;《https://blog.csdn.net/sportshark/article/details/52249607》;20160822;第1页 *
区块链技术发展现状与展望;袁勇等;《自动化学报》;20160329;第42卷(第4期);第481-494页 *

Also Published As

Publication number Publication date
CN108572986A (zh) 2018-09-25

Similar Documents

Publication Publication Date Title
CN108572986B (zh) 一种数据更新的方法及节点设备
WO2020258848A1 (zh) 一种跨链发送资源的方法和装置
TWI737944B (zh) 基於區塊鏈的交易執行方法及裝置、電子設備
US20220108285A1 (en) Methods and Systems for Object Validated Blockchain Accounts
US11501533B2 (en) Media authentication using distributed ledger
CN109981679B (zh) 在区块链网络中执行事务的方法和装置
CN107562513B (zh) 一种基于java的智能合约生命周期的管理方法
US11847135B2 (en) Blockchain node and transaction method
US20190245697A1 (en) Securing blockchain access through a gateway
US10924281B2 (en) Method and apparatus for inter-blockchain transmission of authenticable message
TW202101439A (zh) 跨鏈發送可認證訊息的方法和裝置
CN113094396B (zh) 基于节点内存的数据处理方法、装置、设备以及介质
CN109992285B (zh) 区块链代码块独立升级方法、装置及电子设备
TWI726573B (zh) 基於區塊鏈的資料壓縮、查詢方法及裝置和電子設備
WO2020258847A1 (zh) 基于处理模块跨链发送可认证消息的方法和装置
US20210304191A1 (en) System and method for integration and validation
CN112685391B (zh) 一种服务数据迁移方法、装置、计算机设备和存储介质
CN111813441B (zh) 智能合约发布方法、装置、计算机可读介质及电子设备
US20220343323A1 (en) Method and apparatus maintaining private data with consortium blockchain
CN113656497A (zh) 一种基于区块链的数据验证方法和装置
CN113077260A (zh) 基于区块链的数据访问方法、装置及电子设备
CN113326059B (zh) 一种资源更新方法、装置及存储介质
CN107085681B (zh) 鲁棒的计算设备标识框架
CN115203746A (zh) 数据账户的访问授权方法及装置
CN115221559A (zh) 数据账户的访问授权方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20200212

Address after: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Applicant after: HUAWEI TECHNOLOGIES Co.,Ltd.

Address before: 210012 HUAWEI Nanjing base, 101 software Avenue, Yuhuatai District, Jiangsu, Nanjing

Applicant before: Huawei Technologies Co.,Ltd.

GR01 Patent grant
GR01 Patent grant