CN113660299A - 一种链式周期投票的共识方法、存储介质及电子设备 - Google Patents
一种链式周期投票的共识方法、存储介质及电子设备 Download PDFInfo
- Publication number
- CN113660299A CN113660299A CN202110495622.6A CN202110495622A CN113660299A CN 113660299 A CN113660299 A CN 113660299A CN 202110495622 A CN202110495622 A CN 202110495622A CN 113660299 A CN113660299 A CN 113660299A
- Authority
- CN
- China
- Prior art keywords
- voting
- block
- chain
- votes
- vote
- 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.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明涉及区块链领域,尤其涉及一种链式周期投票的共识方法、存储介质及电子设备。该方法包括:步骤1,获得投票权成为矿工;步骤2,矿工通过生成随机数竞争出块,出块几率与矿工持有的选票成正比;步骤3,矿工周期性的对区块进行投票;步骤4,根据投票结果选择主链;步骤5,在主链中,将满足终结条件的区块终结,完成共识。本发明可以有效的将确认主链和终结过程结合起来,及降低了代码复杂程度有提高了处理的效率,另外,还具有权益证明低能耗、链式公式对网络环境的高容错、验证节点更多且要求更加宽松,此外还保证了安全性以及灵活性。
Description
技术领域
本发明涉及区块链领域,尤其涉及一种链式周期投票的共识方法、存储介质及电子设备。
背景技术
在分布式货币系统中,我们最基本的需求只是能用的“账本”,至于所有节点是否立即同步并不是我们真正关心的内容,从这点上来说很多分布式系统的要求都过于严格,类似于PBFT(实用拜占庭容错)式的共识协议虽然实现了记账功能,但是其节点之间复杂的交互都过于繁琐,消息复杂度太高,不能支撑较多的验证节点,而且在开放网络当中遇到网络状况不好的情况时,反而会降低效率。权益证明机制的出现,实际上已经为最终性的实现打开了大门,因为权益的总量是可以统计的,那么我们根据权益进行的集体决策就有可能得出一个占绝对优势的结果,理论上就可以被“终结”,事实上也已经有了具备最终性的共识协议出现。但是这些终结方案都显得不太完美,比如Casper的方案虽然具备了最终性,但实现方式还是过于复杂了,没有必要把确认主链和终结过程分离,既增加了代码复杂度又降低了效率。
发明内容
本发明所要解决的技术问题是提供一种链式周期投票的共识方法、存储介质及电子设备。
本发明解决上述技术问题的技术方案如下:一种链式周期投票的共识方法,包括:
步骤1,获得投票权成为矿工;
步骤2,矿工通过生成随机数竞争出块,出块几率与矿工持有的选票成正比;
步骤3,矿工周期性的对区块进行投票;
步骤4,根据投票结果选择主链;
步骤5,在主链中,将满足终结条件的区块终结,完成共识。
本发明的有益效果是:通过上述方法有效的将确认主链和终结过程结合起来,及降低了代码复杂程度有提高了处理的效率,另外,还具有权益证明低能耗、链式公式对网络环境的高容错、验证节点更多且要求更加宽松,此外还保证了安全性以及灵活性。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,步骤1具体为:
当权益人选择弃权时,发布弃权记录,当权益人未选择弃权且满足第一预设条件时,生成选票,获得投票权,获得投票权的权益人成为矿工;
其中,所述第一预设条件为:
VRF_VoteProof<Account_stakes
其中,Account_stakes为账户权益,VRF_VoteProof为随机数生成函数。
采用上述进一步方案的有益效果是,通过增加弃权选择可以有效增加方法灵活性,另外对于后续数据的处理有减少处理量增高处理效率的作用。
进一步,步骤4具体为:
根据重量对每个分支链进行优先级比较,将优先级最高的分支链作为主链;
其中,所述重量为:一个分支链的根节点、所述根节点的所有子节点以及所述根节点的孙节点所获得的选票总数;
所述优先级比较具体为:
从分支链共同的区块开始,分别计算各自分支链的重量总和,重量总和最高者为优先级。
进一步,步骤5具体为:
在投票链不中断的基础上,获得票数超过总票数三分之二的分支链的根节点区块作为终结块终结,该终结块所在链为终结链,完成共识;
其中,所述投票链不中断具体为:
矿工的第M次投票的区块至第N次投票的区块中至少包含一个终结块,其中,该矿工的第M次投票至该矿工的第N次投票依次相连,N≥2,M≤N。
进一步,步骤5还包括:
基于终结条件,对第一预设周期内是否存在关键分叉进行判断;
其中,终结条件具体为:满足间隔不超过n个周期的连续投票的区块具有投票权重;
第一预设周期为:
n+1个周期,n为正整数;
关键分叉具体为:
无法继续终结的分叉。
进一步,步骤5还包括:
当终结链断开的情况时,将下次投票的区块的来源块退回至通过回溯算法得到的回撤点区块;
其中,来源块为与本次投票相连的上一次投票的区块。
进一步,通过回溯算法得到的回撤点区块具体为:
所述回溯算法具体为:
统计当前区块之前的所述第一预设周期内,该区块所在区块链上获得的选票数,得到第一选票总数,判断所述第一选票总数是否大于总票数的三分之二,若是,则反悔期I=0,若不是,则,将当前区块的高度h的投票回溯至高度为h-1的位置,重新计算所述第一选票总数,判断所述第一选票总数是否大于总票数的三分之二,若是,则反悔期I=1,若不是,则将回溯至高度为h-1的位置的投票与高度为h-1的投票合并,回溯至高度为h-2的位置,重复上述过程,直至所述第一选票总数大于总票数的三分之二,得到反悔期 I=i,其中,i为回溯次数;
所述回撤点区块具体为:
高度为h-I的区块。
进一步,步骤5还包括:在所述反悔期内,终结区块回撤至所述回撤点区块。
本发明解决上述技术问题的另一种技术方案如下:一种存储介质,所述存储介质中存储有指令,当计算机读取所述指令时,使所述计算机执行如权利要求1至8中任一项所述的一种链式周期投票的共识方法。
本发明的有益效果是:通过上述方法有效的将确认主链和终结过程结合起来,及降低了代码复杂程度有提高了处理的效率,另外,还具有权益证明低能耗、链式公式对网络环境的高容错、验证节点更多且要求更加宽松,此外还保证了安全性以及灵活性。
本发明解决上述技术问题的另一种技术方案如下:一种电子设备,包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的程序,所述处理器执行所述程序时实现如权利要求1至8任一项所述的一种链式周期投票的共识方法。
本发明的有益效果是:通过上述方法有效的将确认主链和终结过程结合起来,及降低了代码复杂程度有提高了处理的效率,另外,还具有权益证明低能耗、链式公式对网络环境的高容错、验证节点更多且要求更加宽松,此外还保证了安全性以及灵活性。
附图说明
图1为本发明一种链式周期投票的共识方法实施例提供的流程示意图;
图2为本发明一种链式周期投票的共识方法实施例提供的分支重量计算示意图;
图3为本发明一种链式周期投票的共识方法实施例提供的出块空窗示意图;
图4为本发明一种链式周期投票的共识方法实施例提供的矿工投票链示意图;
图5为本发明一种链式周期投票的共识方法实施例提供的有源投票示意图;
图6为本发明一种链式周期投票的共识方法实施例提供的安全性示意图;
图7为本发明一种链式周期投票的共识方法实施例提供的终结条件示意图;
图8为本发明一种链式周期投票的共识方法实施例提供的分叉示意图;
图9为本发明一种链式周期投票的共识方法实施例提供的前移示意图。
具体实施方式
以下对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
如图1所示,一种链式周期投票的共识方法,包括:
步骤1,获得投票权成为矿工;
步骤2,矿工通过生成随机数竞争出块,出块几率与矿工持有的选票成正比;
步骤3,矿工周期性的对区块进行投票;
步骤4,根据投票结果选择主链;
步骤5,在主链中,将满足终结条件的区块终结,完成共识。
在一些可能的实施方式中,通过上述方法有效的将确认主链和终结过程结合起来,及降低了代码复杂程度有提高了处理的效率,另外,还具有权益证明低能耗、链式公式对网络环境的高容错、验证节点更多且要求更加宽松,此外还保证了安全性以及灵活性。
需要说明的是,权益人依照所持权益多少按几率生成选票,获取投票资格,成为矿工,矿工们依照选票的数量按几率生成区块,获得奖励,矿工周期性地对区块投票,然后将获得选票最多的分支认定为主链,当计票结果满足一定条件,可以确定此结果在特定假设(2/3节点诚实)下无法再改变,此时称为区块终结,已终结的分支为最终主链,已终结的区块数据就是最终数据。
另外,步骤2中权益人成为矿工后开始参与区块链的创建和维护工作,为了获得奖励,矿工们需要互相竞争创建区块的权力:
矿工节点基于常量(时间戳、区块哈希值等)用账户私钥进行一个随机运算,期望结果达到某个目标,满足出块要求,记为: Block_Proof<target*votes*efficiency,其中target是目标,efficiency表示出块效率,受到各种因素的影响,votes为矿工当前用于的选票数,出块效率的判定为:目标投票区块距离当前链越近,投票正确性越高,所述出块效率越高;目标投票区块在该高度的正确投票总数越少,该目标投票区块的每个正确投票的重要性越高,所述出块效率越高;当达到出块要求后,矿工节点将他收到的交易和投票信息等打包生成区块并发布到网络。
步骤3中,跟所有链式共识一样,决定哪个分支成为主链是共识过程中最重要的一步。在这个过程中,矿工们通过对各个分支进行投票来确定出主链。为了确定主链,矿工节点周期性(通常以分钟计)地对当前的主链顶端区块地址签名并发布到网络,称为投票,投票记录将和交易一样被打包进区块。
除此之外,本发明还包括了奖惩以及优化的内容,对于用户的违规行为,比如前面提到的违反投票规则和下一节要介绍的违反弃权规则的用户,对其进行惩罚,也会对提交违规证据的用户进行奖励。这需要用户在做相应操作之前存入(或称锁定)一部分“押金”,作为惩罚和奖励的资金,这部分资金会在锁定一段时间之后解押。用户所交押金的金额与他获得的选票数或权益量成正比。
计算投票资格时用到的“区块哈希值”可以做一个优化:因为权益小的用户有可能很长时间都不能获得投票资格,如果还要让他们每时每刻根据当前区块的信息作为常量来尝试生成选票的话会增加没必要的开销。所以将用当前区块之前的第m个区块信息来代替(若干个小时以前),这样用户就能提前若干个小时知晓自己获得了投票资格,以后只需要每隔若干个小时集中计算一次就可以了。但是为了防止通过转移资金来获得竞争优势,必须规定:经过转账的货币必须在m个区块之后才能作为权益来生成选票。
对于权益小而且不希望花太多的代价参加挖矿的用户来说,他们也可以发布“弃权”登记,这样做虽然不能直接参与系统维护,但是可以提供更准确的活动选票数,加快最终化进程,为系统的稳定做出一定的贡献。对于这样的弃权登记,可以给予一小部分奖励(与权益数量成正比),但是这些弃权的权益人如果被证明参与到了投票活动中的话,则会受到惩罚。
由于矿工登记记录没有交易费奖励给区块生成者,为了激励矿工将它们打包进块中,我们要根据生成块中登记记录的数量来调整出块效率参数 efficiency,从而影响该矿工下一次出块的速度,使得打包的登记记录越多越好。该数量的标准值每隔一段时间应该做一次调整。
如果出块速率设置得较快,导致短分叉频繁出现,不妨把默认的反悔期直接设为1或2,默认终结点也相应延迟1-2个区块,可以减少长分叉的出现次数,使系统运行得更加顺畅。
优选地,在上述任意实施例中,步骤1具体为:
当权益人选择弃权时,发布弃权记录,当权益人未选择弃权且满足第一预设条件时,生成选票,获得投票权,获得投票权的权益人成为矿工;
其中,所述第一预设条件为:
VRF_VoteProof<Account_stakes
其中,Account_stakes为账户权益,VRF_VoteProof为随机数生成函数。
在一些可能的实施方式中,通过增加弃权选择可以有效增加方法灵活性,另外对于后续数据的处理有减少处理量增高处理效率的作用。
需要说明的是,权益人根据当前常量(区块哈希值,时间戳等),用账户私钥进行一个随机数的运算,再与账户掌握的权益数进行比较,达到要求者获得投票资格。此过程记为:VRF_VoteProof<Account_stakes,其中 A cco u_nstta k表示账户权益,其越大,满足此条件的可能性越高,由此达到根据权益生成选票的目的。满足投票资格的权益人即可生成一张选票,发布到网络上,登记成为矿工(或称投票者),登记记录和交易记录一样需要被打包进区块。每张选票的生效期为当前(哈希值常量取值的)区块至其之后的若干个区块之间的时间段,通常以小时计,才不至于使用户操作得过于频繁。
投票资格的引入是为了能够降低并灵活控制验证节点的数量,以便不同的项目在安全性和响应速度之间做出平衡。通过控制获得选票的难度,我们可以把系统总选票数控制在需要的数目左右。根据概率,设定的总票数越多,实际产生的选票数量越接近于理想数量,我们根据总选票数来进行的各种投票结果就更加可靠,但是选票越多,投票节点就越多,共识速度就越慢,这需要根据不同需求进行权衡。
优选地,在上述任意实施例中,步骤4具体为:
根据重量对每个分支链进行优先级比较,将优先级最高的分支链作为主链;
其中,所述重量为:一个分支链的根节点、所述根节点的所有子节点以及所述根节点的孙节点所获得的选票总数;
所述优先级比较具体为:
从分支链共同的区块开始,分别计算各自分支链的重量总和,重量总和最高者为优先级。
需要说明的是,在协议中,分支的优先级不是取决于它们的长度,而是取决于它们的“重量”。“重量”在这里也并不等于区块个数,而是等于区块所获得的选票数。定义:一个分支的重量等于它的根节点和其所有子孙节点所获得的选票总数。在此计算方式下,两条链在比较优先级时应该从它们共同的祖先出发,分别计算它们各自所属的两个分支的重量,较重者优先。为了找到主链,我们需要逐个比较当前存在的竞争分支,找出优先级最高的链,如图2所示,图中所示的分支结构中,优先级最高的链为r→b。
投票过程中还有一些问题需要解决,首先是要保证矿工有足够的积极性进行投票,这一点可以利用使投票“正确”性与出块效率挂钩的方法来激励矿工:根据“上周期投票”(大于等于一个周期,小于两个周期以前的投票)到当前链的距离远近(后面会解释)来确定当前出块效率。这又带来下面两个问题:在产生分叉时,如果矿工都为了追求投票的正确性而选择投向分叉之前较稳定的区块的话,就会影响系统稳定的速度;或者矿工选择推迟投票,等分叉已有明显胜负之后再投票的策略,同样也会影响系统稳定的速度。对这两个问题,我们首先在原有周期投票的规则上稍加修改,之前的规则是“投票目标间隔不能小于一个周期的长度”,现在增加“在当前链中记录投票的区块与下一个投票目标间隔不能小于一个周期-1的长度”。按照新的规则,每当有矿工投票给较早的区块,或者推迟投票,此次投票与上次投票之间的间隔就会大于一个周期,而超过一个周期的地方出现一个空窗,每当区块的“往前2周期-1”处位于这个空窗内,这个矿工在此区块位置的“上周期投票”都不存在,因此其正确性为零,无法出块。例如:如图3所示,当前矿工在a区块位置有一个空窗,导致a之后2周期-1出的b区块位置无法出块。
所以为了尽量少出现这种空窗,矿工应该选择尽早投票,且投给最顶端的区块。其次,利用使投票的“重要性”也和出块效率挂钩的方法来解决,用“正确投票总数越少,自己投票的重要性越高”的判定,来使矿工在分叉之后投票分散的时候的投票具有更高的价值。即,投票需满足:
矿工每两次投票的间隔必须大于等于一个投票周期,否则会被惩罚;
每个矿工在当前链上的投票被记录的位置距离下次投票的目标必须大于等于一个投票周期-1的长度,否则也会被惩罚;
矿工在当前链的出块效率参数efficiency受到他的上周期(1周期≤距离当前位置<2周期)投票的“正确性”影响,具体为:该投票目标区块距离当前链的距离越近(分叉之后的子孙代数越少),正确性越高,出块效率越高,反之越低,目标在当前链上的投票称为“正确”投票;
矿工在当前链的出块效率参数efficiency受到他的上周期(同上)正确投票的“重要性”影响,具体为:投票目标在该高度的正确投票总数越少,单个的正确投票重要性越高,出块效率越高,反之越低;
此处存在一个信息的完整性问题,即在一条链中存储的数据能不能包含完整的投票和分支信息。如果可以的话不仅能简化比较优先级的算法,还能为之后的“最终化”提供支撑,更重要的是让共识过程有完整的记录,这保证了系统的客观性和可验证性。要讨论这一点,需要看矿工们有没有足够的理由去打包所有的投票信息,毕竟投票是不提供手续费的。
因此分两种情况来看:
对于指向本链的投票,矿工自然会尽量地多保存到块,以此来保证自身链的竞争力;
对于指向其它链的投票,首先,记录它们并不会增加对方链条的竞争力,因为其指向的链本身也会记录,相反这些投票很可能在更大的分支之间做比较时转而帮助己方获胜。其次对出块矿工而言,如果记录了某个矿工的错误投票,就降低了这个矿工在本链出块的效率,从而增加了一些自己出块成功的几率,虽然只是小小的激励,但也足以促使矿工去记录这些本就不复杂的投票信息了。与此同时,每个区块也会尽量引用这些其它分支的区块(块头),用来支撑收集到的投票记录,从而完善了区块树。
优选地,在上述任意实施例中,步骤5具体为:
在投票链不中断的基础上,获得票数超过总票数三分之二的分支链的根节点区块作为终结块终结,该终结块所在链为终结链,完成共识;
其中,所述投票链不中断具体为:
矿工的第M次投票的区块至第N次投票的区块中至少包含一个终结块,其中,该矿工的第M次投票至该矿工的第N次投票依次相连,N≥2,M≤N。
需要说明的是,链式共识的终结过程不像BFT类型的协议那样,需要用多轮投票来保持节点之间严格的同步状态。当第一轮投票达成共识后,我们只需要保证这个共识是唯一的,而并不需要关心是否所有节点都接收到了投票结果,因此在理想情况下只需要一轮投票即可完成终结。但为了保证被终结的链不产生冲突(安全性),同时还要让投票者有机会修正自己投票,以防止陷入永远无法终结的境地(活性),情况就变得更加复杂了,需要增加新的投票规则并且推迟终结的时间。
根据周期投票的机制和非诚实用户不超过1/3的前提,我们可以确定:只要一个分支在一个周期之内获得了2/3以上的选票,那么这个分支就不应该有竞争者,可以被终结。但是要保证所有被终结的分支都不相互冲突,即安全性,我们需要有一条从创世区块开始的连续的终结链。这需要投票者的投票也能够前后连贯,为此我们修改了刚才的投票规则,在原有的规则上增加:
在每次投票时需要向前连接他上一次的投票,称为“来源”。不连接来源的投票称为“无源投票”,作为对错误投票的修正,没有权重,但是可以被后面的投票用作来源。无源投票可以与有来源的投票在同一个周期内同时出现,但自身也需遵守之前的投票规则,否则也会被惩罚;
创世块是第一个终结(final ized)块,在不违反其它规则的情况下创世块可被后面的投票用作来源;
来源位于终结块的投票称为“有根投票”,只有“有根投票”才具有权重和正确性,从而递进地产生后续的终结块,终结块之前的所有祖先块同时也视为已终结。“有根投票”可以向后传递;如图4所示,实心块表示已终结块,浅色实线表示有根投票,深色虚线表示无根投票,且图4中投票者因为前后冲突,因此他的投票链断了。如图5所示,继续图4的情况,当节点 b成为了终结块之后,此投票者后面的投票又变成了有根投票,投票链重新连接起来。保证投票不冲突的原理很简单:因为投票者每次投票都只能与他上一次投票相连,所以如果存在冲突的投票,就不能在一条链上保持首尾相连,投票链就不会冲突。既然单个投票者的投票链不会冲突,那么基于连续投票链来生成的终结点也不会存在冲突,由此保证了安全性。如图6所示,只有连续的投票链才能终结区块。
优选地,在上述任意实施例中,步骤5还包括:
基于终结条件,对第一预设周期内是否存在关键分叉进行判断;
其中,终结条件具体为:满足间隔不超过n个周期的连续投票的区块具有投票权重;
第一预设周期为:
n+1个周期,n为正整数;
关键分叉具体为:
无法继续终结的分叉。
需要注意的是,出现分叉后,很可能有超过1/3的选票被投向错误的分支,一旦出现这种情况,终结链就断了而且无法恢复。所以要保证活性就比较复杂:首先要对这种情况——称为“关键分叉”——能够察觉;然后允许下次投票的来源从本次投票位置倒退回分叉的地方,给投票者一个反悔的空间,使他们能够及时改正之前的决定,回到主链上来;最后把终结位置也推迟到分叉的地方。
为了能够察觉关键分叉,要对终结条件做一些调整,之前的条件是一个分支“在一个投票周期之内获得超过总数2/3的选票”,改为“在一个投票周期之内获得超过总数2/3的选票,且这些选票的投票目标距离来源都小于两个周期”,换句话说,必须是由连续投票(间隔不到两周期)选出来的分支才能被终结。此终结条件把能产生终结的所有投票的来源都集中在终结点之前的两个周期范围之内,这样只需要在这个范围进行检查,看是否有足够的投票就可以了,如图7所示,满足区块b的终结条件的投票目标集中在b为更节点的1周期长的分支上,而来源集中在a之前2周期长的链上。
优选地,在上述任意实施例中,步骤5还包括:
当终结链断开的情况时,将下次投票的区块的来源块退回至通过回溯算法得到的回撤点区块;
其中,来源块为与本次投票相连的上一次投票的区块。
优选地,在上述任意实施例中,通过回溯算法得到的回撤点区块具体为:
所述回溯算法具体为:
统计当前区块之前的所述第一预设周期内,该区块所在区块链上获得的选票数,得到第一选票总数,判断所述第一选票总数是否大于总票数的三分之二,若是,则反悔期I=0,若不是,则,将当前区块的高度h的投票回溯至高度为h-1的位置,重新计算所述第一选票总数,判断所述第一选票总数是否大于总票数的三分之二,若是,则反悔期I=1,若不是,则将回溯至高度为h-1的位置的投票与高度为h-1的投票合并,回溯至高度为h-2的位置,重复上述过程,直至所述第一选票总数大于总票数的三分之二,得到反悔期 I=i,其中,i为回溯次数;
所述回撤点区块具体为:
高度为h-I的区块。
需要说明的是,察觉到关键分叉后,我们使用一种回溯算法来找到分叉点和它对应的投票反悔期长度:
当生成一个高度为h的块a时,我们使用一个自然数I来表示a位置的临时“反悔期”,高度h-I的区块称为临时“回撤点”,回撤点通常也等同于分叉点。I的取值基于于以下计算结果:
1)a之前(包括a)两个投票周期内的链上获得的选票数超过总选票的 2/3时,I=0,同一投票人只计最后一次投票;
2)上述票数小于等于总选票的2/3时,将目标是h高度的所有投票往前回溯到高度h-1,再和目标高度h-1的所有投票一起往前回溯到h-2,以此类推,当回溯到高度h-i时,满足1)条件,则n=I,由于对高度为h的区块的绝大部分投票都保存在高度h+1的区块中,所以上面这个工作实际上是在生成a的下一个区块a’的时候来做的,对应的I值也保存在a’中,但这并不影响算法实现,因为n在被使用的时候a’必定早就生成了。更进一步地,可以把“目标是h高度的所有投票”改进为“保存在h+1高度的所有投票”并以此类推,这样能够把那些没有在第一时间被记录或者推迟发布的投票都计算进来。
3)a位置的临时回撤点高度不能低于a前2周期处的临时回撤点高度;如图8所示,当大于三分之一的选票在A处分叉,且网络刚好在此时出现了故障,导致这些投票信息全部丢失时为最坏情况,此时需要一个检测长度的时间才能察觉到分叉。
4)a位置的实际回撤点取自a位置之后(包括a)2周期内最早的那个临时回撤点,实际反悔期I也由此而来;因此,在最坏的情况下一个区块在其生成后需要等2个周期才能被终结。但通常情况下,只要区块之后的一条链在这2个周期之前获得了2/3的选票,就不会再有回撤点早于它了,可以立即被终结。
优选地,在上述任意实施例中,步骤5还包括:在所述反悔期内,终结区块回撤至所述回撤点区块。
需要说明的是,获得了反悔期之后,投票回撤和区块终结过程如下:
矿工的每次投票只能使用他上次投票目标或其回溯I步(包括I)以内的区块作为来源,I值取自于此矿工上次投票目标的高度上,相关链的实际反悔期I,违反此规则的矿工将被惩罚,如图9所示,反悔期、投票回撤和终结点前移。“上次投票目标的高度上”可改进为“上次投票在本链保存的高度-1的位置上”,与回溯算法第2)条的改进相对应;“相关链上违反此规则”中的“相关链”是指投票记录中的来源和目标分别所在的链,当投票的来源和目标不在同一链上时,分别取得两条链上在来源高度的实际反悔期,然后取其中较短的一个。
从根部算起,当一个分支在一个投票周期之内获得的选票超过系统总选票的2/3,而且这些选票的投票记录中来源和目标之间的距离都小于2个投票周期时,满足终结条件,但终结区块不一定是分支的根节点b,而是b处的实际回撤点B。
依照这种方法,在通常(较理想)情况下,I值都为0,可以在生成区块后大约2/3个投票周期完成终结,偶尔会有一些分歧比较严重的分叉可能会延续几个周期的长度,但总体时间一定远小于两个周期。在一些网络状况很差或遭受攻击导致投票特别分散的情况下,可以预先察觉到分叉并且延迟终结,放宽投票要求,提高系统容错率,可以防止被比如“左右摇摆以延长分叉长度”式的恶意攻击而导致失去活性。顺便提到的分支重量计算方式——不是像LMD(Latest Message Driven)方案那样只统计最后一次投票,而是相对麻烦地把每次投票都统计在内,并且按周期投票,也是因为这样做对此类攻击具有较强的抵抗力。
一种存储介质,所述存储介质中存储有指令,当计算机读取所述指令时,使所述计算机执行如上述任一项所述的一种链式周期投票的共识方法。
在一些可能的实施方式中,通过上述方法有效的将确认主链和终结过程结合起来,及降低了代码复杂程度有提高了处理的效率,另外,还具有权益证明低能耗、链式公式对网络环境的高容错、验证节点更多且要求更加宽松,此外还保证了安全性以及灵活性。
一种电子设备,包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的程序,所述处理器执行所述程序时实现如上述任一项所述的一种链式周期投票的共识方法。
在一些可能的实施方式中,通过上述方法有效的将确认主链和终结过程结合起来,及降低了代码复杂程度有提高了处理的效率,另外,还具有权益证明低能耗、链式公式对网络环境的高容错、验证节点更多且要求更加宽松,此外还保证了安全性以及灵活性。
读者应理解,在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的方法实施例仅仅是示意性的,例如,步骤的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个步骤可以结合或者可以集成到另一个步骤,或一些特征可以忽略,或不执行。
上述方法如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM, Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种链式周期投票的共识方法,其特征在于,包括:
步骤1,获得投票权成为矿工;
步骤2,矿工通过生成随机数竞争出块,出块几率与矿工持有的选票成正比;
步骤3,矿工周期性的对区块进行投票;
步骤4,根据投票结果选择主链;
步骤5,在主链中,将满足终结条件的区块终结,完成共识。
2.根据权利要求1所述的一种链式周期投票的共识方法,其特征在于,步骤1具体为:
当权益人选择弃权时,发布弃权记录,当权益人未选择弃权且满足第一预设条件时,生成选票,获得投票权,获得投票权的权益人成为矿工;
其中,所述第一预设条件为:
VRF_VoteProof<Account_stakes
其中,Account_stakes为账户权益,VRF_VoteProof为随机数生成函数。
3.根据权利要求1所述的一种链式周期投票的共识方法,其特征在于,步骤4具体为:
根据重量对每个分支链进行优先级比较,将优先级最高的分支链作为主链;
其中,所述重量为:一个分支链的根节点、所述根节点的所有子节点以及所述根节点的孙节点所获得的选票总数;
所述优先级比较具体为:
从分支链共同的区块开始,分别计算各自分支链的重量总和,重量总和最高者为优先级。
4.根据权利要求1所述的一种链式周期投票的共识方法,其特征在于,步骤5具体为:
在投票链不中断的基础上,获得票数超过总票数三分之二的分支链的根节点区块作为终结块终结,该终结块所在链为终结链,完成共识;
其中,所述投票链不中断具体为:
矿工的第M次投票的区块至第N次投票的区块中至少包含一个终结块,其中,该矿工的第M次投票至该矿工的第N次投票依次相连,N≥2,M≤N。
5.根据权利要求4所述的一种链式周期投票的共识方法,其特征在于,步骤5还包括:
基于终结条件,对第一预设周期内是否存在关键分叉进行判断;
其中,终结条件具体为:满足间隔不超过n个周期的连续投票的区块具有投票权重;
第一预设周期为:
n+1个周期,n为正整数;
关键分叉具体为:
无法继续终结的分叉。
6.根据权利要求5所述的一种链式周期投票的共识方法,其特征在于,步骤5还包括:
当终结链断开的情况时,将下次投票的区块的来源块退回至通过回溯算法得到的回撤点区块;
其中,来源块为与本次投票相连的上一次投票的区块。
7.根据权利要求6所述的一种链式周期投票的共识方法,其特征在于,通过回溯算法得到的回撤点区块具体为:
所述回溯算法具体为:
统计当前区块之前的所述第一预设周期内,该区块所在区块链上获得的选票数,得到第一选票总数,判断所述第一选票总数是否大于总票数的三分之二,若是,则反悔期I=0,若不是,则,将当前区块的高度h的投票回溯至高度为h-1的位置,重新计算所述第一选票总数,判断所述第一选票总数是否大于总票数的三分之二,若是,则反悔期I=1,若不是,则将回溯至高度为h-1的位置的投票与高度为h-1的投票合并,回溯至高度为h-2的位置,重复上述过程,直至所述第一选票总数大于总票数的三分之二,得到反悔期I=i,其中,i为回溯次数;
所述回撤点区块具体为:
高度为h-I的区块。
8.根据权利要求7所述的一种链式周期投票的共识方法,其特征在于,步骤5还包括:在所述反悔期内,终结区块回撤至所述回撤点区块。
9.一种存储介质,其特征在于,所述存储介质中存储有指令,当计算机读取所述指令时,使所述计算机执行如权利要求1至8中任一项所述的一种链式周期投票的共识方法。
10.一种电子设备,包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至8任一项所述的一种链式周期投票的共识方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110495622.6A CN113660299A (zh) | 2021-05-07 | 2021-05-07 | 一种链式周期投票的共识方法、存储介质及电子设备 |
PCT/CN2022/074000 WO2022233164A1 (zh) | 2021-05-07 | 2022-01-26 | 一种链式周期投票的共识方法、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110495622.6A CN113660299A (zh) | 2021-05-07 | 2021-05-07 | 一种链式周期投票的共识方法、存储介质及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113660299A true CN113660299A (zh) | 2021-11-16 |
Family
ID=78489096
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110495622.6A Pending CN113660299A (zh) | 2021-05-07 | 2021-05-07 | 一种链式周期投票的共识方法、存储介质及电子设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113660299A (zh) |
WO (1) | WO2022233164A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022233164A1 (zh) * | 2021-05-07 | 2022-11-10 | 杨鉴 | 一种链式周期投票的共识方法、存储介质及电子设备 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108416593B (zh) * | 2018-03-20 | 2021-02-12 | 杨鉴 | 一种基于网络分散度证明的区块链共识方法和系统 |
KR102130062B1 (ko) * | 2018-09-18 | 2020-07-03 | 엔에이치엔 주식회사 | 블록체인 네트워크의 노드들 간의 합의를 이루는 방법 및 블록체인 시스템 |
CN109784885A (zh) * | 2018-12-29 | 2019-05-21 | 杨鉴 | 一种基于权益的区块链投票共识方法及系统 |
CN112182661A (zh) * | 2020-08-31 | 2021-01-05 | 武汉市果壳璐网络科技有限公司 | 区块链共识方法、装置、存储介质及设备 |
CN113660299A (zh) * | 2021-05-07 | 2021-11-16 | 杨鉴 | 一种链式周期投票的共识方法、存储介质及电子设备 |
-
2021
- 2021-05-07 CN CN202110495622.6A patent/CN113660299A/zh active Pending
-
2022
- 2022-01-26 WO PCT/CN2022/074000 patent/WO2022233164A1/zh active Application Filing
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022233164A1 (zh) * | 2021-05-07 | 2022-11-10 | 杨鉴 | 一种链式周期投票的共识方法、存储介质及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
WO2022233164A1 (zh) | 2022-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Yu et al. | Repucoin: Your reputation is your power | |
CN109039648B (zh) | 一种区块链的创建方法、设备及可读存储介质 | |
US10795857B2 (en) | Blockchain system and method thereof | |
CN109544334B (zh) | 一种网络可扩展性区块链实现方法 | |
KR102240939B1 (ko) | 트랜잭션 증명 방식의 합의 알고리즘이 적용된 블록체인 시스템 및 그 방법 | |
CN110049029B (zh) | 共识节点确定方法、装置、计算机设备和存储介质 | |
CN110580653B (zh) | 一种基于交易的区块链共识机制 | |
CN107220130B (zh) | 一种在区块链的节点处实现的信息共识方法、装置及系统 | |
CN110611701B (zh) | 一种基于区块链的参数配置和交易处理方法 | |
CN111026578B (zh) | 一种基于预言机的智能合约安全检测方法 | |
CN108366113B (zh) | 一种基于dpos的分组高容错共识机制 | |
Gans et al. | More (or less) economic limits of the blockchain | |
CN110288348B (zh) | 基于传播活跃度和资产证明的区块链共识方法及系统 | |
CN109034802A (zh) | 用于区块链的权益证明创建方法、设备及可读存储介质 | |
Gupta et al. | A hybrid POW-POS implementation against 51 percent attack in cryptocurrency system | |
CN113660299A (zh) | 一种链式周期投票的共识方法、存储介质及电子设备 | |
CN109598365A (zh) | 事件预测方法及装置、电子设备 | |
CN111881147B (zh) | 计算任务的处理方法和装置、存储介质及处理器 | |
Begicheva et al. | Fair proof of stake | |
Bachmann | Proof of Stake for Bazo | |
CN111611311B (zh) | 去中心化分布式数据库的形成方法及系统、电子设备及计算机可读存储介质 | |
Gandal et al. | More (or less) economic limits of the blockchain | |
Dana Troutman et al. | Poolparty: Efficient blockchain-agnostic decentralized mining pool | |
KR102386921B1 (ko) | 블록 데이터를 기록한 컴퓨터로 읽을 수 있는 기록 매체 | |
Ruan et al. | Ursa: Robust performance for Nakamoto consensus with self-adaptive throughput |
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 |