一种基于网络分散度证明的区块链共识方法和系统与流程

文档序号:15183771发布日期:2018-08-17 09:45阅读:186来源:国知局

本发明涉及区块链技术领域,具体涉及一种基于网络分散度证明的区块链共识方法和系统。



背景技术:

在区块链的共识机制中,主要包括工作量证明(proofofwork,pow)模式,工作量证明模式以其简单直接的“能者多得”逻辑完美地解决了开放式分布系统的共识问题,是所有解决方案里面最高效,最稳定,也是最体现本质的。但是,其存在算力竞赛的问题,能耗浪费及其严重。

权益证明(proofofstake,pos)模式是在工作量证明的基础上发展而来的,其将核心逻辑从“能者多得”发展为“富者多得”,使得区块链的记账权竞争只需要在一个个静止的内部状态之间进行,不需要消耗电力,从而有效解决了算力浪费的问题。但是权益证明模式也因此存在多重投票问题和权益粉碎攻击等问题。由于其核心逻辑为“富者多得”,当付出相同的劳动时间后,富人会获得更多,所以富人倾向于花更多的时间工作,而穷人则相反,导致富人更富,穷人更穷,这个过程会不断加速,最后成为少数人的“贵族游戏”。另外,尽管部分权益证明协议实现了完全公平的利息制度,取代了挖矿活动,但这样的协议“给所有人奖励,相当于所有人都没有奖励”,降低了所有用户参与维护网络的积极性,使网络容易受到攻击。



技术实现要素:

针对现有技术的不足,以实现更环保、更公平的加密数字货币底层协议,本发明提供一种基于网络分散度证明的区块链共识方法和系统。

一方面,本发明提供了一种基于网络分散度证明的区块链共识方法,该方法包括:

步骤1,花节点在交易发布之前,发出一个广播信号;

步骤2,工蜂节点根据接收到的所述广播信号生成采蜜请求,并将所述采蜜请求发送至花节点;

步骤3,花节点在接收到第一个所述采蜜请求时,将主链末尾块地址b和工蜂节点所属蜂巢节点地址m写进所述交易的数据结构,并广播所述交易;

步骤4,蜂巢节点基于以往区块的内容进行记账权竞争,获胜者将生成新区块,并将所述新区块发布至网络。

另一方面,本发明提供了一种基于网络分散度证明的区块链共识系统,该系统包括花节点、蜂巢节点和工蜂节点:

花节点,用于在交易发布之前,发出一个广播信号;

工蜂节点,用于根据接收到的所述广播信号生成采蜜请求,并将所述采蜜请求发送至花节点;

花节点,还用于在接收到第一个所述采蜜请求时,将主链末尾块地址b和工蜂节点所属蜂巢节点地址m写进所述交易的数据结构,并广播所述交易;

蜂巢节点,用于基于以往区块的内容进行记账权竞争,获胜者将生成新区块,并将所述新区块发布至网络。

本发明提供的基于网络分散度证明的区块链共识方法和系统的有益效果是,在区块链的共识过程中,不存在算力竞赛,可以大幅节约能耗;也不存在多重投票和权益粉碎攻击的缺陷;另外,在基于权益的基础上优化了财富分配逻辑,以矿工代替所有非积极节点参与网络维护工作,保证了网络的健康长久运转;最后,确保了财富获取和工作量相匹配,从而可以推动数字货币的良性发展。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例的一种基于网络分散度证明的区块链共识系统的网络节点示意图;

图2为本发明实施例的一种基于网络分散度证明的区块链共识方法的流程示意图;

图3为本发明实施例的一种基于网络分散度证明的区块链共识系统的网络结构框图。

具体实施方式

以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。

图1所示为本发明实施例的一种基于网络分散度证明的区块链共识系统的网络节点示意图。

系统中包括代表普通用户的花节点,代表矿工的蜂巢节点,以及附属于各蜂巢节点的各工蜂节点。

1.花节点

网络中每笔交易的广播源节点即为一个花节点,负责响应第一个向它发起采蜜请求的工蜂节点。花节点的权益视为花蜜,采集花蜜的多少影响到矿工,也就是蜂巢节点的竞争力。花节点还拥有对主链分支的投票权。

2.蜂巢节点

蜂巢节点是矿工,其拥有自己的工蜂节点为其收集花蜜,使用花蜜参加记账权竞争,此外还要完成普通矿工的基本工作:验证交易、区块等。任何用户都可以作为蜂巢节点。

3.工蜂节点

附属于各个蜂巢节点,负责侦测附近的花节点,同时尽快发出采蜜请求。一个请求被花节点响应的过程视为一次采蜜。一个蜂巢节点可拥有分散的多个工蜂节点。

如图2所示,本发明实施例的一种基于网络分散度证明的区块链共识方法包括:

步骤1,花节点在每笔交易发布之前,发出一个广播信号。

步骤2,工蜂节点根据接收到的所述广播信号生成采蜜请求,并将所述采蜜请求发送至花节点。

步骤3,花节点在接收到第一个所述采蜜请求时,将主链末尾块地址b和工蜂节点所属蜂巢节点地址m写进所述交易的数据结构,并广播所述交易。也就是一次成功的采蜜完成。

所述交易由任意蜂巢节点确认打包到新区块,并将所述新区块广播至网络。

需要注意的是,可以参考ghost协议,使认定主链遵循“最重”原则。另外,在工蜂节点的采蜜请求中会有一个块地址作为参考,但采用与否完全在花节点。

交易数据结构需要增加b和m两个32字节的字段,如果其他位置没有存放账户权益,还需要加上权益大小字段。

步骤4,蜂巢节点基于以往区块的内容进行记账权竞争,获胜者将生成新区块,并将所述新区块发布至网络。

换言之,蜂巢节点不断地在全网进行采蜜活动,采集的结果记录在区块中,采集的花蜜量与赢得记账权的几率成正比;花节点每次广播都以权益对主链进行投票,投票的结果也记录在区块中,区块赢得的权益与它胜出的几率成正比。

用户每次交易都用权益对主链和记账节点分别进行投票,赢得权益最多的分支或节点获胜的几率最高。

需要注意的是,为了控制投票频率,需要统计每个账户上一次交易到当前的区块间隔,以一定粒度,比如以10个区块为单位作为调节系数,从0开始,每过一个单位时间,系数增大一定比例,间隔一段较长时间,比如6000个区块,大约100个小时之后才能将系数恢复到最大值;同样每一个utxo也增加调节系数,以转账频率调节权益大小,方法和参数都与前者相同。另外,可以增加纯投票类型的交易以提高效率。

因为网络延迟的缘故,要想最快地获取分散在网络中的信息,必须要同样分散在网络中的多个节点共同收集才能实现,这是无法通过提高单机的性能来达到的,而这也是一种“能力”的体现。本发明实施例可提供一种不耗电力的能力证明协议替换权益证明。由于很多过程都无法,也不需要摆脱权益属性,最后证明可让用户自由地选择用权益,还是用能力来争夺记账权,通过利益分配法则来引导用户参与,可以最大程度地保证公平性和安全性。

按照以上共识流程,蜂巢节点要想在竞争中获得更大的优势,就必须拥有更多而且更分散的工蜂节点。所以此竞争机制无法在单机上进行模拟,保证了挖矿的公平性。

而把主链的投票与记账权投票分离的意义在于,让权益独立的来决定分支。因为蜂巢节点争夺的是用户对记账权的投票,主链的投票对其收入没有影响,没有争夺的必要,这样能保证即使在出现用户过于集中的情况,也可以效的防止对分支的攻击。

同时蜂巢加工蜂的结构可以在普通app和网页开发中进行嵌入,以此能够帮助一些开发者走出只有靠显示广告获得收入的困境,或者能够在使app或网页拥有更佳的用户体验上有所贡献。

在本实施例,在区块链的共识过程中,不存在算力竞赛,可以大幅节约能耗;也不存在多重投票和权益粉碎攻击的缺陷;另外,在基于权益的基础上优化了财富分配逻辑,以矿工代替所有非积极节点参与网络维护工作,保证了网络的健康长久运转;最后,确保了财富获取和工作量相匹配,从而可以推动数字货币的良性发展。

需要注意的是,因为本实施例只针对完全去中心化的共识协议,故对pbft、dpos、ripple等协议暂时不做讨论。

为了拥有更强的出块能力,蜂巢节点会尽可能地争取到更多的花节点,虽然大家都可用更多工蜂来获得花蜜,例如在app中嵌入工蜂程序,为了有更多的工蜂,就必须不断提高app的品质来赢得使用者。但是不可避免地,会有一些用户相互达成协议,以团队形式合作挖矿,例如钱包或者矿池。因此,在交易结构中提供一个分类选项,可以选择a.以广播的形式接受工蜂采蜜;或者b.指定一个矿工,直接让他赢得选票;甚至c.指向自己,单独挖矿。这样做看似影响了公平性,但实际上站在矿工的角度考虑,如果他们能够通过调整自己的分配方案,通过互相竞争吸引用户,就会出现一些大小不一的团体,与工蜂加蜂巢一起竞争出块权,这其实也是有利于网络健康发展的。这些团体或者个人,以近似于pos的模式参与竞争,可以有效的降低某些拥有巨大工蜂群的蜂巢控制整个网络的风险。

优选地,所述步骤4具体包括:

步骤4.1,蜂巢节点在接收到广播的所述新区块时,验证所述交易,并检查所述交易中的b和m,当m指向蜂巢节点自身时,标记所述交易为记账权投票结果x,当b指向当前链末尾区块时,标记所述交易为主链投票结果y。

步骤4.2,根据所述新区块取得所有花节点的权益数,并将所述权益数平均分配至所有花节点各自在所述新区块中的每条交易。

步骤4.3,累计同时具有x标记和y标记的交易分得的权益数x,直至出块为止,并统计当前块中具有y标记的交易分得的权益数y。最多累计100个区块。

关于y与y,遵从作弊和攻击的规定。

1.过滤交易,矿工,也就是蜂巢节点只选取对其有利的交易打包

因为每次出块时包含的交易可以影响之后的竞争环境,所以蜂巢节点有可能通过挑选打包的交易试图获得更有利的位置。

首先每个块包含的交易只占统计总量的一小部分,改变一个块的内容并不能对统计结果造成很大的影响。要更好地解决此类问题,需要统计本次打包的所有交易的花节点的权益之和作为参数,用来调整下一次出块的计算周期,权益越高,计算周期越短,否则越长,比如让计算周期在0.9秒至1.1秒之间浮动,这样会直接影响下一次出块的速度。如此一来,打包尽可能多的交易才是更好的选择,可以减少蜂巢节点作恶的动机。该参数每隔一段时间应该根据平均值做一次调整。

由此可能会有一个疑问:累计权益时为什么要参考y标记,不能直接按x标记来计算呢?不参考y标记就不存在本条的问题,而且这样也不好理解:统计记账节点的投票结果时把分支的投票结果也带进来,从逻辑上讲没有任何意义。但这样做有个唯一的好处,就是任何人选错分支都得不到收益,这样会促使用户在选择分支时更加谨慎,而不是随便选,或者不选。即使这样做会导致一部分统计不准确,考虑到实际应用中产生孤块的几率并不高,相对于前面所说的好处来说,统计上带来的偏差也可以忽略不计了。

2.同样是过滤交易,但目的是影响分支的发展速度

因为每次出块包含的交易数量也决定了当前链下次出块速度(影响到y参数),攻击者可以有意减少某条分支的交易数量,影响主链的认定。

为了解决这一问题,在共识过程步骤4中检查交易内的地址b时,除了标记指向当前链末尾的交易为y以外,还标记指向当前链倒数第2、3(数量可调整)块的交易为y1,计算y值时,y、y1两种标记的交易同时统计。这样即使某个攻击者削弱了某个块的出块速度,只要他后面的矿工是诚实的,就会把攻击者有意漏掉的交易补上,这些交易会指向当前链倒数第2+个区块。如果这些交易可以有效地提供给难度参数所需要的权益值,那这条支链发展的速度也会由后面的矿工弥补上来。

这里同样也可能会有一个疑问:可不可以在计算x参数时也统计具有x和y1标记的交易,这样即便是有人在打包区块时有意地对交易做了手脚,只要后面几个块的矿工把交易补上了,对统计结果也不会有影响?回答是不可以。因为这样做的话,在产生分支时,节点可以避重就轻,投票给分支之前的区块,以确保自己正确。这样会妨碍分支快速分出胜负,导致无法及时确定出主链。

以预定周期进行一个基于标定常量,例如时间戳、个人签名等的哈希运算hashproof(),当hashproof()<target*d*x*y时,则满足出块要求,其中,target是目标,d是难度调节参数。

期间如果收到多个竞争块,可以并行处理。为了不削弱主链,只要主链重量不超过当前链+8,不要停止在当前链的竞争,这样也符合自身利益,因为有可能变成主链。

需要注意的是,根据作弊和攻击的规定,计算周期会有浮动。

步骤4.4,当达到出块要求时,根据标定时段内收到的交易生成所述打包文件,并将所述打包文件广播至全网。

优选地,所述打包文件具体包括:标定时段内收到的交易、所有具有x标记和y标记的交易的id信息以及各个花节点与蜂巢节点的收益。

其中,交易的id信息(为了节约空间,可以在100个区块范围内编码)各个花节点与蜂巢节点和其他计算参数用于验证,使挖矿所得的收益由蜂巢节点和所有具有x标记与y标记的花节点按比例分配。

关于分配方案,遵从收益分配的规定。

挖矿所得的收益如果分配策略不同,用户在利益的驱使下会造成网络结构和个体行为的变化。这里的分配是指a类挖矿所得的分配,b类和c类的分配完全由矿工来完成。

1.为了避免蜂巢节点将自己拆分后获得更多的利益,蜂巢节点应该按照总量的固定比例分成。

2.权益的分配权重会影响到用户的选择,如果完全按权益分配,绝对公平的分配机制可能不足以吸引更多的普通用户参与其中,但是如果权益权重过低,则会失去太多高权益的用户。

3.降低权益的比重后,为了避免用户能够无限拆分自己的账户以获得更多收益,需要将手续费作为参考依据,这样还可以为不同需求的用户提供更多的可选策略,起到调节的作用。

所以a类挖矿分配方案最好受权益和手续费两个参数共同影响,比如:矿工和钱包分得总收益的30%,剩下分成两部分,1/3按照手续费分配,2/3按照权益分配。这里的权益是指累计到x参数的权益,每个花节点可以重复计算。

用户在不同投票方案下的默认手续费可以根据前一段时间a、b两种用户平均每次参与出块的人数n进行调整。人数越少,说明此类矿工越多,则降低交易费,吸引更多的用户,以匹配矿工的数量。实际上即使没有上述调整,经济规律也会让人们自然做出类似的平衡,只不过慢一点。另外,对a类挖矿,还可以根据n同时调节蜂巢节点分成比例:人数少,则降低分成比例,吸引更多的用户选择a方式,同时还能降低蜂巢节点的数量,加速调节网络结构。

另外,关于验证参数和收益分配数据所占用的额外空间,至多相当于给每条交易增加2字节的id、4字节的收益,完全在可接受范围之内。而验证区块或确认交易所要做的额外工作则至多是遍历之前100个区块,也不会造成过多的工作量。

对于51%攻击问题。如果某个用户集中了50%以上的资源,系统就会完全处于他的控制之下,这点和其他算法是相同的。关于掌握了50%以下资源的用户可发起攻击的程度,暂时使用前面的设定,出块周期为60秒,6000个块间隔为权益恢复期,则平均每个块会有总量1/6000的权益,取100个块作为统计区间,那么平均每次出块就会有(1/6000)*100=1/60的权益参加竞争。要想控制出块权,只需要每一个块中放入大于1/120的权益。假定一个用户掌握了50%的权益而且全都积攒超过了100个小时,那么他可以保证在(50%)/(1/120)=60个块之内能成功进行双花攻击。因此如果有一个很重要的交易,等待1小时的时间再进行确认,才能保证绝对安全。

100个块的统计区间是一个非常保守的设计,为了防止在验证区块和交易时造成瓶颈,暂时设定为100个区块。实际上根据目前数据库的查找速度水平,只要进行适当的设计,还有很大的提升空间。假设能提升到1000个块作为统计区间,系统的安全性就能提高10倍,以此类推。

为了模拟工蜂节点,可能通过模拟创建大量的工蜂节点在p2p网络中接入许多对端,从而提高成功采蜜的几率。为了应对此情形,可以在创建p2p连接的时候加以控制,比如每个用户端都只与和自己响应速度最快的前m个工蜂节点建立连接即可。

如图3所示,本发明实施例的一种基于网络分散度证明的区块链共识系统包括花节点、蜂巢节点和工蜂节点:

花节点,用于在每笔交易发布之前,发出一个广播信号。

工蜂节点,用于根据接收到的所述广播信号生成采蜜请求,并将所述采蜜请求发送至花节点。

花节点,还用于在接收到第一个所述采蜜请求时,将主链末尾块地址b和工蜂节点所属蜂巢节点地址m写进所述交易的数据结构,并广播所述交易。

蜂巢节点,用于基于以往区块的内容进行记账权竞争,获胜者将生成新区块,并将所述新区块发布至网络。

优选地,所述蜂巢节点具体用于:

用于在接收到广播的所述新区块时,验证所述交易,并检查所述交易中的b和m,当m指向蜂巢节点自身时,标记所述交易为记账权投票结果x,当b指向当前链末尾区块时,标记所述交易为主链投票结果y。

根据所述新区块取得所有花节点的权益数,并将所述权益数平均分配至所有花节点各自在所述新区块中的每条交易。

累计同时具有x标记和y标记的交易分得的权益数x,直至出块为止,并统计当前块中具有y标记的交易分得的权益数y。

以预定周期进行一个基于标定常量的哈希运算hashproof(),当hashproof()<target*d*x*y时,则满足出块要求,其中,target是目标,d是难度调节参数。

当达到出块要求时,根据标定时段内收到的交易生成所述打包文件,并将所述打包文件广播至全网。

优选地,所述蜂巢节点具体用于:将标定时段内收到的交易以及所有具有x标记和y标记的交易的id信息、各个花节点与蜂巢节点的收益打包为所述打包文件。

读者应理解,在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1