本发明涉及区块链技术,尤其涉及一种多协议区块链的工作方法及装置,属于区块链领域。
背景技术:
随着近年来比特币的持续升温,区块链作为比特币的底层技术基础也慢慢进入大众的视野。区块链是一个去中心化的、集体维护一个可靠的分布式数据库的技术方案。该方案主要让区块通过密码学方法关联起来,每个区块包含了一定时间内系统全部的数据信息,并且根据数据信息生成数字签名以验证信息的有效性,同时将hash值(哈希值)链接到下一个数据块形成一条区块链。
在分布式网络上的区块链虽然具有充分严格的规则来建立一个有效的区块,但是创建区块链时,控制区块链数据存储、解析以及区块添加和验证的规则全都已设定且不能改变,并且现有的区块链技术没有适应节点的能力,为了支持最长的链路,任何创建在区块链上的分支都会被抛弃,浪费资源。
技术实现要素:
本发明的目的是为了解决现有技术中存在的问题,提供了一种多协议区块链的工作方法及装置。
一方面,本发明提供了一种多协议区块链的工作方法,包括:
步骤s1:创建创世区块,并按照创世区块的协议创建标准区块;计算创世区块的hash值并将其存入标准区块,链接成主区块链,并按照创世区块的协议在主区块链上添加区块;
步骤s2:当有新的业务需求时,在主区块链上创建分支区块,并创建分支链根区块;计算分支链根区块的短hash值,并将短hash值作为授权hash存入分支区块;计算分支区块的hash值并将其存入分支链根区块,链接成分支链;
步骤s3:当需要在分支链上添加新的区块时,验证分支链根区块是否合法,如果不合法,则在分支链上添加新的区块失败,如果合法,则读取分支链的协议并验证分支链的有效性,如果分支链有效,则按照分支链的协议在分支链上添加新的区块,如果分支链无效,则在分支链上添加新的区块失败。
具体地,创建创世区块,具体为:根据证明标准、净负荷、描述符以及分支标识创建创世区块后,根据创世区块的净负荷计算净负荷hash值,并为创世区块添加时间戳;
具体地,按照创世区块规定的协议创建标准区块,具体为:根据证明标准、净负荷、描述符以及分支标识按照创世区块的协议创建标准区块后,根据标准区块的净负荷计算净负荷hash值,并为标准区块添加时间戳;
具体地,在主区块链上创建分支区块,具体为:根据证明标准、净负荷、描述符以及分支标识按照创世区块的协议创建分支区块后,根据分支区块的净负荷计算净负荷hash值,并为分支区块添加时间戳。
具体地,创建分支链根区块,具体为:根据证明标准、净负荷、描述符以及分支标识创建分支链根区块后,根据分支链根区块的净负荷计算净负荷hash值,并为分支链根区块添加时间戳。
进一步地,步骤s1中计算创世区块的hash值并将其存入标准区块,链接成主区块链,具体为:根据创世区块的证明标准,使用创世区块中的净负荷hash值、时间戳、证明标准、描述符、分支标识及随机数计算创世区块的hash值,将创世区块的hash值作为标准区块的前一区块hash值存入标准区块,链接成主区块链。
进一步地,步骤s2中计算分支链根区块的短hash值,并将短hash值作为授权hash存入分支区块,具体为:根据分支链根区块中的证明标准、净负荷、描述符、分支标识、净负荷hash值以及时间戳计算分支链根区块的短hash值,并将分支链根区块的短hash值作为分支区块的授权hash存入分支区块;
更进一步地,计算分支区块的hash值并将其存入分支链根区块,具体为:根据分支区块中的证明标准,使用分支区块中的前一区块hash值、净负荷hash值、时间戳、证明标准、描述符、分支标识、随机数及授权hash计算分支区块的hash值,并将分支区块的hash值作为分支链根区块的前一区块hash值存入分支链根区块。
优选地,计算分支区块的hash值之前,还包括:计算分支区块在主区块链上的前一区块hash值并存入分支区块,具体为:根据分支区块在主区块链上的前一个区块的证明标准,使用前一个区块的前一区块hash值、净负荷hash值、时间戳、证明标准、描述符、分支标识、随机数及授权hash计算前一区块hash值并存入分支区块。
具体地,步骤s3中验证分支链根区块是否合法,具体为:
步骤f1:验证分支链根区块的前一区块hash值是否和主区块链上的分支区块的hash值相同,如果相同,则执行步骤f2,否则分支链根区块不合法,在分支链上添加新的区块失败;
步骤f2:验证分支链根区块的短hash值是否和主区块链上的分支区块中的授权hash相同,如果相同,则读取分支链的协议并验证分支链的有效性,如果有效,则在分支链上添加新的区块成功,如果无效,在所述分支链上添加新的区块失败,否则分支链根区块不合法,在分支链上添加新的区块失败。
进一步地,步骤f1,具体为:根据分支区块中的前一区块hash值、随机数、净负荷hash值、时间戳、证明标准、描述符、分支标识、授权hash以及净负荷算出分支区块的hash值,验证分支区块的hash值是否与分支链根区块中的前一区块hash值相同,若两个值相同,则执行步骤f2,否则分支链根区块不合法,分支链被视为无效;
进一步地,步骤f2,具体为:根据分支链根区块的净负荷hash值、时间戳、证明标准、描述符以及分支标识算出分支链根区块的短hash值,验证分支链根区块的短hash值是否与分支区块的授权hash值相同,若两个值相同,则读取分支链的协议,否则分支链根区块不合法,分支链被视为无效。
更进一步地,读取分支链的协议并验证分支链的有效性之前还包括:判断是否存在其他的另一个前一区块hash值和分支区块的hash值相等的分支链根区块,如果存在,则在与分支区块相连的分支链中选取长度最长的分支链作为合法分支链后,读取合法分支链的协议并验证合法分支链的有效性,如果不存在,则直接读取分支链的协议并验证分支链的有效性。
具体地,读取分支链的协议,具体为:从分支链根区块或主区块链上的分支区块里读取分支链的协议。
具体地,步骤s3中,验证分支链的有效性,具体为:验证分支链上所有区块的hash值是否满足分支链的协议;并验证分支链上所有区块的时间戳是否满足分支链的协议,如均验证通过,则所述分支链有效,否则所述分支链无效。
更具体地,验证分支链上所有区块的hash值是否满足分支链的协议,具体为:计算分支链上的第一个区块的hash值,判断和下一个区块中的前一区块hash值是否相同,如果相同,则分支链上的第一个区块满足分支链的协议,继续验证分支链上的其他区块是否满足分支链的协议,如所述分支链上的所有区块均不满足所述分支链的协议则被视为无效;
更具体地,验证分支链上所有区块的时间戳是否满足分支链的协议,具体为:判断分支链上每个区块的时间戳是否满足分支链协议规定的时间戳的格式,如果是,则分支链上每个区块满足分支链的协议,并按照分支链的协议在分支链上添加新的区块,否则分支链被视为无效。
另一方面,本发明提供了一种多协议区块链的装置,包括:
第一创建模块,用于创建创世区块并按照创世区块的协议创建标准区块;
第一计算模块,用于计算创世区块的hash值;
第一存储模块,用于将第一计算模块得到的创世区块的hash值存入第一创建模块创建的标准区块,链接成主区块链;
第一添加模块,用于按照创世区块的协议在主区块链上添加区块;
第二创建模块,用于当有新的业务需求时,在主区块链上创建分支区块,并创建分支链根区块;
第二计算模块,用于计算分支链根区块的短hash值;
第二存储模块,用于将第二计算模块得到的短hash值作为授权hash存入第二创建模块创建的分支区块中;
第三计算模块,用于计算分支区块的hash值;
第三存储模块,用于将第三计算模块得到的分支区块的hash值存入第二创建模块创建的分支链根区块中,链接成分支链;
第一验证模块,用于当需要在分支链上添加新的区块时,验证分支链根区块是否合法;
读取模块,用于当第一验证模块验证分支链根区块合法时,读取分支链的协议;
第二验证模块,用于验证读取模块读取到的分支链的有效性;
第二添加模块,用于当第二验证模块验证分支链的协议的有效时,按照分支链的协议在分支链上添加新的区块。
具体地,在本实施例中,第一创建模块,具体包括:第一创建单元、第一计算单元、第一添加单元、第二创建单元、第二计算单元、第二添加单元、第三创建单元、第三计算单元和第三添加单元;
第一创建单元,用于根据证明标准、净负荷、描述符以及分支标识创建创世区块;
第一计算单元,用于根据创建第一创建单元的净负荷计算创世区块的净负荷hash值;
第一添加单元,用于为创世区块添加时间戳;
第二创建单元,用于根据证明标准、净负荷、描述符以及分支标识按照创世区块的协议创建标准区块;
第二计算单元,用于根据标准区块的净负荷计算标准区块的净负荷hash值;
第二添加单元,用于为标准区块添加时间戳;
第三创建单元,用于根据证明标准、净负荷、描述符以及分支标识按照创世区块的协议创建分支区块;
第三计算单元,用于根据分支区块的净负荷计算分支区块的净负荷hash值;
第三添加单元,用于为分支链根区块添加时间戳。
具体地,第二创建模块,具体包括:第四创建单元、第四计算单元和第四添加模块;
第四创建单元,用于根据证明标准、净负荷、描述符以及分支标识创建分支链根区块;
第四计算单元,用于根据第四创建单元创建的分支链根区块的净负荷计算分支链根区块的净负荷hash值;
第四添加模块,用于为分支链根区块添加时间戳。
进一步地,第一计算模块,具体用于根据创世区块的证明标准,使用创世区块中的净负荷hash值、时间戳、证明标准、描述符、分支标识及随机数计算创世区块的hash值;
第一存储模块,具体用于将第一计算单元计算的创世区块的hash值作为标准区块的前一区块hash值存入标准区块,链接成主区块链。
进一步地,第二计算模块,具体用于:根据分支链根区块中的证明标准、净负荷、描述符、分支标识、净负荷hash值以及时间戳计算分支链根区块的短hash值;
具体地,第二存储模块,具体用于:将第二计算模块计算的分支链根区块的短hash值作为分支区块的授权hash存入分支区块;
具体地,第三计算模块,具体用于:根据分支区块的证明标准,使用分支区块中的前一区块hash值、净负荷hash值、时间戳、证明标准、描述符、分支标识、随机数及授权hash计算分支区块的hash值;
具体地,第三存储模块,具体用于:将第三计算模块计算的分支区块的hash值作为分支链根区块的前一区块hash值存入分支链根区块。
优选地,本装置还包括:第四计算模块和第四存储模块;
第四计算模块,用于根据分支区块在主区块链上的前一个区块中的证明标准,使用分支区块在主区块链上的前一个区块中的前一区块hash值、净负荷hash值、时间戳、证明标准、描述符、分支标识、随机数及授权hash计算前一区块hash值;
第四存储模块,用于将第四计算模块计算的前一区块hash值存入分支区块。
进一步地,验证模块包括:第一验证单元和第二验证单元;
第一验证单元,用于验证分支链根区块中的前一区块hash值是否和主区块链上的分支区块的hash值相同;
第二验证单元,用于当第一验证单元验证分支链根区块的前一区块hash值和主区块链上的分支区块的hash值相同时,验证分支链根区块的短hash值是否和主区块链上的分支区块中的授权hash相同;
具体地,读取模块,具体用于当第二验证单元验证分支链根区块的短hash值和主区块链上的分支区块中的授权hash相同时,读取分支链的协议。
更进一步地,第一验证单元包括:第一计算子单元和第一验证子单元,第二验证单元包括:第二计算子单元和第二验证子单元;
第一计算子单元,用于根据分支区块中的前一区块hash值、随机数、净负荷hash值、时间戳、证明标准、描述符、分支标识、授权hash以及净负荷算出分支区块的hash值;
第一验证子单元,用于验证第一计算子单元计算得到的分支区块的hash值是否与分支链根区块的前一区块hash值相同;
第二计算子单元,用于当第一验证子单元验证第一计算子单元计算得到的分支区块的hash值与分支链根区块的前一区块hash值相同时,根据分支链根区块的净负荷hash值、时间戳、证明标准、描述符以及分支标识算出分支链根区块的短hash值;
第二验证子单元,用于验证第二计算子单元计算得到的分支链根区块的短hash值是否与分支区块的授权hash值相同;
读取模块,具体用于当第二验证子单元验证与分支区块的授权hash值相同时,读取分支链的协议并。
更进一步地,装置还包括:判断模块和选择模块;
判断模块,用于判断是否存在其他的前一区块hash值和分支区块的hash值相等的分支链根区块;
选择模块,用于当判断模块判断存在另一个前一区块hash值和分支区块的hash值相等的分支链根区块时,在与分支区块相连的分支链中选取长度最长的分支链作为合法分支链;
读取模块,还用于当选择模块选取长度最长的分支链作为合法分支链后,读取合法分支链的协议。
读取模块,具体用于从分支链根区块或主区块链上的分支区块里读取分支链的协议。
具体地,验证模块包括:第三验证单元和第四验证单元;
第三验证单元,用于验证分支链上所有区块的hash值是否满足分支链的协议;
第四验证单元,用于验证分支链上所有区块的时间戳是否满足分支链的协议。
进一步地,第三验证单元包括:第三计算子单元、第一判断子单元和第三验证子单元;
第三计算子单元,用于计算分支链上的第一个区块的hash值;
第一判断子单元,用于判断第三计算子单元计算分支链上的第一个区块的hash值和下一个区块中的前一区块hash值是否相同;
第三验证子单元,用于当第一判断子单元判断第三计算子单元计算分支链上的第一个区块的hash值和下一个区块中的前一区块hash值相同时,验证分支链上的下一个区块是否满足分支链的协议;
第四验证单元,包括第二判断子单元和添加子单元;
第二判断子单元,用于判断分支链上每个区块的时间戳是否满足分支链协议规定的时间戳的格式;
添加子单元,用于当第二判断子单元判断分支链上每个区块的时间戳均满足分支链协议规定的时间戳的格式时,按照分支链的协议在分支链上添加新的区块。
本发明取得的有益效果是:
采用本发明的技术方案,能够创建多协议的区块链,允许改变区块链的协议,并且能够扩展区块链的分支。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一种多协议区块链的工作方法的流程图;
图2为创世区块结构示意图;
图3为标准区块结构示意图;
图4为分支区块和分支链根区块的内部联系示意图;
图5为具有一条有效分支链的示意图;
图6为一种多协议区块链的工作方法的流程图;
图7为具有多条有效分支链的示意图;
图8为一种在分支链上创建标准区块的流程图;
图9为一种多协议区块链的装置的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本实施例中,提供了一种多协议区块链的工作方法,具体步骤包括:
步骤s1:创建创世区块,并按照创世区块的协议创建标准区块;计算创世区块的hash值并将其存入标准区块,链接成主区块链,并按照创世区块的协议在主区块链上添加区块;
步骤s2:当有新的业务需求时,在主区块链上创建分支区块,并创建分支链根区块;计算分支链根区块的短hash值,并将短hash值作为授权hash存入分支区块;计算分支区块的hash值并将其存入分支链根区块,链接成分支链;
步骤s3:当需要在分支链上添加新的区块时,验证分支链根区块是否合法,如果不合法,则在分支链上添加新的区块失败,如果合法,则读取分支链的协议并验证分支链的有效性,如果分支链有效,则按照分支链的协议在分支链上添加新的区块,如果分支链无效,则在分支链上添加新的区块失败。
具体地,在本实施例中,创建创世区块,具体为:根据证明标准、净负荷、描述符以及分支标识创建创世区块后,根据创世区块的净负荷计算净负荷hash值,并为创世区块添加时间戳;
具体地,按照创世区块规定的协议创建标准区块,具体为:根据证明标准、净负荷、描述符以及分支标识按照创世区块的协议创建标准区块后,根据标准区块的净负荷计算净负荷hash值,并为标准区块添加时间戳;
具体地,在主区块链上创建分支区块,具体为:根据证明标准、净负荷、描述符以及分支标识按照创世区块的协议创建分支区块后,根据分支区块的净负荷计算净负荷hash值,并为分支区块添加时间戳。
具体地,在本实施例中,创建分支链根区块,具体为:根据证明标准、净负荷、描述符以及分支标识创建分支链根区块后,根据分支链根区块的净负荷计算净负荷hash值,并为分支链根区块添加时间戳。
进一步地,步骤s1中计算创世区块的hash值并将其存入标准区块,链接成主区块链,具体为:根据创世区块的证明标准,使用创世区块中的净负荷hash值、时间戳、证明标准、描述符、分支标识及随机数计算创世区块的hash值,将创世区块的hash值作为标准区块的前一区块hash值存入标准区块,链接成主区块链。
进一步地,步骤s2中计算分支链根区块的短hash值,并将短hash值作为授权hash存入分支区块,具体为:根据分支链根区块中的证明标准、净负荷、描述符、分支标识、净负荷hash值以及时间戳计算分支链根区块的短hash值,并将分支链根区块的短hash值作为分支区块的授权hash存入分支区块;
更进一步地,计算分支区块的hash值并将其存入分支链根区块,具体为:根据分支区块中的证明标准,使用分支区块中的前一区块hash值、净负荷hash值、时间戳、证明标准、描述符、分支标识、随机数及授权hash计算分支区块的hash值,并将分支区块的hash值作为分支链根区块的前一区块hash值存入分支链根区块。
优选地,计算分支区块的hash值之前,还包括:计算分支区块在主区块链上的前一区块hash值并存入分支区块,具体为:根据分支区块在主区块链上的前一个区块的证明标准,使用前一个区块的前一区块hash值、净负荷hash值、时间戳、证明标准、描述符、分支标识、随机数及授权hash计算前一区块hash值并存入分支区块。
具体地,在本实施例中,步骤s3中验证分支链根区块是否合法,具体为:
步骤f1:验证分支链根区块的前一区块hash值是否和主区块链上的分支区块的hash值相同,如果相同,则执行步骤f2,否则分支链根区块不合法,在分支链上添加新的区块失败;
步骤f2:验证分支链根区块的短hash值是否和主区块链上的分支区块中的授权hash相同,如果相同,则读取分支链的协议并验证分支链的有效性,如果有效,则在分支链上添加新的区块成功,如果无效,在所述分支链上添加新的区块失败,否则分支链根区块不合法,在分支链上添加新的区块失败。
进一步地,在本实施例中,步骤f1,具体为:根据分支区块中的前一区块hash值、随机数、净负荷hash值、时间戳、证明标准、描述符、分支标识、授权hash以及净负荷算出分支区块的hash值,验证分支区块的hash值是否与分支链根区块中的前一区块hash值相同,若两个值相同,则执行步骤f2,否则分支链根区块不合法,分支链被视为无效;
进一步地,在本实施例中,步骤f2,具体为:根据分支链根区块的净负荷hash值、时间戳、证明标准、描述符以及分支标识算出分支链根区块的短hash值,验证分支链根区块的短hash值是否与分支区块的授权hash值相同,若两个值相同,则读取分支链的协议,否则分支链根区块不合法,分支链被视为无效。
更进一步地,读取分支链的协议并验证分支链的有效性之前还包括:判断是否存在其他的另一个前一区块hash值和分支区块的hash值相等的分支链根区块,如果存在,则在与分支区块相连的分支链中选取长度最长的分支链作为合法分支链后,读取合法分支链的协议并验证合法分支链的有效性,如果不存在,则直接读取分支链的协议并验证分支链的有效性。
具体地,读取分支链的协议,具体为:从分支链根区块或主区块链上的分支区块里读取分支链的协议。
具体地,步骤s3中,验证分支链的有效性,具体为:验证分支链上所有区块的hash值是否满足分支链的协议;并验证分支链上所有区块的时间戳是否满足分支链的协议,如均验证通过,则所述分支链有效,否则所述分支链无效。
更具体地,验证分支链上所有区块的hash值是否满足分支链的协议,具体为:计算分支链上的第一个区块的hash值,判断和下一个区块中的前一区块hash值是否相同,如果相同,则分支链上的第一个区块满足分支链的协议,继续验证分支链上的其他区块是否满足分支链的协议,如所述分支链上的所有区块均不满足所述分支链的协议则被视为无效;
更具体地,验证分支链上所有区块的时间戳是否满足分支链的协议,具体为:判断分支链上每个区块的时间戳是否满足分支链协议规定的时间戳的格式,如果是,则分支链上每个区块满足分支链的协议,并按照分支链的协议在分支链上添加新的区块,否则分支链被视为无效。
实施例二
本实施例中,提供了一种多协议区块链的工作方法,参见图1,具体步骤包括:
步骤101:根据证明标准、净负荷、描述符以及分支标识创建创世区块;
创世区块是主区块链的开端。具体地,证明标准可以是基于工作量的证明(例如对hash值的要求)、权益证明、密钥或者其他任何种类的一致性证明;净负荷里根据不同应用的需求写入相应存储的数据和主区块链上执行的协议,可以是固定长度或者可变长度,本实施例中,以主区块链执行协议a为例,协议a是主区块链默认的协议,决定是否允许分支链的创建,定义主区块链区块上数据的存储,进行主区块链区块及分支链有效性验证等,在本实施例中设定其所占空间大小不超过1mb;描述符描述净负荷的大小和数据的信息;分支标识决定该区块是否允许存在分支。
例如,证明标准为258522748404,描述符为2224550616,分支标识00;其中,分支标识00表示无分支的标准区块,01表示此区块允许存在分支。
步骤102:根据创世区块的净负荷计算净负荷hash值;
具体地,计算净负荷hash值的算法有md5、sha-1、sha-224、sha-256、sha-384、sha-512、sha-512/224、sha-512/256、sha3等,可以使用同一个算法或不同的算法经过一次或多次计算得到净负荷hash值。
例如,在本实施中计算的净负荷hash值为:
5812db5df9e4782132833dbf88b902b3a0b5ca9961b5705d00c62b947420cf62。
步骤103:为创世区块添加时间戳;
在本实施例中,为创世区块添加时间戳后,创世区块已经建成,创世区块如图2所示,包括:随机数、净负荷hash值、时间戳、证明标准、净负荷、描述符以及分支标识,需要说明的是,创世区块作为主区块链的开端,是一个特殊的区块,不包含前一区块hash值。
具体地,时间戳记录了区块建立的时间,允许有一定范围内的误差,分布式网络的用户查验时间戳可检验其是否为一个伪造的时间戳。
例如,创建创世区块的时间为2016年10月20日上午10点33分19秒,经过unix时间戳转换后为1476930799。
步骤104:根据证明标准、净负荷、描述符以及分支标识按照主区块链协议创建标准区块;
在本实施例中,标准区块此时的净负荷执行协议a。
例如,证明标准为258522748404,描述符为2224550616,分支标识为00。
步骤105:根据标准区块的净负荷计算净负荷hash值;
例如,计算的净负荷hash值为:
428516a06795ccc26829ccf63f994b86f9a53221d73110b9c7e9bd0fc3dfd471。
步骤106:为标准区块添加时间戳;
例如,创建创世区块的时间为2016年10月20日上午10点55分56秒,经过unix时间戳转换后为1476932156。
步骤107:根据创世区块中的证明标准,使用创世区块的净负荷hash值、时间戳、证明标准、描述符、分支标识及随机数计算创世区块的hash值,并存入标准区块作为标准区块的前一区块hash值;
在本实施例中,算出创世区块的hash值并存入标准区块作为标准区块的前一区块hash值,标准区块已经建成,标准区块如图3所示,主要包括:前一区块hash值、随机数、净负荷hash值、时间戳、证明标准、净负荷、描述符以及分支标识,其中,净负荷hash值是对净负荷做了hash运算得到的。
具体地,在本实施例中通过不断调整改变随机数的值,计算出符合证明标准的有效分支区块的hash值。计算hash值的算法有md5、sha-1、sha-224、sha-256、sha-384、sha-512、sha-512/224、sha-512/256、sha3等,可以使用同一个算法或不同的算法经过一次或多次计算得到创世区块的hash值。
例如,随机数为:2199601046,计算得到的创世区块的hash值为:
b27a85ced3ae9e22b5f4066790a9954fa72cf320a9dfcea9257190c5a21ff925。
按照上述创建标准区块的方法,用户可根据创建多个标准区块,组成一条主区块链。
步骤108:根据证明标准、净负荷、描述符以及分支标识创建分支区块;
在本实施例中,分支区块的净负荷里写的协议和分支链的协议相同,但是分支区块仍然执行主区块链的协议,即在本实施例中分支区块写入的是协议b,但仍执行协议a。
例如,证明标准为:258522748404,描述符为:2224550616,分支标识为:01。
步骤109:根据分支区块中的净负荷计算净负荷hash值;
例如,分支区块的净负荷计算净负荷hash值为:
428516a06795ccc26829ccf63f994b86f9a53221d73110b9c7e9bd0fc3dfd471。
步骤110:为分支区块添加时间戳;
例如,创建分支区块的时间为2016年10月20日上午11点10分12秒,经过unix时间戳转换后为1476933012。
步骤111:根据标准区块中的证明标准,使用标准区块中的前一个区块hash值、净负荷hash值、时间戳、证明标准、描述符、分支标识、随机数计算标准区块的hash值,并存入分支区块作为分支区块的前一区块hash值;
例如,随机数为:927bf6aeb9,算得标准区块的hash值为:
e1b7efc6c6aeb73eb608d38b144da3077f74c6060e6aaa6a400ce7a5f59e9783。
步骤112:根据证明标准、净负荷、描述符以及分支标识创建分支链根区块;
在本实施例中,净负荷中有根据不同应用的需求写入相应存储的数据和分支链上执行的协议,在分支链根区块的净负荷里写入分支链需要执行的协议,本实施例中,以分支链执行协议b为例,协议b应用于分支链根区块及接下来连接于分支链根区块之后的分支链路中。
例如,如果系统中的分支被恶意复制,即复制一个和已被合法授权的分支根区块完全一样的区块,系统会自动忽略该复制区块。即使要在复制的区块后添加新的区块,系统会认为新的区块为链接在已被合法授权的分支根区块上。
例如,证明标准为:374820264590,描述符为:371829340297以及分支标识00。
步骤113:根据分支链根区块中的净负荷计算净负荷hash值;
例如,净负荷hash值为:
896be254c089dae7b66b50275551927037ce0cc83e74839738fdbfca82d1ff3d。
步骤114:为分支链根区块添加时间戳;
例如,创建分支链根区块的时间为2016年10月20日上午11点26分28秒,经过unix时间戳转换后为1476933988。
步骤115:根据分支链根区块中的证明标准、净负荷、描述符、分支标识、净负荷hash值以及时间戳计算分支链根区块的短hash值,并将短hash值存入分支区块作为分支区块的授权hash;
在本实施例中,分支链根区块的短hash值作为授权hash存入分支区块,分支区块已经建成。
例如,算得分支链根区块的短hash值为:
ef96b09775ba3b3341f9832a608948151ee0027e690c8672a476351a9f7625d。
步骤116:根据分支区块中的证明标准,使用分支区块的前一个区块hash值、净负荷hash值、时间戳、证明标准、描述符、分支标识、随机数及授权hash计算分支区块的hash值,作为分支链根区块的前一区块hash值;
具体地,在本实施例中通过不断调整改变随机数的值,计算出符合证明标准的有效分支区块的hash值。
例如,随机数为:2d06607889,算得分支区块的hash值为:
c61845fde8183851d88062e38419f08ab36f54dbfb74bca8e01675bfa765d854
在本实施例中,分支链根区块存储分支区块的hash值作为分支链根区块的前一区块hash值,分支链根区块已经建成。分支区块的hash值作为分支链根区块的前一区块hash值,完成了双方引用的过程,确保分支链根区块是分支区块的一个被认证的有效分支。分支区块和分支链根区块的相关数据相互引用的示意图如图4所示。
用户可根据自身业务的需求,按照上述方法,根据分支链的协议继续在支链上继续创建标准区块,实现步骤在实施例三进行详述。
例如,本实施例中,创建一条有效分支链的区块链的示意图如图5所示。主区块链标准区块的净负荷里面存在的是协议a,分支链根区块(或分支区块)的净负荷里面存在的是分支链的协议b,执行协议a的主区块链和执行协议b的分支链路都被视为有效链路。
实施例三
本实施例中,分支链根区块也可作为分支区块,即一个分支链根区块上可以创建多条不同协议的分支链。创建多条分支链和多种协议的区块链的实现方法,参见图6,具体步骤包括:
步骤201:根据证明标准、净负荷、描述符以及分支标识创建创世区块;
创世区块是主区块链的开端。具体地,证明标准可以是基于工作量的证明(例如对hash值的要求)、权益证明、密钥或者其他任何种类的一致性证明;净负荷里根据不同应用的需求写入相应存储的数据和分支链上执行的协议,可以是固定长度或者可变长度,本实施例中,以主区块链执行协议a为例,协议a是主区块链默认的协议,决定是否允许分支链的创建,定义主区块链区块上数据的存储,进行主区块链区块及分支链有效性验证等;描述符描述净负荷的大小和数据的信息;分支标识决定该区块是否允许存在分支的标志位。
例如,证明标准为258522748404,描述符为2224550616,分支标识00;其中,分支标识00表示无分支的标准区块,01表示此区块允许存在分支。
步骤202:根据创世区块中的净负荷计算净负荷hash值;
具体地,计算净负荷hash值的算法有md5、sha-1、sha-224、sha-256、sha-384、sha-512、sha-512/224、sha-512/256、sha3等,可以使用同一个算法或不同的算法经过一次或多次计算得到净负荷hash值。
例如,在本实施中计算的净负荷hash值为:
5812db5df9e4782132833dbf88b902b3a0b5ca9961b5705d00c62b947420cf62。
步骤203:为创世区块添加时间戳;
在本实施例中,为创世区块添加时间戳后,创世区块已经建成。具体地,时间戳记录了区块建立的时间,允许有一定范围内的误差,分布式网络的用户查验时间戳可检验其是否为一个伪造的时间戳。
例如,创建创世区块的时间为2016年10月20日上午10点33分19秒,经过unix时间戳转换后为1476930799。
步骤204:根据证明标准、净负荷、描述符以及分支标识按照主区块链协议创建标准区块;
例如,证明标准为258522748404,描述符为2224550616,分支标识为00。
步骤205:根据标准区块中的净负荷计算净负荷hash值;
在本实施例中,标准区块此时的净负荷执行协议a。
例如,计算的净负荷hash值为:
428516a06795ccc26829ccf63f994b86f9a53221d73110b9c7e9bd0fc3dfd471。
步骤206:为标准区块添加时间戳;
例如,创建创世区块的时间为2016年10月20日上午10点55分56秒,经过unix时间戳转换后为1476932156。
步骤207:根据创世区块中的证明标准,使用创世区块中的净负荷hash值、时间戳、证明标准、描述符、分支标识及随机数计算创世区块的hash值,并存入标准区块作为标准区块的前一区块hash值;
具体地,在本实施例中通过不断调整改变随机数的值,计算出符合证明标准的有效分支区块的hash值。计算hash值的算法有md5、sha-1、sha-224、sha-256、sha-384、sha-512、sha-512/224、sha-512/256、sha3等,可以使用同一个算法或不同的算法经过一次或多次计算得到创世区块的hash值。
例如,随机数为:2199601046,计算得到的创世区块的hash值为:
b27a85ced3ae9e22b5f4066790a9954fa72cf320a9dfcea9257190c5a21ff925。
按照上述创建标准区块的方法,用户可根据创建多个标准区块,组成一条主区块链。
步骤208:根据证明标准、净负荷、描述符以及分支标识创建分支区块;
在本实施例中,分支区块的净负荷里写的协议和分支链的协议相同,但是分支区块仍然执行主区块链的协议,即在本实施例中分支区块写入的是协议b,但仍执行协议a。
例如,证明标准为:258522748404,描述符为:2224550616,分支标识为:01。
步骤209:根据分支区块中的净负荷计算净负荷hash值;
例如,分支区块的净负荷计算净负荷hash值为:
428516a06795ccc26829ccf63f994b86f9a53221d73110b9c7e9bd0fc3dfd471。
步骤210:为分支区块添加时间戳;
例如,创建分支区块的时间为2016年10月20日上午11点10分12秒,经过unix时间戳转换后为1476933012。
步骤211:根据标准区块中的证明标准,使用标准区块的前一个区块hash值、净负荷hash值、时间戳、证明标准、描述符、分支标识、随机数及授权hash计算标准区块的hash值,并存入分支区块作为分支区块的前一区块hash值;
例如,随机数为:927bf6aeb9,算得标准区块的hash值为:
e1b7efc6c6aeb73eb608d38b144da3077f74c6060e6aaa6a400ce7a5f59e9783。
步骤212:根据证明标准、净负荷、描述符以及分支标识创建分支链根区块;
在本实施例中,净负荷里根据不同应用的需求写入相应存储的数据和分支链上执行的协议,在分支链根区块的净负荷里写入分支链需要执行的协议,本实施例中,以分支链执行协议b为例,协议b应用于分支链根区块及接下来连接于分支链根区块之后的分支链路中。
例如,如果系统中的分支被恶意复制,即复制一个和已被合法授权的分支根区块完全一样的区块,系统会自动忽略该克隆区块。即使要在克隆的区块后添加新的区块,系统会认为新的区块为链接在已被合法授权的分支根区块上。
例如,证明标准为:374820264590,描述符为:371829340297以及分支标识01。
步骤213:根据分支链根区块中的净负荷计算净负荷hash值;
例如,净负荷hash值为:
896be254c089dae7b66b50275551927037ce0cc83e74839738fdbfca82d1ff3d。
步骤214:为分支链根区块添加时间戳;
例如,创建分支链根区块的时间为2016年10月20日上午11点26分28秒,经过unix时间戳转换后为1476933988。
步骤215:根据分支区块中的证明标准,使用分支区块中的前一个区块hash值、净负荷hash值、时间戳、证明标准、描述符、分支标识、随机数及授权hash计算分支区块的hash值,并存入分支链根区块作为分支链根区块的前一区块hash值;
例如,随机数为:2d06607889,算得分支区块的hash值为:
a36fce8c4f207bd2c022013b85e8ea08b5749467443e5f6f16535679edbdb564
需要说明的是,根据分支链根区块的协议可继续在支链上继续创建标准区块,详细步骤如实施例三所示,在此不再赘述。
步骤216:根据证明标准、净负荷、描述符以及分支标识创建分支根分支区块;
在本实施例中,净负荷里根据不同应用的需求写入相应存储的数据和分支链上执行的协议,在分支根分支区块的净负荷里写入分支链需要执行的协议。用户可以按照实际情况创建多个分支根分支区块,在本实施例中,以创建两个分支根分支区块为例。本实施例中,两条分支链分别执行协议c、协议d,协议c和协议d分别应用于分支根分支区块及接下来连接于分支根分支区块之后的分支链路中。
例如,第一个分支根分支区块的证明标准为:8d3b1be98445,描述符为:473044022075,分支标识为:00。
步骤217:根据分支根分支区块中的净负荷计算净负荷hash值;
例如,分支根分支区块的净负荷hash值为:
038edfbcd15127659e167c8bb9c991ae5befbeeb4dc35cce4912c67abf915c62。
步骤218:为分支根分支区块添加时间戳;
例如,分支根分支区块的创建时间为2016年10月20日上午11点38分8秒,经过unix时间戳转换后为1476934688。
步骤219:根据分支根分支区块中的证明标准、净负荷、描述符、分支标识、净负荷hash值以及时间戳计算分支根分支区块的短hash值,并将短hash值存入分支链分支区块作为分支链分支区块的授权hash;
例如,分支根分支区块的短hash值为:
05f7d42fb70c4430d3bb164f58c1c847cc8fe877356432042ef0e83ee01d24d7
步骤220:根据分支链根区块中的证明标准,使用分支链根区块中的前一个区块hash值、净负荷hash值、时间戳、证明标准、描述符、分支标识、随机数及授权hash计算分支链根区块的hash值,并存入分支根分支区块作为分支根分支区块的前一区块hash值;
在本实施例中,分支根分支区块存储分支链根区块的hash值作为分支根分支区块的前一区块hash值后,分支根分支区块已经建成。
例如,随机数为:2199601046,分支链根区块的hash值为:
038edfbcd15127659e167c8bb9c991ae5befbeeb4dc35cce4912c67abf915c62
用户可根据实际情况在分支根分支区块后继续创建标准区块。详细步骤如实施例四所示,在此不再赘述。
例如,创建多条有效分支链的区块链,示意图如图7所示。创建完分支区块和分支链根区块后,按照协议创建了两个分支根分支区块,两条有效分支链分别执行协议c和d。
实施例四
本实施例中提供了一种在分支链上创建标准区块的流程图,参见图8,具体包括:
步骤301:验证分支链根区块的前一个区块hash值是否为其连接在主区块链上的分支区块的hash值,如果是,则执行步骤302,否则分支链无效,结束;
具体地,在本实施例中,根据已经创建好的分支区块的前一区块hash、随机数、净负荷hash值、时间戳、证明标准、描述符、分支标识、授权hash、净负荷按照创建分支链根区块时计算前一个区块hash值的算法,再次算出分支区块的hash值,并与分支链根区块的前一个区块hash值进行比对,若两个值相等,则执行步骤302,否则,分支链根区块所在的分支链无效,结束。
步骤302:验证分支链根区块的短hash值是否为其连接在主区块链的分支区块中的授权hash,如果是,则执行步骤303,否则分支链无效,结束;
具体地,在本实施例中,根据分支链根区块的净负荷hash值、时间戳、证明标准、描述符、分支标识按照创建分支区块时计算分支链根区块短hash的算法,再次算出分支链根区块的短hash值,并与分支区块的授权hash值进行对比,若两个值相等,则执行步骤303,否则,分支链根区块所在的分支链无效,结束。
步骤303:判断是否还存在其他的前一个区块hash值和分支区块的hash值相等的分支链根区块,是则,在与分支区块相连的分支链中选取长度最长的分支链作为合法分支链,执行步骤304,否则,分支链根区块合法,继续执行步骤304;
步骤304:从合法的分支链根区块或主区块链的分支区块的净负荷上读取分支链的协议;
在本实施例中,分支链的协议可以存在于分支区块上,也可以存在于分支根区块上。
步骤305:验证分支链上所有区块的hash值是否满足分支链的协议,是则执行步骤306,否则分支链无效,结束。
在本实施例中,分支链的协议里面规定了计算区块hash值的算法等一系列要求,判断按照分支链协议规定的计算区块hash值的算法算得的区块hash值和存在下一个区块的前一个区块hash值是否相同,如果相同,则满足分支链的协议,继续执行步骤306,否则,此条分支链无效,结束。
步骤306:验证分支链上所有区块的时间戳是否满足分支链的协议,是则分支链有效,继续执行步骤307,否则分支链无效,结束。
在本实施例中,分支链的协议里面规定了时间戳的格式等一系列要求,判断分支链上每个区块的时间戳是否满足分支链协议的规定,如果满足,则继续执行步骤306,否则,此条分支链无效,结束。
步骤307:根据分支链的协议在有效的分支链末端添加新的标准区块。
具体地,创建的标准区块的步骤在实施例一和实施例二中已详细叙述,在此不再赘述。
实施例五
本实施例提供了一种多协议区块链的装置,如图9所示,装置包括:
第一创建模块401,用于创建创世区块并按照创世区块的协议创建标准区块;
第一计算模块402,用于计算创世区块的hash值;
第一存储模块403,用于将第一计算模块402得到的创世区块的hash值存入第一创建模块401创建的标准区块,链接成主区块链;
第一添加模块404,用于按照创世区块的协议在主区块链上添加区块;
第二创建模块405,用于在主区块链上创建分支区块,并创建分支链根区块;
第二计算模块406,用于计算分支链根区块的短hash值;
第二存储模块407,用于将第二计算模块406得到的短hash值作为授权hash存入第二创建模块405创建的分支区块中;
第三计算模块408,用于计算分支区块的hash值;
第三存储模块409,用于将第三计算模块408得到的分支区块的hash值存入第二创建模块405创建的分支链根区块中,链接成分支链;
第一验证模块410,用于当需在分支链上添加新的区块时,验证分支链根区块是否合法;
读取模块411,用于当第一验证模块410验证分支链根区块合法时,读取分支链的协议;
第二验证模块412,用于验证读取模块411读取到的分支链的协议的有效性;
第二添加模块413,用于当第二验证模块验证412分支链的协议的有效时,按照分支链的协议在分支链上添加新的区块。
具体地,在本实施例中,第一创建模块,具体包括:第一创建单元、第一计算单元、第一添加单元、第二创建单元、第二计算单元、第二添加单元、第三创建单元、第三计算单元和第三添加单元;
第一创建单元,用于根据证明标准、净负荷、描述符以及分支标识创建创世区块;
第一计算单元,用于根据创建第一创建单元的净负荷计算创世区块的净负荷hash值;
第一添加单元,用于为创世区块添加时间戳;
第二创建单元,用于根据证明标准、净负荷、描述符以及分支标识按照创世区块的协议创建标准区块;
第二计算单元,用于根据标准区块的净负荷计算标准区块的净负荷hash值;
第二添加单元,用于为标准区块添加时间戳;
第三创建单元,用于根据证明标准、净负荷、描述符以及分支标识按照创世区块的协议创建分支区块;
第三计算单元,用于根据分支区块的净负荷计算分支区块的净负荷hash值;
第三添加单元,用于为分支链根区块添加时间戳。
具体地,第二创建模块,具体包括:第四创建单元、第四计算单元和第四添加模块;
第四创建单元,用于根据证明标准、净负荷、描述符以及分支标识创建分支链根区块;
第四计算单元,用于根据第四创建单元创建的分支链根区块的净负荷计算分支链根区块的净负荷hash值;
第四添加模块,用于为分支链根区块添加时间戳。
进一步地,第一计算模块,具体用于根据创世区块的证明标准,使用创世区块中的净负荷hash值、时间戳、证明标准、描述符、分支标识及随机数计算创世区块的hash值;
第一存储模块,具体用于将第一计算单元计算的创世区块的hash值作为标准区块的前一区块hash值存入标准区块,链接成主区块链。
进一步地,第二计算模块,具体用于:根据分支链根区块中的证明标准、净负荷、描述符、分支标识、净负荷hash值以及时间戳计算分支链根区块的短hash值;
具体地,第二存储模块,具体用于:将第二计算模块计算的分支链根区块的短hash值作为分支区块的授权hash存入分支区块;
具体地,第三计算模块,具体用于:根据分支区块的证明标准,使用分支区块中的前一区块hash值、净负荷hash值、时间戳、证明标准、描述符、分支标识、随机数及授权hash计算分支区块的hash值;
具体地,第三存储模块,具体用于:将第三计算模块计算的分支区块的hash值作为分支链根区块的前一区块hash值存入分支链根区块。
优选地,本装置还包括:第四计算模块和第四存储模块;
第四计算模块,用于根据分支区块在主区块链上的前一个区块中的证明标准,使用分支区块在主区块链上的前一个区块中的前一区块hash值、净负荷hash值、时间戳、证明标准、描述符、分支标识、随机数及授权hash计算前一区块hash值;
第四存储模块,用于将第四计算模块计算的前一区块hash值存入分支区块。
进一步地,验证模块包括:第一验证单元和第二验证单元;
第一验证单元,用于验证分支链根区块中的前一区块hash值是否和主区块链上的分支区块的hash值相同;
第二验证单元,用于当第一验证单元验证分支链根区块的前一区块hash值和主区块链上的分支区块的hash值相同时,验证分支链根区块的短hash值是否和主区块链上的分支区块中的授权hash相同;
具体地,读取模块,具体用于当第二验证单元验证分支链根区块的短hash值和主区块链上的分支区块中的授权hash相同时,读取分支链的协议。
更进一步地,第一验证单元包括:第一计算子单元和第一验证子单元,第二验证单元包括:第二计算子单元和第二验证子单元;
第一计算子单元,用于根据分支区块中的前一区块hash值、随机数、净负荷hash值、时间戳、证明标准、描述符、分支标识、授权hash以及净负荷算出分支区块的hash值;
第一验证子单元,用于验证第一计算子单元计算得到的分支区块的hash值是否与分支链根区块的前一区块hash值相同;
第二计算子单元,用于当第一验证子单元验证第一计算子单元计算得到的分支区块的hash值与分支链根区块的前一区块hash值相同时,根据分支链根区块的净负荷hash值、时间戳、证明标准、描述符以及分支标识算出分支链根区块的短hash值;
第二验证子单元,用于验证第二计算子单元计算得到的分支链根区块的短hash值是否与分支区块的授权hash值相同;
读取模块,具体用于当第二验证子单元验证与分支区块的授权hash值相同时,读取分支链的协议并。
更进一步地,装置还包括:判断模块和选择模块;
判断模块,用于判断是否存在其他的前一区块hash值和分支区块的hash值相等的分支链根区块;
选择模块,用于当判断模块判断存在另一个前一区块hash值和分支区块的hash值相等的分支链根区块时,在与分支区块相连的分支链中选取长度最长的分支链作为合法分支链;
读取模块,还用于当选择模块选取长度最长的分支链作为合法分支链后,读取合法分支链的协议。
读取模块,具体用于从分支链根区块或主区块链上的分支区块里读取分支链的协议。
具体地,验证模块包括:第三验证单元和第四验证单元;
第三验证单元,用于验证分支链上所有区块的hash值是否满足分支链的协议;
第四验证单元,用于验证分支链上所有区块的时间戳是否满足分支链的协议。
进一步地,第三验证单元包括:第三计算子单元、第一判断子单元和第三验证子单元;
第三计算子单元,用于计算分支链上的第一个区块的hash值;
第一判断子单元,用于判断第三计算子单元计算分支链上的第一个区块的hash值和下一个区块中的前一区块hash值是否相同;
第三验证子单元,用于当第一判断子单元判断第三计算子单元计算分支链上的第一个区块的hash值和下一个区块中的前一区块hash值相同时,验证分支链上的下一个区块是否满足分支链的协议;
第四验证单元,包括第二判断子单元和添加子单元;
第二判断子单元,用于判断分支链上每个区块的时间戳是否满足分支链协议规定的时间戳的格式;
添加子单元,用于当第二判断子单元判断分支链上每个区块的时间戳均满足分支链协议规定的时间戳的格式时,按照分支链的协议在分支链上添加新的区块。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。