本申请涉及计算机领域,尤其涉及维护区块链的方法和装置、服务器和计算机可读存储介质。
背景技术
区块链(blockchain或者blockchain)是在分布式数据库中由多个对等的区块链节点共同维护的链式数据结构。区块链可以分为公有链(publicblockchain)、联盟链(consortiumblockchain)和私有链(privateblockchain)。公有链指没有任何访问限制,任何人都可读取、发送交易且交易能获得有效确认、都能参与其共识过程的区块链。私有链是指其写入权限由某个组织控制的区块链,只有经过该组织确认的成员(可以是个人或组织)才能在该区块链中写入数据。联盟链是指有多个组织(以下称为联盟链的成员)共同参与管理的区块链,每个成员运行着一个或多个节点,每个节点称为联盟链的参与者(participant)。联盟链只允许成员中的节点读取和发送交易,并且共同记录交易数据。
由于联盟链和私有链的成员都必须得到许可才能写入数据,因此,联盟链和私有链又被统称为许可链。
当前,许可链的成员是在初始化该联盟链或者私有链时便由管理人员确定的,删除新的成员需要管理人员重新规划或创建联盟链或私有链,实现复杂。
技术实现要素:
有鉴于此,本申请提供了一种维护区块链的方法和装置、服务器,可以实现将旧租户(即成员)的区块链节点组动态退出区块链的维护。
第一方面,本申请提供一种维护区块链的方法。本方法的应用场景:多个租户各自具有至少一个区块链节点组,每个租户可以将其具有的部分或者全部区块链节点组加入通道。该多个租户包括第一租户和第二租户,第一租户的目标区块链节点组已加入该通道。该通道用于维护一个区块链;具体地,处于该通道中的区块链节点组各自存储该区块链,参与该区块链的维护;退出该通道便不再更新本地存储的区块链,退出参与对该区块链的维护。本方法用于实现将第一租户的目标区块链节点组退出该通道。
在本方法中,管理节点指示第一租户的执行节点停止运行目标区块链节点组。相应地,第一租户的执行节点停止在第一租户的资源隔离区中停止运行该目标区块链节点组。这样,该目标区块链节点组停止在该通道中工作,例如从共识组织获取新区块。
管理节点获取该目标区块链节点组的配置信息,并将该目标区块链节点组的配置信息发送至第二租户的执行节点。
第二租户的执行节点从共识组织获取该通道的通道配置信息,所述通道配置信息包括所述通道的标识和已加入所述通道的所有区块链节点组的配置信息,所述已加入所述通道的所有区块链节点组包括所述目标区块链节点组。
第二租户的执行节点根据所述通道配置信息和从所述管理节点接收的所述目标区块链节点组的配置信息生成所述通道的通道调整信息,该通道调整信息包括该通道配置信息与该目标区块链节点组的配置信息的差量,即该通道调整信息包括已加入所述通道的所有区块链节点组中除了所述目标区块链节点组以外的区块链节点组的配置信息。该通道调整信息还包括所述通道的标识。
第二租户的执行节点向所述共识组织发送所述通道调整信息;该共识组织生成包括该通道调整信息的区块。
第二租户的已加入该通道的区块链节点组,从所述共识组织获取包括所述通道调整信息的区块,并将所述区块添该区块链节点组所存储的区块链。
本申请中,第二租户的已加入该通道的该区块链节点组在区块链中记录该通道调整信息,该通道调整信息记录了将该目标区块链节点组退出该通道时通道配置的变化。另外,在该区块链中记录该通道调整信息,表示该通道调整信息是经过该通道中的其他租户同意将第一租户退出该通道的共识。
类似地,对于已加入该通道的租户中除了第一租户的所有租户,其已加入该通道的区块链节点组,均可以从共识节点获取该通道调整信息,以及在该区块链节点组维护的区块链中存储该通道调整信息。这样,对于已加入该通道的租户中除了第一租户的所有租户,其已加入该通道的区块链节点组各自在在各自维护的区块链中记录了同意将第一租户退出该通道的共识。
第一方面的一种可能设计中,第一租户的目标区块链节点组,是指第一租户具有的已加入该通道的每个区块链节点组。相应地,第一租户的目标区块链节点组退出该通道,是指该第一租户具有的已加入该通道的每个区块链节点组都退出该通道。这样可以将第一租户退出参与该通道的维护。
第一方面的一种可能设计中,该目标区块链节点组的配置信息包括:该目标区块链节点组的操作权限,该目标区块链节点组的权限证书,和该目标区块链节点组使用的安全算法。
该目标区块链节点组的操作权限用于配置该目标区块链节点组具有操作该区块链节点组的数据的权限(例如读权限/写权限/最高权限)。
该目标区块链节点组的权限证书包括:管理该目标区块链节点组的最高管理权限的证书,该目标区块链节点组的根证书,该目标区块链节点组通信所使用的根证书。通过这些权限证书,才能操作/访问该目标区块链节点组。
该目标区块链节点组使用的安全算法,包括用于防篡改区块的算法(例如哈希算法)。这样可以避免恶意修改区块中的交易记录。
该目标区块链节点组使用的安全算法还可以包括防止对该区块链节点组背书后的交易记录进行篡改的算法(例如哈希算法)。将通过该算法处理后的交易记录发送至共识节点,可以防止该交易记录中的交易信息在共识节点中泄露。
第一方面的一种可能设计中,通道调整信息还包括通道的权限策略。该通道的权限策略指定通道中具有管理权限的租户。后续,具有管理权限的租户可以读/写通道配置信息,该租户还可以邀请其他租户加入通道。
第一方面的一种可能设计中,通道调整信息还包括:该通道调整信息的版本号、通道配置信息的版本号。
第一方面的一种可能设计中,对于需要第二租户的区块链节点组和该第一租户的目标区块链节点组参与背书的合约事项,第二租户的执行节点在用于执行该合约事项的链代码中更新该合约事项对应的背书策略。更新后的背书策略指定该目标区块链节点组不参与对执行该合约事项所得的交易记录背书。
类似地,如果其它租户的区块链节点组存在需要与该第一租户的目标区块链节点组共同参与背书的合约事项,该其它租户的的执行节点在用于执行该合约事项的链代码中更新该合约事项对应的背书策略。更新后的背书策略指定该目标区块链节点组不参与对执行该合约事项所得的交易记录背书。
第一方面的一种可能设计中,管理节点向已加入所述通道的所有租户中除了所述第一租户以外的租户发送将所述第一租户退出所述通道的请求;管理节点接收已加入所述通道的所有租户中除了所述第一租户以外的租户对所述请求的反馈;管理节点按照共识策略对所有反馈达成将所述第一租户退出所述通道的共识。这样,管理节点组织已加入所述通道的所有租户中除了所述第一租户以外的租户对将第一租户退出所述通道达成共识。
第一方面的一种可能设计中,管理节点在所述第一租户的资源隔离区存在病毒时,生成将所述第一租户退出所述通道的请求。这样避免在第一租户的目标区块链节点组感染病毒时对区块链的维护造成影响。
第二方面,本申请提供一种维护区块链的装置,包括多个功能单元,该多个功能单元部署在第一租户的执行节点中,使得该第一租户的执行节点执行第一方面或者第一方面的任意可能设计提供的维护区块链的方法中由第一租户的执行节点执行的步骤。
本申请提供又一种维护区块链的装置,包括多个功能单元,该多个功能单元部署在第二租户的执行节点中,使得该第二租户的执行节点执行第一方面或者第一方面的任意可能设计提供的维护区块链的方法中由第二租户的执行节点执行的步骤。
本申请还提供另一种维护区块链的装置,包括多个功能单元,该多个功能单元部署在管理节点中,使得该管理节点执行第一方面或者第一方面的任意可能设计提供的维护区块链的方法中由该管理节点执行的步骤。
第三方面,本申请提供一种服务器,该服务器包括处理器和存储器。该存储器存储计算机指令;该处理器执行该存储器存储的计算机指令,使得该服务器执行第一方面或者第一方面的任意可能设计提供的维护区块链的方法中由第一租户的执行节点执行的步骤,或者使得服务器执行第一方面或者第一方面的任意可能设计提供的维护区块链的方法中由第二租户的执行节点执行的步骤,或者使得服务器执行第一方面或者第一方面的任意可能设计提供的维护区块链的方法中由管理节点执行的步骤。
第三方面的一种可能设计中,该存储器中存储的计算机指令用于实现第二方面提供的任一种维护区块链的装置中的功能单元。
第四方面,提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机指令,当服务器的处理器执行该计算机指令时,该服务器执行第一方面或者第一方面的任意可能设计提供的维护区块链的方法中由第一租户的执行节点执行的步骤,或者该服务器执行第一方面或者第一方面的任意可能设计提供的维护区块链的方法中由第二租户的执行节点执行的步骤,或者该服务器执行第一方面或者第一方面的任意可能设计提供的维护区块链的方法中由管理节点执行的步骤。
第四方面的一种可能设计中,该计算机可读存储介质中存储的计算机指令用于实现第二方面提供的任一种维护区块链的装置中的功能单元。
第五方面,提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。服务器的处理器可以从计算机可读存储介质读取并执行该计算机指令,使得该服务器执行第一方面或者第一方面的任意可能设计提供的维护区块链的方法中由第一租户的执行节点执行的步骤,或者使得服务器执行第一方面或者第一方面的任意可能设计提供的维护区块链的方法中由第二租户的执行节点执行的步骤,或者使得服务器执行第一方面或者第一方面的任意可能设计提供的维护区块链的方法中由管理节点执行的步骤。
第五方面的一种可能设计中,该计算机程序产品中的计算机指令用于实现第二方面提供的任一种维护区块链的装置中的功能单元。
附图说明
图1为本申请提供的通道的一种示意图;
图2为本申请提供的区块链系统的一种示意图;
图3为本申请提供的生成新区块的流程的一种流程示意图;
图4为本申请提供的区块链系统的另一种示意图;
图5为本申请提供的维护区块链的方法的一种流程示意图;
图6为本申请提供的维护区块链的装置600的一种逻辑结构示意图;
图7为本申请提供的维护区块链的装置700的一种逻辑结构示意图;
图8为本申请提供的维护区块链的装置800的一种逻辑结构示意图;
图9为本申请提供的服务器900的一种硬件结构示意图。
具体实施方式
下面将结合本申请中的附图,对本申请提供的技术方案进行描述。
术语简介
合约(contract):记录一个或多个合约事项。每个合约事项约定了多个参与方和该多个参与方一起完成的交易;例如,用户在两个银行间转账,这两个银行作为两个参与方,一起完成转账这个交易。
交易(transaction):指任何能够记录的活动或事件,例如医疗事件,身份管理,文档证明,食品来源追踪,转账付款,投票等。本申请中,每个交易发生时,会生成该交易对应的交易记录。
区块链:可以是在分布式数据库中由多个对等的区块链节点组共同维护的链式数据结构。每个区块链存储一个或多个合约的所有交易记录。
区块(block):区块链中的数据单元,每个区块记录一个或多个经过背书的交易记录。多个区块按照发生顺序串联就得到区块链。可选地,区块链中的每个区块通常可以包括前一区块的哈希值,时间戳和交易记录。
区块链节点:参与维护区块链的对等节点,每个区块链节点上都存储有该区块链的所有交易记录。
成员(member):区块链节点的管理者,即参与区块链管理的个人或组织。成员又可被称为用户或租户,以下统称为租户。每个租户具有独立的资源(例如计算资源和存储资源),一条区块链中的所有交易记录,存储在该区块链的每个租户的区块链节点上。
资源隔离区:每个租户参与到区块链中时,需要申请一定数量的资源(包括网络资源,计算资源和存储资源等)以部署区块链节点,该资源可以是租用的或者自有的。本申请中,将为每个租户分配的资源分别划分到一个资源隔离区中。多个租户的资源隔离区相互隔离,除非有另外的配置,一个租户不能跨资源隔离区访问另一个租户。
业务组织:当某个租户提供业务时,该租户又可以称为业务组织。可选地,当该租户为组织,并且该租户的不同部门提供不同的业务时,该租户的每个部门也可以称为一个业务组织。即,本申请中,一个租户可以拥有一个或多个业务组织,每个业务组织至少提供一种业务。
区块链节点组:本申请中参与区块链管理的结构,每个业务组织提供一个或者多个区块链节点组,每个区块链节点组可以参与一个区块链的维护。
通道:用于在两个或多个租户间通信的专用“子网”,以实现私有和保密的交易,建立跨租户的区块链。本申请中的通道和区块链一一对应。通道可以由多个成员、每个成员的锚点、共享账本(sharedledger)(也可以称为区块链)、链代码(chaincode)和排序服务节点(orderingservicenode)(也可以称为共识节点)定义。
共识(consensus):区块链是一个历史可追溯、不可篡改,解决多方互信问题的分布式(去中心化)系统。分布式系统必然面临着一致性问题,而解决一致性问题的过程称之为共识。
共识节点:目前通过共识算法实现共识,执行共识算法的节点被称为共识节点。
共识组织:由所有共识节点组成,用于实现对交易记录的共识和排序。
本申请实施例提供的通道
图1为本申请实施例提供的通道的示意图。本申请为多个租户(图1中示出了租户a,租户b和租户c)分别分配资源隔离区110,资源隔离区120和资源隔离区130。通常情况下,资源隔离区110,资源隔离区120和资源隔离区130中的资源互相隔离。一个资源隔离区中的资源可以是由公有云分配的,也可以是从对应租户的私有的数据中心中获取的。当资源隔离区中的资源是由公有云分配时,该资源隔离区可以配置为虚拟专有云(virtualprivatecloud,vpc),通过不同vpc实现不同租户之间的资源隔离。当资源隔离区中的资源是从对应租户的私有的数据中心中获取时,由数据中心实现不同租户之间的资源的隔离。
进一步地,租户a包括业务组织118和业务组织119;租户b包括业务组织128;租户c包括业务组织138。每个业务组织基于业务需求,部署至少一个区块链节点组,每个区块链节点组提供或参与至少一种业务。例如,业务组织118部署区块链节点组117;业务组织119部署区块链节点组116、区块链节点组115和区块链节点组114;业务组织128部署区块链节点组124和区块链节点组126;业务组织138部署区块链节点组134和区块链节点组136。
本申请中,每个资源隔离区中的业务组织以区块链节点组为粒度加入通道,通过通道实现租户之间的访问,从而实现不同租户之间的数据传输。即,多个租户的不同区块链节点组加入同一个通道,则该通道内的所有区块链节点组可以互相通信。例如,图1中,区块链节点组117、区块链节点组116、区块链节点组126和区块链节点组136都加入了通道150,则区块链节点组117、区块链节点组116、区块链节点组126和区块链节点组136之间可以在通道150内互相通信。再例如,图1中,区块链节点组114、区块链节点组124和区块链节点组134都加入了通道140,则区块链节点组114、区块链节点组124和区块链节点组134之间可以在通道140内互相通信。没有加入同一通道的不同租户间的区块链节点组之间不能相互通信。加入同一通道的所有区块链节点组可以管理同一个区块链,能够看到相同的交易记录。同一租户的不同区块链节点组之间的是否互通由租户配置,不在本申请的讨论范围之内。
本申请中,不同租户的不同业务组织的区块链节点组可以加入同一通道。
基于业务的需求,本申请中同一租户的不同业务组织中的区块链节点组可以加入同一通道。例如,租户a为银行,租户a的投资管理部(业务组织118)部署区块链节点组117,租户a的审计监察部(业务组织119)部署区块链节点组116,区块链节点组117和区块链节点组116均加入通道150(账本通道,对应账本区块链),则投资管理部和审计监察部都参与账本区块链的维护,投资管理部可以在该区块链中写入投资记录,审计监察部可以验证该投资记录是否合法,增加了交易的安全性。
当然,租户也可以设置某个业务组织的区块链节点组不加入任何通道,只处理该租户内部的业务。例如,租户a的区块链节点组115没有加入任何通道。
本申请中,业务组织用于理解本申请的内容,其本身并不是参与区块链管理的实体。因此,可以理解,业务组织并不是本申请的必要特征。
本申请实施例提供的区块链系统
下面举例描述一种可能的区块链系统的架构。如图2所示,该区块链系统包括共识组织160和三个区块链节点组114、124和134,这三个区块链节点组114、124和134同时加入了通道140。如图1所示,区块链节点组(114、124和134)分别部署于不同的资源隔离区。
每个区块链节点组包括三类区块链节点:锚点(anchorpeer)、内部区块链节点和主控点(leadingpeer)。其中,锚点用于与同一通道中的其他区块链节点组通信;内部区块链节点用于存储交易记录;主控点用于与该区块链节点组对应的共识节点通信。其中,锚点和主控点进一步还可以用于存储交易记录。以图2为例,资源隔离区110中的区块链节点组114包括锚点111、内部区块链节点112和主控点113。资源隔离区120中的区块链节点组124包括锚点121、内部区块链节点122和主控点123,资源隔离区130中的区块链节点组134包括锚点131、内部区块链节点132和主控点133。
可选地,一个区块链节点组中的三类区块链节点可以部署在同一个物理设备上,也可以部署在不同的物理设备上。在另一个实施方式中,也可以由同一个区块链节点承担两种或两种以上的功能。以图2的区块链节点组114为例,锚点111、内部区块链节点112和主控点113中的任意组合可以部署在同一物理或逻辑区块链节点上;例如锚点111、内部区块链节点112和主控点113部署在同一个区块链节点a上,则区块链节点a既能与其他区块链节点组通信,又能存储交易记录,还与该区块链节点组114对应的共识节点通信。
锚点与同一通道中的其他区块链节点组通信,具体指锚点与同一通道中的其他区块链节点组中的锚点通信。以图2为例,锚点111可以与锚点121通信,从而区块链节点组114可以通过锚点111在通道140中与区块链节点组124通信。可选地,在同一通道的锚点之间,是基于gossip协议建立点对点(peertopeer,p2p)通信的。
当区块链节点组的主控点与该区块链节点组对应的共识节点通信时,该主控点可以从该共识节点获取待验证的新区块。在同一通道中,不同区块链节点组的主控点可以与同一共识节点通信连接,也可以分别连接不同共识节点。以图2为例,主控点113连接共识节点161,主控点123连接共识节点163,主控点133连接共识节点164。
共识组织160包括所有共识节点。每个共识节点都可以接收背书后的交易记录,然后按照共识算法和共识组织160中的其他共识节点共同处理该交易记录以生成对该交易记录的共识结果。其中,共识组织160可以同时为多个通道服务,即根据共识算法分别处理该多个通道中的交易记录。
共识组织160中的共识节点在验证交易记录后,可以针对同一通道的一条或多条交易记录生成区块。共识组织160的共识节点之间可以同步该区块,例如共识节点161生成区块,并将该区块的副本发送至共识节点162、共识节点163和共识节点164,共识节点162、共识节点163和共识节点164存储各自接收的副本。
可选地,共识组织160部署在公有云中。例如,共识组织160包括的所有共识节点都部署在公有云中的一个资源隔离区中。
在一个区块链对应的通道中的每个区块链节点组,分别存储一个区块链,以及分别负责各自存储的区块链的更新。以图2为例,区块链节点组114、区块链节点组124和区块链节点组134分别存储一个区块链。区块链节点组114、区块链节点组124和区块链节点组134存储的区块链包括执行相同合约生成的区块。当新区块在共识节点产生后,三个区块链节点组114、124和134分别从各自连接的三个共识节点161、163、164获取该新区块,并将该新区块添加到各自存储的区块链中。因此,如果区块链节点组存储的区块链没有被恶意修改,同一通道中所有区块链节点组分别存储的区块链是相同的。如果同一通道中少数区块链节点组存储的区块链被恶意修改,可以按照少数服从多数的规则被识别出来,例如区块链节点组114通过描点111发现区块链节点组124存储的区块链与区块链节点组114存储的区块链不一样,则三个区块链节点组114、124和134相互核对下区块链,如果区块链节点组124与区块链节点组114和区块链节点组134存储的区块链是不同的,则认为区块链节点组124存储的区块链是异常的。这样,同一通道中的所有区块链节点组参与维护一个区块链。
下面结合图3描述本申请实施例提供的生成新区块的流程。该流程包括步骤s31、步骤s32、步骤s33、步骤s34、步骤s35和步骤s36。
步骤s31,客户端向内部区块链节点112和内部区块链节点122发送交易请求。
该交易请求携带了通道140的标识。
客户端可以访问通道140中的区块链节点组。可选地,管理平台为该客户端下发了可以访问通道140中的区块链节点组的权限证书。这样,该客户端可以使用该权限证书访问通道140中的区块链节点组。
假如参与当前合约事项的参与方包括区块链节点组114和区块链节点组124,在客户端向内部区块链节点112发送的交易请求中,携带了访问区块链节点组114的权限证书;在客户端向内部区块链节点122发送的交易请求中,携带了访问区块链节点组124的权限证书。
步骤s32,内部区块链节点112和内部区块链节点122模拟执行该交易请求所指定的交易,生成模拟交易记录,并对该模拟交易记录背书。
具体地,内部区块链节点112和内部区块链节点122部署对应该交易的链代码,各自可以执行该链代码来实现真实交易。但步骤s32中,内部区块链节点112和内部区块链节点122并未真实执行该链代码中的真实交易,而是模拟执行该交易,并生成模拟交易记录,该模拟交易记录包括执行该交易的执行结果。
该链代码可以指定对该交易的模拟交易记录背书所使用的背书策略。该背书策略指定参与对该模拟交易记录背书的背书组织,该背书策略指定的背书组织包括区块链节点组114和区块链节点组124。区块链节点组114和区块链节点组124各自存储的链代码均包括该背书策略,内部区块链节点112和内部区块链节点122各自根据该背书策略对各自的模拟交易记录实现背书。
内部区块链节点112和内部区块链节点122分别向客户端发送各自背书后的模拟交易记录。
步骤s33,客户端接收内部区块链节点112和内部区块链节点122分别反馈的背书后的模拟交易记录。
客户端分别接收内部区块链节点112和内部区块链节点122反馈的背书后的模拟交易记录。如果只收到内部区块链节点112和内部区块链节点122中的一个区块链节点的反馈,则客户端等待另一个区块链节点的反馈。待客户端接收到内部区块链节点112和内部区块链节点122分别反馈的模拟交易记录之后,客户端将内部区块链节点112和内部区块链节点122分别反馈的模拟交易记录合并为一个模拟交易记录,因此合并后的该模拟交易记录包含内部区块链节点112的背书和内部区块链节点122的背书。后续客户端向共识节点发送合并后的该模拟交易记录。
步骤s34,客户端向共识组织160的共识节点发送背书后的模拟交易记录。
对于单个交易,多个经过背书的模拟交易记录被合并为一个模拟交易记录后,客户端都会将该合并后的模拟交易记录发送至该共识节点。
对于该通道140中的多个交易,每个交易的模拟交易记录都会被客户端发送至该共识节点。
步骤s35,该共识节点接收所述客户端发送的模拟交易记录,并对接收到的多个交易的多个模拟交易记录排序,根据排序后的该多个模拟交易记录构造新区块,并和其他共识节点同步该新区块。
该共识节点不断接收属于通道140的交易记录,例如接收一个客户端或者不同客户端在不同时间点发送的多个模拟交易记录。在该共识节点每次接收到一个模拟交易记录时,共识组织根据共识算法对该模拟交易记录进行验证,并在该共识节点存储验证通过的模拟交易记录。该共识节点对存储的通道140的所有模拟交易记录排序,例如共识节点按照接收每个模拟交易记录的时间对该多个模拟交易记录排序。
可选地,在已排序的该通道140的多个模拟交易记录达到预设数据量时,共识节点构造包括排序的该多个模拟交易记录的新区块,该新区块属于通道140。
共识组织160中的共识节点之间同步该新区块。即该生成该新区块的共识节点,将该新区块的副本发送至共识组织160中的其他共识节点,其他共识节点存储该新区块的副本。
步骤s36,每个区块链节点组的主控点分别从与该主控点连接的共识节点获取该新区块,验证该新区块的背书。
在一个实施方式中,区块链节点组134中的主控点133从与该主控点133连接的共识节点164获取该新区块,并验证该新区块的背书是否符合背书策略。区块链节点组114中的主控点113从与该主控点113连接的共识节点161获取该新区块,并验证该新区块的背书是否符合背书策略。
步骤s37,每个区块链节点组的主控点在该新区块通过背书验证后,向该区块链节点组中的内部区块链节点发送该新区块。
从而,该内部区块链节点将该新区块添加到该区块链节点组存储的区块链中,该新区块中的模拟交易记录转化为真实交易记录。另外,参与背书的区块链节点执行该新区块中的真实交易记录所记录的交易。
举例说明,区块链节点组134中的主控点133向该内部区块链节点132发送该新区块,该内部区块链节点132将该新区块添加到区块链节点组134存储的区块链。区块链节点组114中的主控点113向内部区块链节点112发送该新区块,该内部区块链节点112不仅将该新区块添加到区块链节点组114存储的区块链,还执行该新区块中的交易记录所记录的交易中由该内部区块链节点112执行的部分动作。例如,如果该交易为跨银行转账,内部区块链节点112为转账方,内部区块链节点122为收款方,则内部区块链节点112执行转账操作。
假设在创建通道140时,将多个租户的区块链节点组加入该通道。该多个租户包括包括租户a、租户b和租户c;即租户a的区块链节点组114、租户b的区块链节点组124和租户c的区块链节点组134都已加入通道140。在创建通道140后,本申请提供的方法可以实现在通道140中退出租户b的区块链节点组124,从而该租户b的区块链节点组124退出对该通道140对应的区块链的维护。
图4提供了将租户b的区块链节点组退出通道140的一种可能实现架构。如图4所示,在图2所示区块链系统的基础上,所述架构还进一步包括管理节点170,用于管理所有租户的执行节点。租户的执行节点,用于按照管理节点170的指示在该租户的资源隔离区内执行操作,例如部署区块链节点组;该执行节点部署在该租户的资源隔离区,例如租户a的执行节点1101部署在租户a的资源隔离区110。
管理节点170可以部署在管理平台上。该管理平台可以部署在一个服务器上,或者分布式部署在多个服务器上。本申请中的服务器可以是公有云中的服务器,或者可以是私有云中的服务器。该管理节点170可以管理所有通道(例如通道140)。管理节点170与所有租户的执行节点(例如执行节点1101、执行节点1201、执行节点1301)均通信连接,从而管理节点170可以通过每个租户的执行节点管理该租户的区块链节点组。
下面结合图5描述本申请提供的维护区块链的方法,该方法用于将租户b的区块链节点组124退出通道140,该方法包括步骤s51到步骤s61。
步骤s51,管理节点170向除了租户b以外的所有租户发送将租户b退出通道140的请求。该请求包括租户b的标识和通道140的标识。
除了租户b以外的所有租户是指:在已加入该通道140的所有区块链节点组所对应的所有租户中,除了租户b以外的所有租户。
可选地,对于触发管理节点170发送将租户b退出通道140的请求的场景,本申请不做限定。下面举例提供一种场景。
场景举例,租户b的资源隔离区120存在恶意病毒,导致区块链节点组124无法在通道140中对合约事项执行交易。例如,该资源隔离区120部署的容器运行恶意病毒代码。例如,该资源隔离区120部署的区块链节点组124被恶意修改或者已经被恶意病毒入侵,导致区块链节点组124中用于对交易记录签名的证书被篡改,或者导致用于区块链节点组124接收客户端的交易请求的端口被恶意关闭。
一种可能的攻击方式,容器运行恶意病毒,该恶意病毒通过应用获取
cap_dac_override的能力,然后触发open_by_handle_at这个系统调用,通过这个系统调用遍历所有文件路径,并暴力破解每个文件路径下的每个文件的handle文件句柄,通过该handle文件句柄访问文件,窃取/破坏该文件中的数据。
可选地,管理节点170可以直接生成将租户b退出通道140的请求,不需要任何条件触发生成该请求的动作。
步骤s52,管理节点170接收除了租户b以外的所有租户对该请求的反馈,按照共识策略对所有反馈达成共识。
可选地,共识策略可以是少数服从多数的策略。因此,如果多数租户反馈同意将租户b退出通道140,则达成将租户b退出通道140的共识。
可选地,对于达成将租户b退出通道140的共识,共识策略可以指定需要获得同意的租户。举例说明,租户a的区块链节点组114、租户b的区块链节点组124和租户c的区块链节点组124都已加入通道140;共识策略可以指定需要同时获得租户a和租户c的同意才能达成将租户b退出通道140的共识。举例说明,如果租户a是通道140的发起方,共识策略可以指定只需要获得租户a的同意便能达成将租户b退出通道140的共识。
在达成将租户b退出通道140的共识之后,管理节点170执行步骤s53在通道140中停止租户b的区块链节点组124,避免区块链节点组124继续参与对该通道140的区块链的维护。
本申请中,租户加入通道140的具体实现是:租户具有的多个区块链节点组中至少一个区块链节点组加入该通道140。租户退出通道140,是指将该租户已加入该通道140的所有区块链节点组均退出通道140。
可选地,管理节点170执行步骤s53停止区块链节点组124的动作可以不需要先得到租户的共识,因此步骤s51和步骤s52为本申请的可选步骤。
步骤s53,管理节点170指示租户b的执行节点1201停止运行区块链节点组124。
租户b的执行节点1201部署在资源隔离区120中。可选地,租户b的执行节点1201可以部署在资源隔离区120中的一个服务器上,或者分布式部署在资源隔离区120中的多个服务器上。
管理节点170与租户b的执行节点1201之间建立有通信连接,这样管理节点170与租户b的执行节点1201之间可以进行数据传输。步骤s53中,该管理节点170指示租户b的执行节点1201的实现方式可以是消息或者指令,在此不限定指示的具体实现方式;该消息或者指令可以携带该区块链节点组124的标识。
步骤s54,租户b的执行节点1201停止在租户b的资源隔离区120中运行区块链节点组124。
具体地,租户b的执行节点1201可以执行如下两个操作来停止区块链节点组124。
操作一,租户b的执行节点1201可以指示锚点121断开与通道140中的其它区块链节点组的锚点(例如租户a的区块链节点组114的锚点111)的通信连接。后续,区块链节点组124的区块链节点122不再与通道140中的其它区块链节点组交互数据。
操作二,租户b的执行节点1201指示主控点123断开与共识节点163的通信连接。这样,该主控点123不再从共识节点163获取属于通道140的新区块。
可选地,租户b的执行节点1201在停止区块链节点组124时,租户b的执行节点1201还停止区块链节点组124内部的锚点121、主控点123和区块链节点122之间的通信连接。这样,在锚点121、主控点123和区块链节点122之间不能继续进行数据传输。
步骤s55,管理节点170获取区块链节点组124的配置信息。
管理节点170存储有区块链节点组124在该通道140中的配置信息,因此管理节点170可以获取该区块链节点组124的配置信息。
可选地,管理节点170存储有通道140的通道配置信息,该通道配置信息记录有该通道140中所有区块链节点组的配置信息。因此,管理节点170可以获取该通道140中区块链节点组124的配置信息。
步骤s56,管理节点170向租户a的执行节点1101发送将区块链节点组124退出通道140的指示。该指示携带有通道140的标识和该区块链节点组124的标识,还携带有区块链节点组124的配置信息。
管理节点170与租户a的执行节点1101之间建立有通信连接,这样管理节点170与租户a的执行节点1101之间可以进行数据传输。步骤s56中,该管理节点170指示租户a的执行节点1101的实现方式可以是消息或者指令,在此不限定指示的具体实现方式;该消息或者指令可以携带该区块链节点组124的标识。
步骤s57,租户a的执行节点1101获取通道140的通道配置信息。
该通道140的通道配置信息可以包括:通道140的标识、通道140包括的所有区块链节点组的配置信息。此时,该通道配置信息包括区块链节点组124的配置信息。
可选地,每个区块链节点组的配置信息包括:该区块链节点组的操作权限,该区块链节点组的权限证书,该区块链节点组使用的安全算法。
该区块链节点组的操作权限包括:该区块链节点组的最高管理权限,操作该区块链节点组的数据的读权限和写权限。在一个实施方式中,该通道配置信息指示为该区块链节点组124配置该区块链节点组124的最高管理权限。该通道配置信息指示为该区块链节点组124配置读/写该区块链节点组124的数据的读权限和写权限;这样,该区块链节点组124可以读/写该区块链组124管理的区块链。
可选地,该区块链节点组的权限证书包括:管理该区块链节点组的最高管理权限的证书,该区块链节点组的根证书,该区块链节点组通信所使用的根证书。可选地,该区块链节点组的根证书为客户端访问该区块链节点组的权限证书。可选地,该区块链节点组通信所使用的根证书可以用于:建立该区块链节点组中的锚节点、内部区块链节点和主控点之间的通信连接,建立该区块链节点组的锚节点与通道140中其他区块链节点组的锚节点之间的通信连接,和建立该区块链节点组的主控点与共识节点之间的通信连接。可选地,基于该区块链节点组通信所使用的根证书建立的通信连接,为需要使用该根证书鉴权的通信连接。可选地,该区块链节点组通信所使用的根证书可以是基于安全传输层协议(transportlayersecurity,tls)通信的根证书。
该区块链节点组使用的安全算法包括:防篡改区块的算法(例如哈希算法)。举例,对于区块链中的相邻两个区块,使用该哈希算法计算前一个区块的哈希值,并将该哈希值存储在后一个的区块中;这样,可以通过该哈希值发现该前一个区块的数据是否被恶意修改。可选地,如果该区块链节点组还参与背书,则该区块链节点组使用的安全算法还包括:防止对该区块链节点组背书后的交易记录进行篡改的算法(例如哈希算法)。从而,对于共识节点从该区块链节点组接收按照该算法处理后的交易记录,防止该交易记录中的交易信息在共识节点中泄露。
可选地,本申请所述的通道配置信息还可以包括:通道140的权限策略。
该通道140的权限策略指定通道140中具有管理权限的租户;例如,该权限策略指定对通道140具有最高管理权限的租户;例如,该权限策略可以指定对通道140具有读通道配置信息的读权限的租户;例如,该权限策略指定对通道140具有写通道配置信息的写权限的租户。可选地,如果租户a为创建通道140的发起方,则该通道140的权限策略,可以指定租户a具有管理通道140的最高管理权限,可以指定租户a具有读通道配置信息的读权限,可以指定租户a具有写通道配置信息的写权限。
可选地,本申请所述的通道配置信息还可以包括:该通道配置信息的版本号。
步骤s57中,该租户a的执行节点1101可以从共识组织160(例如共识节点161)获取通道140的通道配置信息,该通道配置信息包括该区块链节点组124的配置信息。
步骤s58,租户a的执行节点生成通道140的通道调整信息。
租户a的执行节点1101可以计算该通道140的通道配置信息与管理节点170获取的区块链节点组124的配置信息之间的差量,并在通道调整信息记录该差量。因此,通道调整信息包括该通道配置信息与该区块链节点组124的配置信息之间的差量,即该通道调整信息不包括区块链节点组124的配置信息,并且该通道调整信息包括在通道140中除了租户b的区块链节点组124以外的所有区块链节点组的配置信息。该通道调整信息还可以包括通道140的的标识。可选地,该通道调整信息还可以包括:该通道调整信息的版本号、通道配置信息的版本号。
在一个实施方式中,提供一种数据结构来记录通道配置信息。该数据结构包括如下字段:记录通道140的标识的字段、记录通道140所包括的所有区块链节点组的配置信息的字段、记录通道140的权限策略的字段、记录版本号的字段。通道调整信息包括通道配置信息与区块链节点组124的配置信息的差量,本申请仍采用该数据结构记录该通道调整信息。从共识组织160获取的通道配置信息中包括的区块链节点组124的配置信息,与管理节点170向租户a的执行节点1101发送的区块链节点组124的配置信息,是相同的;因此在记录该通道调整信息的数据结构中记录该区块链节点组124的配置信息的字段为空;即在记录该通道调整信息的数据结构中记录通道140中除了租户b的区块链节点组124以外的所有区块链节点组的配置信息。在记录该通道调整信息的数据结构中记录该通道调整信息的版本号,还可以记录从共识组织160获取通道140的通道配置信息的版本号。在记录该通道调整信息的数据结构中记录通道140的标识。
步骤s59,租户a的执行节点1101向共识组织160发送该通道调整信息。
具体地,租户a的执行节点1101向与区块链节点组114连接的共识节点161发送该通道调整信息。
本申请将该通道调整信息作为一个交易记录,因为该通道调整信息需要记录在该通道140对应的区块链中,即在该区块链中记录已加入通道140的租户中除了租户b以外的所有租户的共识。具体地,租户a的执行节点1101向主控点113发送该通道调整信息,该主控点113将该通道调整信息向共识节点161发送。
共识节点161接收该通道调整信息,并将该通道调整信息作为一个交易记录。按照处理交易记录的方式,共识组织160按照通道140的共识算法对该通道调整信息进行验证,共识节点161保存验证通过的该通道调整信息。
共识节点161生成包括该通道调整信息的区块。一种可能实现中,该通道调整信息的数据量达到生成一个区块的数据量,共识节点161生成只记录该通道调整信息的区块。一种可能实现中,该通道调整信息的数据量未达到生成一个区块的数据量,共识节点161将该通道调整信息和通道140的其他交易记录一起生成一个区块。在另一种可能实现中,该通道调整信息的数据量超过生成一个区块的数据量,共识节点161将该通道调整信息划分入多个区块。可选地,在生成该多个区块时,首先按照生成区块所需的数据量将该通道调整信息划分为多份数据,除了最后一份数据,其它份数据等于生成区块所需的数据量,从而将最后一份数据与通道140的其他交易记录一起生成一个区块,针对其它份数据分别生成一个区块。
共识组织160在共识节点间同步共识节点161生成的包括该通道调整信息的区块。例如,共识节点161将该区块的副本发送至共识节点164,共识节点164存储该区块。
通道140中,除了租户b的区块链节点组124以外,其他已加入通道140的每个区块链节点组可以从与该个区块链节点组连接的共识节点获取到包括该通道调整信息的区块,并将该区块加入到本区块链节点组存储的区块链中。从而,该其他已加入通道140的所有区块链节点组可以通过区块链维护将区块链节点组124退出通道140的共识。
举例说明,通道140中,除了租户b的区块链节点组124以外,还包括租户a的区块链节点组114和租户c的区块链节点组134。租户a的区块链节点组114的主控点113可以从共识节点161获取包括该通道调整信息的区块,并将该区块加入到该区块链节点组114存储的区块链。区块链节点组134的主控点133可以从共识节点164获取包括该通道调整信息的区块,并将该区块加入到该区块链节点组134存储的区块链。这样,租户a的区块链节点组114和租户c的区块链节点组134在各自的区块链中记录了将区块链节点组124退出通道140的共识,即租户a和租户c记录了将区块链节点组124退出通道140的共识。
本申请中,步骤s53和步骤s54可以先于步骤s55到步骤s59执行,或者与步骤s55到步骤s59同时执行,或者晚于步骤s55到步骤s59执行。
步骤s60,管理节点170向租户a的执行节点1101发送更新背书策略的指示。
在租户b的区块链节点组124退出通道140之后,如果存在需要区块链节点组124和区块链节点组114共同参与背书的合约事项,则需要更新该合约事项对应的背书策略,管理节点170执行步骤s60向租户a的执行节点1101发送更新该背书策略的指示。
在区块链节点组124退出通道140之后,如果不存在需要区块链节点122参与背书的合约事项,则不需要更新背书策略,因此步骤s60和步骤s61都为本方法的可选步骤。
本申请中,步骤s60为可选步骤。租户的执行节点更新背书策略,可以是由管理节点170触发,也可以是该租户的执行节点自己触发。
步骤s61,租户a的执行节点1101更新背书策略。
具体地,在区块链节点组124退出通道140之后,如果存在需要区块链节点组124和区块链节点组114共同参与背书的合约事项,则租户a的执行节点1101更新执行该合约事项的链代码,包括更新该链代码记录的背书策略;更新的背书策略指定了需要参与背书的区块链节点组(包括区块链节点组114,但不包括区块链节点组124)。区块链节点组114(具体可以是内部区块链节点112)重新加载该更新的链代码。这样,后续区块链节点组124不参与对执行该合约事项所得的交易记录进行背书。
如果存在需要区块链节点组124和区块链节点组134共同参与背书的合约事项,区块链节点组134可以做与区块链节点组114类似的背书策略更新。因此,通道140中,除了租户b的区块链节点组124以外的其他租户的区块链节点组,可以采用类似区块链节点组114更新背书策略的更新方式,更新背书策略。可选地,除了租户b的区块链节点组124以外的其他租户的区块链节点组,也可以是由管理节点170发送的指示触发对背书策略的更新。
可选地,由人为更新新执行该合约事项的链代码,替代租户的执行节点更新执行该合约事项的链代码。
装置
本申请提供一种维护区块链的装置,该装置可以是本申请所述的第二租户(即租户a)的执行节点(即租户a的执行节点1101)。该装置包括的功能单元用于实现上述维护区块链的方法中由该第二租户的执行节点执行的步骤;本申请对在该装置中如何划分功能单元不做限定,下面实例性地提供一种功能单元的划分,如图6所示。
如图6所示的维护区块链的装置600,包括:
接收单元601,用于接收管理节点发送的第一租户(即租户b)的目标区块链节点组(即区块链节点组124)的配置信息;
处理单元602,用于从共识组织(即共识组织160)获取通道的通道配置信息,所述通道(即通道140)对应一个区块链,所述通道配置信息包括所述通道的标识和已加入所述通道的所有区块链节点组的配置信息,所述已加入所述通道的所有区块链节点组包括所述目标区块链节点组;
所述处理单元602,用于根据所述通道配置信息和从所述管理节点接收的所述目标区块链节点组的配置信息生成所述通道的通道调整信息,所述通道调整信息包括:所述通道的标识和已加入所述通道的所有区块链节点组中除了所述目标区块链节点组以外的区块链节点组的配置信息;
发送单元603,用于向所述共识组织发送所述通道调整信息;
所述处理单元602,还用于从所述共识组织获取包括所述通道调整信息的区块,将所述区块添加至已加入所述通道的区块链节点组所存储的区块链。
可选地,所述目标区块链节点组的配置信息包括:
所述目标区块链节点组的操作权限,
所述目标区块链节点组的权限证书,和
所述目标区块链节点组使用的安全算法。
可选地,所述处理单元602,用于对于需要所述目标区块链节点组参与背书的合约事项,在用于执行所述合约事项的链代码中更新所述合约事项对应的背书策略,更新后的背书策略指定所述目标区块链节点组不参与对执行所述合约事项所得的交易记录背书。
本申请提供一种维护区块链的装置,该装置可以是本申请所述的第一租户(即租户b)的执行节点(即租户b的执行节点1201)。该装置包括的功能单元用于实现上述维护区块链的方法中由该第一租户的执行节点执行的步骤;本申请对在该装置中如何划分功能单元不做限定,下面实例性地提供一种功能单元的划分,如图7所示。
如图7所示的维护区块链的装置700,包括:
接收单元701,用于接收管理节点(即管理节点170)发送的停止运行已加入通道(即通道140)的目标区块链节点组(即区块链节点组124)的指示,所述通道对应一个区块链;
处理单元702,用于停止在第一租户(即租户b)的资源隔离区(即资源隔离区120)运行所述目标区块链节点组。
本申请提供一种维护区块链的装置,该装置可以是本申请所述的管理节点(即管理节点170)。该装置包括的功能单元用于实现上述维护区块链的方法中由该管理节点执行的步骤;本申请对在该装置中如何划分功能单元不做限定,下面实例性地提供一种功能单元的划分,如图7所示。
如图8所示的维护区块链的装置800,装置800包括:
处理单元802,用于指示第一租户(即租户b)的执行节点(即执行节点1201)在所述第一租户的资源隔离区(即资源隔离区120)中停止运行已加入通道(即通道140)的目标区块链节点组(区块链节点组124),所述通道对应一个区块链;
所述处理单元802,用于获取所述目标区块链节点组的配置信息;
发送单元801,用于向第二租户(即租户a)的执行节点(即执行节点1101)发送所述目标区块链节点组的配置信息。
可选地,所述目标区块链节点组的配置信息包括:
所述目标区块链节点组的操作权限,
所述目标区块链节点组的权限证书,和
所述目标区块链节点组使用的安全算法。
可选地,所述发送单元801,用于向已加入所述通道的所有租户中除了所述第一租户以外的租户发送将所述第一租户退出所述通道的请求;
所述处理单元802,用于接收已加入所述通道的所有租户中除了所述第一租户以外的租户对所述请求的反馈,按照共识策略对所有反馈达成将所述第一租户退出所述通道的共识。
可选地,所述处理单元802,用于在所述第一租户的资源隔离区存在病毒时,生成将所述第一租户退出所述通道的请求。
可选地,所述装置还包括:
所述处理单元802,用于对于需要所述目标区块链节点组参与背书的合约事项,指示所述第一租户的执行节点更新所述合约事项对应的背书策略,更新后的背书策略指定所述目标区块链节点组不参与对执行所述合约事项所得的交易记录背书。
租户的执行节点(例如第一租户的执行节点、第二租户的执行节点)或者管理节点,可以部署在一个服务器上,或者分布式地部署在多个服务器上。租户的执行节点或者管理节点可以部署在同一个服务器上或者部署在不同服务器上。下面示例性地提供该服务器的一种可能的基本硬件架构,如图9所示。
参见图9,服务器900包括处理器901、存储器902、通信接口903和总线904。
服务器900中,处理器901的数量可以是一个或多个,图1仅示意了其中一个处理器901。可选地,处理器901可以是中央处理器(centralprocessingunit,cpu)或者arm处理器。如果服务器900具有多个处理器901,多个处理器901的类型可以不同,或者可以相同。可选地,服务器900的多个处理器901还可以集成为多核处理器。
存储器902存储计算机指令;例如,该计算机指令包括链代码;例如,该计算机指令用于实现本申请提供的方法中的各个步骤;例如,该计算机指令用于实现本申请提供的装置600或装置700或者装置800包括的各功能单元。
存储器902可以是以下存储介质的任一种或任一种组合:非易失性存储器(non-volatilememory,nvm)(例如只读存储器(readonlymemory,rom)、固态硬盘(solidstatedrives,ssd)、机械硬盘、磁盘、磁盘整列),易失性存储器(volatilememory)。
通信接口903可以是以下器件的任一种或任一种组合:网络接口(例如以太网接口)、无线网卡等具有网络接入功能的器件。
通信接口903用于服务器900与其他设备(例如服务器)进行数据通信。
图9用一条粗线表示总线904。处理器901、存储器902和通信接口903通过总线904连接。这样,处理器901可以通过总线904访问存储器902,以及通过总线904利用通信接口903与其他设备(例如服务器)进行数据交互。
可选地,服务器900执行存储器902中的计算机指令,在服务器900上实现本申请提供的维护区块链的方法中由执行节点执行的步骤或者由管理节点执行的步骤,或者在服务器900上实现本申请提供的装置600或装置700或者装置800。
本申请提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当服务器900的处理器901执行该计算机指令时,该服务器900执行本申请提供的维护区块链的方法中由第一租户的执行节点执行的步骤,或者该服务器执行该方法中由第二租户的执行节点执行的步骤,或者该服务器执行该方法中由管理节点执行的步骤。
本申请提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,该计算机指令用于实现装置600或者装置700或者装置800。
本申请提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。服务器的处理器可以从计算机可读存储介质读取并执行该计算机指令,使得该服务器执行本申请提供的维护区块链的方法中由第一租户的执行节点执行的步骤,或者使得服务器执行该方法中由第二租户的执行节点执行的步骤,或者使得服务器执行该方法中由管理节点执行的步骤。
本申请提供一种计算机程序产品,该计算机程序产品包括的计算机指令用于实现装置600或者装置700或者装置800。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的保护范围。