节点选择方法、区块链共识方法及装置、系统、设备
文献发布时间:2023-06-19 11:21:00
技术领域
本公开涉及区块链技术领域,具体而言,涉及一种节点选择方法、区块链共识方法、节点选择装置、区块链共识装置、区块链共识系统、电子设备以及计算机可读存储介质。
背景技术
在当前的区块链技术中,大多数共识算法需要所有节点参与一场寻找指定随机数的计算博弈,以证明其已花费了足够的计算资源,博弈胜出者可以获得记账权,并获取一定收益。这种共识方式浪费的计算资源和电量十分庞大,同时,生成区块的速度较慢,容易出现交易吞吐量低或延迟高的情况,也无法根据实时的网络压力情况对区块生成速度进行动态调整。这制约了区块链在公有网络中应用于低延迟、高并发、快响应的业务场景的发展。
另外,在现有的区块链技术中,缺乏针对云计算类型的资源服务的解决方案,无法将云计算服务直接融入到区块链技术当中。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开的目的在于提供一种节点选择方法、区块链共识方法、节点选择装置、区块链共识装置、区块链共识系统、电子设备以及计算机可读存储介质,进而至少在一定程度上克服现有的公式方式容易造成计算资源浪费、交易吞吐量低或延迟高,并且无法将云计算服务直接融入到区块链技术中的问题。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本发明的实践而习得。
根据本公开的第一方面,提供一种节点选择方法,包括:获取区块链中当前最新区块的区块哈希值,并获取处于一致性哈希环中各节点的初始账户地址;根据区块哈希值和初始账户地址从一致性哈希环中确定当前候选节点;判断当前候选节点是否满足预设条件;若是,则将当前候选节点作为目标节点,并由目标节点在区块链网络中广播节点选择消息;若否,则选取新的候选节点作为当前候选节点。
可选的,上述方法还包括:确定待进入节点以及待进入节点的初始账户地址;其中,待进入节点为具有资源服务能力的节点;根据初始账户地址确定待进入节点的账户地址,以形成新的工作节点并加入到由工作节点组成的一致性哈希工作环中。
可选的,根据初始账户地址确定待进入节点的账户地址,包括:确定待进入节点的节点公钥,并对节点公钥进行散列函数运算以得到初始账户地址;对初始账户地址添加版本号和校验编码,以生成中间账户地址;对中间账户地址进行编码运算以得到账户地址。
可选的,上述方法还包括:接收用户端发送的待处理请求,并确定待处理请求的请求类型;根据请求类型确定待处理请求的报酬信息,由目标节点根据报酬信息生成待处理交易。
根据本公开的第二方面,提供一种区块链共识方法,包括:接收工作节点发送的待处理交易,并判断待处理交易是否满足预设合法判断条件;若是,则对待处理交易添加合法标识以生成初始合法交易,并将初始合法交易存储在目标区块中;由区块链网络中的其他共识节点对目标区块的合法性进行验证,并确定验证结果;如果验证结果为合法结果,则将目标区块链接在区块链中。
可选的,上述方法还包括:若否,则为待处理交易添加非法标识以生成非法交易以及非法交易消息;将非法交易消息在区块链网络中广播。
可选的,上述方法还包括:确定工作节点对应的资源量和服务时间,并根据资源量和服务时间确定工作节点的初始贡献度;对初始贡献度进行排序以得到排序结果,基于排序结果确定预设数量个工作节点;按照预设周期将确定出的工作节点调整为区块链网络中新的共识节点。
可选的,上述方法还包括:确定共识节点的记账扣除系数和惩罚扣除系数;根据记账扣除系数和惩罚扣除系数将初始贡献度调整为当前贡献度;对当前贡献度进行排序处理,以根据排序处理结果替换区块链网络中的共识节点。
根据本公开的第三方面,提供一种节点选择装置,包括:地址获取模块,用于获取区块链中当前最新区块的区块哈希值,并获取处于一致性哈希环中各节点的初始账户地址;节点确定模块,用于根据区块哈希值和初始账户地址从一致性哈希环中确定当前候选节点;判断模块,用于判断当前候选节点是否满足预设条件;节点选择模块,用于若是,则将当前候选节点作为目标节点,并由目标节点在区块链网络中广播节点选择消息;候选节点选取模块,用于若否,则选取新的候选节点作为当前候选节点。
可选的,节点确定模块包括节点添加单元,用于确定待进入节点以及待进入节点的初始账户地址;其中,待进入节点为具有资源服务能力的节点;根据初始账户地址确定待进入节点的账户地址,以形成新的工作节点并加入到由工作节点组成的一致性哈希工作环中。
可选的,节点添加单元包括地址确定子单元,用于确定待进入节点的节点公钥,并对节点公钥进行散列函数运算以得到初始账户地址;对初始账户地址添加版本号和校验编码,以生成中间账户地址;对中间账户地址进行编码运算以得到账户地址。
可选的,节点选择装置还包括交易生成模块,用于接收用户端发送的待处理请求,并确定待处理请求的请求类型;根据请求类型确定待处理请求的报酬信息,由目标节点根据报酬信息生成待处理交易。
根据本公开的第四方面,提供一种区块链共识装置,包括:交易判断模块,用于接收工作节点发送的待处理交易,并判断待处理交易是否满足预设合法判断条件;区块生成模块,用于若是,则对待处理交易添加合法标识以生成初始合法交易,并将初始合法交易存储在目标区块中;验证模块,用于由区块链网络中的其他共识节点对目标区块的合法性进行验证,并确定验证结果;交易存储模块,用于如果验证结果为合法结果,则将目标区块链接在区块链中。
可选的,区块链共识装置还包括消息广播模块,用于若否,则为待处理交易添加非法标识以生成非法交易以及非法交易消息;将非法交易消息在区块链网络中广播。
可选的,区块链共识装置还包括节点替换模块,用于确定工作节点对应的资源量和服务时间,并根据资源量和服务时间确定工作节点的初始贡献度;对初始贡献度进行排序以得到排序结果,基于排序结果确定预设数量个工作节点;按照预设周期将确定出的工作节点调整为区块链网络中新的共识节点。
可选的,节点替换模块包括节点替换单元,用于确定共识节点的记账扣除系数和惩罚扣除系数;根据记账扣除系数和惩罚扣除系数将初始贡献度调整为当前贡献度;对当前贡献度进行排序处理,以根据排序处理结果替换区块链网络中的共识节点。
根据本公开的第五方面,提供一种区块链共识系统,包括:工作节点,用于接收用户端发送的待处理请求,并将待处理请求生成对应的待处理交易;共识节点,用于对待处理交易的合法性进行判断,将满足合法性的待处理交易确定为合法交易并存储在区块中;区块,用于存储合法交易的交易信息。
根据本公开的第六方面,提供一种电子设备,包括:处理器;以及存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现根据上述任意一项所述的节点选择方法和/或区块链共识方法。
根据本公开的第七方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据上述任意一项所述的节点选择方法和/或区块链共识方法。
本公开提供的技术方案可以包括以下有益效果:
本公开的示例性实施例中的节点选择方法,获取当前最新区块的区块哈希值,并根据一致性哈希环中节点的账户地址从一致性哈希环中确定当前候选节点,判断当前候选节点是否满足预设条件,如果当前候选节点满足预设条件,则将当前候选节点作为目标节点,否则,将从一致性哈希环中选取新的节点作为当前候选节点,以便确定出目标节点。通过本公开的节点选择方法。一方面,处于一致性哈希环中节点的账户地址是采用密码学安全的散列算法生成,因此,生成的账户地址具有良好的抗碰撞性,并且保证众多账户地址在全网中的均匀性,使得在进行工作节点的选择时具备随机性和公平性。另一方面,在一致性哈希环中的节点的账户地址无法变更,因此,节点在一致性哈希环中的位置也无法变更,降低了在网络中发生作弊行为的风险。又一方面,利用区块链中区块生成的随机性,可以快速、公平、随机地从区块链网络中选择出目标节点,避免因共识导致的大量无用计算产生无用消耗。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示意性示出了根据本公开的示例性实施方式的节点选择方法的流程图;
图2示意性示出了根据本公开的示例性实施方式的区块链网络的结构图;
图3示意性示出了根据本公开的示例性实施方式的区块链中区块的数据结构图;
图4示意性示出了根据本公开的示例性实施方式的区块链节点加入区块链网络的实现流程图;
图5示意性示出了根据本公开的示例性实施方式的各类节点账户地址生成算法的流程图;
图6示意性示出了根据本公开的示例性实施方式的一致性哈希选择平均化结构意图;
图7示意性示出了根据本公开的示例性实施方式的根据区块哈希选择区块链功能节点的实现流程图;
图8示意性示出了根据本公开的示例性实施方式的区块链中的交易结构图;
图9示意性示出了根据本公开的示例性实施方式的区块链共识方法的流程图;
图10示意性示出了根据本公开的示例性实施方式的节点选择装置的方框图;
图11示意性示出了根据本公开的示例性实施方式的区块链共识装置的方框图;
图12示意性示出了根据本公开的示例性实施方式的区块链共识系统的结构图;
图13示意性示出了根据本公开一示例性实施例的电子设备的框图;
图14示意性示出了根据本公开一示例性实施例的计算机可读存储介质的示意图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本公开将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本公开的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而没有所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知结构、方法、装置、实现、材料或者操作以避免模糊本公开的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个软件硬化的模块中实现这些功能实体或功能实体的一部分,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
在当前采用的区块链共识方式中,区块链中的所有节点共同参与寻找指定随机数的计算博弈,博弈胜出者可以获得记账权,并获取一定收益。这种共识方式浪费的计算资源和电量十分庞大,同时,生成区块的速度较慢,容易出现交易吞吐量低或延迟高的情况,也无法根据实时的网络压力情况对区块生成速度进行动态调整。另外,现有的区块链技术缺乏针对云计算类型的资源服务的解决方案,无法将云计算服务直接融入到区块链技术当中。
基于此,在本示例实施例中,首先提供了一种节点选择方法,可以采用区块链中的任意一个节点来实现本公开的节点选择方法,具体的,区块链中的节点可以是服务器或终端设备,即可以利用服务器来实现本公开的用节点选择方法,也可以利用终端设备来实现本公开所述的方法,其中,本公开中描述的终端可以包括诸如手机、平板电脑、笔记本电脑、掌上电脑、个人数字助理(Personal Digital Assistant,PDA)等移动终端,以及诸如台式计算机等固定终端。图1示意性示出了根据本公开的一些实施例的节点选择方法流程的示意图。参考图1,该节点选择方法可以包括以下步骤:
步骤S110,获取区块链中当前最新区块的区块哈希值,并获取处于一致性哈希环中各节点的初始账户地址。
步骤S120,根据区块哈希值和初始账户地址从一致性哈希环中确定当前候选节点。
步骤S130,判断当前候选节点是否满足预设条件。
步骤S140,若是,则将当前候选节点作为目标节点,并由目标节点在区块链网络中广播节点选择消息。
步骤S150,若否,则选取新的候选节点作为当前候选节点。
根据本示例实施例中的节点选择方法,一方面,处于一致性哈希环中节点的账户地址是采用密码学安全的散列算法生成,因此,生成的账户地址具有良好的抗碰撞性,并且保证众多账户地址在全网中的均匀性,使得在进行工作节点的选择时具备随机性和公平性。另一方面,在一致性哈希环中的节点的账户地址无法变更,因此,节点在一致性哈希环中的位置也无法变更,降低了在网络中发生作弊行为的风险。又一方面,利用区块链中区块生成的随机性,可以快速、公平、随机地从区块链网络中选择出目标节点,避免因共识导致的大量无用计算产生无用消耗。
下面,将对本示例实施例中的节点选择方法进行进一步的说明。
在步骤S110中,获取区块链中当前最新区块的区块哈希值,并获取处于一致性哈希环中各节点的初始账户地址。
在本公开的一些示例性实施方式中,区块链网络中可以包含区块链节点和区块,区块链节点可以包括工作节点和共识节点,区块用于存储已经生成的交易信息。当前最新区块可以是区块链网络中当前已生成的最新区块。参考图2,图2示意性示出了区块链网络的组织架构图。在区块链网络200中,可以包括由工作节点组成的一致性工作环210以及2共识节点组成的一致性哈希环220以及区块230。区块哈希值可以是区块链中区块中包含的信息,当前节点的区块哈希值是区块数据结构的一部分。参考图3,图3示意性示出了区块链中的区块的数据结构图。本示例实施例中的区块数据结构可以包括区块头与区块体两部分。其中,区块头310可以包括但不限于版本号、区块高度、时间戳、区块哈希、前一区块哈希、交易数与Merkle树根等内容;区块体320中可以存储交易集合。具体的,区块哈希值可以通过采用安全散列算法(Secure Hash Algorithm,SHA)以及RACE原始完整性校验消息摘要(RACE Integrity Primitives Evaluation Message Digest,RIPEMD)算法对区块头计算后生成,举例而言,在本示例实施例中,区块哈希值可以采用SHA256算法以及RIPEMD160算法对区块头计算生成,即区块哈希=RIPEMD160(SHA256(区块头))。
一致性哈希环可以是采用一致性哈希算法构造成的由区块链中的节点组成的虚拟环。当云计算中的服务节点进入区块链网络后,根据其初始账户地址的值,可以定位到长度为2
每一个工作节点在进入区块链网络时都会生成一个账户地址,用于在网络中进行定位。其中,账户地址的生成算法采用密码学安全的散列算法生成。该算法输出长度为160位,保证其具有良好的抗碰撞性,避免两个不同的节点产生相同的账户地址。同时,该算法对账户地址进行字符编码,保证其在使用时具有一定的可读性。同时,该算法保证众多账户地址在全网中的均匀性,使得在进行工作节点的选择时具备随机性和公平性。
根据本公开的一些示例性实施例,确定待进入节点以及待进入节点的初始账户地址;其中,待进入节点为具有资源服务能力的节点;根据初始账户地址确定待进入节点的账户地址,以形成新的工作节点并加入到由工作节点组成的一致性哈希工作环中。待进入节点可以是云计算中拥有资源服务能力的服务节点,当这些服务节点愿意为用户提供服务时,可以加入到区块链网络中,在未加入区块链网络之前的云计算服务节点可以称为待进入节点。初始账户地址可以是待进入节点进入区块链网络时生成的账户地址,初始账户地址用于在网络中进行定位,且在系统内容使用,是进行节点选择的核心元素。账户地址可以是节点在区块链网络中供用户输入、转账等操作时使用的地址。工作节点可以是区块链网络具备一定的计算能力,且可以向网络中的用户提供服务的节点,同时,工作节点所处的网络环境满足高可用、高网络带宽及低延迟的要求。
在某一个云计算服务节点成为区块链网络中的工作节点之前,可以向区块链全网公布可提供的资源,并且支付相应的财产作为抵押,以便如果该服务节点产生恶意行为时将会受到处罚;并且,在该服务节点退出网络时将退还剩余抵押。参考图4,图4示意性示出了云服务节点加入区块链网络的实现流程图。在步骤S410~步骤S420中,当区块链接入区块链网络时,可以确定出待进入节点的初始账户地址;在步骤S430~步骤S440中,根据待进入节点的初始账户地址可以定位到一致性哈希环上的某一点,并将初始账户地址、IP地址和可提供资源向区块链网络中的所有节点广播。另外,在待进入节点接入区块链中后,可以根据初始账户地址确定出对应的账户地址,并将生成账户地址的待进入节点作为新的工作节点加入到一致性哈希工作环中,以便接收新的用户请求。
根据本公开的另一示例性实施例,确定待进入节点的节点公钥,并对节点公钥进行散列函数运算以得到初始账户地址;对初始账户地址添加版本号和校验编码,以生成中间账户地址;对中间账户地址进行编码运算以得到账户地址。节点公钥可以是待进入节点对应的公钥,其中,节点公钥由节点自身提供。散列函数运算可以是针对节点公钥进行的运算处理。版本号可以是在初始账户地址添加的字段,通过在初始账户地址中添加版本号,可以实现前后兼容。检验编码可以是针对添加版本号的初始账户地址进行运算后得到的编码结果。对添加了版本号的初始账户地址进行散列函数运算,可以提供运算结果中的部分字段作为校验编码。中间账户地址可以是对初始账户地址添加版本号和校验编码后生成的账户地址。编码运算可以是针对中间账户地址进行的编码运算。
参考图5,图5示意性示出了区块链网络中各类节点初始账户地址和账户地址生成算法的流程图。在本示例实施例中,首先,在步骤S511~步骤S514中,在获取到待进入节点的节点公钥后,可以对节点公钥进行安全散列算法运算(如SHA256运算)以及信息摘要算法运算(如RIPEMD160运算),得出160位(即20字节)长度的初始账户地址412;其中,SHA256可以为具有良好抗碰撞性的密码学散列函数,输出结果的长度为256位;RIPEMD160同样可以为密码学散列函数,输出长度为160位。其次,在初始账户地址前添加版本号511,可以实现前后兼容,在步骤S521~步骤S522中,可以在带有版本号的初始账户地址的基础上进行两次SHA256运算,从运算结果中取前4字节作为校验和513(即校验编码),添加到初始账户地址的末尾,以形成中间账户地址。再次,在步骤S523~步骤S524中,对包含有版本号和校验和的中间账户地址进行编码运算(如Base58编码)生成账户地址;其中,Base58编码是比特币创造的校验函数,具有易读、错误校验、防止错误输入的功能。
需要说明的是,初始账户地址和账户地址均可唯一表示某个节点,且两者可相互转化。图5中的步骤S531~步骤S533可以表示由账户地址转换生成初始账户地址的过程,可以对账户地址进行Base58解码运算,再去除尾部的校验和及首部的版本号,即可获得初始账户地址。
进一步地,由于SHA256+RIPEMD160算法不是为一致性哈希专门设计的算法,可能导致节点在环上的分布不够均匀,基于区块哈希进行选择时也无法保证命中率和均匀性,导致系统的公平性下降。为了解决这个问题,可以使用Ketama算法来进行优化,Ketama算法是MemCache系统中为解决分布式问题而设计的算法,Ketama算法采取虚节点的思想,将原有的散列值打散为多个,并将其依次作为虚节点的键,映射到环上,具有较高的节点命中率和较均匀的节点分布。
参考图6,图6是示意性一致性哈希选择平均化结构示意图。详细的优化方法为:在步骤S610~步骤S630中,采用安全散列算法和信息摘要算法对获取到的公钥进行运算,再通过步骤S640对运算结果进行Ketama算法运算,具体的,可以将Ketama算法中原始的MD5算法转换为SHA256算法,增加编码空间,且每个节点进入网络及每次基于区块哈希进行区块610的选择时,均预先经过Ketama算法处理。
在步骤S120中,根据区块哈希值和初始账户地址从一致性哈希环中确定当前候选节点。
在本公开的一些示例性实施方式中,当前候选节点可以是根据区块哈希值从一致性哈希环中确定的一个节点。确定出当前最新区块的区块哈希值以及区块链中节点的账户地址,可以从一致性哈希环中确定出当前候选节点。区块链网络中的节点选择会每隔一段时间执行一次,执行间隔长短由区块的生成速度决定。下面说明根据区块哈希选择工作节点或记账节点的流程,参考图2和图7,图7示意性示出了根据区块哈希选择区块链功能节点的实现流程图。选择工作节点或记账节点的具体流程可以是:在步骤S710~步骤S720中,可以先获取到当前最新区块的区块哈希值,即区块#47的区块哈希值,并根据节点进入网络时广播的账户信息,获取在一致性哈希环210上所有节点的账户地址。在步骤S730~步骤S740中,利用区块哈希值在一致性哈希环上定位到一个特定位置,如位置211,并按照顺时针方向进行寻找,找到的第一个节点,如节点212则为候选的工作节点。需要说明的是,根据区块哈希值在一致性哈希环中定位出的位置中可以包含节点,也可以不包含节点。如果该位置不包含节点,则按照顺时针方向在一致性哈希环中继续寻找节点。在步骤S750~步骤S760中,可以根据用户的资源需求和节点可提供资源的实际情况,判断该节点是否可以提供相应服务;如果该节点的剩余资源无法提供相应服务,则继续按顺时针寻找下一个节点,并重复步骤S730。在步骤S770~步骤S790中,如果判断节点的剩余资源可以提供资源服务,则被选择的工作节点可以向所有节点及用户广播已找到工作节点的信息,无需继续寻找工作节点;在广播发出后,用户向被选择的工作节点提交完整的资源需求请求,被选择的工作节点生成一笔交易,并加入到交易池240中。另外,被选择的工作节点节点将用户所需要的资源锁死,并向所有节点及用户广播更新后的可提供资源情况,以供后续服务。同理,选择共识节点的过程也通过上述步骤完成。
在步骤S130中,判断当前候选节点是否满足预设条件。
在本公开的一些示例性实施方式中,预设条件可以是判断当前候选节点能否提供给完成当前处理操作所需的资源的条件。在基于一致性哈希环确定出当前候选节点后,可以判断当前候选节点是否满足预设条件,以便根据判断结果确定是否选择当前候选节点。
在步骤S140中,若是,则将当前候选节点作为目标节点,并由目标节点在区块链网络中广播节点选择消息。
在本公开的一些示例性实施方式中,目标节点可以是根据区块哈希值和预设条件从一致性哈希环中确定出的节点。节点选择消息可以是区块链中的某一节点被选中成为目标节点时所对应的消息。如果当前候选节点满足可以提供服务资源的条件,则将当前候选节点作为目标节点,并通过目标节点将该节点被选中成为目标节点的节点选择消息在区块链网络中进行广播。
在步骤S150中,若否,则选取新的候选节点作为当前候选节点。
在本公开的一些示例性实施方式中,新的候选节点可以是从一致性哈希环中确定出的节点。如果在一致性哈希环中确定出的候选节点不满足预设条件,则继续在哈希环中按照顺时针方向寻找一新的候选节点,将找到的第一节点作为当前候选节点,并继续执行相应的判断步骤。
根据本公开的一些示例性实施例,区块链网络中的区块由共识节点每隔固定时间生成。区块包含区块哈希字段,其生成算法与工作节点账户地址的生成算法一致,因此可以利用区块哈希决定当前时间段内,由哪个工作节点完成工作。其中,当前时间段表示,从当前最新的区块生成开始,到下一个区块生成时结束。在利用区块进行工作节点选择时,首先根据最新区块的哈希,定位到一致性哈希环的对应位置;接着按顺时针方向寻找工作节点,寻找到的第一个工作节点,则承接当前时间段内所有的工作任务。当新的区块生成后,重复上述流程。
根据本公开的另一示例性实施例,接收用户端发送的待处理请求,并确定待处理请求的请求类型;根据请求类型确定待处理请求的报酬信息,由目标节点根据报酬信息生成待处理交易。待处理请求可以用户通过用户端向区块链节点提交的请求,待处理请求可以包括资源计算请求、资源存储请求等。请求类型可以是待处理请求对应的类型。报酬信息可以是用户根据待处理请求所支付的报酬的相关信息。目标节点可以是从区块链网络中确定出被选中的节点,目标节点用于接收用户端发送的待处理请求。待处理交易可以是区块链网络中的工作节点在接收到用户发送的待处理请求和所支付的报酬后,生成的与待处理请求对应的交易。
目标节点在每次接收到用户的待处理请求并接收用户支付的报酬后,可以生成一笔交易,并将该交易投入到交易池中等待共识节点的处理。待处理交易具有相应的交易数据格式,参考图8,图8示意性示出了区块链中的交易的数据结构图。每一个交易可以包含交易头810和交易体820两部分。具体的,交易头810可以包括但不限于版本号、交易类型、时间戳、交易标识(Identity Document,ID)、输入账户签名和输出账户签名等内容。其中,版本号可以用于实现前后兼容;交易类型可以用于资源申请、资源更新、资源退回等类型的判别;时间戳可以为目标节点创建此交易的时间;输入账户签名为用户的数字签名,输出账户签名为目标节点的数字签名。交易体820可以包括但不限于输入账户地址、输出账户地址、输出金额、资源类型、资源详细信息等内容。具体的,输入账户可以为用户;输出账户为目标节点;输出金额可以为用户支付给工作节点的酬劳,且输出金额可以由申请资源类型、资源数量、申请时长等因素决定;资源类型用于区分申请所需要的资源种类,例如可以包括计算资源、存储资源等;资源详细信息可以为包含用户所申请的资源详细名称、资源数量、申请时长等。
目标节点接收到用户端发送的待处理请求以及用户支付的报酬之后,可以根据根据待处理请求的请求类型生成与待处理请求对应的待处理交易,并且可以将生成的待处理交易放入交易池中,以便共识节点对待处理交易进行共识处理。
在另一示例实施例中,还提供了一种区块链共识方法,可以采用区块链中的共识节点来实现本公开的区块链共识方法,共识节点可以是从工作节点中选择出的节点。图9示意性示出了根据本公开的一些实施例的区块链共识方法流程的示意图。参考图9,该区块链共识方法可以包括以下步骤:
步骤S910,接收工作节点发送的待处理交易,并判断待处理交易是否满足预设合法判断条件。
步骤S920,若是,则对待处理交易添加合法标识以生成初始合法交易,并将初始合法交易存储在目标区块中。
步骤S930,由区块链网络中的其他共识节点对目标区块的合法性进行验证,并确定验证结果。
步骤S940,如果验证结果为合法结果,则将目标区块链接在区块链中。
根据本示例实施例中的区块链共识方法,一方面,通过工作节点将待处理请求生成待处理交易,并对待处理交易的合法性进行初步判断,如果待处理交易满足预设合法判断条件,则将待处理交易存储在区块中,由其他共识节点通过记账节点对接收到的待处理交易进行合法性。将工作节点与共识节点的具体功能职责进行区分,可以避免区块链网络中由于共识而导致的大量无用计算产生的无用消耗。另一方面,工作节点为用户提供的每一次服务都可以采用交易的形式记录在区块链中,使得交易记录可被追溯,不可被篡改,提高了服务的可信任度。
下面,将对本示例实施例中的区块链共识方法进行进一步的说明。
在步骤S910中,接收工作节点发送的待处理交易,并判断待处理交易是否满足预设合法判断条件。
在本公开的一些示例性实施方式中,预设合法判断条件可以是用于判断待处理交易是否合法所使用的判断条件。通过上述节点选择方法可以确定出接收待处理交易的工作节点或记账节点。在区块链网络中,可以从共识节点中选取一个几点作为记账节点,记账节点的具体工作职责可以是:对当前交易池内的交易进行排序、打包,同时对这些交易的合法性进行验证,合法性验证例如可以包括输入金额大于输出金额、数据结构的正确性、数字签名的正确性、双重花费检测、解锁脚本的正确性等。只有经过验证的交易才可以被打包进区块中。
在步骤S920中,若是,则对待处理交易添加合法标识以生成初始合法交易,并将初始合法交易存储在目标区块中,并存储在目标区块中。
在本公开的一些示例性实施方式中,合法标识可以是经过初始合法判断条件判定后,对满足预设合法判断条件的待处理交易添加的标识。初始合法交易可以是对满足预设合法判断条件的待处理交易添加合法标识等处理后生成的交易。如果判定待处理交易满足初始合法判断条件,则对该待处理交易添加合法标识,并生成初始合法交易,以便对生成的初始合法交易进行共识处理。
在步骤S930中,由区块链网络中的其他共识节点对目标区块的合法性进行验证,并确定验证结果。
在本公开的一些示例性实施方式中,区块链网络中的其他共识节点可以是区块链网络中除选中的记账节点以外的其他所有共识节点。验证结果可以是其他共识节点对目标区块中的区块内容进行合法性验证后得到的结果。其他共识节点对目标区块的共识操作与授权股份证明机制(Delegated Proof of Stake,DPoS)类似,即由记账节点将新生成的区块向所有的共识节点广播、认证,认证内容可以包括区块数据的合法性、记账节点是否为合法节点、交易数据的合法性等。其他共识节点对目标区块中的认证内容进行认证处理,并确定出对目标区块的验证结果。
在步骤S940中,如果验证结果为合法结果,则将目标区块链接在区块链中。
在本公开的一些示例性实施方式中,合法结果可以是其他共识节点对目标区块的验证结果。最新区块可以是包含待处理请求对应的待处理交易的数据内容的区块。如果区块链网络中的其他共识节点中有超过共识节点数量一半以上节点认为目标区块可以通过认证,则区块被判定为合法有效,可以作为最新区块追加到当前最长链的末尾,并向所有的工作节点及用户广播,开启下一个记账周期。
根据本公开的一些示例性实施例,若否,则为待处理交易添加非法标识以生成非法交易以及非法交易消息;将非法交易消息在区块链网络中广播。非法标识可以是判定待处理交易为非法交易时,对该待处理交易添加的对应标识。非法交易消息可以是对待处理交易添加非法标识后,生成的非法交易对应的交易消息。当记账节点判定待处理交易为非法交易时,可以对待处理交易添加非法标识,以生成对应的非法交易消息,并将生成的非法交易消息在区块链网络中广播。
根据本公开的另一示例性实施例,确定工作节点对应的资源量和服务时间,并根据资源量和服务时间确定工作节点的初始贡献度;对初始贡献度进行排序以得到排序结果,基于排序结果确定预设数量个工作节点;按照预设周期将确定出的工作节点调整为区块链网络中新的共识节点。资源量可以是区块链网络中的工作节点向区块链网络提供的资源总量。服务时间可以是工作节点向用户提供服务所对应的时间。初始贡献度,又称为资源年龄,可以是根据工作节点的资源量和服务时间确定出来的数值。排序结果可以是对区块链网络中的工作节点的初始贡献度进行排序后,将初始贡献度按照从高到低或从低到高的排序顺序确定出的顺序结果。预设数量可以是预先设定的数值,可以采用n表示预设数量。在得到工作节点初始贡献度的排序结果后,可以从排序结果选取预设数量个工作节点。预设周期,即共识周期,可以是预先设定的时间周期,根据预设周期可以对区块链网络中的共识节点进行调整。
在本示例实施例中,可以确定出工作节点的资源年龄,自动确定出预设数量个资源年龄最高的工作节点,由其在预设周期内分别完成共识操作。在本示例实施例中,资源年龄可以用A表示,则资源年龄A的定义可以是截止到当前时间,工作节点所提供的资源量d与服务时间t乘积的和,即
为了防止恶意节点长期担任共识节点而破坏系统安全性,同时为满足系统去中心化及可信任化的需求,共识节点可以在一个共识周期T后进行轮换,由其他节点继续执行共识任务。被替换下的共识节点可以重新进入工作环,以继续提供资源服务工作。共识节点数量n及共识周期T可以为系统预设值,例如,可以将n设为101,T设为24小时等。举例而言,当n设为101时,可以选取资源年龄排在全网前101位的工作节点作为选出的共识节点。
根据本公开的又一示例性实施例,确定共识节点的记账扣除系数和惩罚扣除系数;根据记账扣除系数和惩罚扣除系数将初始贡献度调整为当前贡献度;对当前贡献度进行排序处理,以根据排序处理结果替换区块链网络中的共识节点。记账扣除系数可以是对共识节点在共识周期内因记账操作而对应产生的对资源年龄的扣除系数。惩罚扣除系数可以是为了避免共识节点中某些恶意节点产生作弊行为时,对资源年龄的扣除系数。当前贡献度可以是根据记账扣除系数和惩罚扣除系数对初始贡献度进行扣除后得到的共识节点的贡献度。
为了保证系统的公平性,避免区块链网络中共识操作的权利过于集中于早期加入网络且资源年龄较高的节点,使得其他节点也可以成为共识节点,因此,可以对完成共识任务后的共识节点的资源年龄进行处理,例如可以适当扣除共识节点的资源年龄。具体方案为,设i为共识节点的节点序号,j为记账序号;在一个共识周期发生前,各个共识节点的资源年龄为A
综上所述,本公开中的节点选择方法,根据当前最新区块中的区块哈希值和区块链网络中一致性哈希环中节点的账户地址从一致性哈希环中确定出当前候选节点,并根据当前候选节点选取出节点作为目标节点,以对用户端发送的待处理请求进行处理。通过该节点选择方法,一方面,可以将云计算服务节点与区块链网络节点相融合,云计算节点在向外提供资源服务的同时,利用区块链的去中心化特点实现分布式自治。另一方面,利用区块链中区块生成的随机性和一致性哈希的动态性,可以选择各个节点集合中实际提供服务的节点,并提供共识,满足随机化、公平、快速的特点。再一方面,工作节点可以将为用户提供的每一次服务以交易的形式记录在区块链中,达到交易记录可被追溯、不可被篡改的效果,提高了服务的可信任度;进一步地,本公开的区块链共识方法,通过记账节点判断待处理交易的合法性,如果认为待处理交易合法,则对待处理交易添加合法标识并存储至区块链网络中的最新区块中,并由区块链中的其他共识节点对区块的合法性进行判断,如果判断目标区块的区块内容为合法,则将目标区块作为最新区块链接在区块链的尾部。在每个预设周期内,通过对共识节点的资源年龄进行计算和排序,结合排序结果可以对共识节点进行替换,从工作节点中选取出贡献度较高的节点作为新的共识节点。根据资源年龄的排序结果选择网络中的共识节点的方法具有快捷高效的特点,并且在一定时间后轮换,可以避免被恶意节点攻击,提高了网络的安全性。
需要说明的是,尽管在附图中以特定顺序描述了本发明中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
此外,在本示例实施例中,还提供了一种节点选择装置。参考图10,该节点选择装置1000可以包括:地址获取模块1010、节点确定模块1020、判断模块1030、节点选择模块1040以及候选节点选取模块1050。
具体的,地址获取模块1010可以用于获取区块链中当前最新区块的区块哈希值,并获取处于一致性哈希环中各节点的初始账户地址;节点确定模块1020可以用于根据区块哈希值和初始账户地址从一致性哈希环中确定当前候选节点;判断模块1030可以用于判断当前候选节点是否满足预设条件;节点选择模块1040可以用于若是,则将当前候选节点作为目标节点,并由目标节点在区块链网络中广播节点选择消息;候选节点选取模块1050可以用于若否,则选取新的候选节点作为当前候选节点。
节点选择装置1000根据获取到的区块的区块哈希值和一致性哈希环中所有节点的账户地址,可以从一致性哈希环中确定出当前候选节点,判断当前候选节点是否满足预设条件,如果当前候选节点满足预设条件,则将当前候选节点作为目标节点,否则,选取新的候选节点判断是否可以作为目标节点。在一致性哈希环中的节点的账户地址无法变更,因此,节点在一致性哈希环中的位置也无法变更,降低了在网络中发生作弊行为的风险。另外,利用区块链中区块生成的随机性,可以快速、公平、随机地从区块链网络中选择出目标节点,避免因共识导致的大量无用计算产生无用消耗,是一种行之有效的节点选择方法。
在本公开的一种示例性实施方案中,基于前述方案,节点确定模块包括节点添加单元,节点添加单元被配置为:确定待进入节点以及待进入节点的初始账户地址;其中,待进入节点为具有资源服务能力的节点;根据初始账户地址确定待进入节点的账户地址,以形成新的工作节点并加入到由工作节点组成的一致性哈希工作环中。
在本公开的一种示例性实施方案中,基于前述方案,节点添加单元包括地址确定子单元,地址确定子单元被配置为:确定待进入节点的节点公钥,并对节点公钥进行散列函数运算以得到初始账户地址;对初始账户地址添加版本号和校验编码,以生成中间账户地址;对中间账户地址进行编码运算以得到账户地址。
在本公开的一种示例性实施方案中,基于前述方案,节点选择装置还包括交易生成模块,交易生成模块被配置为:接收用户端发送的待处理请求,并确定待处理请求的请求类型;根据请求类型确定待处理请求的报酬信息,由目标节点根据报酬信息生成待处理交易。
在另一示例实施例中,还提供了一种区块链共识装置。参考图11,该区块链共识装置1100可以包括:交易判断模块1110、区块生成模块1120、验证模块1130以及存储模块1140。
具体的,交易判断模块1110可以用于接收工作节点发送的待处理交易,并判断待处理交易是否满足预设合法判断条件;区块生成模块1120可以用于若是,则对待处理交易添加合法标识以生成初始合法交易,并将初始合法交易存储在目标区块中;验证模块1130可以用于由区块链网络中的其他共识节点对目标区块的合法性进行验证,并确定验证结果;交易存储模块1140可以用于如果验证结果为合法结果,则将目标区块链接在区块链中。
区块链共识装置1100在接收到待处理交易后,可以通过记账节点对待处理交易的合法性进行判断,如果判定该待处理交易满足预设合法判断条件,则确定其为合法交易并存储在区块中,区块链网络中的其他共识节点可以对区块的合法性进行判断,如果判断合法,则将目标区块作为最新区块链接在区块链的尾部。
在本公开的一种示例性实施方案中,基于前述方案,区块链共识装置还包括消息广播模块,消息广播模块被配置为:若否,则为待处理交易添加非法标识以生成非法交易以及非法交易消息;将非法交易消息在区块链网络中广播。
在本公开的一种示例性实施方案中,基于前述方案,区块链共识装置还包括节点替换模块,节点替换模块被配置为:确定工作节点对应的资源量和服务时间,并根据资源量和服务时间确定工作节点的初始贡献度;对初始贡献度进行排序以得到排序结果,基于排序结果确定预设数量个工作节点;按照预设周期将确定出的工作节点调整为区块链网络中新的共识节点。
在本公开的一种示例性实施方案中,基于前述方案,节点替换模块包括节点替换单元,节点替换单元被配置为:确定共识节点的记账扣除系数和惩罚扣除系数;根据记账扣除系数和惩罚扣除系数将初始贡献度调整为当前贡献度;对当前贡献度进行排序处理,以根据排序处理结果替换区块链网络中的共识节点。
上述中各虚拟节点选择装置或虚拟区块链共识装置模块的具体细节已经在对应的节点选择方法中进行了详细的描述,因此此处不再赘述。
应当注意,尽管在上文详细描述中提及了节点选择装置或区块链共识装置的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,在本公开的示例性实施例中,还提供了一种能够实现上述方法的区块链共识系统。参考图12,该区块链共识系统1200可以包括:工作节点1210、共识节点1220以及区块1230。
具体的,工作节点1210可以用于接收用户端发送的待处理请求,并将待处理请求生成对应的待处理交易;共识节点1220可以用于对待处理交易的合法性进行判断,将满足合法性的待处理交易确定为合法交易并存储在区块中;区块1230可以用于存储合法交易的交易信息。
区块链共识系统1200可以包含分别由工作节点和共识节点组成的一致性哈希工作环和一致性哈希共识环,由工作节点进行待处理交易的生成工作,并由共识节点对待处理交易和区块内容的合法性进行判断,实现了将云计算中的服务节点与区块链网络中的节点相结合,构建一种可信的分布式资源服务网络。利用区块链中区块生成的随机性和一致性哈希的动态性,选择各个节点集合中实际提供服务的节点,可以满足随机化、公平、快速的目的。节点为用户提供的每一次服务以交易的形式记录在区块链中,可被追溯,不可被篡改,提高了服务的可信任度。另外,根据节点的资源年龄选择网络中的共识节点,快捷高效,并在一定时间后轮换,避免被恶意节点攻击,提高了网络的安全性。
此外,在本公开的示例性实施例中,还提供了一种能够实现上述方法的电子设备。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施例、完全的软件实施例(包括固件、微代码等),或硬件和软件方面结合的实施例,这里可以统称为“电路”、“模块”或“系统”。
下面参照图13来描述根据本发明的这种实施例的电子设备1300。图13显示的电子设备1300仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图13所示,电子设备1300以通用计算设备的形式表现。电子设备1300的组件可以包括但不限于:上述至少一个处理单元1310、上述至少一个存储单元1320、连接不同系统组件(包括存储单元1320和处理单元1310)的总线1330、显示单元1340。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元1310执行,使得所述处理单元1310执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施例的步骤。
存储单元1320可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)1321和/或高速缓存存储单元1322,还可以进一步包括只读存储单元(ROM)1323。
存储单元1320还可以包括具有一组(至少一个)程序模块1325的程序/实用工具1324,这样的程序模块1325包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线1330可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备1300也可以与一个或多个外部设备1370(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备1300交互的设备通信,和/或与使得该电子设备1300能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1350进行。并且,电子设备1300还可以通过网络适配器1360与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器1360通过总线1330与电子设备1300的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备1300使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施例的描述,本领域的技术人员易于理解,这里描述的示例实施例可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施例的方法。
在本公开的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施例中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施例的步骤。
参考图14所示,描述了根据本发明的实施例的用于实现上述方法的程序产品1400,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施例。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限。
- 节点选择方法、区块链共识方法及装置、系统、设备
- 区块链共识节点选择方法、装置、计算机设备和存储介质