一种区块链的共识方法
技术领域
本发明涉及区块链技术领域,涉及一种区块链的共识方法。
背景技术
现有的区块链公有链共识方法主要有POW共识方法及POS共识方法。在使用POW共识方法的区块链中,拥有更高的算力的挖矿者有更大的可能性挖到区块,其效率较低,但拥有最高的公信力,且节点不容易作恶,但是由于效率较低,极有可能产生一些交易量较少、或者根本没有交易的不合法的区块;在使用POS共识方法的区块链中,拥有更高的Stake权重的Validator有更大的可能性获得投票收益,其效率较高,但由于逐利性,Validator容易作恶,产生“nothing at stake”攻击。产生“nothing at stake”攻击的本质原因是,在POS方法中,如果区块链分叉产生多条链,且Validator投票是免费的,则Validator为了保证自己的利益,同时对每个链都进行投票。
综上所述,当前需要提供一种技术方案,能够保证区块链既拥有较高的效率,也能保证节点不容易作恶,且每个区块都是合法的。
发明内容
有鉴于此,本发明提供一种解决或部分解决上述问题的区块链的共识方法。
为达到上述技术方案的效果,本发明的技术方案为:一种区块链的共识方法,包含以下内容:
共识方法的角色包括:Validator、Validator Set、Vg、基金账户和抵押账户;
Validator是对区块进行投票的节点,每个Validator持有一定的股权Stake,Validator包括诚实的Validator和非诚实的Validator,Validator的数量为3f+1,其中f为正整数,则非诚实的Validator的数量不大于f;Validator Set是所有参与投票的Validator的集合,每轮共识前需要确定Validator Set;每轮共识时,从Validator Set中随机选取一个Validator生成区块,被选择的Validator即是Vg,Vg还用于打包交易、生成Merkle树、广播Merkle根及交易哈希的列表;基金账户用于存放Validator罚没的保证金和成功生成区块获得的部分收益;抵押账户用于冻结Validator缴纳的保证金,Validator需要缴纳一定数量的保证金才能参与投票,只有区块链系统才能使用抵押账户进行支付;
共识方法生成区块的步骤包括:
步骤S1:确定所述Validator Set中的所有Validator,方法为:如果所述Validator的数量大于W,则随机选择W个所述Validator组成所述Validator Set;如果所述Validator的数量不大于W,则所述Validator Set包括所有所述Validator;所述W为正整数,取值由工作人员根据网络传输状况进行动态调整;
步骤S2:从Validator Set中随机选取一个Validator作为Vg,Vg将收集到的交易打包,将交易列表生成Merkle树,然后把Merkle根和交易哈希的列表作为Pre-Prepare消息广播给Validators Set中的其他Validator;
步骤S3:Validator收到Pre-Prepare消息后,首先,判断Validator的交易候选集和Vg的交易候选集是否一致,如果不一致,则Validator向Vg或Validators Set中的其他Validator获取完整的交易;然后,Validator再计算Merkle根并将其作为Prepare消息广播给Validators Set中的其他Validator;
步骤S4:Validator接收Prepare消息,当Validator接收到2f个一致的Prepare消息后,则生成一条Commit消息,Commit消息说明Validator已收到f+1个诚实的Validator的投票,Validator将Commit消息广播给Validators Set中的其他Validator;
步骤S5:Validator接收Commit消息,当Validator接收到2f+1个一致的Commit消息后,说明所有Validators Set中所有Validator都已收到f+1个诚实的Validator的投票,可以进行投票统计;投票统计的方法为:如果Validator的区块头的哈希值与Vg的区块头的哈希值相等,且Validator持有的股权Stake超过总体股权Stake的50%,则代表Vg生成的区块正确,则将Vg生成的区块写入区块链;
步骤S6:在下一轮共识时,对Vg生成的区块进行合法性判定,判定过程为:随机选择N个Validator对Vg生成的区块进行合法性投票,如果Validator的意见一致,则一致的意见即为合法性判定结果;如果意见不一致,则继续进行合法性投票:上一轮合法性投票中,Validator的意见包括支持票和反对票,支持票的数量为M,反对票的数量为P,则随机选择Q个Validator继续进行合法性投票,Q为M和P中取值较小的一个,N、M、P和Q均为正整数,N由区块链系统设定;直到每轮合法性投票中的支持票的数量的累加和或反对票的数量的累加和不小于N,则合法性判定结束,则累加和不小于N的Validator的意见即为合法性判定结果;
区块链系统会选出新的Vg代替原有的Vg,包括以下情况:原有的Vg生成的区块没有达成共识,原有的Vg未能在规定的时间内发送Pre-Prepare消息,原有的Vg发送假的Pre-Prepare消息,Validator接收到2f个假的Prepare消息。
用户需要缴纳一定数量的保证金才能成为Validator,Validator缴纳的保证金冻结在的抵押账户中;当诚实的Validator不想继续参与投票时,可申请退还保证金,区块链系统将抵押账户中冻结的保证金退还给诚实的Validator,并将Validator从ValidatorsSet中剔除;当Validator有不诚实的投票时,区块链系统将会罚没其保证金,甚至将其从Validators Set中剔除,Validator罚没的保证金从抵押账户进入基金账户;如果Validator认为其他Validator有不诚实投票,则可以新增一条交易并广播,该交易会在下一个区块进行共识,若共识成功,则有不诚实投票的Validator的保证金将被罚没;
新的Vg被选出后,首先会新增一条交易用来罚没原有的Vg的保证金并将其广播给Validators Set中的其他Validator;然后新的Vg重新将交易列表生成Merkle树,再把Merkle根和交易哈希的列表广播给Validators Set中的其他Validator;
成功生成区块后将产生收益,收益将分配给诚实投票的Validator、成功生成区块的Vg及基金账户。
当区块链出现分叉时,计算每条链上股权Stake的总和,股权Stake的总和最大的链即为正确的链。
本发明的有益成果为:本发明提供了一种区块链的共识方法,角色包括Validator、Validator Set、Vg、基金账户和抵押账户。在此共识方法中引入了保证金机制,用户只有在缴纳保证金后才能成为Validator进行投票,一旦某个Validator有不诚实的投票,系统将罚没该Validator的保证金甚至取消其Validator的资格。引入保证金机制后,Validator作恶的成本高于不作恶的成本,解决了“nothing atstake”的问题,同时保证了系统的高效率。区块链系统生成区块后,在下一轮共识时,会随机选择N个Validator对上一个区块的合法性进行投票,如果Validator有不同的意见,则继续投票,直至可以判定出上一个区块的合法性。
附图说明
图1为实施例2中步骤S2的示意图;
图2为实施例2中步骤S3的示意图;
图3为实施例2中步骤S4和步骤S5的示意图;
图4为实施例3中合法性判定的过程的示意图;
图5为实施例4中用户缴纳退还保证金的流程图。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合实施例,对本发明进行详细的说明。应当说明的是,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明,能实现同样功能的产品属于等同替换和改进,均包含在本发明的保护范围之内。具体方法如下:
实施例1:本实施例具体说明了区块链的共识方法的步骤,如下:
共识方法的角色包括:Validator、Validator Set、Vg、基金账户和抵押账户;
Validator是对区块进行投票的节点,每个Validator持有一定的股权Stake,Validator包括诚实的Validator和非诚实的Validator,Validator的数量为3f+1,其中f为正整数,则非诚实的Validator的数量不大于f;Validator Set是所有参与投票的Validator的集合,每轮共识前需要确定Validator Set;每轮共识时,从Validator Set中随机选取一个Validator生成区块,被选择的Validator即是Vg,Vg还用于打包交易、生成Merkle树、广播Merkle根及交易哈希的列表;基金账户用于存放Validator罚没的保证金和成功生成区块获得的部分收益;抵押账户用于冻结Validator缴纳的保证金,Validator需要缴纳一定数量的保证金才能参与投票,只有区块链系统才能使用抵押账户进行支付;
共识方法生成区块的步骤包括:
步骤S1:确定所述Validator Set中的所有Validator,方法为:如果所述Validator的数量大于W,则随机选择W个所述Validator组成所述Validator Set;如果所述Validator的数量不大于W,则所述Validator Set包括所有所述Validator;所述W为正整数,取值由工作人员根据网络传输状况进行动态调整;
步骤S2:从Validator Set中随机选取一个Validator作为Vg,Vg将收集到的交易打包,将交易列表生成Merkle树,然后把Merkle根和交易哈希的列表作为Pre-Prepare消息广播给Validators Set中的其他Validator;
步骤S3:Validator收到Pre-Prepare消息后,首先,判断Validator的交易候选集和Vg的交易候选集是否一致,如果不一致,则Validator向Vg或Validators Set中的其他Validator获取完整的交易;然后,Validator再计算Merkle根并将其作为Prepare消息广播给Validators Set中的其他Validator;
步骤S4:Validator接收Prepare消息,当Validator接收到2f个一致的Prepare消息后,则生成一条Commit消息,Commit消息说明Validator已收到f+1个诚实的Validator的投票,Validator将Commit消息广播给Validators Set中的其他Validator;
步骤S5:Validator接收Commit消息,当Validator接收到2f+1个一致的Commit消息后,说明所有Validators Set中所有Validator都已收到f+1个诚实的Validator的投票,可以进行投票统计;投票统计的方法为:如果Validator的区块头的哈希值与Vg的区块头的哈希值相等,且Validator持有的股权Stake超过总体股权Stake的50%,则代表Vg生成的区块正确,则将Vg生成的区块写入区块链;
步骤S6:在下一轮共识时,对Vg生成的区块进行合法性判定,判定过程为:随机选择N个Validator对Vg生成的区块进行合法性投票,如果Validator的意见一致,则一致的意见即为合法性判定结果;如果意见不一致,则继续进行合法性投票:上一轮合法性投票中,Validator的意见包括支持票和反对票,支持票的数量为M,反对票的数量为P,则随机选择Q个Validator继续进行合法性投票,Q为M和P中取值较小的一个,N、M、P和Q均为正整数,N由区块链系统设定;直到每轮合法性投票中的支持票的数量的累加和或反对票的数量的累加和不小于N,则合法性判定结束,则累加和不小于N的Validator的意见即为合法性判定结果;
区块链系统会选出新的Vg代替原有的Vg,包括以下情况:原有的Vg生成的区块没有达成共识,原有的Vg未能在规定的时间内发送Pre-Prepare消息,原有的Vg发送假的Pre-Prepare消息,Validator接收到2f个假的Prepare消息。
用户需要缴纳一定数量的保证金才能成为Validator,Validator缴纳的保证金冻结在的抵押账户中;当诚实的Validator不想继续参与投票时,可申请退还保证金,区块链系统将抵押账户中冻结的保证金退还给诚实的Validator,并将Validator从ValidatorsSet中剔除;当Validator有不诚实的投票时,区块链系统将会罚没其保证金,甚至将其从Validators Set中剔除,Validator罚没的保证金从抵押账户进入基金账户;如果Validator认为其他Validator有不诚实投票,则可以新增一条交易并广播,该交易会在下一个区块进行共识,若共识成功,则有不诚实投票的Validator的保证金将被罚没;
新的Vg被选出后,首先会新增一条交易用来罚没原有的Vg的保证金并将其广播给Validators Set中的其他Validator;然后新的Vg重新将交易列表生成Merkle树,再把Merkle根和交易哈希的列表广播给Validators Set中的其他Validator;
成功生成区块后将产生收益,收益将分配给诚实投票的Validator、成功生成区块的Vg及基金账户。
当区块链出现分叉时,计算每条链上股权Stake的总和,股权Stake的总和最大的链即为正确的链。
实施例2:本实施例举例说明了区块链的共识方法生成区块的过程,如图1、图2和图3:
当前一个区块打包写入区块链后,开始新一轮共识,生成新区块,共识方法生成区块的步骤如下:
步骤S1:确定Validator Set,假设f=1,则系统中至少一共有4个Validator(3f+1=4);其中1个Validator被选为Vg,实际上系统中有1个Vg及3个Validator;
步骤S2:如图1,在Pre-Prepare过程中,从Validator Set中随机选取一个Validator作为Vg,Vg将收集到的交易打包,将交易列表生成Merkle树,然后把Merkle根和交易哈希的列表作为Pre-Prepare消息广播给Validators Set中的其他3个Validator;
步骤S3:如图2,在Prepare过程中,Validator收到Pre-Prepare消息后,首先,判断Validator的交易候选集和Vg的交易候选集是否一致,如果不一致,则Validator向Vg或Validators Set中的其他Validator获取完整的交易;然后,Validator再计算Merkle根并将其作为Prepare消息广播给Validators Set中除了自己及Vg的其他2个Validator;
步骤S4:如图3,在Commit过程中,Validator接收Prepare消息,当Validator接收到2个(2f=2)一致的Prepare消息后,则生成一条Commit消息,Commit消息说明Validator已收到2个(f+1=2)诚实的Validator的投票,Validator将Commit消息广播给ValidatorsSet中的其他Validator;
步骤S5:Validator接收Commit消息,当Validator接收到3个(2f+1=3)一致的Commit消息后,说明所有Validators Set中所有Validator都已收到2个(f+1=2)诚实的Validator的投票,可以进行投票统计;投票统计的方法为:如果Validator的区块头的哈希值与Vg的区块头的哈希值相等,且Validator持有的股权Stake超过总体股权Stake的50%,则代表Vg生成的区块正确,则将Vg生成的区块写入区块链;
实施例3:本实施例举例说明了合法性判定的过程,如图4:
区块链系统生成区块Block(H)后,在下一轮共识生成区块Block(H+1)时,会随机选择N个Validator对Block(H)的合法性进行投票;如果Validator有不同的意见,则继续随机选择不同的Validator进行投票,直至持某方意见的Validator有N个投票,此时可以判定Block(H)的合法性。
区块链系统设定N为5:
若5个Validator都认为Block(H)合法,则Block(H)合法;
若5个Validator意见不同,如果3个Validator认为Block(H)合法,2个Validator认为Block(H)不合法,则继续随机选择不同的2个Validator对Block(H)进行投票;这2个Validator中,若2个Validator认为Block(H)合法,此时已共有5个Validator认为Block(H)合法,则Block(H)合法;
若5个Validator意见不同,如果1个Validator认为Block(H)合法,4个Validator认为Block(H)不合法,则继续随机选择不同的1个Validator对Block(H)进行投票;若此Validator认为Block(H)不合法,此时已共有5个Validator认为Block(H)不合法,则Block(H)不合法。
实施例4:本实施例举例说明了用户缴纳退还保证金的流程,如图5:
一种区块链的共识方法的用户缴纳退还保证金的流程有如下步骤:
步骤501:用户缴纳一定的保证金,成为Validator;
步骤502:Validator参与投票过程;
步骤503:Validator参与投票,如果诚实投票,则进入步骤504,否则,罚没Validator的保证金;
步骤504:Validator由于诚实投票,获得收益,如果继续参与投票,则重复步骤502至步骤504,如果不参与投票,则进入步骤505;
步骤505:Validator申请退还保证金;
步骤506:Validator取回保证金。
取回保证金后,区块链系统将用户的Validator资格取消,并将其从ValidatorSet中剔除。
本发明的有益成果为:本发明提供了一种区块链的共识方法,角色包括Validator、Validator Set、Vg、基金账户和抵押账户。在此共识方法中引入了保证金机制,用户只有在缴纳保证金后才能成为Validator进行投票,一旦某个Validator有不诚实的投票,系统将罚没该Validator的保证金甚至取消其Validator的资格。引入保证金机制后,Validator作恶的成本高于不作恶的成本,解决了“nothing atstake”的问题,同时保证了系统的高效率。区块链系统生成区块后,在下一轮共识时,会随机选择N个Validator对上一个区块的合法性进行投票,如果Validator有不同的意见,则继续投票,直至可以判定出上一个区块的合法性。
以上所述仅为本发明之较佳实施例,并非用以限定本发明的权利要求保护范围。同时以上说明,对于相关技术领域的技术人员应可以理解及实施,因此其他基于本发明所揭示内容所完成的等同改变,均应包含在本权利要求书的涵盖范围内。