一种对写入块链的交易进行隐匿的方法及装置
技术领域
本说明书实施例涉及信息技术领域,尤其涉及一种对写入块链的交易进行隐匿的方法及装置。
背景技术
区块链网络是一种去中心化的、由多个节点参与的分布式数据存储系统。数据一旦被写入每个节点上的区块链,一方面,意味着数据在全网公开,另一方面,写入区块链的数据也难以被删除与篡改。基于此,在数据存证领域,区块链技术具有很大的应用前景。
此外,实践中,中心化设备也可以采用类区块链存储(可以视为中心化的区块链存储)的方式对数据进行存储,区块链中的区块与类区块链中的区块的生成原理相同。显然,如果要删除写入类区块链中的数据,除非中心化设备将存储的整个类区块链都删除。因此,中心化的类区块链存储也比较适合应用于数据存证业务。本文将区块链存储方式与其他中心化的类区块链存储方式统称为块链存储。
然而,在实际应用中,有些内容(本文称之为敏感内容)一旦被写入块链,就会造成难以消除的危害后果。
发明内容
为了解决敏感内容被写入块链容易造成危害后果的问题,本说明书实施例提供一种对写入块链的交易进行隐匿的方法及装置,技术方案如下:
根据本说明书实施例的第1方面,提供一种对写入块链的交易进行隐匿的方法,包括:
接收隐匿指令;所述隐匿指令包含目标交易标识;
获取所述隐匿指令的签名,并判断获取的签名是否满足指定条件;
若是,则根据所述隐匿指令,确定包括所述目标交易标识对应的交易的交易哈希的隐匿化数据,以及,将块链中对应于所述目标交易标识的交易替换成所述隐匿化数据;
若否,则拒绝所述隐匿指令。
根据本说明书实施例的第2方面,提供一种对写入块链的交易进行隐匿的装置,包括:
接收模块,接收隐匿指令;所述隐匿指令包含目标交易标识;
获取判断模块,获取所述隐匿指令的签名,并判断获取的签名是否满足指定条件;
第一处理模块,若是,则根据所述隐匿指令,确定包括所述目标交易标识对应的交易的交易哈希的隐匿化数据,以及,将块链中对应于所述目标交易标识的交易替换成所述隐匿化数据;
第二处理模块,若否,则拒绝所述隐匿指令。
本说明书实施例所提供的技术方案,如果写入块链的某个交易是敏感交易(包含有不宜公开的敏感内容),那么,可以将块链中的该交易替换成包括该交易的交易哈希的隐匿化数据。一方面,该交易的交易哈希是对该交易采用单向散列算法(即哈希算法)计算得到的,由该交易的交易哈希无法逆推出该交易,因此,将该交易替换成隐匿化数据,相当于将块链中公示的该交易的明文内容不可恢复地隐匿起来。另一方面,将该交易替换成隐匿化数据,并不会影响该交易所在区块对应的梅克尔树的稳定性,也就不会影响到针对其他交易(与该交易位于同一区块中的交易)的简单支付验证(Simplified PaymentVerification,SPV)的准确性,从而保证了数据存证业务的正常运行。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。
此外,本说明书实施例中的任一实施例并不需要达到上述的全部效果。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1是本说明提供的梅克尔树的结构示意图;
图2是本说明书实施例提供的一种对写入块链的交易进行隐匿的方法,的流程示意图;
图3是本说明书实施例提供的构造隐匿化数据的过程示意图;
图4是本说明书实施例提供的构造隐匿化数据的另一过程示意图;
图5是本说明书实施例提供的一种对写入块链的交易进行隐匿的方法的流程示意图;
图6是本说明书实施例提供的内容字段与标识字段的示意图;
图7是本说明书实施例提供的一种对写入区块链的交易进行隐匿的方法的流程示意图;
图8是本说明书实施例提供的一种包含非敏感内容的隐匿化数据的示意图;
图9是本说明书实施例提供的一种对写入块链的交易进行隐匿的方法的流程示意图;
图10是本说明书实施例提供的一种对写入块链的交易进行隐匿的方法的流程示意图;
图11是本说明书实施例提供的一种构建区块对应的梅克尔树的方法的流程示意图;
图12是本说明书实施例提供的一种对写入块链的交易进行隐匿的方法的流程示意图;
图13是本说明书实施例提供的另一种构建区块对应的梅克尔树的方法的流程示意图;
图14是本说明书实施例提供的一种简单支付验证方法的流程示意图;
图15是本说明书实施例提供的一种对写入块链的交易进行隐匿的装置的结构示意图;
图16是本说明苏实施例提供的一种对写入块链的交易进行隐匿的装置的结构示意图;
图17是本说明苏实施例提供的一种对写入块链的交易进行隐匿的装置的结构示意图;
图18是本说明苏实施例提供的一种对写入块链的交易进行隐匿的装置的结构示意图;
图19是本说明苏实施例提供的一种对写入块链的交易进行隐匿的装置的结构示意图;
图20是本说明书实施例提供的一种构建区块对应的梅克尔树的装置的结构示意图;
图21是本说明书实施例提供的一种简单支付验证装置的结构示意图;
图22是用于配置本说明书实施例装置的一种计算机设备的结构示意图。
具体实施方式
如前所述,在实际应用中,敏感内容一旦被写入块链,就会造成难以消除的危害后果。
例如,张三对李四进行诽谤,并将诽谤言论的文本文件上传到区块链网络进行存证,导致该文本文件被写入区块链,对李四的名誉造成不可消除的伤害。又如,A公司盗取B公司的商业机密,并将盗取的商业机密提交给采用类区块链存储方式的中心化设备进行存证,导致该商业机密被写入类区块链,为了消除危害,只能由中心化设备删除存储的整个类区块链,付出的代价过于巨大。
需要说明的是,在本说明书中所描述的交易(transaction),是指写入块链中的一笔数据。交易是区块链协议或类区块链协议中所约定的一种数据结构,一笔数据要存入块链,就需要被封装成交易。
在基于块链的数据存证场景下,交易一旦被写入块链,就难以删除与篡改。然而,在实际应用中,如果写入块链的交易后续被认定包含不宜公开的敏感内容,那么,如何在保证块链存储业务正常运行的前提下,写入块链的敏感内容不再公开,就成为一个难以解决的技术问题。
需要说明的是,假设将写入块链的敏感交易(包含敏感内容的交易)直接删除,那么很容易导致基于块链所运行的数据存证业务无法正常运行。原因具体为:
常见的块链技术(区块链或中心化的类区块链)往往支持简单支付SPV验证。SPV是指针对某个交易,验证该交易是否已写入块链。SPV的原理是,验证请求方向数据存储方(区块链节点或中心化设备)请求验证某个交易(称为目标交易)是否已写入块链,数据存储方首先会定位所述目标交易所在的区块(称为目标区块),然后基于目标区块中的各交易构建梅克尔树(Merkle trees),然后确定目标交易对应的梅克尔路径,并将目标交易对应的梅克尔路径所关联的哈希值返回给验证请求方。验证请求方会数据存储方返回的哈希值,验证目标交易对应的梅克尔路径是否正确,即根据目标交易的交易哈希与数据存储方返回的哈希值,依照所述目标交易对应的梅克尔路径,计算梅克尔树的根哈希,并判断计算得到的根哈希与目标区块的区块头中的根哈希是否一致,如果一致,就认定验证通过,证明目标交易确实已经被写入块链中。
图1是本说明提供的梅克尔树的结构示意图。如图1所示,在梅克尔树中,各叶子节点与目标区块中存储的各交易一一对应。每个叶子节点上的哈希值是对相应的交易进行哈希运算得到的交易哈希。而针对每个父节点,该父节点上的哈希值是对该父节点的两个子节点上的哈希值进行哈希运算得到的。
假设目标交易交易1。验证请求方需要验证交易1是否被写入块链中。于是,验证请求方向任一数据存储方发送请求,数据存储方首先会确定目标区块并构建出如图1所示的梅克尔树。然后,数据存储方会确定交易1对应的梅克尔路径所关联的哈希值为Hash2、Hash10、Hash14,并将Hash2、Hash10、Hash14返回给验证请求方。验证请求方根据Hash1(交易1的交易哈希)、Hash2、Hash10、Hash14,依照交易1对应的梅克尔路径,就可以计算得到梅克尔树的根哈希,然后,验证请求方若发现计算得到的根哈希与目标区块的区块头中存储的根哈希一致,就认定交易1确实已经被写入块链。
显然,在触发针对目标交易的简单支付验证之前,数据存储方通常需要基于目标区块中的各交易构建梅克尔树。这样,才能把目标交易对应的梅克尔路径所关联的哈希值返回给验证请求方,从而针对目标交易进行SPV。这也意味着,交易1~交易8中的任一交易被篡改或被删除,梅克尔树的根哈希(即Hash1-8)就会发生改变,从而导致简单支付验证失败。
例如,如图1所示,交易2包含敏感内容,如果直接将交易2从块链中删除,那么,当需要针对交易1、交易3~8中的任一交易进行简单支付验证时,由于缺少交易2,只能基于交易1、交易3~8构建梅克尔树,如此,构建的梅克尔树的根哈希与目标区块的区块头中存储的根哈希是不一致的,会导致简单支付验证失败,得出交易1、交易3~8都未上链的错误结论。
为此,本发明可以在对块链系统中的简单支付验证不构成干扰的前提下,实现了对块链中某个交易的隐匿。本发明的核心技术手段是将块链中需要被隐匿的交易(敏感交易)替换成包含该交易的交易哈希的隐匿化数据。如此,既可以停止公开该交易的明文内容,又不会干扰到基于块链的简单支付验证体系的平稳运行。
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
以下结合附图,详细说明本说明书各实施例提供的技术方案。
实施例一
图2是本说明书实施例提供的一种对写入块链的交易进行隐匿的方法,的流程示意图,包括以下步骤:
S200:接收隐匿指令。
本发明所应用的场景为基于块链的数据存证场景。在此场景下,由包括多个节点的区块链网络对数据进行块链式的分布式存证,或者,由中心化设备对数据进行块链式的中心化存证。
在区块链场景下,本方法的执行主体可以是各区块链节点;在类区块链场景下,本方法的执行主体可以是中心化设备。
在本说明书中,隐匿指令包含目标交易标识,所述目标交易标识一般是包含敏感内容的敏感交易的交易标识。当然,图1所示的方法也可以对写入块链的非敏感交易进行隐匿,因此,所述目标交易标识理论上可以是任一交易的交易标识。
需要说明的是,交易的交易标识用于唯一标识交易。具体地,交易的交易标识可以是对交易进行哈希运算后得到的交易哈希,也可以是为交易分配的唯一编号。
在步骤S200中,隐匿指令可以是某个用户发出的。该用户可以是上传敏感内容的用户,也可以是有权要求隐匿敏感内容的主体(如法院、受害人等)。
在区块链场景下,各区块链节点接收隐匿指令,具体可以是:各区块链节点接收封装有隐匿指令的隐匿交易。各区块链节点以执行所述隐匿交易的方式执行隐匿指令,待隐匿交易执行完毕后,各区块链节点会将隐匿交易也写入区块链进行存证。
S202:根据所述隐匿指令,确定隐匿化数据。
在本说明书中,隐匿化数据至少包括目标交易标识对应的交易的交易哈希。
S204:将块链中对应于所述目标交易标识的交易替换成所述隐匿化数据。
在本说明书中,将块链中对应于所述目标交易标识的交易替换成所述隐匿化数据,具体可以是:
首先确定块链中所述目标交易标识对应的交易所在的区块(称为目标区块),然后将目标区块中所述目标交易标识对应的交易存储位置所存储的交易更换为所述隐匿化数据。
块链实际上是由多个区块按照成块的时间先后顺序连接成的存储结构。对于每个区块而言,该区块中存在多个交易存储位置。所谓交易存储位置,是指区块中用于存储交易的存储空间或存储地址。假设块链中写入了100个交易,那么,区块链中也同时有100个交易存储位置,分别用于存储这100个交易。
在本说明书中,可以根据所述目标交易标识,在块链中进行遍历,以搜索所述目标交易标识对应的交易,也就是定位到所述目标交易标识对应的交易所在的交易存储位置。随后,从定位到的交易存储位置删除所述目标交易标识对应的交易,并向定位到的交易存储位置存入隐匿化数据。
进一步地,由于根据目标交易标识在区块链中以遍历的方式定位交易效率较低,因此,在本说明书中,可以预先针对写入块链的任一交易,在块链之外,另行记录该交易的交易标识与块链中该交易所在的交易存储位置之间的对应关系。
其中,针对写入块链的任一交易,块链中该交易所在的交易存储位置,一般是该交易所在的区块的高度(即区块链中区块的顺位号)以及该交易在区块中的偏移量。例如,打包有交易A的区块被写入到区块链中第4个区块之后,即打包有交易A的区块的高度是5,并且,交易A在区块中的偏移量为120,则交易A对应的交易存储位置可以是(5,120)。
在本说明书中,在类区块链的场景下,中心化设备还可以将所述隐匿指令封装成隐匿交易写入块链。
此外,在区块链或类区块链的场景下,写入块链的隐匿交易不仅封装有隐匿指令,还封装有所述隐匿化数据的数据哈希。
通过图2所述的方法,可以实现对写入块链中的敏感内容的隐匿。并且,由于对敏感内容的隐匿方式为将包含敏感内容的敏感交易替换成包含敏感交易的交易哈希的隐匿化数据,因此,并不会对正常的SPV产生影响。
此外,所述隐匿化数据除了包括所述目标交易标识对应的交易的交易哈希之外,还可以包括更多信息。
具体地,图3是本说明书实施例提供的构造隐匿化数据的过程示意图。每个节点在构造隐匿化数据时,可以获取所述目标交易标识对应的交易的交易哈希;将预设的前标记字符拼接到所述交易哈希的首部;根据所述前标记字符与所述交易哈希拼接成的数据,确定所述隐匿化数据。
上述的前标记字符的作用是,当针对某个交易存储位置进行数据读取时,如果该交易存储位置的交易已经被替换成了隐匿化数据,那么,读取到所述隐匿化数据中的前标记字符时,相当于明确:“该交易存储位置所存储的不是交易的明文内容,而是交易哈希”。
由于交易哈希一般是固定长度的字符串,因此,还可以进一步在隐匿化数据中交易哈希之后增加备注信息。这样,当读取完所述隐匿化数据中的交易哈希之后,所述隐匿化数据中剩余的部分即是备注信息。
需要说明的是,所述备注信息具体可以是为实现特定业务需要所添加的信息。例如,所述备注信息可以是“hidden”,表明所述目标交易标识对应的交易已经被隐匿。当用户查询所述目标交易标识对应的交易时,所述备注信息可以提示用户交易是不可见的。
进一步地,图4是本说明书实施例提供的构造隐匿化数据的另一过程示意图。在构造隐匿化数据时,可以获取所述目标交易标识对应的交易的交易哈希;将预设的前标记字符拼接到所述交易哈希的首部,将预设的后标记字符拼接到所述交易哈希的尾部,并且,将备注信息拼接到所述后标记字符的尾部;然后,将所述前标记字符、所述交易哈希、所述后标记字符以及所述备注信息拼接成的数据确定为所述隐匿化数据。
上述的后标记字符的作用是,当隐匿化数据中包括备注信息(或后文提及的非敏感内容)时,不需要根据交易哈希的固定长度值进行数据读取,而是使用后标记字符将隐匿化数据中的交易哈希与备注信息(非敏感内容)进行区隔,以便进行区分。
需要说明的是,上述的前标记字符与后标记字符可以根据实际需要进行指定。例如,所述前标记字符可以为“0E”,所述后标记字符可以为“0F”。
实施例二
在本说明书中,所述隐匿化数据中也可以不包括实施例一中所述的前标记字符以及后标记字符,而是采用其他手段对某个交易存储位置上存储的是交易还是隐匿化数据进行标记。
具体地,预先针对块链中的每个交易存储位置,在该交易存储位置创设内容字段和标识字段,内容字段用于存储交易或基于所述交易生成的隐匿化数据,标识字段用于存储第一标识符或第二标识符,对该内容字段中是交易还是隐匿化数据进行标识。
其中,当所述内容字段包括交易时,所述标识字段包括第一标识符,当所述内容字段包括基于所述交易生成的隐匿化数据时,所述标识字段包括第二标识符。
图5是本说明书实施例提供的另一种对写入块链的交易进行隐匿的方法的流程示意图,包括如下步骤:
S500:接收包含目标交易标识隐匿指令,并确定存储所述目标交易标识对应的交易的交易存储位置,作为目标交易存储位置。
在本说明书中,针对块链中的每个交易存储位置,该交易存储位置存储有内容字段以及标识字段,若所述内容字段包含交易,则所述标识字段包含第一标识符。
S502:根据所述隐匿指令,确定隐匿化数据。
S504:将所述目标交易存储位置的内容字段中的交易替换成所述隐匿化数据。
S506:将所述目标交易存储位置的标识字段中的第一标识符替换成第二标识符。
例如,所述第一标识符可以占用两个字节的“FF”,所述第二标识符可以是占用两个字节的“00”。
此处对实施例二的有益效果进行分析。在实施例一中,采用在所述隐匿化数据中的交易哈希之前拼接前标记字符的方式,来对某个交易存储位置上存储的是交易还是隐匿化数据进行标记区分。
但是,实践中,为了避免隐匿化数据中的交易哈希与前标记字符产生“哈希碰撞”(即节点或中心化设备在执行交易隐匿逻辑时,无法区分从交易存储位置读取的字符是前标记字符还是交易哈希中的字符),通常会将前标记字符设置为理论上不会与交易哈希重复的特殊字符,这样的特殊字符一般很长(占用很多字节),给从交易存储位置上读取数据的节点或中心化设备带来很大的负担。
为此,如果采用实施例二中的方式,不再使用前标记字符与交易哈希进行拼接,而是在交易存储位置上划分出两个独立的字段,即内容字段与标识字段,内容字段用于存储交易或交易被隐匿后替换成的隐匿化数据,标识字段存储用于标识内容字段中是交易还是隐匿化数据的标识符。这样,只需要在标识字段中写入较短的标识符,就可以实现对某个交易存储位置上存储的是交易还是隐匿化数据的标记区分。
图6是本说明书实施例提供的内容字段与标识字段的示意图。如图6所示,假设目标区块中的交易存储位置1的内容字段存储的是交易,交易存储位置2的内容字段存储的是隐匿化数据,那么,可以根据标识字段进行识别。
实施例三
基于实施例一与实施例二,还可以对隐匿化数据的构成进行优化。
图7是本说明书实施例提供的另一种对写入区块链的交易进行隐匿的方法的流程示意图,包括以下步骤:
S700:接收隐匿指令。
在本说明书中,所述隐匿指令具体可以包括目标交易标识与隐匿条件。其中,所述隐匿条件用于确定所述目标交易标识对应的交易中的敏感内容。
进一步地,所述隐匿条件可以是敏感位置信息,用于表征敏感内容在所述目标交易标识对应的交易中所处的位置。例如,所述敏感位置信息可以是字节范围信息(1,6),表示目标交易标识对应的交易中第1个字节到第6个字节的内容是敏感内容。
S702:获取所述目标交易标识对应的交易的交易哈希,并根据所述隐匿指令包括的隐匿条件,从所述目标交易标识对应的交易中提取非敏感内容。
所述非敏感内容是所述目标交易标识对应的交易中除敏感内容以外的内容。
S704:根据所述交易哈希与所述非敏感内容,确定隐匿化数据。
在步骤S704中,所述隐匿化数据可以只包括所述交易哈希与所述非敏感内容。由于交易哈希一般是固定长度的,因此,一般不会出现交易哈希与所述非敏感内容的混淆。
此外,可以结合实施例一,存在以下几种情况:
1、所述隐匿化数据中还可以包括前标记字符。
2、所述隐匿化数据中还可以包括前标记字符、后标记字符。
其中,后标记字符可以用于将所述交易哈希与所述非敏感内容进行区隔。
3、所述隐匿化数据中还可以包括前标记字符、第一后标记字符、第二后标记字符、备注信息。
其中,第一后标记字符可以用于将所述交易哈希与所述非敏感内容进行区隔,第二后标记字符可以用于将所述非敏感内容与所述备注信息进行区隔。
S706:将块链中对应于所述目标交易标识的交易替换成所述隐匿化数据。
如此,可以在隐匿所述目标交易标识对应的交易中的敏感内容的前提下,保留所述目标交易标识对应的交易中的非敏感内容,如图8所示。
实施例四
基于实施例三,还可以对所述隐匿化数据的生成方法进行进一步优化。
图9是本说明书实施例提供的一种对写入块链的交易进行隐匿的方法的流程示意图,包括如下步骤:
S900:接收隐匿指令。
S902:获取所述目标交易标识对应的交易的交易哈希,并根据所述隐匿指令包括的隐匿条件,从所述目标交易标识对应的交易中提取非敏感内容。
S904:基于预设的表述方式调整模型,调整所述非敏感内容的表述方式,并根据所述交易哈希与调整后的所述非敏感内容,确定隐匿化数据。
S906:将块链中对应于所述目标交易标识的交易替换成所述隐匿化数据。
其中,所述表述方式调整模型具体可以是预设的表述方式调整规则,例如,所述表述方式调整规则可以是:如果非敏感内容中存在汉字,则将该汉字替换成拼音。又如,所述表述方式调整规则可以是:如果非敏感内容中存在大写英文字母,则将至少一个大写英文字母替换成小写英文字母。
所述表述方式调整模型具体也可以是预先根据机器学习算法训练的智能模型。
总之,所述表述方式调整模型的作用在于,对所述非敏感内容表述方式进行调整,使得调整后的非敏感内容所传达的信息在调整前的非敏感内容所传达的信息的涵盖范围内。
优选地,调整后的非敏感内容所传达的信息与调整前的非敏感内容所传达的信息可以一致,即非敏感内容的表述方式经过调整后,所传达的信息并未丢失。
为了杜绝这种情况出现,对写入隐匿化数据中的非敏感内容的表述方式进行调整,就可以使得不论如何尝试,都无法根据调整后的非敏感内容破解出被隐匿的敏感内容。
实施例五
基于上述的实施例一~四,可以引入权限验证机制。
图10是本说明书实施例提供的一种对写入块链的交易进行隐匿的方法的流程示意图,包括如下步骤:
S1000:接收隐匿指令;
S1002:获取所述隐匿指令的签名,并判断获取的签名是否满足指定条件,若是,则执行步骤S804,若否,则执行步骤S806。
S1004:根据所述隐匿指令,确定包括所述目标交易标识对应的交易的交易哈希的隐匿化数据,以及,将块链中对应于所述目标交易标识的交易替换成所述隐匿化数据。
S1006:拒绝所述隐匿指令。
在实际应用中,可以要求所述隐匿指令必须具有满足指定条件的签名。各区块链节点或中心化设备当确定隐匿指令的签名满足指定条件时,才会执行所述隐匿指令。
具体地,所述指定条件可以包括但不限于以下三种情况:
1、若所述目标交易标识对应的交易是写入区块链的交易,则所述隐匿指令的签名为区块链节点的签名。此时,所述指定条件为获取的签名的数量大于指定数量。
例如,区块链网络中有10个节点,可以将所述指定数量设置为5,则所述隐匿指令必须得到多于5个节点的认可才有效。
2、若所述目标交易标识对应的交易是写入类区块链的交易,则所述指定条件为获取的签名包括至少两个权限方的签名。
具体而言,实践中,权限方可以包括法院、中心化设备的控制方、中心化设备的数据存证服务所针对的业务方等。
3、预先为每个权限方的签名分配权重。若所述目标交易标识对应的交易是写入类区块链的交易,则所述指定条件为获取的各签名分别对应的权重之和大于指定权重。
例如,可以为法院分配100的权重,为中心化设备的控制方分配50的权重,为业务方分配40的权重。同时,将指定权重设置为60。
实施例六
基于实施例一~五中的方法,本说明书实施例提供的一种构建区块对应的梅克尔树的方法,如图11所示,包括:
S1100:针对目标区块中的每个交易存储位置,从该交易存储位置读取数据。
S1102:若确定从该交易存储位置读取的数据包括交易,则对读取的数据所包括的交易进行哈希计算,得到该交易存储位置对应的交易哈希。
S1104:若确定从该交易存储位置读取的数据包括隐匿化数据,则从读取的数据所包括的隐匿化数据中提取交易哈希,作为该交易存储位置对应的交易哈希。
S1106:基于所述目标区块中各交易存储位置分别对应的交易哈希,构建所述目标区块对应的梅克尔树。
实施例七
基于实施例六,在将目标交易标识对应的交易进行隐匿之后,还可以进一步将所述目标交易标识对应的交易所在的区块的标签确定为指定标签。
在本说明书中,块链中的至少部分区块可以具有标签,用于标注该区块中存在至少一个被隐匿的交易。
具体地,可以约定指定标签用于表征区块中存在至少一个被隐匿的交易。在将对应于所述目标交易标识的交易替换成所述隐匿化数据之后,可以判断所述目标交易标识对应的交易所在的区块(目标区块)的标签是否有标签,如果没有标签,就为目标区块分配指定标签。如果有标签,进一步判断是否为指定标签。如果是指定标签,说明所述目标区块中除了所述目标交易标识对应的交易之外,还存在其他已经被隐匿的敏感交易,则不需要对目标区块的标签进行变动;如果不是指定标签,说明目标区块未包含隐匿化数据,则需要将目标区块的标签修改为指定标签。
如此,块链中的区块的标签不是1就是0。如果所述指定标签是1,则当区块包含隐匿化数据时,其标签是1,当区块不包含隐匿化数据时,其标签是0。如果所述指定标签是0,则当区块包含隐匿化数据时,其标签是0,当区块不包含隐匿化数据时,其标签是1。
将所述目标交易标识对应的交易所在的区块的标签确定为指定标签的作用在于,减轻区块链节点或中心化设备的计算负担。具体而言,倘若不对包含隐匿化数据的区块进行标注,那么,如图11所示的方法,当需要针对目标区块构建梅克尔树时,区块链节点或中心化设备并不明确目标区块中是否包含隐匿化数据,于是,就不得不依次针对所述目标区块中的每个交易存储位置,判断该交易存储位置上存储的是交易还是隐匿化数据,从而采用不同的策略得到该交易存储位置对应的交易哈希。当需要构建梅克尔树的区块很多,而被隐匿的敏感交易很少时,如果针对每个区块都执行如图11所示的方法,那么会浪费很多计算资源。
而在实施例七中,可以在开始构建任一区块对应的梅克尔树之前,首先根据该区块的标签判断该区块是否包含隐匿化数据,如此,可以当目标区块中不存在被隐匿的敏感交易时,采用默认方式构建目标区块对应的默克尔树(而不是采用图11所示的方式),节省计算资源。
图12是本说明书实施例提供的一种对写入块链的交易进行隐匿的方法的流程示意图,包括如下步骤:
S1200:接收隐匿指令。
S1202:根据所述隐匿指令,确定隐匿化数据。
S1204:将块链中对应于所述目标交易标识的交易替换成所述隐匿化数据。
S1206:将所述目标交易标识对应的交易所在的区块的标签确定为指定标签。
图13是本说明书实施例提供的另一种构建区块对应的梅克尔树的方法的流程示意图,包括如下步骤:
S1300:针对块链中的目标区块,获取所述目标区块的标签。
S1302:若所述目标区块的标签是指定标签,则针对所述目标区块中的每个交易存储位置,从该交易存储位置读取数据。
S1304:若确定从该交易存储位置读取的数据包括交易,则对读取的数据所包括的交易进行哈希计算,得到该交易存储位置对应的交易哈希。
S1306:若确定从该交易存储位置读取的数据包括隐匿化数据,则从读取的数据所包括的隐匿化数据中提取交易哈希,作为该交易存储位置对应的交易哈希。
S1308:基于所述目标区块中各交易存储位置分别对应的交易哈希,构建所述目标区块对应的梅克尔树。
进一步地,针对所述目标区块中的每个交易存储位置,若该交易存储位置读取的数据不包括所述前标记字符,则确定从该交易存储位置读取的数据包括交易;若从该交易存储位置读取的数据包括所述前标记字符,则确定从该交易存储位置读取的数据包括隐匿化数据。
或者,若从该交易存储位置读取的数据中的标识字段包括第一标识符,则确定从该交易存储位置读取的数据包括交易;若从该交易存储位置读取的数据中的标识字段包括第二标识符,则确定从该交易存储位置读取的数据包括隐匿化数据。
在实施例七中,从读取的数据所包括的隐匿化数据中提取交易哈希的方式具体可以是,将读取的数据所包括的隐匿化数据中位于所述前标记字符之后的数据确定为交易哈希并提取;或,将读取的数据所包括的隐匿化数据中位于所述前标记字符之后的指定长度的数据确定为交易哈希并提取。
其中,所述指定长度为交易哈希的固定长度。
在实施例七中,也可以将读取的数据所包括的隐匿化数据中位于所述前标记字符与所述后标记字符之间的数据确定为交易哈希并提取。
在实施例七中,若所述目标区块的标签不是指定标签,则采用默认方式构建所述目标区块对应的梅克尔树。
在实施例七中,进一步地,可以预先创建一个二进制数串,假设块链包括N个区块,那么所述二进制数串至少有N个二进制位,二进制数串的第i个二进制位的值为块链中的第i个区块的标签,i∈[1,N]。
如此,获取所述目标区块的标签方式可以是,确定所述目标区块的序号M;从所述二进制数串中读取第M个二进制位的值,作为所述目标区块的标签。
图14是本说明书实施例提供的一种简单支付验证方法的流程示意图,包括如下步骤:
S1400:接收验证请求;所述验证请求包含目标交易标识;
S1402:根据所述验证请求,在自身的区块链中确定所述目标交易标识对应的交易所在的区块,并基于图11或图13所示的方法构建所述区块对应的梅克尔树;
S1404:基于构建的梅克尔树,针对所述目标交易标识对应的交易进行简单支付验证。
图15是本说明书实施例提供的一种对写入块链的交易进行隐匿的装置的结构示意图,针对块链中的每个交易存储位置,该交易存储位置存储有内容字段以及标识字段,若所述内容字段包含交易,则所述标识字段包含第一标识符,所述装置包括:
接收模块1501,接收包含目标交易标识隐匿指令,并确定存储所述目标交易标识对应的交易的交易存储位置,作为目标交易存储位置;
确定模块1502,根据所述隐匿指令,确定隐匿化数据;所述隐匿化数据包括所述目标交易标识对应的交易的交易哈希;
处理模块1503,将所述目标交易存储位置的内容字段中的交易替换成所述隐匿化数据,以及,将所述目标交易存储位置的标识字段中的第一标识符替换成第二标识符。
所述隐匿指令还包括隐匿条件,用于确定所述目标交易标识对应的交易中的敏感内容;
所述确定模块1502,获取所述目标交易标识对应的交易的交易哈希,并根据所述隐匿指令包括的隐匿条件,从所述目标交易标识对应的交易中提取非敏感内容;根据所述交易哈希与所述非敏感内容,确定隐匿化数据。
所述隐匿条件为敏感位置信息,用于表征敏感内容在所述目标交易标识对应的交易中所处的位置。
所述确定模块1502,将预设的后标记字符拼接到所述交易哈希的尾部;将所述非敏感内容拼接到所述后标记字符的尾部;将所述交易哈希、所述后标记字符与所述非敏感内容拼接成的数据确定为隐匿化数据。
所述确定模块1502,基于预设的表述方式调整模型,调整所述非敏感内容的表述方式;根据所述交易哈希与调整后的所述非敏感内容,确定隐匿化数据。
所述确定模块1502,获取所述隐匿指令的签名,并判断获取的签名是否满足指定条件;若是,则根据所述隐匿指令,确定隐匿化数据;若否,则拒绝所述隐匿指令。
若所述目标交易标识对应的交易是写入区块链的交易,则所述隐匿指令的签名为区块链节点的签名,并且,所述指定条件为获取的签名的数量大于指定数量。
若所述目标交易标识对应的交易是写入类区块链的交易,则所述指定条件为获取的签名包括至少两个权限方的签名。
每个权限方的签名分配有权重;
若所述目标交易标识对应的交易是写入类区块链的交易,则所述指定条件为获取的各签名分别对应的权重之和大于指定权重。
所述装置还包括:
交易写入模块1504,将封装有所述隐匿指令的隐匿交易写入块链。
所述交易写入模块1504,将封装有所述隐匿指令与所述隐匿化数据的数据哈希的隐匿交易写入块链。
所述装置还包括:
标签确定模块1505,将所述目标交易标识对应的交易所在的区块的标签确定为指定标签。
针对块链中的任一区块,若该区块未包含隐匿化数据,则该区块的标签不是所述指定标签。
设块链包括N个区块,预先创建的二进制数串的第i个二进制位的值为块链中的第i个区块的标签,i∈[1,N]。
图16是本说明苏实施例提供的一种对写入块链的交易进行隐匿的装置的结构示意图,包括:
接收模块1601,接收隐匿指令;所述隐匿指令包含目标交易标识与隐匿条件,所述隐匿条件用于确定所述目标交易标识对应的交易中的敏感内容;
获取提取模块1602,获取所述目标交易标识对应的交易的交易哈希,并根据所述隐匿指令包括的隐匿条件,从所述目标交易标识对应的交易中提取非敏感内容;
确定模块1603,根据所述交易哈希与所述非敏感内容,确定隐匿化数据;
处理模块1604,将块链中对应于所述目标交易标识的交易替换成所述隐匿化数据。
针对块链中的每个交易存储位置,该交易存储位置存储有内容字段以及标识字段,所述内容字段包括交易或基于所述交易生成的隐匿化数据;
其中,当所述内容字段包括交易时,所述标识字段包括第一标识符,当所述内容字段包括基于所述交易生成的隐匿化数据时,所述标识字段包括第二标识符。
所述隐匿条件为敏感位置信息,用于表征敏感内容在所述目标交易标识对应的交易中所处的位置。
所述确定模块1603,将预设的后标记字符拼接到所述交易哈希的尾部;将所述非敏感内容拼接到所述后标记字符的尾部;将所述交易哈希、所述后标记字符与所述非敏感内容拼接成的数据确定为隐匿化数据。
所述确定模块1603,基于预设的表述方式调整模型,调整所述非敏感内容的表述方式;根据所述交易哈希与调整后的所述非敏感内容,确定隐匿化数据。
所述确定模块1603,获取所述隐匿指令的签名,并判断获取的签名是否满足指定条件;若是,则根据所述隐匿指令,确定隐匿化数据;若否,则拒绝所述隐匿指令。
若所述目标交易标识对应的交易是写入区块链的交易,则所述隐匿指令的签名为区块链节点的签名,并且,所述指定条件为获取的签名的数量大于指定数量。
若所述目标交易标识对应的交易是写入类区块链的交易,则所述指定条件为获取的签名包括至少两个权限方的签名。
每个权限方的签名分配有权重;
若所述目标交易标识对应的交易是写入类区块链的交易,则所述指定条件为获取的各签名分别对应的权重之和大于指定权重。
所述装置还包括:
标签确定模块1605,将所述目标交易标识对应的交易所在的区块的标签确定为指定标签。
针对块链中的任一区块,若该区块未包含隐匿化数据,则该区块的标签不是所述指定标签。
设块链包括N个区块,预先创建的二进制数串的第i个二进制位的值为块链中的第i个区块的标签,i∈[1,N]。
所述装置还包括:
交易写入模块1606,将封装有所述隐匿指令的隐匿交易写入块链。
所述交易写入模块1606,将封装有所述隐匿指令与所述隐匿化数据的数据哈希的隐匿交易写入块链。
图17是本说明苏实施例提供的一种对写入块链的交易进行隐匿的装置的结构示意图,包括:
接收模块1701,接收隐匿指令;所述隐匿指令包含目标交易标识与隐匿条件,所述隐匿条件用于确定所述目标交易标识对应的交易中的敏感内容;
获取提取模块1702,获取所述目标交易标识对应的交易的交易哈希,并根据所述隐匿指令包括的隐匿条件,从所述目标交易标识对应的交易中提取非敏感内容;
调整确定模块1703,基于预设的表述方式调整模型,调整所述非敏感内容的表述方式,并根据所述交易哈希与调整后的所述非敏感内容,确定隐匿化数据;
处理模块1704,将块链中对应于所述目标交易标识的交易替换成所述隐匿化数据。
针对块链中的每个交易存储位置,该交易存储位置存储有内容字段以及标识字段,所述内容字段包括交易或基于所述交易生成的隐匿化数据;
其中,当所述内容字段包括交易时,所述标识字段包括第一标识符,当所述内容字段包括基于所述交易生成的隐匿化数据时,所述标识字段包括第二标识符。
所述隐匿条件为敏感位置信息,用于表征敏感内容在所述目标交易标识对应的交易中所处的位置。
所述调整确定模块1703,将预设的后标记字符拼接到所述交易哈希的尾部;将调整后的所述非敏感内容拼接到所述后标记字符的尾部;将所述交易哈希、所述后标记字符与调整后的所述非敏感内容拼接成的数据确定为隐匿化数据。
所述调整确定模块1703,获取所述隐匿指令的签名,并判断获取的签名是否满足指定条件;若是,则根据所述隐匿指令,确定隐匿化数据;若否,则拒绝所述隐匿指令。
若所述目标交易标识对应的交易是写入区块链的交易,则所述隐匿指令的签名为区块链节点的签名,并且,所述指定条件为获取的签名的数量大于指定数量。
若所述目标交易标识对应的交易是写入类区块链的交易,则所述指定条件为获取的签名包括至少两个权限方的签名。
每个权限方的签名分配有权重;
若所述目标交易标识对应的交易是写入类区块链的交易,则所述指定条件为获取的各签名分别对应的权重之和大于指定权重。
所述装置还包括:
标签确定模块1705,将所述目标交易标识对应的交易所在的区块的标签确定为指定标签。
针对块链中的任一区块,若该区块未包含隐匿化数据,则该区块的标签不是所述指定标签。
设块链包括N个区块,预先创建的二进制数串的第i个二进制位的值为块链中的第i个区块的标签,i∈[1,N]。
所述装置还包括:
交易写入模块1706,将封装有所述隐匿指令的隐匿交易写入块链。
所述交易写入模块1706,将封装有所述隐匿指令与所述隐匿化数据的数据哈希的隐匿交易写入块链。
图18是本说明苏实施例提供的一种对写入块链的交易进行隐匿的装置的结构示意图,包括:
接收模块1801,接收隐匿指令;所述隐匿指令包含目标交易标识;
获取判断模块1802,获取所述隐匿指令的签名,并判断获取的签名是否满足指定条件;
第一处理模块1803,若是,则根据所述隐匿指令,确定包括所述目标交易标识对应的交易的交易哈希的隐匿化数据,以及,将块链中对应于所述目标交易标识的交易替换成所述隐匿化数据;
第二处理模块1804,若否,则拒绝所述隐匿指令。
若所述目标交易标识对应的交易是写入区块链的交易,则所述隐匿指令的签名为区块链节点的签名,并且,所述指定条件为获取的签名的数量大于指定数量。
若所述目标交易标识对应的交易是写入类区块链的交易,则所述指定条件为获取的签名包括至少两个权限方的签名。
每个权限方的签名分配有权重;
若所述目标交易标识对应的交易是写入类区块链的交易,则所述指定条件为获取的各签名分别对应的权重之和大于指定权重。
所述第一处理模块1803,获取所述目标交易标识对应的交易的交易哈希;将预设的前标记字符拼接到所述交易哈希的首部;根据所述前标记字符与所述交易哈希拼接成的数据,确定隐匿化数据。
所述第一处理模块1803,将预设的后标记字符拼接到所述交易哈希的尾部,并且,将备注信息拼接到所述后标记字符的尾部;将所述前标记字符、所述交易哈希、所述后标记字符以及所述备注信息拼接成的数据确定为隐匿化数据。
针对块链中的每个交易存储位置,该交易存储位置存储有内容字段以及标识字段,所述内容字段包括交易或基于所述交易生成的隐匿化数据;
其中,当所述内容字段包括交易时,所述标识字段包括第一标识符,当所述内容字段包括基于所述交易生成的隐匿化数据时,所述标识字段包括第二标识符。
所述隐匿指令还包括隐匿条件,用于确定所述目标交易标识对应的交易中的敏感内容;
所述第一处理模块1803,获取所述目标交易标识对应的交易的交易哈希,并根据所述隐匿指令包括的隐匿条件,从所述目标交易标识对应的交易中提取非敏感内容;根据所述交易哈希与所述非敏感内容,确定隐匿化数据。
所述隐匿条件为敏感位置信息,用于表征敏感内容在所述目标交易标识对应的交易中所处的位置。
所述第一处理模块1803,将预设的后标记字符拼接到所述交易哈希的尾部;将所述非敏感内容拼接到所述后标记字符的尾部;将所述交易哈希、所述后标记字符与所述非敏感内容拼接成的数据确定为隐匿化数据。
所述第一处理模块1803,基于预设的表述方式调整模型,调整所述非敏感内容的表述方式;根据所述交易哈希与调整后的所述非敏感内容,确定隐匿化数据。
所述装置还包括:
标签确定模块1805,将所述目标交易标识对应的交易所在的区块的标签确定为指定标签。
针对块链中的任一区块,若该区块未包含隐匿化数据,则该区块的标签不是所述指定标签。
设块链包括N个区块,预先创建的二进制数串的第i个二进制位的值为块链中的第i个区块的标签,i∈[1,N]。
所述装置还包括:
交易写入模块1806,将封装有所述隐匿指令的隐匿交易写入块链。
所述交易写入模块1806,将封装有所述隐匿指令与所述隐匿化数据的数据哈希的隐匿交易写入块链。
图19是本说明苏实施例提供的一种对写入块链的交易进行隐匿的装置的结构示意图,包括:
接收模块1901,接收隐匿指令;所述隐匿指令包含目标交易标识;
确定模块1902,根据所述隐匿指令,确定隐匿化数据;所述隐匿化数据包括所述目标交易标识对应的交易的交易哈希;
处理模块1903,将块链中对应于所述目标交易标识的交易替换成所述隐匿化数据,以及,将所述目标交易标识对应的交易所在的区块的标签确定为指定标签。
所述确定模块1902,获取所述目标交易标识对应的交易的交易哈希;将预设的前标记字符拼接到所述交易哈希的首部;根据所述前标记字符与所述交易哈希拼接成的数据,确定隐匿化数据。
所述确定模块1902,将预设的后标记字符拼接到所述交易哈希的尾部,并且,将备注信息拼接到所述后标记字符的尾部;将所述前标记字符、所述交易哈希、所述后标记字符以及所述备注信息拼接成的数据确定为隐匿化数据。
针对块链中的每个交易存储位置,该交易存储位置存储有内容字段以及标识字段,所述内容字段包括交易或基于所述交易生成的隐匿化数据;
其中,当所述内容字段包括交易时,所述标识字段包括第一标识符,当所述内容字段包括基于所述交易生成的隐匿化数据时,所述标识字段包括第二标识符。
所述隐匿指令还包括隐匿条件,用于确定所述目标交易标识对应的交易中的敏感内容;
所述确定模块1902,获取所述目标交易标识对应的交易的交易哈希,并根据所述隐匿指令包括的隐匿条件,从所述目标交易标识对应的交易中提取非敏感内容;根据所述交易哈希与所述非敏感内容,确定隐匿化数据。
所述隐匿条件为敏感位置信息,用于表征敏感内容在所述目标交易标识对应的交易中所处的位置。
所述确定模块1902,将预设的后标记字符拼接到所述交易哈希的尾部;将所述非敏感内容拼接到所述后标记字符的尾部;将所述交易哈希、所述后标记字符与所述非敏感内容拼接成的数据确定为隐匿化数据。
所述确定模块1902,基于预设的表述方式调整模型,调整所述非敏感内容的表述方式;根据所述交易哈希与调整后的所述非敏感内容,确定隐匿化数据。
所述确定模块1902,获取所述隐匿指令的签名,并判断获取的签名是否满足指定条件;若是,则根据所述隐匿指令,确定隐匿化数据;若否,则拒绝所述隐匿指令。
若所述目标交易标识对应的交易是写入块链的交易,则所述隐匿指令的签名为块链节点的签名,并且,所述指定条件为获取的签名的数量大于指定数量。
若所述目标交易标识对应的交易是写入类区块链的交易,则所述指定条件为获取的签名包括至少两个权限方的签名。
每个权限方的签名分配有权重;
若所述目标交易标识对应的交易是写入类区块链的交易,则所述指定条件为获取的各签名分别对应的权重之和大于指定权重。
针对块链中的任一区块,若该区块未包含隐匿化数据,则该区块的标签不是所述指定标签。
设块链包括N个区块,预先创建的二进制数串的第i个二进制位的值为块链中的第i个区块的标签,i∈[1,N]。
所述装置还包括:
交易写入模块1904,将封装有所述隐匿指令的隐匿交易写入块链。
所述交易写入模块1904,将封装有所述隐匿指令与所述隐匿化数据的数据哈希的隐匿交易写入块链。
图20是本说明书实施例提供的一种构建区块对应的梅克尔树的装置的结构示意图,包括:
获取模块2001,针对块链中的目标区块,获取所述目标区块的标签;
读取模块2002,若所述目标区块的标签是指定标签,则针对所述目标区块中的每个交易存储位置,从该交易存储位置读取数据;其中,所述指定标签表征所述目标区块中存储过至少一个敏感交易,针对每个敏感交易,该敏感交易已被替换成包含该敏感交易的交易哈希的隐匿化数据;
第一处理模块2003,若确定从该交易存储位置读取的数据包括交易,则对读取的数据所包括的交易进行哈希计算,得到该交易存储位置对应的交易哈希;
第二处理模块2004,若确定从该交易存储位置读取的数据包括隐匿化数据,则从读取的数据所包括的隐匿化数据中提取交易哈希,作为该交易存储位置对应的交易哈希;
构建模块2005,基于所述目标区块中各交易存储位置分别对应的交易哈希,构建所述目标区块对应的梅克尔树。
将所述目标区块中存储的敏感交易替换成隐匿化数据的操作如下:
确定所述敏感交易的交易哈希;
将预设的前标记字符拼接到所述交易哈希的首部;
根据所述前标记字符与所述交易哈希拼接成的数据,确定隐匿化数据;
将所述敏感交易替换成确定的隐匿化数据。
根据所述前标记字符与所述交易哈希拼接成的数据,确定隐匿化数据,具体包括:
将预设的后标记字符拼接到所述交易哈希的尾部,并且,将备注信息拼接到所述后标记字符的尾部;
将所述前标记字符、所述交易哈希、所述后标记字符以及所述备注信息拼接成的数据确定为隐匿化数据。
所述第一处理模块2003,若从该交易存储位置读取的数据不包括所述前标记字符,则确定从该交易存储位置读取的数据包括交易;
所述第二处理模块2004,若从该交易存储位置读取的数据包括所述前标记字符,则确定从该交易存储位置读取的数据包括隐匿化数据。
所述第二处理模块2004,将读取的数据所包括的隐匿化数据中位于所述前标记字符之后的数据确定为交易哈希并提取;或,将读取的数据所包括的隐匿化数据中位于所述前标记字符之后的指定长度的数据确定为交易哈希并提取。
所述第二处理模块2004,将读取的数据所包括的隐匿化数据中位于所述前标记字符与所述后标记字符之间的数据确定为交易哈希并提取。
针对块链中的每个交易存储位置,该交易存储位置存储有内容字段以及标识字段,所述内容字段包括交易或基于所述交易生成的隐匿化数据;
其中,当所述内容字段包括交易时,所述标识字段包括第一标识符,当所述内容字段包括基于所述交易生成的隐匿化数据时,所述标识字段包括第二标识符;
所述第一处理模块2003,若从该交易存储位置读取的数据中的标识字段包括第一标识符,则确定从该交易存储位置读取的数据包括交易;
所述第二处理模块2004,若从该交易存储位置读取的数据中的标识字段包括第二标识符,则确定从该交易存储位置读取的数据包括隐匿化数据。
所述构建模块2005,若所述目标区块的标签不是指定标签,则采用默认方式构建所述目标区块对应的梅克尔树。
设块链包括N个区块,预先创建的二进制数串的第i个二进制位的值为块链中的第i个区块的标签,i∈[1,N];
所述获取模块2001,确定所述目标区块的序号M;从所述二进制数串中读取第M个二进制位的值,作为所述目标区块的标签。
图21是本说明书实施例提供的一种简单支付验证装置的结构示意图,包括:
接收模块2101,接收验证请求;所述验证请求包含目标交易标识;
构建模块2102,根据所述验证请求,在自身的区块链中确定所述目标交易标识对应的交易所在的区块,并基于图11或图13所示的方法构建所述区块对应的梅克尔树;
验证模块2103,基于构建的梅克尔树,针对所述目标交易标识对应的交易进行简单支付验证。
一种基于类区块链的中心化存储方案,如下:
S1,接收待存储的数据记录,确定各数据记录的哈希值。
此处的待存储的数据记录,可以是客户端个人用户的各种消费记录,也可以是应用服务器基于用户的指令,在执行业务逻辑时产生的业务结果、中间状态以及操作记录等等。具体的业务场景可以包括消费记录、审计日志、供应链条、政府监管记录、医疗记录等等。
S2,当达到预设的成块条件时,确定待写入区块中的各数据记录,生成包含区块的哈希值和数据记录的第N个区块。
所述预设的成块条件包括:待存储的数据记录数量达到数量阈值,例如,每接收到一千条数据记录时,生成一个新区块,将一千条数据记录写入块中;或者,距离上一次成块时刻的时间间隔达到时间阈值,例如,每隔5分钟,生成一个新区块,将在这5分钟内接收到的数据记录写入块中。
此处的N指的是区块的序号,换言之,在本说明书实施例中,区块是以块链的形式,基于成块时间的顺序先后排列,具有很强的时序特征。其中,区块的块高基于成块时间的先后顺序单调递增。块高可以是序号,此时第N个区块的块高即为N;块高也可以其它方式生成。
当N=1时,即此时的区块为为初始区块。初始区块的哈希值和块高基于预设方式给定。例如,初始区块中不包含数据记录,哈希值则为任一给定的哈希值,块高blknum=0;又例如,初始区块的生成触发条件与其它区块的触发条件一致,但是初始区块的哈希值由对初始区块中的所有内容取哈希确定。
当N>1时,由于前一区块的内容和哈希值已经确定,则此时,可以基于前一区块(即第N-1个区块)的哈希值生成当前区块(第N个区块)的哈希值,例如,一种可行的方式为,确定每一条将要写入第N个块中的数据记录的哈希值,按照在块中的排列顺序,生成一个默克尔树,将默克尔树的根哈希值和前一区块的哈希值拼接在一起,再次采用哈希算法,生成当前块的哈希值。又例如,还可以按照块中数据记录的顺序进行拼接并取哈希得到整体数据记录的哈希值,拼接前一区块的哈希值和整体数据记录的哈希值,并对拼接得到的字串进行哈希运算,生成区块的哈希值。
通过前述的区块的生成方式,每一个区块通过哈希值确定,区块的哈希值由区块中的数据记录的内容、顺序以及前一区块的哈希值决定。用户可以随时基于区块的哈希值发起验证,对于区块中任何内容(包括对于区块中数据记录内容或者顺序的修改)的修改都会造成在验证时计算得到的区块的哈希值和区块生成时的哈希值不一致,而导致验证失败,从而实现了中心化下的不可篡改。
通过生成包括一定数量的数据记录的区块,并且记录下区块生成时的哈希值,从而实现以区块链的方式对数据记录进行中心化的存储。在这种数据存储方式下,每一区块的哈希值依赖于前一区块的哈希值以及自身所包含的数据记录的内容。用户可以基于上述存储形式随时查询自己的数据记录,以及可以依据所述哈希值对指定的区块或者指定的数据记录进行哈希值验证,保证了用户数据的完整性,提高用户体验。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图2、5、7、9~14所示方法的功能。
图22示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器2210、存储器2220、输入/输出接口2230、通信接口2240和总线2250。其中处理器2210、存储器2220、输入/输出接口2230和通信接口2240通过总线2250实现彼此之间在设备内部的通信连接。
处理器2210可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器2220可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器2220可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器2220中,并由处理器2210来调用执行。
输入/输出接口2230用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口2240用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线2250包括一通路,在设备的各个组件(例如处理器2210、存储器2220、输入/输出接口2230和通信接口2240)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器2210、存储器2220、输入/输出接口2230、通信接口2240以及总线2250,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图2、5、7、9~14所示方法的功能。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、方法、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法和设备实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。