具体实施方式
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(PrivateBlockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。
联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行,执行存证类业务。例如,司法机构、公正机关、音乐人协会等共同构建对于音乐相关的联盟链,提供音乐人原创作品存证的联盟链。
去中心化的区块链本质上是一个去中心化的分布式账本数据库。即,区块链中的数据是分散的存储在各节点上的。区块链的参与者们,每一个节点都是平行的,不存在上下级、主从的关系,都是平等的。“去中心化”的账本存储方式可以起到容错、抗攻击以及抗勾结的作用。
而如果一个区块链中所有节点的参与方都是很“诚实可信”的,那么在该区块链中实际进行业务处理时,基本没有勾结行为,也没有攻击行为,“去中心化”的意义不那么显著。而这种情形往往在有共同利益基础的联盟链里非常常见。这种情形下,分布式的账本存储没有了必要,进而数据存储时也没有必要进行共识。
图2所示,图2为本说明书实施例所涉及的中心化的数据库服务端的系统架构示意图。在该示意图中,数据库服务端直接面向多名用户(即联盟链中的节点用户,一般为机构或者企业),而每个用户均可以向其它个人用户或者其它机构提供存证服务,并将存证数据写入中心化的块链式账本中。
需要说明的是,本说明书实施例中,存证业务的转移并不是指将联盟链中已经存在的存证业务数据转移至中心化的块链式账本中,而是指对于联盟链中的各用户而言,将后续的存证业务数据不再写入联盟链中,而是写入到中心化的块链式账本中,联盟链的存证业务终止。
在中心化的数据库服务端中,块链式的账本通过如下方式生成,如图1所示,图1为本说明书实施例所提供的一种生成块链式账本的流程示意图,包括:
S101,接收待存储的数据记录,确定各数据记录的哈希值。
此处的待存储的数据记录,可以是客户端个人用户的各种消费记录,也可以是应用服务器基于用户的指令,在执行业务逻辑时产生的业务结果、中间状态以及操作记录等等。具体的业务场景可以包括消费记录、审计日志、供应链条、政府监管记录、医疗记录等等。
在本说明书的一个实施例中,数据记录可以是由联盟链用户所提供的各种存证业务数据。
S103,当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块。
所述预设的成块条件包括:待存储的数据记录数量达到数量阈值,例如,每接收到一千条数据记录时,生成一个新数据块,将一千条数据记录写入块中;或者,距离上一次成块时刻的时间间隔达到时间阈值,例如,每隔5分钟,生成一个新数据块,将在这5分钟内接收到的数据记录写入块中。
此处的N指的是数据块的序号,换言之,在本说明书实施例中,数据块是以块链的形式,基于成块时间的顺序先后排列,具有很强的时序特征。其中,数据块的块高基于成块时间的先后顺序单调递增。块高可以是序号,此时第N个数据块的块高即为N;块高也可以其它方式生成。
当N=1时,即此时的数据块为为初始数据块。初始数据块的哈希值和块高基于预设方式给定。例如,初始数据块中不包含数据记录,哈希值则为任一给定的哈希值,块高blknum=0;又例如,初始数据块的生成触发条件与其它数据块的触发条件一致,但是初始数据块的哈希值由对初始数据块中的所有内容取哈希确定。
当N>1时,由于前一数据块的内容和哈希值已经确定,则此时,可以基于前一数据块(即第N-1个数据块)的哈希值生成当前数据块(第N个数据块)的哈希值,例如,一种可行的方式为,确定每一条将要写入第N个块中的数据记录的哈希值,按照在块中的排列顺序,生成一个默克尔树,将默克尔树的根哈希值和前一数据块的哈希值拼接在一起,再次采用哈希算法,生成当前块的哈希值。又例如,还可以按照块中数据记录的顺序进行拼接并取哈希得到整体数据记录的哈希值,拼接前一数据块的哈希值和整体数据记录的哈希值,并对拼接得到的字串进行哈希运算,生成数据块的哈希值。
数据块的形式可以类似于区块链中的区块形式,包含有区块头和区块体,区块头中用于数据块的元数据,例如,块高、块哈希、前一数据块的哈希、版本号、区块体中的数据记录的默克尔树的根哈希等等;区块体中用于写入数据记录。
用户在上传数据成功后,即可以得到对应的数据记录的哈希值以及所处的数据块的哈希值,并保存,并且可以基于该哈希值发起完整性验证。具体的验证方式即为在数据库中重新计算数据记录自身的哈希值以及所处的数据块的哈希值,与本地所保存的进行对比。
通过前述的数据块的生成方式,每一个数据块通过哈希值确定,数据块的哈希值由数据块中的数据记录的内容、顺序以及前一数据块的哈希值决定。用户可以随时基于数据块的哈希值发起验证,对于数据块中任何内容(包括对于数据块中数据记录内容或者顺序的修改)的修改都会造成在验证时计算得到的数据块的哈希值和数据块生成时的哈希值不一致,而导致验证失败,从而实现了中心化下的不可篡改。
与联盟链中的运行方式相比,中心化的数据库服务方存储在写入数据时无需进行共识,数据存储也无需分布式的存储在各节点设备中。相对联盟链而言,中心化的存储方式可以释放节点设备的存储空间和计算资源。
因此,本说明书实施例提供一种方案,在联盟链中的用户均同意执行存证业务的转移时,将存证业务转移至中心化的数据库服务端中,并以块链式的账本继续进行存证业务数据的存储。
以下结合附图,详细说明本说明书各实施例提供的技术方案。如图3所示,图3是本说明书实施例提供的一种针对联盟链的存证业务转移方法的流程示意图,该流程具体包括如下步骤:
S301,接收所述联盟链中的用户对于存证业务转移操作的反馈信息。
所述反馈信息可以是联盟链中的用户主动发起的,例如,联盟链在创世时就已经达成一致,可以定期在用户间发起投票,是否需要终止联盟链,并执行存证业务的转移。
所述反馈信息也可以是联盟链中的用户对于接收到的推荐信息所做出的反馈。例如,在联盟链搭建于某个云平台上时,联盟链中的用户达成一致订阅该云平台所提供的推荐服务,所述推荐服务包括对于云平台的中心化程度的评估,在中心化程度达到一定程度时,云平台向各用户推送相应的推荐信息(用于向各用户描述当前的联盟链的中心化状态),各用户对于推荐信息作出反馈,生成反馈信息。一名用户返回的反馈信息用于表明该用户是否同意执行存证业务转移。
S303,所述反馈信息的中同意执行转移操作的数量符合预设条件时,获取所述联盟链中每个用户的账户身份信息,确定每个账户在块链式账本中的操作权限。
一般而言需要全体用户一致同意执行存证业务转移才可执行。因此,默认的预设条件可以是同意执行的反馈信息的数量等同于联盟链中的用户的数量(一名用户只会有一份有效的反馈信息)。预设条件也可以在事先由用户设定,例如,同意执行的用户占整体用户的90%以上,等等。
在通过反馈信息确定联盟链中的用户同意执行业务转移之后,中心化的数据库服务端获取联盟联众的每个用户的账户身份信息。
一名用户的账户身份信息,包括该用户在联盟链中的自身的账号、密码、完整的身份信息等等,同时,还可以包括用户所服务的第三方机构和第三方个人在联盟链中的登录账号、密码、身份信息等等。
获取得到的账户身份信息用于该用户使用同样的登录账号和密码可以进入块链式的账本中。
在块链式的账本中,一名用户的操作权限可以根据该用户在联盟链中的权限相应给定。例如,节点用户的权限相应较高,而节点用户面向的第三方机构和个人用户则权限较低。具体的权限配置方式可以将用户的权重值,写入用于存储用户标识和用户的权重值的对应关系的配置文件。
S305,生成包含所述账户身份信息和操作权限的块链式账本的初始数据块,以便所述联盟链中的用户将存证业务数据写入所述块链式账本中的其它数据块。
对于中心化的数据库服务端中,一个块链式账本的生成方式在前文已经进行了说明。可以看到,一个块链式账本中其它数据块的哈希值是依赖于初始数据块的哈希值的,而初始数据块的哈希值可以人为跟定,也可以基于初始数据块中的内容得到。
在本说明书书实施例中,执行转账业务时生成的初始数据块中应当包含前述的账户身份信息和操作权限信息。具体写在初始数据块的块头还是块体中,不做限制。
例如,可以将账户身份信息和操作权限信息视为一条或者多条数据记录写入块体,同时,数据头中包含数据记录所对应的默克尔树的根哈希;或者,直接将具有管理员权限的用户的账户身份信息和操作权限信息写入块头中。
初始数据块的哈希值可以是对初始数据块中的块头取哈希运算得到。从而,初始数据块的哈希值中是包含了账户身份信息和操作权限信息,而后续的其它数据块均依赖于初始数据块的哈希值,从而实现转移后所生成的账本中包含了联盟链中的每个用户的信息,并且可以随时查询和验证。
通过本说明书实施例中的方案,在联盟链中的用户都同意执行存证业务转移之后,确定每个用户的账户身份信息以及操作权限,将上述身份信息和操作权限写入中心化的块链式账本的初始数据块,后续的存证业务数据即写入其它数据块,用户可以随时进行查询和验证,在存证业务转移保障了原联盟链中的用户的权益的同时,通过存证业务转移释放了联盟链中节点设备的计算力和存储资源。
在一个实施例中,在生成了初始数据块以后,原联盟链中的用户即可以随即进行存证业务,将新来的存证业务数据直接写入块链式的账本中,以初始数据块为基础,生成其它数据块。对于原联盟链中的已经存在的区块链数据,则不进行转移。
在另一实施例中,数据库服务端还可以将原联盟链中的数据转移至块链式的账本中,具体的转移方式即为,确定原联盟链中的所包含的数据块以及每个数据块的块高M,将第M个区块做为一条数据记录,写入到块链式账本中的第N个数据块,其中M=N。例如,联盟链的第100个区块(包含区块头和区块体),此时将作为一条数据记录写入账本中的第100个数据块的块体中。直至将联盟链中已经存在的区块转移完毕,才继续开展对于新的存证业务数据的保存。
在一种实施例中,为了保障用户的反馈信息的真实性,在反馈信息中还可以包含用户的数字签名,相应的,数据库服务端在接收到包含数字签名的反馈信息时则需要使用该用户的公钥对数字签名进行解密验证即可。
如前所述,用户的反馈信息可以是基于服务端对于联盟链的中心化程度的分析所产生的推荐信息的反馈。在本说明书实施例中,对于联盟链向数据库服务端的存证业务转移的推荐,可以通过如下方式进行,如图4所示,图4是本说明书实施例提供的向联盟链中进行业务转移的推荐方法的流程示意图,应用于以块链式的账本存储数据的中心化的数据库服务端中,该流程具体包括如下步骤:
S401,监测所述联盟链的中心化指数,其中,所述中心化指数用于表征所述联盟链中对交易进行共识的中心化程度。
对于中心化指数的监测可以是在数据库服务端中进行,也可以是通过部署在云端的专门管理联盟链中的节点来执行。
需要说明的是,在本说明书中所描述的交易(transfer),是指用户通过区块链的客户端创建,并需要最终发布至区块链的分布式数据库中的一笔数据。
其中,区块链中的交易,存在狭义的交易以及广义的交易之分。狭义的交易是指用户向区块链发布的一笔价值转移;例如,在传统的比特币区块链网络中,交易可以是用户在区块链中发起的一笔转账。而广义的交易是指用户向区块链发布的一笔具有业务意图的业务数据;例如,运营方可以基于实际的业务需求搭建一个联盟链,依托于联盟链部署一些与价值转移无关的其它类型的在线业务(比如,租房业务、车辆调度业务、保险理赔业务、信用服务、医疗服务等),而在这类联盟链中,交易可以是用户在联盟链中发布的一笔具有业务意图的业务消息或者业务请求。
中心化指数C是一个确切的评分,可以基于联盟链中的各节点的设备特征和对于联盟链中的存证业务进行处理时所产生的业务特征进行统计得到。
对于业务特征,具体而言,联盟链作为区块链中的一种,在执行存证业务时,对于写入账本的交易同样需要进行共识。共识过程中的多种业务特征可以反映出该联盟链的中心化程度,以下从多个方面进行说明:
(1),基于交易所花费的平均共识时间来表征中心化指数。
在本说明书实施例中,交易的平均共识时间T指的是一笔交易从发起交易至共识结束所花费的平均时间长度,或者,一笔交易被写入新的数据块的时间,或者,平均出块时间(在出块条件为共识通过的交易达到一定数值即生成一个新的区块时)。交易的平均共识时间可以基于一定时间(例如,1个月内)内对于交易的共识耗时统计得到。
在联盟链中,由于对于交易而且需要多数节点达成一致,一笔交易才可以被写入联盟链的账本中。因此,在联盟链中的节点相对独立的情形下,各节点之间需要多次进行通信。容易理解,独立节点越多,分布的越分散,共识过程所需要的时间就越长。
在假设通信条件都相同时,联盟链对于一笔交易所需要花费的共识时间越长,可以说明该联盟链中存在较多的独立节点,需要等待各节点的共识结果并进行比较,才能完成共识。换言之,交易的共识时间越长,联盟链中“去中心化”的程度越高,中心化指数越小;反之,则中心化指数越大。
当然,由于各联盟链所采取的共识机制存在不同,这也会对交易的平均共识时间造成影响。例如,工作量证明(Proof of Work,POW);股权证明(Proof of Stake,POS);实用拜占庭容错算法(Practical Byzantine Fault Tolerance,PBFT);重要性证明(Proof ofImportance,POI);参与度证明(Proof of Participation,POP),等等。在不同的共识机制下,对一笔交易进行共识所需要的时间是不同的。
基于此,可以预先给出某个共识机制下的交易的基本共识时间T0,然后根据确定使用该共识机制的联盟链中的平均共识时间T1,计算得到用于计算中心化指数的时间参数t=T1/T0,这其中,t和中心化指数负相关。
(2),基于交易共识过程中的恶意行为比例来表征中心化指数。
在对交易进行共识时,有部分节点可能从主观上或者客观上都会有恶意行为,这种恶意情形可以经常被观测到,
例如,进行共识的某个节点,停止了对共识的响应,导致其它节点无法收到该节点的共识结果。需要说明的是,在共识过程中,如果有足够多的节点停止响应,这会导致共识失败。这种停止对共识的响应,有可能是节点设备发生了故障,也有可能是若干节点串通一致,恶意停止响应,以影响账本中数据记录。
又例如,某个节点发起对一个虚假交易(或者可以称为欺诈交易)的共识,很显然,这种虚假交易是不能通过共识的。在区块链中,则有可能存在节点恶意发布这种虚假交易,来浪费其它节点的算力,或者通过欺诈交易来实现双花,为自己谋利等等。
又或者,某部分节点串通,对某个交易的共识结果做出虚假的共识结果,以期望更改该交易的共识结果。
上述情形在公有链中时有发生,在联盟链中,这种情形发生的就要少一些。容易理解,由于和公有链不同,联盟链中存在共同的利益基础,所以实际上有权利执行共识或者记账的节点,一般也不会发起恶意行为。
换言之,中心化程度越高的联盟链中,恶意行为发生的次数就越少,因此,实际上可以基于联盟链中进行交易共识中的恶意行为的比例,来确定联盟链的中心化指数。恶意行为的比例与中心化指数负相关,即恶意行为的比例越低,中心化指数越大。
这里的进行交易共识中的恶意行为的比例P可以指的是因为在所有交易中因为恶意行为共识失败的交易的比例。例如,联盟链中发起交易共识1000例,失败20例,则恶意行为的比例为20/1000=2%。
或者,也可以是在节点在共识交易过程中发起的恶意行为相对于正常行为的比例。例如,在每次共识中,需要在10个节点间进行,假设在一次交易共识过程中,其中有3个节点做出了与其它节点不同的共识结果,虽然本次交易仍然共识成功,但可以认为本次交易中,恶意行为的比例为3/10=30%。
对于全体交易共识中的恶意行为的比例还可以基于单个交易进行相加得到,例如,如果同时还存在其它9个共识成功且没有恶意行为的交易,则此时的恶意行为的比例为3/100=3%。
(3),基于联盟链中的多个节点设备的部署环境来确定中心化指数。
节点设备指的是节点所处的设备。一般而言,节点设备时对应于不同的机构,因此,为保持各自的独立性,各节点部署的环境也会相对独立。例如,各机构将自己的节点设备部署在机构所在地。
但是在实际应用中,进行存证业务时,联盟链中的机构也经常将节点设备委托至其它专业性机构进行执行,从而整个联盟链中的所有节点都是同一个或者少数几个部署平台上,进而从地理位置上也非常的接近,甚至各机构的节点设备可能是同一个部署平台中的某几个关联设备。
在这种情形下,联盟链中的交易共识、记账都是在相关的若干设备上进行,“去中心化”特征已经很难体现。因此,各节点的部署环境的一致性程度R可以反映了中心化指数,一致性程度R越大时,中心化指数C越大。
如前所述,中心化指数C可以基于平均共识时间T(或者时间参数t)、交易共识中的恶意行为的比例P以及各节点的部署环境的一致性程度R来体现。换言之,可以用如下公式来表征C=F(T,P,R)。例如一种较简单的计算方式可以是C=k*(R/TP)。其中的k为自定义的系数。
当然,计算C时,F中的变量可以同时包含变量T、P和R,也可以使用其中任意一个变量计算得到或者基于任意两个变量的组合计算得到。换言之,F中的变量包含T、P和R中的至少一种即可。
S403,当所述中心化指数超过预设值时,向所述联盟链中的节点发送推荐信息,所述推荐信息用于向联盟链中的节点提示将存证业务从联盟链中的各节点转至所述中心化的数据库服务端中。
推荐信息中可以包含前述的中心化指数C,以及还可以包含对于块链式的中心化的数据库服务端的解释性信息、对于转移业务的备注信息等等。
由于在实际中,一个用户可能对应于多个节点,发送推荐信息可以向联盟链中的每个节点都发送,也可以在确定联盟链中的相关用户之后,向每个相关用户的一个节点发送一条推荐信息。
用户在接收到推荐信息之后,即可以对推荐信息给出相应的反馈信息。如前所述,当反馈信息的数量达到一定条件时,即开始执行存证业务的转移。通过上述方案可以基于联盟链的共识状态准确发起业务转移推荐,以便用户做出准确的决策。
对应的,本说明书实施例还提供一种针对联盟链的存证业务转移装置,应用于中心化的数据库服务端中,如图5所示,图5是本说明书实施例提供的一种针对联盟链的存证业务转移装置的结构示意图,包括:
接收模块501,接收所述联盟链中的用户对于存证业务转移操作的反馈信息;
确定模块503,当所述反馈信息中同意执行转移操作的数量符合预设条件时,获取所述联盟链中每个用户的账户身份信息,确定每个账户在块链式账本中的操作权限;
生成模块505,生成包含所述账户身份信息和操作权限的块链式账本的初始数据块,以便所述联盟链中的用户将存证业务数据写入所述块链式账本中的其它数据块。
进一步地,所述装置还包括接收模块507,接收待存储的数据记录,确定各数据记录的哈希值;所述生成模块505,当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块,具体包括:当N=1时,初始数据块的哈希值和块高基于预设方式给定,其中,所述初始数据块中包含所述账户身份信息和操作权限;当N>1时,根据待写入数据块中的各数据记录和第N-1个数据块的哈希值确定第N个数据块的哈希值,生成包含第N个数据块的哈希值和各数据记录的第N个数据块,其中,数据块的块高基于成块时间的先后顺序单调递增。
进一步地,所述生成模块505,获取所述联盟链的每个区块及其块高,将各区块确定为待写入数据块中的各数据记录,其中,待写入数据块的区块的块高和数据块的序号N相同。
进一步地,所述接收模块507,接收包括用户数字签名的反馈信息;采用所述联盟链中的用户所对应的公钥对所述用户数字签名进行验证。
进一步地,所述装置还包括监测模块509,监测所述联盟链的中心化指数,其中,所述中心化指数用于表征所述联盟链中对交易进行共识的中心化程度;发送模块511,当所述中心化指数超过预设值时,向所述联盟链中的节点发送推荐信息,所述推荐信息用于向联盟链中的节点提示将存证业务从联盟链中的各节点转至所述中心化的数据库服务端中,以便各节点生成对于所述推荐信息的反馈信息。
进一步地,所述监测模块509,获取所述联盟链中对于交易的平均共识时间;根据所述交易的平均共识时间,确定所述联盟链的中心化指数,其中,平均共识时间与中心化指数负相关。
进一步地,所述监测模块509,确定所述联盟链中进行交易共识中的恶意行为的比例,所述恶意行为包括共识节点停止对共识的响应、发起虚假交易的共识或者对交易的虚假共识中的至少一种;根据所述恶意行为的比例,确定所述联盟链的中心化指数,其中,所述恶意行为的比例与中心化指数负相关。
进一步地,所述监测模块509,获取所述联盟链中的多个节点设备的部署环境,所述部署环境包括地理位置和/或部署平台;根据所述部署环境的一致性程度确定所述中心化指数,其中,所述一致性程度与所述中心化指数正相关。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图3所示的针对联盟链的存证业务转移方法。
图6示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图3所示的针对联盟链的存证业务转移方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、方法、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。