CN110989994B - 基于区块链的代码版本管理方法、装置、终端及存储介质 - Google Patents
基于区块链的代码版本管理方法、装置、终端及存储介质 Download PDFInfo
- Publication number
- CN110989994B CN110989994B CN201911128519.7A CN201911128519A CN110989994B CN 110989994 B CN110989994 B CN 110989994B CN 201911128519 A CN201911128519 A CN 201911128519A CN 110989994 B CN110989994 B CN 110989994B
- Authority
- CN
- China
- Prior art keywords
- node
- hash value
- version
- merck tree
- block
- 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
Links
- 238000003860 storage Methods 0.000 title claims abstract description 26
- 238000007726 management method Methods 0.000 title claims abstract description 24
- 238000012795 verification Methods 0.000 claims abstract description 124
- 238000000034 method Methods 0.000 claims abstract description 46
- 238000005096 rolling process Methods 0.000 claims abstract description 28
- 238000004590 computer program Methods 0.000 claims description 13
- 238000012545 processing Methods 0.000 claims description 12
- 238000004422 calculation algorithm Methods 0.000 description 26
- 238000010586 diagram Methods 0.000 description 26
- 238000004364 calculation method Methods 0.000 description 12
- 238000011161 development Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 5
- 238000010845 search algorithm Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000012827 research and development Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了一种基于区块链的代码版本管理方法、装置、终端及存储介质,该方法包括:根据回滚版本标识获取回滚版本信息;从区块链中获取第一区块,以得到第一区块中的第一默克尔树;根据回滚版本信息中的第一位置,确定从第一版本文件对应的叶子结点到第一默克尔树的根结点间第一路径结点,并根据第一路径结点确定第一分支结点;基于第一版本文件生成第一哈希值,根据第一分支结点对应的哈希值以及第一哈希值生成第一验证根哈希值,若第一默克尔树的根结点对应的哈希值与第一验证根哈希值相同,则将当前代码版本回滚为第一版本文件中包括的代码版本。采用本申请实施例,可提高用于回滚的代码版本的安全性和可靠性,适用性高。
Description
技术领域
本申请涉及区块链技术领域,尤其涉及一种基于区块链的代码版本管理方法、装置、终端及存储介质。
背景技术
伴随科技的发展,计算机成为目前信息化社会建设的必要手段,而计算机软件的开发更是成为计算机应有的必然途径。计算机软件的开发一方面可以促进计算机技术本身的发展,同时,也能够促进社会生产生活的变化,为经济的发展创造动力。一般来说,代码开发人员将软件代码开发完毕或更新完毕后,通常需要将新版本的软件代码或者编译结果部署到服务器上运行,才能间接的为用户提供服务,这个过程称为代码发布。其中,不乏遇到在新的代码版本发布过程中存在新版本有问题或不稳定的情况,因此为不影响用户体验,需要进行版本回滚,即回退到前一个版本或者前多个版本。但是由于代码版本存放过程中存在代码被篡改、被攻击的情况,因此,如何保证回滚版本的安全性成为当前亟待解决的问题。
发明内容
本申请实施例提供一种基于区块链的代码版本管理方法、装置、终端及存储介质,可提高用于回滚的代码版本的安全性和可靠性。
第一方面,本申请实施例提供了一种基于区块链的代码版本管理方法,该方法包括:
获取版本回滚请求,根据所述版本回滚请求中的回滚版本标识从版本数据库中获取回滚版本信息,其中所述回滚版本信息中包括第一版本文件,第一区块标识,以及所述第一版本文件对应的叶子结点在第一默克尔树中的第一位置;
根据所述第一区块标识从区块链中获取所述第一区块标识对应的第一区块,其中所述第一区块中包括所述第一默克尔树,所述第一默克尔树包括至少两个版本文件对应的叶子结点和一个根结点,每个结点对应一个哈希值;
根据所述第一位置,确定从所述第一版本文件对应的叶子结点开始到所述第一默克尔树的根结点为止,所包括的第一路径结点,并根据所述第一路径结点确定与所述第一路径结点为一度关系且非第一路径结点的第一分支结点;
基于所述第一版本文件生成第一哈希值,根据所述第一分支结点对应的哈希值以及所述第一哈希值生成第一验证根哈希值,若所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,则将当前版本文件回滚为所述第一版本文件。
结合第一方面,在一种可能的实施方式中,所述方法还包括:
根据所述第一位置从所述第一默克尔树中获取所述第一位置对应的第二哈希值;
当所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,且所述第一哈希值与所述第二哈希值相同时,将当前版本文件回滚为所述第一版本文件。
结合第一方面,在一种可能的实施方式中,所述回滚版本信息中还包括开发者标识,所述第一版本文件对应的文件数字签名;所述方法还包括:
根据所述开发者标识从公钥存储区块中获取所述开发者标识对应的公钥;
基于所述公钥对所述文件数字签名进行解密以得到第三哈希值;
当所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,且所述第一哈希值与所述第三哈希值相同时,将当前版本文件回滚为所述第一版本文件。
结合第一方面,在一种可能的实施方式中,所述根据所述第一位置,确定从所述第一版本文件对应的叶子结点开始到所述第一默克尔树的根结点为止,所包括的第一路径结点,包括:
从所述第一位置开始,确定从所述第一版本文件对应的叶子结点到所述第一默克尔树的根结点之间的搜索路径,将所述搜索路径对应的结点确定为第一路径结点。
结合第一方面,在一种可能的实施方式中,所述获取版本回滚请求之前,所述方法还包括:
当检测到第一版本对应的第一版本文件发布时,获取所述第一版本之前的最新版本对应的第二区块,其中,所述第二区块中包括第二默克尔树;
基于所述第一版本文件生成第四哈希值,将所述第四哈希值确定为所述第一版本文件对应的叶子结点的哈希值,并在所述第二默克尔树中插入所述第四哈希值以得到所述第一默克尔树;
获取所述第一版本文件对应的叶子结点在所述第一默克尔树中的第一位置,将所述第一版本文件、所述第一位置以及所述第一默克尔树的根结点对应的哈希值在区块链网络中进行广播,以使所述区块链网络中的共识节点根据所述第一版本文件和所述第一位置,对所述第一默克尔树的根结点对应的哈希值进行验证以得到第一校验结果;
根据接收到的所述共识节点返回的第一校验结果,确定对所述第一默克尔树的根结点对应的哈希值的第一共识结果,若所述第一共识结果为达成共识,则将包括所述第一默克尔树的第一区块添加至区块链中。
结合第一方面,在一种可能的实施方式中,所述根据接收到的所述共识节点返回的第一校验结果,确定对所述第一默克尔树的根结点对应的哈希值的第一共识结果,包括:
若接收到的所述共识节点返回的第一校验结果中,校验通过的比例不小于预设通过比例,则确定对所述第一默克尔树的根结点对应的哈希值的第一共识结果为达成共识。
结合第一方面,在一种可能的实施方式中,所述回滚版本信息中还包括第三区块标识,所述第一版本文件对应的叶子结点在第三默克尔树中的第二位置;所述方法还包括:
根据所述第三区块标识从区块链中获取所述第三区块标识对应的第三区块,所述第三区块中包括所述第三默克尔树;
根据所述第一版本文件对应的叶子结点在第三默克尔树中的第二位置,确定从所述第一版本文件对应的叶子结点开始到所述第三默克尔树的根结点为止,所包括的第二路径结点,并根据所述第二路径结点确定与所述第二路径结点为一度关系且非第二路径结点的第二分支结点;
根据所述第二分支结点对应的哈希值以及所述第一哈希值生成第二验证根哈希值,当所述第三默克尔树的根结点对应的哈希值与所述第二验证根哈希值相同,且所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同时,将当前版本文件回滚为所述第一版本文件。
第二方面,本申请实施例提供了一种基于区块链的代码版本管理装置,该装置包括:
回滚信息获取模块,用于获取版本回滚请求,根据所述版本回滚请求中的回滚版本标识从版本数据库中获取回滚版本信息,其中所述回滚版本信息中包括第一版本文件,第一区块标识,以及所述第一版本文件对应的叶子结点在第一默克尔树中的第一位置;
第一默克尔树获取模块,用于根据所述第一区块标识从区块链中获取所述第一区块标识对应的第一区块,其中所述第一区块中包括所述第一默克尔树,所述第一默克尔树包括至少两个版本文件对应的叶子结点和一个根结点,每个结点对应一个哈希值;
第一分支结点获取模块,用于根据所述第一位置,确定从所述第一版本文件对应的叶子结点开始到所述第一默克尔树的根结点为止,所包括的第一路径结点,并根据所述第一路径结点确定与所述第一路径结点为一度关系且非第一路径结点的第一分支结点;
版本回滚处理模块,用于基于所述第一版本文件生成第一哈希值,根据所述第一分支结点对应的哈希值以及所述第一哈希值生成第一验证根哈希值,若所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,则将当前版本文件回滚为所述第一版本文件。
结合第二方面,在一种可能的实施方式中,上述装置还包括第一验证模块,所述第一验证模块包括:
第二哈希值获取单元,用于根据所述第一位置从所述第一默克尔树中获取所述第一位置对应的第二哈希值;
哈希值验证单元,用于当所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,且所述第一哈希值与所述第二哈希值相同时,将当前版本文件回滚为所述第一版本文件。
结合第二方面,在一种可能的实施方式中,所述回滚版本信息中还包括开发者标识,所述第一版本文件对应的文件数字签名;上述装置还包括第二验证模块,所述第二验证模块包括:
公钥获取单元,用于根据所述开发者标识从公钥存储区块中获取所述开发者标识对应的公钥;
第三哈希值获取单元,用于基于所述公钥对所述文件数字签名进行解密以得到第三哈希值;
签名验证单元,用于当所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,且所述第一哈希值与所述第三哈希值相同时,将当前版本文件回滚为所述第一版本文件。
结合第二方面,在一种可能的实施方式中,上述第一分支结点获取模块包括第一路径结点确定单元和第一分支结点确定单元,所述第一路径结点确定单元用于:
从所述第一位置开始,确定从所述第一版本文件对应的叶子结点到所述第一默克尔树的根结点之间的搜索路径,将所述搜索路径对应的结点确定为第一路径结点。
结合第二方面,在一种可能的实施方式中,所述装置还包括数据上链模块,所述数据上链模块包括:
第二默克尔树获取单元,用于当检测到第一版本对应的第一版本文件发布时,获取所述第一版本之前的最新版本对应的第二区块,其中,所述第二区块中包括第二默克尔树;
第一默克尔树生成单元,用于基于所述第一版本文件生成第四哈希值,将所述第四哈希值确定为所述第一版本文件对应的叶子结点的哈希值,并在所述第二默克尔树中插入所述第四哈希值以得到所述第一默克尔树;
数据共识单元,用于获取所述第一版本文件对应的叶子结点在所述第一默克尔树中的第一位置,将所述第一版本文件、所述第一位置以及所述第一默克尔树的根结点对应的哈希值在区块链网络中进行广播,以使所述区块链网络中的共识节点根据所述第一版本文件和所述第一位置,对所述第一默克尔树的根结点对应的哈希值进行验证以得到第一校验结果;
第一区块上链单元,用于根据接收到的所述共识节点返回的第一校验结果,确定对所述第一默克尔树的根结点对应的哈希值的第一共识结果,若所述第一共识结果为达成共识,则将包括所述第一默克尔树的第一区块添加至区块链中。
结合第二方面,在一种可能的实施方式中,所述数据共识单元具体用于:
若接收到的所述共识节点返回的第一校验结果中,校验通过的比例不小于预设通过比例,则确定对所述第一默克尔树的根结点对应的哈希值的第一共识结果为达成共识。
结合第二方面,在一种可能的实施方式中,所述回滚版本信息中还包括第三区块标识,所述第一版本文件对应的叶子结点在第三默克尔树中的第二位置;所述装置还包括第三验证模块,所述第三验证模块包括:
第三默克尔树获取单元,用于根据所述第三区块标识从区块链中获取所述第三区块标识对应的第三区块,所述第三区块中包括所述第三默克尔树;
第二分支结点获取单元,用于根据所述第一版本文件对应的叶子结点在第三默克尔树中的第二位置,确定从所述第一版本文件对应的叶子结点开始到所述第三默克尔树的根结点为止,所包括的第二路径结点,并根据所述第二路径结点确定与所述第二路径结点为一度关系且非第二路径结点的第二分支结点;
第二验证根哈希值验证单元,用于根据所述第二分支结点对应的哈希值以及所述第一哈希值生成第二验证根哈希值,当所述第三默克尔树的根结点对应的哈希值与所述第二验证根哈希值相同,且所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同时,将当前版本文件回滚为所述第一版本文件。
第三方面,本申请实施例提供了一种终端设备,该终端设备包括处理器和存储器,该处理器和存储器相互连接。该存储器用于存储支持该终端设备执行上述第一方面和/或第一方面任一种可能的实现方式提供的方法的计算机程序,该计算机程序包括程序指令,该处理器被配置用于调用上述程序指令,执行上述第一方面和/或第一方面任一种可能的实施方式所提供的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序包括程序指令,该程序指令当被处理器执行时使该处理器执行上述第一方面和/或第一方面任一种可能的实施方式所提供的方法。
在本申请实施例中,通过获取版本回滚请求,可根据版本回滚请求中的回滚版本标识从版本数据库中获取回滚版本信息,其中回滚版本信息中包括第一版本文件,第一区块标识,以及第一版本文件对应的叶子结点在第一默克尔树中的第一位置。根据第一区块标识从区块链中获取第一区块标识对应的第一区块,可得到第一区块中包括第一默克尔树,其中第一默克尔树包括至少两个版本文件对应的叶子结点和一个根结点,每个结点对应一个哈希值。根据第一位置,可得到从第一版本文件对应的叶子结点到第一默克尔树的根结点之间的第一路径结点,然后根据第一路径结点可确定出与第一路径结点为一度关系的第一分支结点。根据第一版本文件生成第一哈希值,根据第一分支结点对应的哈希值以及第一哈希值可得到第一验证根哈希值,若第一默克尔树的根结点对应的哈希值与第一验证根哈希值相同,则将当前代码版本回滚为第一版本文件中包括的代码版本。在本申请实施例中,在进行版本回滚之前,对用于回滚的第一版本文件进行哈希计算以得到第一哈希值,再结合所获取的第一分支结点对应的哈希值,生成第一验证根哈希值,最后将第一验证根哈希值与区块链中的第一默克尔树的根结点对应的哈希值进行比较,以校验第一版本文件是否被篡改,提高了用于回滚的版本文件的安全性,且以区块链中的根节点对应的哈希值为基准进行校验,可提高校验结果的可靠性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种区块链网络拓扑结构的结构示意图;
图2是本申请实施例提供的一种默克尔树的结构示意图;
图3是本申请实施例提供的基于区块链的代码版本管理方法的一流程示意图;
图4是本申请实施例提供的区块链和区块的一结构示意图;
图5是本申请实施例提供的第一位置的应用场景示意图;
图6是本申请实施例提供的一度关系的示意图;
图7是本申请实施例提供的第一路径节点和第一分支结点的示意图;
图8是本申请实施例提供的基于区块链的代码版本管理方法的另一流程示意图;
图9是本申请实施例提供的代码版本管理过程的场景示意图;
图10是本申请实施例提供的区块链和区块的另一结构示意图;
图11是本申请实施例提供的第二路径节点和第二分支结点的示意图;
图12是本申请实施例提供的基于区块链的代码版本管理装置的一结构示意图;
图13是本申请实施例提供的基于区块链的代码版本管理装置的另一结构示意图;
图14是本申请实施例提供的终端设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
首先,对本申请实施例中提到的区块链网络、默克尔树进行简单介绍。
请参见图1,图1是本申请实施例提供的一种区块链网络拓扑结构的结构示意图。应当理解,研发团队中的每个成员或角色都可以对应区块链网络中的一个节点,如图1所示的开发者节点1,开发者节点2,开发者节点3、开发者节点4、项目管理者节点1以及项目管理者节点2等。为方便描述,可将开发者节点和项目管理者节点都简称为节点。其中每个节点都与其他节点具有连接关系。可以理解的是,区块链网络拓扑结构中的任一节点可以是任意形式的计算设备,如服务器、终端等,在此不做限制。应当理解,终端包括但不限于手机、平板电脑、笔记本电脑、掌上电脑、移动互联网设备(mobile internet device,MID) 等,在此不做限制。每个节点在进行正常工作时可以接收输入信息,并基于接收到的输入信息维护该区块链网络拓扑结构内的共享数据。为了保证区块链网络拓扑结构内的信息互通,区块链网络拓扑结构中的每个节点之间可以存在信息连接,节点之间可以通过上述信息连接进行信息传输。例如,当区块链网络拓扑结构中的任意节点接收到输入信息时,区块链网络拓扑结构中的其他节点可根据共识算法获取该输入信息,并将该输入信息作为共享数据中的数据进行存储,以使得区块链网络拓扑结构中全部节点上存储的数据均一致。应当理解,本申请实施例中的区块链可采用私有链的形式,因此可对各节点的读写权限或者对外开放权限进行限制。其中区块链上的读写权限按研发团队预定的规则来制定,例如某个开发人员对应的节点只有读取权限等,在此不做限制。整个区块链网络由各个节点共同维护,网络接入可以通过各个节点的网关接入,共识过程由预先选好的节点(即共识节点)控制。
其中,对于区块链网络拓扑结构中的每个节点,均具有与其对应的节点标识,而且区块链网络拓扑结构中的每个节点均可以存储有区块链网络拓扑结构中其他节点的节点标识,以便后续根据其他节点的节点标识,将生成的区块广播至区块链网络拓扑结构中的其他节点。每个节点中可维护一个如下表所示的节点标识列表,将节点名称和节点标识对应存储至该节点标识列表中。其中,节点标识可为IP(Internet Protocol,网络之间互联的协议)地址以及其他任一种能够用于标识该节点的信息,表1中仅以IP地址为例进行说明。
节点名称 | 节点标识 |
节点1 | 117.114.151.174 |
节点2 | 117.116.189.145 |
… | … |
节点N | 119.123.789.258 |
表1
默克尔树(Merkle Trees),又称梅克尔树,通常是一种二叉树,也可以是多叉树,默克尔树拥有树结构的所有特点,默克尔树包含多个结点,多个结点中至少包括至少一个叶子结点、一个根结点,通常情况下还包含叶子结点和根结点之间的多个中间结点,各个结点都有对应的哈希值,其中叶子结点的哈希值通常是对基础数据进行哈希运算得到的哈希值,中间结点的哈希值是将相邻的两个叶子结点合并成一个字符串,然后对这个字符串进行哈希运算得到的哈希值,以此类推,经过中间结点的层层拼接以及哈希计算,最后得到的一个唯一哈希值,作为默克尔树的根结点的哈希值。参见图2,图2是本申请实施例提供的一种默克尔树的结构示意图。如图2所示,我们从最底部开始看,D0、D1、 D2和D3是叶子结点对应的交易,也就是基础数据,继续往上看,N0、N1、N2 和N3是叶子结点对应的哈希值,即它是将基础数据(也就是D0、D1、D2和 D3)进行哈希运算后得到的哈希值;继续往上看,N4和N5是中间结点,它们各是N0和N1经过哈希运算得到的哈希值以及N2和N3经过哈希运算得到的哈希值;接着往上,Root是N4和N5经过哈希运算后得到的哈希值,它代表默克尔树的顶部,通常我们认为,这就是这棵默克尔树的根结点对应的哈希值。也就是说,默克尔树是从下往上逐层计算的,就是说每个中间结点是根据相邻的两个叶子结点组合计算得出的,而根结点是根据相邻两个中间结点组合计算得出的,所以叶子结点是基础。由此可知,任意一个叶子结点的数据被修改,叶子结点对应的哈希值就会变更,最终根结点的哈希值就会改变。应当理解,区块链网络中的默克尔树是二叉树,所以它需要偶数个叶子结点。如果仅有奇数个交易需要归纳,那最后一个交易就会被复制一份以构成偶数个叶子结点。
本申请实施例提供的基于区块链的代码版本管理方法,可广泛适用于区块链网络中的任意一个开发者节点,其中研发团队每个开发人员对应区块链网络中的一个开发者节点。在本申请实施例中,开发者节点通过获取版本回滚请求,可根据版本回滚请求中的回滚版本标识从版本数据库中获取回滚版本信息,其中回滚版本信息中包括第一版本文件,第一区块标识,以及第一版本文件对应的叶子结点在第一默克尔树中的第一位置。根据第一区块标识从区块链中获取第一区块标识对应的第一区块,可得到第一区块中包括第一默克尔树,其中第一默克尔树包括至少两个版本文件对应的叶子结点和一个根结点,每个结点对应一个哈希值。根据第一位置,可得到从第一版本文件对应的叶子结点到第一默克尔树的根结点之间的第一路径结点,然后根据第一路径结点可确定出与第一路径结点为一度关系的第一分支结点。根据第一版本文件生成第一哈希值,根据第一分支结点对应的哈希值以及第一哈希值可得到第一验证根哈希值,若第一默克尔树的根结点对应的哈希值与第一验证根哈希值相同,则将当前代码版本回滚为第一版本文件中包括的代码版本。采用本申请实施例,可提高用于回滚的代码版本的安全性和可靠性,适用性高。
下面将结合图3至图14分别对本申请实施例提供的方法及相关装置分别进行详细说明。本申请实施例提供的方法中可包括用于获取回滚版本信息、获取第一默克尔树、获取第一路径节点、根据第一路径节点获取第一分支节点、获取第一验证根哈希值、根据第一默克树的根结点对应的哈希值验证第一验证根哈希值,在验证通过时基于第一版本文件中的代码版本进行版本回滚等数据处理阶段。其中,上述各个数据处理阶段的实现方式可参见图3和图8所示的实现方式。
参见图3,图3为本申请实施例提供的基于区块链的代码版本管理方法的一流程示意图。本申请实施例提供的方法可以包括如下步骤101至104:
101、获取版本回滚请求,根据版本回滚请求中的回滚版本标识从版本数据库中获取回滚版本信息。
在一些可行的实施方式中,开发者节点通过获取版本回滚请求,可根据版本回滚请求中包括的回滚版本标识从版本数据库中获取回滚版本信息,其中回滚版本信息中可包括第一版本文件,编写或开发第一版本文件的开发者对应的开发者标识、第一版本文件对应的文件数字签名、第一区块标识,以及第一版本文件对应的叶子结点在第一默克尔树中的第一位置等,在此不做限制。应当理解,第一版本文件为待回滚版本对应的代码文件,其中,第一版本文件可以是当前版本的前一个版本对应的代码文件,或者也可以是当前版本的前第n个版本对应的代码文件,在此不做限制,这里n为正整数。也就是说,基于本申请实施例提供的方法,可将当前软件版本或系统版本回滚为前一个版本或者回滚至前多个版本。应当理解,第一版本文件中可包括开发者编写的系统代码或软件代码、代码版本号、项目名称、项目负责人、开发者标识,版本发布时间等,在此不做限制。第一区块标识为第一区块对应的标识,其中第一区块为区块链中存储了第一版本文件和第一版本文件对应的哈希值的区块,且第一区块中还可以存储有第一默克尔树,可以理解的是,第一默克尔树为根据第一版本文件对应的哈希值所生成的默克尔树,第一默克尔树包括至少一个版本文件对应的叶子结点和一个根结点,每个结点对应一个哈希值。第一区块标识可以是第一区块的区块哈希值(即区块头哈希值)、区块高度、或者也可以是由数字、字母和/或符号等组成的标识符,在此不做限制。应当理解,一个区块标识用于唯一标记一个区块。回滚版本标识可以是代码版本号、或者也可以是由数字、字母和/或符号等组成的,用于唯一标记一份版本回滚信息的标识符。
102、根据第一区块标识从区块链中获取第一区块标识对应的第一区块,以得到第一区块中包括第一默克尔树。
在一些可行的实施方式中,根据第一区块标识可从区块链中获取第一区块标识对应的第一区块,进而获取到第一区块中包括的第一默克尔树。应当理解,第一默克尔树中可包括多个版本文件对应的多个叶子结点,以及根据多个叶子结点生成的中间结点和一个根结点,其中多个版本文件中包括第一版本文件,每个结点对应一个哈希值。
参见图4,图4是本申请实施例提供的区块链和区块的一结构示意图。如图 4所示的区块链包括区块N,区块N+1和区块N+2,其中,N为正整数。图4 所示的每个区块中均可以包含前一个区块的哈希值,和一段时间内所发布的新版本对应的版本信息,即新版本对应的版本文件。具体地,如图4所示,区块N 中可以包含该区块N的前一区块哈希值(即图4所示的区块N-1的哈希值)和版本信息X。同理,区块N+1中可以包含该区块N+1的前一区块哈希值(即图 4所示的区块N的哈希值)和版本信息Y;以此类推,区块N+2中可以包含该区块N+2的前一区块哈希值(即图4所示的区块N+1的哈希值)和版本信息Z。进一步地,为便于理解,本申请实施例以区块N+1和区块N+2为例阐述区块结构。
如图4所示,区块N+1可由区块头和区块体组成,其中区块头中可包含前一区块的哈希值(即图4所示的区块N的哈希值)、时间戳、计算的难度值、为生成区块N+1所设置的随机数,以及默克尔树根(即本区块的哈希值,这里本区块即区块N+1)等。区块体中的版本信息Y为一段时间内新发布的版本文件,例如版本信息Y可包括版本文件A1、版本文件A2、版本文件A3和版本文件 A4,这些版本文件可以通过默克尔树的形式组织在一起。应当理解,默克尔树的构建过程是一个递归计算散列值的过程。如图4所示,基于SHA256算法可分别计算得到版本文件A1对应的叶子结点B1的哈希值为B1=Hash(A1),版本文件A2对应的叶子结点B2的哈希值为B2=Hash(A2),版本文件A3对应的叶子结点B3的哈希值为B3=Hash(A3),版本文件A4对应的叶子结点B4的哈希值为B4=Hash(A4),进一步的,通过将B1和B2串联起来,继续做哈希计算,可以得到图4所示的中间结点C1对应的哈希值为C1=Hash(B1+B2),将 B3和B4串联起来做哈希计算,可以得到图4所示的中间结点C2对应的哈希值为C2=Hash(B3+B4),最后再进一步将C1和C2串联起来进行哈希计算可得到根结点D1对应的哈希值为D1=Hash(C1+C2),这里根结点D1对应的哈希值即区块N+1中的默克尔树根。
如图4所示,区块N+2也是由区块头和区块体组成,其中区块头中可包含前一区块的哈希值(即图4所示的区块N+1的哈希值)、时间戳、计算的难度值、为生成区块N+2所设置的随机数,以及默克尔树根(即本区块的哈希值,这里本区块即区块N+2)等。区块体中的版本信息Z为上述一段时间的后一段时间内新发布的版本文件,例如版本信息Z可包括版本文件A5和版本文件A6,这些版本文件同样可通过默克尔树的形式组织在一起。如图4所示,基于SHA256 算法可分别计算得到版本文件A5对应的叶子结点B5的哈希值为B5=Hash(A5),版本文件A6对应的叶子结点B6的哈希值为B6=Hash(A6),进一步的,通过将B5和B6串联起来,继续做哈希计算,可以得到图4所示的根结点C3对应的哈希值为C3=Hash(B5+B6),这里根结点C3对应的哈希值即区块N+2中的默克尔树根。由此可知,默克尔树的可扩展性很好,不管版本信息有多少,最后都可以产生一个默克尔树以及固定长度的默克尔树根。
请继续参加图4,假设第一版本文件为版本文件4,因此第一区块即为区块 N+1,第一默克尔树即为区块N+1中的默克尔树,第一版本文件对应的叶子结点在第一默克尔树中的第一位置即为叶子结点B4在区块N+1中的默克尔树中的位置,即第四顺序。
103、根据第一位置,确定从第一版本文件对应的叶子结点开始到第一默克尔树的根结点为止,所包括的第一路径结点,并根据第一路径结点确定与第一路径结点为一度关系且非第一路径结点的第一分支结点。
在一些可行的实施方式中,根据第一版本文件对应的叶子结点在第一默克尔树中的位置(即第一位置),可从第一默克尔树中确定出从第一版本文件对应的叶子结点开始到所述第一默克尔树的根结点为止,所包括的第一路径结点。再根据所述第一路径结点可从所述第一默克尔树中获取到与所述第一路径结点为一度关系(即直接相连关系)且非第一路径节点的第一分支结点。应当理解,第一位置可以为第一版本文件对应的叶子结点在第一默克尔树中的排列顺序。例如参见图5,图5是本申请实施例提供的第一位置的应用场景示意图。假设第一版本文件为如图5中的版本文件A4,其中,版本文件A4对应的叶子结点为叶子结点B4,在叶子结点层,按从左到右的排列顺序,B4的排列顺序为第四顺序,因此可将第四顺序作为第一版本文件对应的叶子结点在第一默克尔树中的第一位置。
具体地,在第一默克尔树中,可通过从第一版本文件对应的叶子结点开始,向上依次确定父结点的方式,确定出多个第一路径结点。应当理解,默克尔树中任意结点的父结点在本结点层的上一结点层中。其中第一分支结点为与第一路径结点有共同父结点的结点。因此,首先可基于深度优先搜索算法确定从第一版本文件对应的叶子结点到第一默克尔树的根结点之间的搜索路径,然后将搜索路径对应的结点确定为第一路径结点。然后沿搜索路径,从第一版本文件对应的叶子结点开始,判断是否存在与第一版本文件对应的叶子结点有共同父结点的结点,如果存在,将与第一版本文件对应的叶子结点有同一父结点的结点确定为一个第一分支结点;进而判断第一版本文件对应的叶子结点的父结点是否为第一默克尔树的根结点,若是,第一分支结点的确定过程结束,若否,继续判断是否存在与第一版本文件对应的叶子结点的父结点有共同父结点的结点,如果存在,将与第一版本文件对应的叶子结点的父结点有共同父结点的结点确定为另一个第一分支结点;再继续判断第一叶子结点的父结点的父结点是否为第一默克尔树的根结点,以此类推,直到搜索路径上除根结点以外的各个结点均被用以确定第一分支结点后结束。也就是说,沿搜索路径的搜索顺序,再结合第一默克尔树的树结构,可将第一默克尔树中与第一路径结点为一度关系(直接相连关系)且非第一路径结点的结点确定为第一分支结点。其中,参见图6,图6是本申请实施例提供的一度关系的示意图。如图6所示,以C1为例,与C1有一度关系(直接相连关系)的结点为B1、B2和D1。
请一并参见图7,图7是本申请实施例提供的第一路径节点和第一分支结点的示意图。假设第一默克尔树的树结构如图7所示,其中第一版本文件为版本文件A4,其中版本文件A4对应的叶子结点为B4,第一默克尔树的根结点为 D1,基于深度优先搜索算法,可得到B4与D1之间的搜索路径为B4→C2→D1,因此可得到第一路径节点包括B4、C2和D1。其中,与B4有一度关系的结点包括C2,与C2有一度关系的结点包括B3、B4和D1,与D1有一度关系的结点包括C1和C2,由于B4、C2和D1为第一路径节点,因此与第一路径结点 B4、C2和D1为一度关系(直接相连关系)且非第一路径结点的结点为B3和 C1,即第一分支结点为B3和C1。
其中,若未找到满足与所述第一路径结点为一度关系且非第一路径结点条件的第一分支节点,说明第一默克尔树中仅包括一个版本文件对应的叶子结点,因此,可将第一版本文件对应的第一哈希值与第一默克尔树的根节点对应的哈希值进行比较。
可选的,在一些可行的实施方式中,若每个区块中以位置为标识,已预先存储了每个位置对应的路径节点和分支节点,则可在第一区块中,根据第一位置,可直接获取到第一位置对应的第一路径节点和第一分支节点。
104、基于第一版本文件生成第一哈希值,根据第一分支结点对应的哈希值以及第一哈希值生成第一验证根哈希值,若第一默克尔树的根结点对应的哈希值与第一验证根哈希值相同,则将当前代码版本回滚为第一版本文件中包括的代码版本。
在一些可行的实施方式中,基于哈希算法对回滚版本信息中包括第一版本文件(即从版本数据库中获取到的第一版本文件)执行哈希计算,可得到第一版本文件对应的哈希值,即第一哈希值,其中,本申请实施例中所用到的哈希算法包括MD系列哈希算法、SHA哈希算法以及SM3杂凑算法等,在此不做限制,其中MD系列哈希算法包括MD2,MD4和MD5,SHA哈希算法包括SHA-1, SHA-224,SHA-256,SHA-384,SHA-512,为便于理解,本申请实施例中所用到的哈希算法为SHA-256算法。进一步的,根据第一分支结点对应的哈希值以及第一哈希值,沿搜索路径的搜索顺序进行哈希计算,可最终得到第一验证根哈希值。不难理解的是,若第一区块中存储的第一默克尔树的根结点对应的哈希值(即第一区块的区块头中的默克尔树根)与第一验证根哈希值相同,则可确定第一版本文件未被篡改,因此可将当前代码版本回滚为第一版本文件中包括的代码版本。
举例来说,参见图7,假设第一默克尔树的树结构如图7所示,第一分支节点为B3和C1,其中基于SHA-256算法对从版本数据库中获取到的第一版本文件执行哈希计算,得到该第一版本文件对应的第一哈希值为H1,因此,根据第一分支结点对应的哈希值以及第一哈希值H1,沿搜索路径的搜索顺序进行哈希计算,可得到B3与H1进行拼接并进行哈希计算后得到的哈希值为C2’= Hash(B3+H1),进一步的,将C1与C2’串联起来,继续做哈希计算,可得到对应的哈希值为D1’=Hash(C1+C2’),即第一验证根哈希值为D1’。其中通过将 D1’与D1进行比较,若D1’=D1,则可将当前代码版本回滚为第一版本文件中包括的代码版本。
可选的,在一些可行的实施方式中,还可以根据第一位置从第一默克尔树中获取第一位置对应的哈希值,以作为第二哈希值,其中当第一默克尔树的根结点对应的哈希值与第一验证根哈希值相同,且第一哈希值与第二哈希值相同时,则将当前代码版本回滚为第一版本文件中包括的代码版本。
可选的,在一些可行的实施方式中,假设回滚版本信息中还包括开发第一版本文件的开发者对应的开发者标识,以及第一版本文件对应的文件数字签名,则根据开发者标识,可从区块链的公钥存储区块中获取到所述开发者标识对应的公钥,然后基于该公钥对文件数字签名进行解密,可得到第三哈希值,其中若第一默克尔树的根结点对应的哈希值与第一验证根哈希值相同,且第一哈希值与第三哈希值相同,则将当前代码版本回滚为第一版本文件中包括的代码版本。
可选的,在一些可行的实施方式中,若第一区块中存储的第一默克尔树的根结点对应的哈希值(即第一区块的区块头中的默克尔树根)与第一验证根哈希值不相同,则可确定版本数据库中存储的第一版本文件已经被篡改,因此可从第一区块中获取第一版本文件以作为回滚版本对应的版本文件,并将当前代码版本回滚为第一版本文件中包括的代码版本。或者当从第一区块中获取第一版本文件以作为回滚版本对应的版本文件后,还可以对从第一区块中获取的第一版本文件执行上述步骤101至步骤104的校验后,再将当前代码版本回滚为第一版本文件中包括的代码版本。
在本申请实施例中,通过获取版本回滚请求,可根据版本回滚请求中的回滚版本标识从版本数据库中获取回滚版本信息,其中回滚版本信息中包括第一版本文件,第一区块标识,以及第一版本文件对应的叶子结点在第一默克尔树中的第一位置。根据第一区块标识从区块链中获取第一区块标识对应的第一区块,可得到第一区块中包括第一默克尔树,其中第一默克尔树包括至少两个版本文件对应的叶子结点和一个根结点,每个结点对应一个哈希值。根据第一位置,可得到从第一版本文件对应的叶子结点到第一默克尔树的根结点之间的第一路径结点,然后根据第一路径结点可确定出与第一路径结点为一度关系的第一分支结点。根据第一版本文件生成第一哈希值,根据第一分支结点对应的哈希值以及第一哈希值可得到第一验证根哈希值,若第一默克尔树的根结点对应的哈希值与第一验证根哈希值相同,则将当前代码版本回滚为第一版本文件中包括的代码版本。采用本申请实施例,可检测用于版本回滚的代码版本的安全性,以提高用于版本回滚的代码版本的可靠性,适用性高。
参见图8,图8是本申请实施例提供的基于区块链的代码版本管理方法的另一流程示意图。本申请实施例提供的方法可通过如下步骤201至206提供的实现方式进行说明:
201、当检测到第一版本对应的第一版本文件发布时,获取第一版本之前的最新版本对应的第二区块,以得到第二区块中包括第二默克尔树,基于第一版本文件生成第四哈希值,将第四哈希值确定为第一版本文件对应的叶子结点的哈希值,并在第二默克尔树中插入第一版本文件对应的叶子结点以得到第一默克尔树。
在一些可行的实施方式中,当检测到第一版本对应的第一版本文件发布时,或检测到第一版本文件的上链请求时,通过获取第一版本之前的最新版本对应的区块,即第二区块,可得到第二区块中包括的默克尔树,即第二默克尔树。基于第一版本文件生成第四哈希值,可将第四哈希值确定为第一版本文件对应的叶子结点的哈希值。通过在第二默克尔树中插入第一版本文件对应的叶子结点,并更新第二默克尔树中各结点对应的哈希值,可得到第一默克尔树。
可选的,在一些可行的实施方式中,当检测到第一版本对应的第一版本文件发布时,或检测到第一版本文件的上链请求时,通过计算第一版本文件对应的哈希值,可得到第四哈希值,然后通过将第一版本文件以及后续一段时间内新发布的版本文件以默克尔树的形式组织在一起,即可得到第一默克尔树。
202、获取第一版本文件对应的叶子结点在第一默克尔树中的第一位置,并将第一版本文件、第一版本文件对应的叶子结点在第一默克尔树中的第一位置以及第一默克尔树的根结点对应的哈希值在区块链网络中进行广播,以使区块链网络中的共识节点根据第一版本文件和第一版本文件对应的叶子结点在第一默克尔树中的第一位置,对第一默克尔树的根结点对应的哈希值进行验证以得到第一校验结果。
在一些可行的实施方式中,通过获取第一版本文件对应的叶子结点在第一默克尔树中的第一位置,可将第一版本文件、第一版本文件对应的叶子结点在第一默克尔树中的第一位置以及第一默克尔树的根结点对应的哈希值在区块链网络中进行广播,以使区块链网络中的共识节点可根据接收到的第一版本文件和第一版本文件对应的叶子结点在第一默克尔树中的第一位置,对第一默克尔树的根结点对应的哈希值进行验证或校验以得到校验结果(即第一校验结果),同时共识节点可将第一校验结果返回至将数据广播出的开发者节点。应当理解,本申请实施例中的共识节点可以是基于区块链网络的共识机制从多个开发者节点中预先确定出的节点,例如,共识机制包括但不限于工作量证明(Proof of Work,PoW)共识机制、权益证明(Proof of Stake,PoS)共识机制、股权授权证明 (DelegatedProof of Stake,DPoS)共识机制、实用拜占庭容错算法(Practical Byzantine FaultTolerance,PBFT)、重要性证明(Proof of Importance,POI)共识机制、参与度证明(Proofof Participation,POP)共识机制,等等,在此不做限制。或者共识节点也可以是用户所指定的任意节点,例如,共识节点可以是整个研发团队中团队负责人和/或项目经理和/或团队管理者和/或项目总开发工程师对应的节点等,在此不做限制。
参见图9,图9是本申请实施例提供的代码版本管理过程的场景示意图。如图9中的区块链网络可包括开发者节点1,开发者节点2、开发者节点3、开发者节点4、项目负责人节点1以及项目负责人节点2,其中各节点间具有连接关系。当开发者节点1检测到第一版本对应的第一版本文件发布时,或检测到第一版本文件的上链请求时,开发者节点1通过获取第一版本之前的最新版本对应的区块,即第二区块,可得到第二区块中包括的默克尔树,即第二默克尔树。基于第一版本文件生成第四哈希值,可将第四哈希值确定为第一版本文件对应的叶子结点的哈希值。通过在第二默克尔树中插入第一版本文件对应的叶子结点,并更新第二默克尔树中各结点对应的哈希值,可得到第一默克尔树。进一步的,通过获取第一版本文件对应的叶子结点在第一默克尔树中的第一位置,可将第一版本文件、第一版本文件对应的叶子结点在第一默克尔树中的第一位置以及第一默克尔树的根结点对应的哈希值在区块链网络中进行广播,以使区块链网络中的共识节点可根据接收到的第一版本文件和第一版本文件对应的叶子结点在第一默克尔树中的第一位置,对第一默克尔树的根结点对应的哈希值进行验证或校验以得到第一校验结果。其中共识节点为项目负责人节点1、项目负责人节点2和开发者节点4,或者共识节点也可以是区块链网络中除本节点(这里本节点即开发者节点1)之外的所有其他节点,等等,在此不做限制。开发者节点1根据接收到的共识节点所返回的第一校验结果可确定对第一默克尔树的根结点对应的哈希值的第一共识结果,其中,若第一共识结果为达成共识,则可将包括第一默克尔树的第一区块添加至区块链。
203、根据接收的共识节点返回的第一校验结果确定对第一默克尔树的根结点对应的哈希值的第一共识结果,若第一共识结果为达成共识,则将包括第一默克尔树的第一区块添加至区块链。
在一些可行的实施方式中,开发者节点根据接收到的共识节点返回的第一校验结果,可确定出对第一默克尔树的根结点对应的哈希值的共识结果(即第一共识结果)。具体地,若接收到的共识节点返回的第一校验结果中校验通过的比例不小于预设通过比例,则可确定区块链网络中的节点对所述第一默克尔树的根结点对应的哈希值达成了共识,因此可将包括第一默克尔树的第一区块添加至区块链中。
参见图10,图10是本申请实施例提供的区块链和区块的另一结构示意图。如图10所示的区块链包括区块N,区块N+1和区块N+2,其中,N为正整数。图10所示的每个区块中均可以包含前一个区块的哈希值,和一段时间内所发布的新版本对应的版本信息,即新版本对应的版本文件。具体地,如图10所示,区块N中可以包含该区块N的前一区块哈希值(即图10所示的区块N-1的哈希值)和版本信息X。同理,区块N+1中可以包含该区块N+1的前一区块哈希值(即图10所示的区块N的哈希值)和版本信息Y;以此类推,区块N+2中可以包含该区块N+2的前一区块哈希值(即图10所示的区块N+1的哈希值) 和版本信息Z。进一步地,为便于理解,本申请实施例以区块N+1和区块N+2 为例阐述区块结构。
如图10所示,区块N+1可由区块头和区块体组成,其中区块头中可包含前一区块的哈希值(即图10所示的区块N的哈希值)、时间戳、计算的难度值、为生成区块N+1所设置的随机数,以及默克尔树根(即本区块的哈希值,这里本区块即区块N+1)等。区块体中的版本信息Y为一段时间内新发布的版本文件,例如版本信息Y可包括版本文件A1、版本文件A2、版本文件A3和版本文件A4,这些版本文件可以通过默克尔树的形式组织在一起。如图10所示,基于SHA256算法可分别计算得到版本文件A1对应的叶子结点B1的哈希值为 B1=Hash(A1),版本文件A2对应的叶子结点B2的哈希值为B2=Hash(A2),版本文件A3对应的叶子结点B3的哈希值为B3=Hash(A3),版本文件A4对应的叶子结点B4的哈希值为B4=Hash(A4),进一步的,通过将B1和B2串联起来,继续做哈希计算,可以得到图10所示的中间结点C1对应的哈希值为C1=Hash(B1+B2),将B3和B4串联起来做哈希计算,可以得到图10所示的中间结点C2对应的哈希值为C2=Hash(B3+B4),最后再进一步将C1和C2串联起来进行哈希计算可得到根结点D1对应的哈希值为D1=Hash(C1+C2),这里根结点D1对应的哈希值即区块N+1中的默克尔树根。
如图10所示,区块N+2也是由区块头和区块体组成,其中区块头中可包含前一区块的哈希值(即图10所示的区块N+1的哈希值)、时间戳、计算的难度值、为生成区块N+2所设置的随机数,以及默克尔树根(即本区块的哈希值,这里本区块即区块N+2)等。区块体中的版本信息Z为上述一段时间的后一段时间内新发布的版本文件,例如版本信息Z可包括版本文件A5和版本文件A6,这些版本文件同样可通过默克尔树的形式组织在一起。如图10所示,基于 SHA256算法可分别计算得到版本文件A5对应的叶子结点B5的哈希值为 B5=Hash(A5),版本文件A6对应的叶子结点B6的哈希值为B6=Hash(A6)。进一步的,通过获取区块N+1中的默克尔树,可得到区块N+1中默克尔树中包括的B1、B2、B3和B4,然后可将B5和B6插入区块N+1中默克尔树的B4之后,并更新各结点对应的哈希值,可得到区块N+2中的默克尔树。也就是说,通过将B1和B2串联起来做哈希计算,可以得到图4所示的中间结点C1对应的哈希值为C1=Hash(B1+B2),将B3和B4串联起来做哈希计算,可以得到图4所示的中间结点C2对应的哈希值为C2=Hash(B3+B4),通过将B5和B6 串联起来,做哈希计算,可以得到图10所示的哈希值C3=Hash(B5+B6),进一步的,将C1和C2串联起来进行哈希计算可得到中间结点D1对应的哈希值为D1=Hash(C1+C2),由于C3没有相邻结点,即C3为奇数个结点,因此可将C3复制一份以构成偶数个结点,也就是说,通过将C3和C3串联起来进行哈希计算可得到中间结点D2对应的哈希值为D2=Hash(C3+C3)。最后再进一步将D1和D2串联起来进行哈希计算可得到根结点E1对应的哈希值为E1=Hash (D1+D2),这里根结点E1对应的哈希值即区块N+2中的默克尔树根。
请继续参见图10,假设第一版本文件为版本文件5或版本文件6,因此第一区块即为区块N+2,第一默克尔树即为区块N+2中的默克尔树,第二区块即为区块N+1,第二默克尔树即为区块N+1中的默克尔树。
可选的,在一些可行的实施方式中,若第一默克尔树是当检测到第一版本对应的第一版本文件发布时,根据计算出的第一版本文件对应的哈希值,即第四哈希值,以及后续一段时间内新发布的版本文件对应的哈希值所生成的默克尔树,则通过获取第一版本文件对应的叶子结点在第一默克尔树中的位置,可将第一版本文件、第一版本文件对应的叶子结点在第一默克尔树中的位置以及第一默克尔树的根结点对应的哈希值在区块链网络中进行广播,以使区块链网络中的共识节点根据第一版本文件和第一版本文件对应的叶子结点在第一默克尔树中的位置,对第一默克尔树的根结点对应的哈希值进行验证以得到校验结果。进一步的,开发者节点根据接收到的各共识节点所返回的各个校验结果可确定对第一默克尔树的根结点对应的哈希值的共识结果,其中,若共识结果为达成共识,则可将包括第一默克尔树的第一区块添加至区块链中。例如,参见图4,图4是本申请实施例提供的区块链和区块的一结构示意图。假设第一版本文件为版本文件5,因此第一区块即为区块N+2,第一默克尔树即为区块N+2 中的默克尔树,在版本文件5后续一段时间内新发布的版本文件即为版本文件6,版本文件5和版本文件6在同一个区块中。
204、获取版本回滚请求,根据版本回滚请求中的回滚版本标识从版本数据库中获取回滚版本信息。
在一些可行的实施方式中,开发者节点通过获取版本回滚请求,可根据版本回滚请求中包括的回滚版本标识从版本数据库中获取回滚版本信息,其中回滚版本信息中可包括第一版本文件,编写或开发第一版本文件的开发者对应的开发者标识、第一版本文件对应的文件数字签名、第一区块标识,以及第一版本文件对应的叶子结点在第一默克尔树中的第一位置等,在此不做限制。应当理解,第一版本文件为待回滚版本对应的代码文件,其中,第一版本文件可以是当前版本的前一个版本对应的代码文件,或者也可以是当前版本的前第n个版本对应的代码文件,在此不做限制,这里n为正整数。也就是说,基于本申请实施例提供的方法,可将当前软件版本或系统版本回滚为前一个版本或者回滚至前多个版本。应当理解,第一版本文件中可包括开发者编写的系统代码或软件代码、代码版本号、项目名称、项目负责人、开发者标识,版本发布时间等,在此不做限制。第一区块标识为第一区块对应的标识,其中第一区块为区块链中存储了第一版本文件和第一版本文件对应的哈希值的区块,且第一区块中还可以存储有第一默克尔树,可以理解的是,第一默克尔树为根据第一版本文件对应的哈希值所生成的默克尔树,第一默克尔树包括至少一个版本文件对应的叶子结点和一个根结点,每个结点对应一个哈希值。第一区块标识可以是第一区块的区块哈希值(即区块头哈希值)、区块高度、或者也可以是由数字、字母和/或符号等组成的标识符,在此不做限制。应当理解,一个区块标识用于唯一标记一个区块。回滚版本标识可以是代码版本号、或者也可以是由数字、字母和/或符号等组成的,用于唯一标记一份版本回滚信息的标识符。
可选的,在一些可行的实施方式中,回滚版本信息中还可以包括第三区块标识,以及第一版本文件对应的叶子结点在第三默克尔树中的第二位置。因此根据第三区块标识,可从区块链中获取第三区块标识对应的第三区块,第三区块为区块链中区块时间戳最大的区块,第三区块中包括第三默克尔树,应当理解,这里的第三默克尔树为所有默克尔树中的最大默克尔树,即叶子结点最多的默克尔树。例如参见图10,假设区块链包括区块N,区块N+1和区块N+2,且假设第一版本文件为版本文件4,则第一区块为区块N+1,第一默克尔树为区块N+1中的默克尔树,第三区块为区块N+2,第三默克尔树为区块N+2中的默克尔树。
205、根据第一区块标识从区块链中获取第一区块标识对应的第一区块,以得到第一区块中包括第一默克尔树。
在一些可行的实施方式中,根据第一区块标识可从区块链中获取第一区块标识对应的第一区块,进而获取到第一区块中包括的第一默克尔树。应当理解,第一默克尔树中可包括多个版本文件对应的多个叶子结点,以及根据多个叶子结点生成的中间结点和一个根结点,其中多个版本文件中包括第一版本文件,每个结点对应一个哈希值。
206、根据第一位置,确定从第一版本文件对应的叶子结点到第一默克尔树的根结点之间第一路径结点,并根据第一路径结点从第一默克尔树中获取与第一路径结点为一度关系的第一分支结点。
在一些可行的实施方式中,根据第一版本文件对应的叶子结点在第一默克尔树中的第一位置,可从第一默克尔树中确定出从第一版本文件对应的叶子结点开始到所述第一默克尔树的根结点为止,所包括的第一路径结点。再根据所述第一路径结点可从所述第一默克尔树中获取到与所述第一路径结点为一度关系(即直接相连关系)且非第一路径节点的第一分支结点。应当理解,第一位置可以为第一版本文件对应的叶子结点在第一默克尔树中的排列顺序。
具体地,在第一默克尔树中,可通过从第一版本文件对应的叶子结点开始,向上依次确定父结点的方式,确定出多个第一路径结点。应当理解,默克尔树中任意结点的父结点在本结点层的上一结点层中。其中第一分支结点为与第一路径结点有共同父结点的结点。因此,首先可基于深度优先搜索算法确定从第一版本文件对应的叶子结点到第一默克尔树的根结点之间的搜索路径,然后将搜索路径对应的结点确定为第一路径结点。然后沿搜索路径,从第一版本文件对应的叶子结点开始,判断是否存在与第一版本文件对应的叶子结点有共同父结点的结点,如果存在,将与第一版本文件对应的叶子结点有同一父结点的结点确定为一个第一分支结点;进而判断第一版本文件对应的叶子结点的父结点是否为第一默克尔树的根结点,若是,第一分支结点的确定过程结束,若否,继续判断是否存在与第一版本文件对应的叶子结点的父结点有共同父结点的结点,如果存在,将与第一版本文件对应的叶子结点的父结点有共同父结点的结点确定为另一个第一分支结点;再继续判断第一叶子结点的父结点的父结点是否为第一默克尔树的根结点,以此类推,直到搜索路径上除根结点以外的各个结点均被用以确定第一分支结点后结束。也就是说,沿搜索路径的搜索顺序,再结合第一默克尔树的树结构,可将第一默克尔树中与第一路径结点为一度关系(直接相连关系)且非第一路径结点的结点确定为第一分支结点。其中,参见图6,图6是本申请实施例提供的一度关系的示意图。如图6所示,以C1为例,与C1有一度关系(直接相连关系)的结点为B1、B2和D1。
可选的,在一些可行的实施方式中,若每个区块中以位置为标识,已预先存储了每个位置对应的路径节点和分支节点,则可在第一区块中,根据第一位置,可直接获取到第一位置对应的第一路径节点和第一分支节点。
207、基于第一版本文件生成第一哈希值,根据第一分支结点对应的哈希值以及第一哈希值生成第一验证根哈希值,若第一默克尔树的根结点对应的哈希值与第一验证根哈希值相同,则将当前代码版本回滚为第一版本文件中包括的代码版本。
在一些可行的实施方式中,基于哈希算法对回滚版本信息中包括第一版本文件(即从版本数据库中获取到的第一版本文件)执行哈希计算,可得到第一版本文件对应的哈希值,即第一哈希值,其中,本申请实施例中所用到的哈希算法包括MD系列哈希算法、SHA哈希算法以及SM3杂凑算法等,在此不做限制,其中MD系列哈希算法包括MD2,MD4和MD5,SHA哈希算法包括SHA-1, SHA-224,SHA-256,SHA-384,SHA-512,为便于理解,本申请实施例中所用到的哈希算法为SHA-256算法。进一步的,根据第一分支结点对应的哈希值以及第一哈希值,沿搜索路径的搜索顺序进行哈希计算,可最终得到第一验证根哈希值。不难理解的是,若第一区块中存储的第一默克尔树的根结点对应的哈希值(即第一区块的区块头中的默克尔树根)与第一验证根哈希值相同,则可确定第一版本文件未被篡改,因此可将当前代码版本回滚为第一版本文件中包括的代码版本。
可选的,在一些可行的实施方式中,假设回滚版本信息中还包括第三区块标识,以及第一版本文件对应的叶子结点在第三默克尔树中的第二位置。因此根据第三区块标识,可从区块链中获取第三区块标识对应的第三区块,第三区块为区块链中区块时间戳最大的区块,第三区块中包括第三默克尔树,应当理解,这里的第三默克树为所有默克尔树中的最大默克尔树,即叶子结点最多的默克尔树。例如参见图10,假设区块链包括区块N,区块N+1和区块N+2,其中假设第一版本文件为版本文件4,则第一区块为区块N+1,第一默克尔树为区块N+1中的默克尔树,第三区块为区块N+2,,第三默克尔树为区块N+2中的默克尔树。
进一步的,根据第一版本文件对应的叶子结点在第三默克尔树中的位置(即第二位置),确定从第一版本文件对应的叶子结点到第三默克尔树的根结点之间第二路径结点,并根据第二路径结点从第三默克尔树中获取与第二路径结点为一度关系(即直接相连关系)且非第二路径节点的第二分支结点。根据第二分支结点对应的哈希值以及第一哈希值生成第二验证根哈希值,其中,当第三默克尔树的根结点对应的哈希值与第二验证根哈希值相同,且第一默克尔树的根结点对应的哈希值与第一验证根哈希值相同时,则将当前代码版本回滚为第一版本文件中包括的代码版本。其中,第二路径结点、第二分支结点以及第二验证根哈希值的确定方法如上述确定第一路径结点、第一分支结点以及第一验证根哈希值的具体实现方式,在此不再进行赘述。
举例来说,参见图11,图11是本申请实施例提供的第二路径节点和第二分支结点的示意图。假设第三默克尔树的树结构如图11所示,其中第一版本文件为版本文件A4,其中版本文件A4对应的叶子结点为B4,第三默克尔树的根结点为E1,基于深度优先搜索算法,可得到B4与E1之间的搜索路径为B4→C2 →D1→E1,因此可得到第二路径节点包括B4、C2、D1和E1。其中,与B4有一度关系的结点包括C2,与C2有一度关系的结点包括B3、B4和D1,与D1有一度关系的结点包括C1和C2,与E1有一度关系的结点包括D1和D2,由于 B4、C2、D1和E1为第二路径节点,因此第二分支结点为B3、C1和D2。
可选的,在一些可行的实施方式中,还可以根据第一位置从第一默克尔树中获取第一位置对应的哈希值,以作为第二哈希值,其中当第一默克尔树的根结点对应的哈希值与第一验证根哈希值相同,且第一哈希值与第二哈希值相同时,则将当前代码版本回滚为第一版本文件中包括的代码版本。
可选的,在一些可行的实施方式中,假设回滚版本信息中还包括开发第一版本文件的开发者对应的开发者标识,以及第一版本文件对应的文件数字签名,则根据开发者标识,可从区块链的公钥存储区块中获取到所述开发者标识对应的公钥,然后基于该公钥对文件数字签名进行解密,可得到第三哈希值,其中若第一默克尔树的根结点对应的哈希值与第一验证根哈希值相同,且第一哈希值与第三哈希值相同,则将当前代码版本回滚为第一版本文件中包括的代码版本。
可选的,在一些可行的实施方式中,若第一区块中存储的第一默克尔树的根结点对应的哈希值(即第一区块的区块头中的默克尔树根)与第一验证根哈希值不相同,则可确定版本数据库中存储的第一版本文件已经被篡改,因此可从第一区块中获取第一版本文件以作为回滚版本对应的版本文件,并将当前代码版本回滚为第一版本文件中包括的代码版本。或者当从第一区块中获取第一版本文件以作为回滚版本对应的版本文件后,还可以对从第一区块中获取的第一版本文件执行上述步骤101至步骤104的校验后,再将当前代码版本回滚为第一版本文件中包括的代码版本。
在本申请实施例中,当检测到第一版本对应的第一版本文件发布时,可从区块链中获取第一版本之前的最新版本对应的第二区块,以得到第二区块中包括第二默克尔树。基于第一版本文件生成第四哈希值,将第四哈希值确定为第一版本文件对应的叶子结点的哈希值,并在第二默克尔树中插入第一版本文件对应的叶子结点可得到新生成的第一默克尔树。通过获取第一版本文件对应的叶子结点在第一默克尔树中的第一位置,并将第一版本文件、第一版本文件对应的叶子结点在第一默克尔树中的第一位置以及第一默克尔树的根结点对应的哈希值在区块链网络中进行广播,可使区块链网络中的共识节点根据第一版本文件和第一版本文件对应的叶子结点在第一默克尔树中的第一位置,对第一默克尔树的根结点对应的哈希值进行验证可得到第一校验结果。其中根据接收的共识节点返回的第一校验结果可确定对第一默克尔树的根结点对应的哈希值的第一共识结果,若第一共识结果为达成共识,则将包括第一默克尔树的第一区块添加至区块链。进一步的,通过获取版本回滚请求,可根据版本回滚请求中的回滚版本标识从版本数据库中获取回滚版本信息,其中回滚版本信息中包括第一版本文件,第一区块标识,以及第一版本文件对应的叶子结点在第一默克尔树中的第一位置。根据第一区块标识从区块链中获取第一区块标识对应的第一区块,可得到第一区块中包括第一默克尔树,其中第一默克尔树包括至少两个版本文件对应的叶子结点和一个根结点,每个结点对应一个哈希值。根据第一位置,可得到从第一版本文件对应的叶子结点到第一默克尔树的根结点之间的第一路径结点,然后根据第一路径结点可确定出与第一路径结点为一度关系的第一分支结点。根据第一版本文件生成第一哈希值,根据第一分支结点对应的哈希值以及第一哈希值可得到第一验证根哈希值,若第一默克尔树的根结点对应的哈希值与第一验证根哈希值相同,则将当前代码版本回滚为第一版本文件中包括的代码版本。采用本申请实施例,可检测用于版本回滚的代码版本的安全性和可靠性,适用性高。
参见图12,图12是本申请实施例提供的基于区块链的代码版本管理装置的一结构示意图。本申请实施例提供的基于区块链的代码版本管理装置包括:
回滚信息获取模块31,用于获取版本回滚请求,根据所述版本回滚请求中的回滚版本标识从版本数据库中获取回滚版本信息,其中所述回滚版本信息中包括第一版本文件,第一区块标识,以及所述第一版本文件对应的叶子结点在第一默克尔树中的第一位置;
第一默克尔树获取模块32,用于根据所述第一区块标识从区块链中获取所述第一区块标识对应的第一区块,其中所述第一区块中包括所述第一默克尔树,所述第一默克尔树包括至少两个版本文件对应的叶子结点和一个根结点,每个结点对应一个哈希值;
第一分支结点获取模块33,用于根据所述第一位置,确定从所述第一版本文件对应的叶子结点开始到所述第一默克尔树的根结点为止,所包括的第一路径结点,并根据所述第一路径结点确定与所述第一路径结点为一度关系且非第一路径结点的第一分支结点;
版本回滚处理模块34,用于基于所述第一版本文件生成第一哈希值,根据所述第一分支结点对应的哈希值以及所述第一哈希值生成第一验证根哈希值,若所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,则将当前版本文件回滚为所述第一版本文件。
请一并参见图13,图13是本申请实施例提供的基于区块链的代码版本管理装置的另一结构示意图。
在一些可行的实施方式中,上述装置还包括第一验证模块35,所述第一验证模块35包括:
第二哈希值获取单元351,用于根据所述第一位置从所述第一默克尔树中获取所述第一位置对应的第二哈希值;
哈希值验证单元352,用于当所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,且所述第一哈希值与所述第二哈希值相同时,将当前版本文件回滚为所述第一版本文件。
在一些可行的实施方式中,所述回滚版本信息中还包括开发者标识,所述第一版本文件对应的文件数字签名;上述装置还包括第二验证模块36,所述第二验证模块36包括:
公钥获取单元361,用于根据所述开发者标识从公钥存储区块中获取所述开发者标识对应的公钥;
第三哈希值获取单元362,用于基于所述公钥对所述文件数字签名进行解密以得到第三哈希值;
签名验证单元363,用于当所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,且所述第一哈希值与所述第三哈希值相同时,将当前版本文件回滚为所述第一版本文件。
在一些可行的实施方式中,上述第一分支结点获取模块33包括第一路径结点确定单元331和第一分支结点确定单元332,所述第一路径结点确定单元331 用于:
从所述第一位置开始,确定从所述第一版本文件对应的叶子结点到所述第一默克尔树的根结点之间的搜索路径,将所述搜索路径对应的结点确定为第一路径结点。
在一些可行的实施方式中,所述装置还包括数据上链模块37,所述数据上链模块37包括:
第二默克尔树获取单元371,用于当检测到第一版本对应的第一版本文件发布时,获取所述第一版本之前的最新版本对应的第二区块,其中,所述第二区块中包括第二默克尔树;
第一默克尔树生成单元372,用于基于所述第一版本文件生成第四哈希值,将所述第四哈希值确定为所述第一版本文件对应的叶子结点的哈希值,并在所述第二默克尔树中插入所述第四哈希值以得到所述第一默克尔树;
数据共识单元373,用于获取所述第一版本文件对应的叶子结点在所述第一默克尔树中的第一位置,将所述第一版本文件、所述第一位置以及所述第一默克尔树的根结点对应的哈希值在区块链网络中进行广播,以使所述区块链网络中的共识节点根据所述第一版本文件和所述第一位置,对所述第一默克尔树的根结点对应的哈希值进行验证以得到第一校验结果;
第一区块上链单元374,用于根据接收到的所述共识节点返回的第一校验结果确定对所述第一默克尔树的根结点对应的哈希值的第一共识结果,若所述第一共识结果为达成共识,则将包括所述第一默克尔树的第一区块添加至区块链中。
在一些可行的实施方式中,所述数据共识单元373具体用于:
若接收到的所述共识节点返回的第一校验结果中,校验通过的比例不小于预设通过比例,则确定对所述第一默克尔树的根结点对应的哈希值的第一共识结果为达成共识。
在一些可行的实施方式中,所述回滚版本信息中还包括第三区块标识,所述第一版本文件对应的叶子结点在第三默克尔树中的第二位置;所述装置还包括第三验证模块38,所述第三验证模块38包括:
第三默克尔树获取单元381,用于根据所述第三区块标识从区块链中获取所述第三区块标识对应的第三区块,所述第三区块中包括所述第三默克尔树;
第二分支结点获取单元382,用于根据所述第一版本文件对应的叶子结点在第三默克尔树中的第二位置,确定从所述第一版本文件对应的叶子结点开始到所述第三默克尔树的根结点为止,所包括的第二路径结点,并根据所述第二路径结点确定与所述第二路径结点为一度关系且非第二路径结点的第二分支结点;
第二验证根哈希值验证单元383,用于根据所述第二分支结点对应的哈希值以及所述第一哈希值生成第二验证根哈希值,当所述第三默克尔树的根结点对应的哈希值与所述第二验证根哈希值相同,且所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同时,将当前版本文件回滚为所述第一版本文件。
具体实现中,上述基于区块链的代码版本管理装置可通过其内置的各个功能模块执行如上述图3和图8中各个步骤所提供的实现方式。例如,上述回滚信息获取模块31可用于执行上述各个步骤中获取版本回滚请求、根据版本回滚请求获取回滚版本信息等实现方式,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。上述第一默克尔树获取模块32可用于执行上述各个步骤中获取第一区块以及第一区块中的第一默克尔树等相关步骤所描述的实现方式,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。上述第一分支结点获取模块33可用于执行上述各个步骤中获取第一路径结点、获取第一分支结点等实现方式,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。上述版本回滚处理模块34可用于执行上述各个步骤中获取第一版本文件对应的第一哈希值,基于第一分支结点对应的哈希值和第一哈希值确定第一验证根哈希值,以及在第一验证根哈希值校验通过时执行版本回滚等实现方式,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。上述第一验证模块35可用于执行上述各个步骤中获取第一默克尔树中第一位置对应的第二哈希值,验证第一哈希值和第二哈希值等相关步骤所描述的实现方式,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。上述第二验证模块36可用于执行上述各个步骤中获取公钥、验证数字签名等实现方式,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。上述数据上链模块37可用于执行上述各个步骤中获取第二区块中的第二默克尔树,基于第一版本文件对应的第四哈希值更新第二默克尔树以得到第一默克尔树,对第一默克尔树的根结点对应的哈希值进行共识,达成共识时将第一默克尔树上链等实现方式,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。上述第三验证模块38可用于执行上述各个步骤中获取第三默克尔树、获取第二分支结点、验证第二验证根哈希值等相关步骤所描述的实现方式,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。
在本申请实施例中,当检测到第一版本对应的第一版本文件发布时,可从区块链中获取第一版本之前的最新版本对应的第二区块,以得到第二区块中包括第二默克尔树。基于第一版本文件生成第四哈希值,将第四哈希值确定为第一版本文件对应的叶子结点的哈希值,并在第二默克尔树中插入第一版本文件对应的叶子结点可得到新生成的第一默克尔树。通过获取第一版本文件对应的叶子结点在第一默克尔树中的第一位置,并将第一版本文件、第一版本文件对应的叶子结点在第一默克尔树中的第一位置以及第一默克尔树的根结点对应的哈希值在区块链网络中进行广播,可使区块链网络中的共识节点根据第一版本文件和第一版本文件对应的叶子结点在第一默克尔树中的第一位置,对第一默克尔树的根结点对应的哈希值进行验证可得到第一校验结果。其中根据接收的共识节点返回的第一校验结果可确定对第一默克尔树的根结点对应的哈希值的第一共识结果,若第一共识结果为达成共识,则将包括第一默克尔树的第一区块添加至区块链。进一步的,通过获取版本回滚请求,可根据版本回滚请求中的回滚版本标识从版本数据库中获取回滚版本信息,其中回滚版本信息中包括第一版本文件,第一区块标识,以及第一版本文件对应的叶子结点在第一默克尔树中的第一位置。根据第一区块标识从区块链中获取第一区块标识对应的第一区块,可得到第一区块中包括第一默克尔树,其中第一默克尔树包括至少两个版本文件对应的叶子结点和一个根结点,每个结点对应一个哈希值。根据第一位置,可得到从第一版本文件对应的叶子结点到第一默克尔树的根结点之间的第一路径结点,然后根据第一路径结点可确定出与第一路径结点为一度关系的第一分支结点。根据第一版本文件生成第一哈希值,根据第一分支结点对应的哈希值以及第一哈希值可得到第一验证根哈希值,若第一默克尔树的根结点对应的哈希值与第一验证根哈希值相同,则将当前代码版本回滚为第一版本文件中包括的代码版本。采用本申请实施例,可检测用于版本回滚的代码版本的安全性和可靠性,适用性高。
参见图14,图14是本申请实施例提供的终端设备的结构示意图。如图14 所示,本实施例中的终端设备可以包括:一个或多个处理器401和存储器402。上述处理器401和存储器402通过总线403连接。存储器402用于存储计算机程序,该计算机程序包括程序指令,处理器401用于执行存储器402存储的程序指令,执行如下操作:
在一些可行的实施方式中,上述处理器401用于:
获取版本回滚请求,根据所述版本回滚请求中的回滚版本标识从版本数据库中获取回滚版本信息,其中所述回滚版本信息中包括第一版本文件,第一区块标识,以及所述第一版本文件对应的叶子结点在第一默克尔树中的第一位置;
根据所述第一区块标识从区块链中获取所述第一区块标识对应的第一区块,其中所述第一区块中包括所述第一默克尔树,所述第一默克尔树包括至少两个版本文件对应的叶子结点和一个根结点,每个结点对应一个哈希值;
根据所述第一位置,确定从所述第一版本文件对应的叶子结点开始到所述第一默克尔树的根结点为止,所包括的第一路径结点,并根据所述第一路径结点确定与所述第一路径结点为一度关系且非第一路径结点的第一分支结点;
基于所述第一版本文件生成第一哈希值,根据所述第一分支结点对应的哈希值以及所述第一哈希值生成第一验证根哈希值,若所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,则将当前版本文件回滚为所述第一版本文件。
在一些可行的实施方式中,上述处理器401用于:
根据所述第一位置从所述第一默克尔树中获取所述第一位置对应的第二哈希值;
当所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,且所述第一哈希值与所述第二哈希值相同时,将当前版本文件回滚为所述第一版本文件。
在一些可行的实施方式中,所述回滚版本信息中还包括开发者标识,所述第一版本文件对应的文件数字签名;上述处理器401用于:
根据所述开发者标识从公钥存储区块中获取所述开发者标识对应的公钥;
基于所述公钥对所述文件数字签名进行解密以得到第三哈希值;
当所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,且所述第一哈希值与所述第三哈希值相同时,将当前版本文件回滚为所述第一版本文件。
在一些可行的实施方式中,上述处理器401用于:
从所述第一位置开始,确定从所述第一版本文件对应的叶子结点到所述第一默克尔树的根结点之间的搜索路径,将所述搜索路径对应的结点确定为第一路径结点。
在一些可行的实施方式中,上述处理器401用于:
当检测到第一版本对应的第一版本文件发布时,获取所述第一版本之前的最新版本对应的第二区块,其中,所述第二区块中包括第二默克尔树;
基于所述第一版本文件生成第四哈希值,将所述第四哈希值确定为所述第一版本文件对应的叶子结点的哈希值,并在所述第二默克尔树中插入所述第四哈希值以得到所述第一默克尔树;
获取所述第一版本文件对应的叶子结点在所述第一默克尔树中的第一位置,将所述第一版本文件、所述第一位置以及所述第一默克尔树的根结点对应的哈希值在区块链网络中进行广播,以使所述区块链网络中的共识节点根据所述第一版本文件和所述第一位置,对所述第一默克尔树的根结点对应的哈希值进行验证以得到第一校验结果;
根据接收到的所述共识节点返回的第一校验结果,确定对所述第一默克尔树的根结点对应的哈希值的第一共识结果,若所述第一共识结果为达成共识,则将包括所述第一默克尔树的第一区块添加至区块链中。
在一些可行的实施方式中,上述处理器401用于:
若接收到的所述共识节点返回的第一校验结果中,校验通过的比例不小于预设通过比例,则确定对所述第一默克尔树的根结点对应的哈希值的第一共识结果为达成共识。
在一些可行的实施方式中,所述回滚版本信息中还包括第三区块标识,所述第一版本文件对应的叶子结点在第三默克尔树中的第二位置;上述处理器401 用于:
根据所述第三区块标识从区块链中获取所述第三区块标识对应的第三区块,所述第三区块中包括所述第三默克尔树;
根据所述第一版本文件对应的叶子结点在第三默克尔树中的第二位置,确定从所述第一版本文件对应的叶子结点开始到所述第三默克尔树的根结点为止,所包括的第二路径结点,并根据所述第二路径结点确定与所述第二路径结点为一度关系且非第二路径结点的第二分支结点;
根据所述第二分支结点对应的哈希值以及所述第一哈希值生成第二验证根哈希值,当所述第三默克尔树的根结点对应的哈希值与所述第二验证根哈希值相同,且所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同时,将当前版本文件回滚为所述第一版本文件。
应当理解,在一些可行的实施方式中,上述处理器401可以是中央处理单元(central processing unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(digital signal processor,DSP)、专用集成电路(application specific integratedcircuit,ASIC)、现成可编程门阵列(field programmable gate array, FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。该存储器402可以包括只读存储器和随机存取存储器,并向处理器401提供指令和数据。存储器402的一部分还可以包括非易失性随机存取存储器。例如,存储器402还可以存储设备类型的信息。
具体实现中,上述终端设备可通过其内置的各个功能模块执行如上述图3 和图8中各个步骤所提供的实现方式,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。
在本申请实施例中,当检测到第一版本对应的第一版本文件发布时,可从区块链中获取第一版本之前的最新版本对应的第二区块,以得到第二区块中包括第二默克尔树。基于第一版本文件生成第四哈希值,将第四哈希值确定为第一版本文件对应的叶子结点的哈希值,并在第二默克尔树中插入第一版本文件对应的叶子结点可得到新生成的第一默克尔树。通过获取第一版本文件对应的叶子结点在第一默克尔树中的第一位置,并将第一版本文件、第一版本文件对应的叶子结点在第一默克尔树中的第一位置以及第一默克尔树的根结点对应的哈希值在区块链网络中进行广播,可使区块链网络中的共识节点根据第一版本文件和第一版本文件对应的叶子结点在第一默克尔树中的第一位置,对第一默克尔树的根结点对应的哈希值进行验证可得到第一校验结果。其中根据接收的共识节点返回的第一校验结果可确定对第一默克尔树的根结点对应的哈希值的第一共识结果,若第一共识结果为达成共识,则将包括第一默克尔树的第一区块添加至区块链。进一步的,通过获取版本回滚请求,可根据版本回滚请求中的回滚版本标识从版本数据库中获取回滚版本信息,其中回滚版本信息中包括第一版本文件,第一区块标识,以及第一版本文件对应的叶子结点在第一默克尔树中的第一位置。根据第一区块标识从区块链中获取第一区块标识对应的第一区块,可得到第一区块中包括第一默克尔树,其中第一默克尔树包括至少两个版本文件对应的叶子结点和一个根结点,每个结点对应一个哈希值。根据第一位置,可得到从第一版本文件对应的叶子结点到第一默克尔树的根结点之间的第一路径结点,然后根据第一路径结点可确定出与第一路径结点为一度关系的第一分支结点。根据第一版本文件生成第一哈希值,根据第一分支结点对应的哈希值以及第一哈希值可得到第一验证根哈希值,若第一默克尔树的根结点对应的哈希值与第一验证根哈希值相同,则将当前代码版本回滚为第一版本文件中包括的代码版本。采用本申请实施例,可检测用于版本回滚的代码版本的安全性和可靠性,适用性高。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序包括程序指令,该程序指令被处理器执行时实现图3和图8中各个步骤所提供的基于区块链的代码版本管理方法,具体可参见上述各个步骤所提供的实现方式,在此不再赘述。
上述计算机可读存储介质可以是前述任一实施例提供的基于区块链的代码版本管理装置或者上述终端设备的内部存储单元,例如电子设备的硬盘或内存。该计算机可读存储介质也可以是该电子设备的外部存储设备,例如该电子设备上配备的插接式硬盘,智能存储卡(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡(flashcard)等。进一步地,该计算机可读存储介质还可以既包括该电子设备的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该电子设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
本申请的权利要求书和说明书及附图中的术语“第一”、“第二”、“第三”、“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置展示该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例提供的方法及相关装置是参照本申请实施例提供的方法流程图和/或结构示意图来描述的,具体可由计算机程序指令实现方法流程图和/或结构示意图的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。这些计算机程序指令可提供到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或结构示意图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或结构示意图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或结构示意一个方框或多个方框中指定的功能的步骤。
Claims (9)
1.一种基于区块链的代码版本管理方法,其特征在于,所述方法包括:
获取版本回滚请求,根据所述版本回滚请求中的回滚版本标识从版本数据库中获取回滚版本信息,其中所述回滚版本信息中包括第一版本文件,第一区块标识,以及所述第一版本文件对应的叶子结点在第一默克尔树中的第一位置;
根据所述第一区块标识从区块链中获取所述第一区块标识对应的第一区块,其中所述第一区块中包括所述第一默克尔树,所述第一默克尔树包括至少两个版本文件对应的叶子结点和一个根结点,每个结点对应一个哈希值;
从所述第一位置开始,确定从所述第一版本文件对应的叶子结点到所述第一默克尔树的根结点之间的搜索路径,将所述搜索路径对应的结点确定为第一路径结点,并根据所述第一路径结点确定与所述第一路径结点为一度关系且非第一路径结点的第一分支结点;
基于所述第一版本文件生成第一哈希值,根据所述第一分支结点对应的哈希值以及所述第一哈希值生成第一验证根哈希值,若所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,则将当前版本文件回滚为所述第一版本文件。
2.根据权利要求1所述方法,其特征在于,所述方法还包括:
根据所述第一位置从所述第一默克尔树中获取所述第一位置对应的第二哈希值;
当所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,且所述第一哈希值与所述第二哈希值相同时,将当前版本文件回滚为所述第一版本文件。
3.根据权利要求1所述方法,其特征在于,所述回滚版本信息中还包括开发者标识,所述第一版本文件对应的文件数字签名;所述方法还包括:
根据所述开发者标识从公钥存储区块中获取所述开发者标识对应的公钥;
基于所述公钥对所述文件数字签名进行解密以得到第三哈希值;
当所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,且所述第一哈希值与所述第三哈希值相同时,将当前版本文件回滚为所述第一版本文件。
4.根据权利要求1所述的方法,其特征在于,所述获取版本回滚请求之前,所述方法还包括:
当检测到第一版本对应的第一版本文件发布时,获取所述第一版本之前的最新版本对应的第二区块,其中,所述第二区块中包括第二默克尔树;
基于所述第一版本文件生成第四哈希值,将所述第四哈希值确定为所述第一版本文件对应的叶子结点的哈希值,并在所述第二默克尔树中插入所述第四哈希值以得到所述第一默克尔树;
获取所述第一版本文件对应的叶子结点在所述第一默克尔树中的第一位置,将所述第一版本文件、所述第一位置以及所述第一默克尔树的根结点对应的哈希值在区块链网络中进行广播,以使所述区块链网络中的共识节点根据所述第一版本文件和所述第一位置,对所述第一默克尔树的根结点对应的哈希值进行验证以得到第一校验结果;
根据接收到的所述共识节点返回的第一校验结果,确定对所述第一默克尔树的根结点对应的哈希值的第一共识结果,若所述第一共识结果为达成共识,则将包括所述第一默克尔树的第一区块添加至区块链中。
5.根据权利要求4所述的方法,其特征在于,所述根据接收到的所述共识节点返回的第一校验结果,确定对所述第一默克尔树的根结点对应的哈希值的第一共识结果,包括:
若接收到的所述共识节点返回的第一校验结果中,校验通过的比例不小于预设通过比例,则确定对所述第一默克尔树的根结点对应的哈希值的第一共识结果为达成共识。
6.根据权利要求4所述的方法,其特征在于,所述回滚版本信息中还包括第三区块标识,所述第一版本文件对应的叶子结点在第三默克尔树中的第二位置;所述方法还包括:
根据所述第三区块标识从区块链中获取所述第三区块标识对应的第三区块,所述第三区块中包括所述第三默克尔树;
根据所述第一版本文件对应的叶子结点在第三默克尔树中的第二位置,确定从所述第一版本文件对应的叶子结点开始到所述第三默克尔树的根结点为止,所包括的第二路径结点,并根据所述第二路径结点确定与所述第二路径结点为一度关系且非第二路径结点的第二分支结点;
根据所述第二分支结点对应的哈希值以及所述第一哈希值生成第二验证根哈希值,当所述第三默克尔树的根结点对应的哈希值与所述第二验证根哈希值相同,且所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同时,将当前版本文件回滚为所述第一版本文件。
7.一种基于区块链的代码版本管理装置,其特征在于,所述装置包括:
回滚信息获取模块,用于获取版本回滚请求,根据所述版本回滚请求中的回滚版本标识从版本数据库中获取回滚版本信息,其中所述回滚版本信息中包括第一版本文件,第一区块标识,以及所述第一版本文件对应的叶子结点在第一默克尔树中的第一位置;
第一默克尔树获取模块,用于根据所述第一区块标识从区块链中获取所述第一区块标识对应的第一区块,其中所述第一区块中包括所述第一默克尔树,所述第一默克尔树包括至少两个版本文件对应的叶子结点和一个根结点,每个结点对应一个哈希值;
第一分支结点获取模块,用于从所述第一位置开始,确定从所述第一版本文件对应的叶子结点到所述第一默克尔树的根结点之间的搜索路径,将所述搜索路径对应的结点确定为第一路径结点,并根据所述第一路径结点确定与所述第一路径结点为一度关系且非第一路径结点的第一分支结点;
版本回滚处理模块,用于基于所述第一版本文件生成第一哈希值,根据所述第一分支结点对应的哈希值以及所述第一哈希值生成第一验证根哈希值,若所述第一默克尔树的根结点对应的哈希值与所述第一验证根哈希值相同,则将当前版本文件回滚为所述第一版本文件。
8.一种终端设备,其特征在于,包括处理器和存储器,所述处理器和存储器相互连接;
所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如权利要求1-6任一项所述的方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1-6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911128519.7A CN110989994B (zh) | 2019-11-18 | 2019-11-18 | 基于区块链的代码版本管理方法、装置、终端及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911128519.7A CN110989994B (zh) | 2019-11-18 | 2019-11-18 | 基于区块链的代码版本管理方法、装置、终端及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110989994A CN110989994A (zh) | 2020-04-10 |
CN110989994B true CN110989994B (zh) | 2024-04-26 |
Family
ID=70084792
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911128519.7A Active CN110989994B (zh) | 2019-11-18 | 2019-11-18 | 基于区块链的代码版本管理方法、装置、终端及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110989994B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111736893B (zh) * | 2020-06-24 | 2023-08-01 | 中国银行股份有限公司 | 一种软件包版本核验方法及相关装置 |
CN111541553B (zh) | 2020-07-08 | 2021-08-24 | 支付宝(杭州)信息技术有限公司 | 区块链一体机的可信启动方法及装置 |
CN112491812B (zh) * | 2020-07-08 | 2022-03-01 | 支付宝(杭州)信息技术有限公司 | 区块链一体机的哈希更新方法及装置 |
CN114281793A (zh) * | 2020-09-28 | 2022-04-05 | 华为技术有限公司 | 数据校验方法、装置和系统 |
CN112181482B (zh) * | 2020-09-29 | 2023-03-21 | 平安科技(深圳)有限公司 | 版本验证方法、装置、电子设备及存储介质 |
CN112380149B (zh) * | 2021-01-18 | 2021-04-06 | 腾讯科技(深圳)有限公司 | 基于节点内存的数据处理方法、装置、设备以及介质 |
CN113282798B (zh) * | 2021-05-07 | 2022-03-25 | 广州中国科学院计算机网络信息中心 | 一种基于梅克尔树的标识资源版本验证方法及系统 |
CN113608777B (zh) * | 2021-07-30 | 2023-09-29 | 广东全塑智联科技有限公司 | 一种基于区块链的项目代码版本控制方法及系统 |
CN114153849A (zh) * | 2021-12-02 | 2022-03-08 | 深圳前海微众银行股份有限公司 | 一种区块链的数据生成及验证方法及装置 |
CN114356927A (zh) * | 2021-12-31 | 2022-04-15 | 杭州趣链科技有限公司 | 数据存储方法、装置、计算机设备和存储介质 |
CN114844654B (zh) * | 2022-07-06 | 2022-09-06 | 湖南密码工程研究中心有限公司 | 车联网可信状态数据证明方法 |
CN115840753A (zh) * | 2022-09-23 | 2023-03-24 | 超聚变数字技术有限公司 | 数据校验方法及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102017130467A1 (de) * | 2017-03-10 | 2018-09-13 | Salesforce.Com, Inc. | Blockchain-versionskontrollsysteme |
CN109271283A (zh) * | 2018-09-06 | 2019-01-25 | 北京云测信息技术有限公司 | 一种基于区块链的数据备份方法 |
CN109359222A (zh) * | 2018-08-06 | 2019-02-19 | 杭州复杂美科技有限公司 | 数据存储方法及系统、设备和存储介质 |
CN109375944A (zh) * | 2018-08-28 | 2019-02-22 | 苏州浪潮智能软件有限公司 | 一种基于区块链数据结构的终端软件分发验证方法 |
CN109684307A (zh) * | 2018-12-26 | 2019-04-26 | 百度在线网络技术(北京)有限公司 | 一种数据存储方法、装置、设备及存储介质 |
-
2019
- 2019-11-18 CN CN201911128519.7A patent/CN110989994B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102017130467A1 (de) * | 2017-03-10 | 2018-09-13 | Salesforce.Com, Inc. | Blockchain-versionskontrollsysteme |
CN109359222A (zh) * | 2018-08-06 | 2019-02-19 | 杭州复杂美科技有限公司 | 数据存储方法及系统、设备和存储介质 |
CN109375944A (zh) * | 2018-08-28 | 2019-02-22 | 苏州浪潮智能软件有限公司 | 一种基于区块链数据结构的终端软件分发验证方法 |
CN109271283A (zh) * | 2018-09-06 | 2019-01-25 | 北京云测信息技术有限公司 | 一种基于区块链的数据备份方法 |
CN109684307A (zh) * | 2018-12-26 | 2019-04-26 | 百度在线网络技术(北京)有限公司 | 一种数据存储方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110989994A (zh) | 2020-04-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110989994B (zh) | 基于区块链的代码版本管理方法、装置、终端及存储介质 | |
US20230370283A1 (en) | Securing blockchain transaction based on undetermined data | |
TWI820024B (zh) | 去信任確定性狀態機之電腦實施方法 | |
CN111382464B (zh) | 包括电路编码变换函数的加密asic | |
CN109492983B (zh) | 基于区块链智能合约的电子印章签署方法、装置、设备和介质 | |
US20210320806A1 (en) | System and method for improved blockchain-implemented smart contract | |
CN109831487B (zh) | 分片文件验证方法及终端设备 | |
US10805067B1 (en) | Doubly linked blockchain | |
WO2020151330A1 (zh) | 数据持有性验证方法及终端设备 | |
CN110543448A (zh) | 数据同步方法、装置、设备及计算机可读存储介质 | |
CN112287034B (zh) | 一种数据同步方法、设备以及计算机可读存储介质 | |
US11886593B2 (en) | Verification of a provisioned state of a platform | |
US20150046717A1 (en) | Semiconductor apparatus | |
CN110597918B (zh) | 一种账户管理方法、装置及计算机可读存储介质 | |
CN111125731A (zh) | 一种基于可验证声明的业务处理方法、装置及设备 | |
US11196564B2 (en) | Hierarchical distributed ledger | |
CN109255232B (zh) | 一种软件加载方法以及软件加载装置 | |
CN111641496B (zh) | 区块链数据更新方法、装置、设备、系统及可读存储介质 | |
CN111010282B (zh) | 一种基于区块链的信息处理方法、相关装置及存储介质 | |
CN110941672B (zh) | 户籍管理方法、装置、设备以及存储介质 | |
CN111327676A (zh) | 区块数据处理方法及装置 | |
CN110324422B (zh) | 一种云应用的证实方法及系统 | |
CN111147477B (zh) | 一种基于区块链网络的验证方法及装置 | |
Miloslavskaya et al. | Blockchain Redacting Algorithm with Storing Votes Inside the Chain | |
Amiri et al. | Rashnu: Data-Dependent Order-Fairness |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |