区块链的共识方法与流程

文档序号:16540332发布日期:2019-01-08 20:19阅读:349来源:国知局
区块链的共识方法与流程

本发明涉及区块链技术领域,具体来说,涉及一种区块链的共识方法。



背景技术:

由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性,统一区块链的版本,并奖励提供资源维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励;又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。

共识机制有很多,主流的共识机制包括:

(1)pow(proofofwork,工作量证明机制):pow机制中根据矿工的工作量来执行货币的分配和记账权的确定。算力竞争的胜者将获得相应区块记账权和比特币奖励。因此,矿机芯片的算力越高,挖矿的时间更长,就可以获得更多的数字货币。

(2)pos(proofofstake,权益证明机制):pos机制采用类似股权证明与投票的机制,选出记帐人,由它来创建区块。持有股权愈多则有较大的特权,且需负担更多的责任来产生区块,同时也获得更多收益的权力。

简单地说,pos就是把pow由算力决定记账权变成由持有币数来决定记账权。在pow中,是按照算力占有总算力的百分比,从而决定你获得本次记账权的概率。在pos中,持有币数占系统总币数的百分比,决定着获得本次记账权的概率。

(3)dpos(delegatedproofofstake,股份授权证明机制):dpos是在pos基础之上发展起来的。与pos的主要区别在于持币者投出一定数量的节点,代理他们进行验证和记账。其合规监管、性能、资源消耗和容错性与pos相似。

(4)pbft(practicalbyzantinefaulttolerance,实用拜占庭容错),实用拜占庭容错在保证活性和安全性(liveness&safety)的前提下提供了(n-1)/3的容错性。在分布式计算上,不同的计算机通过讯息交换,尝试达成共识;但有时候,系统上协调计算机(coordinator/commander)或成员计算机(member/lieutanent)可能因系统错误并交换错的讯息,导致影响最终的系统一致性。拜占庭将军问题就根据错误计算机的数量,寻找可能的解决办法,这无法找到一个绝对的答案,但只可以用来验证一个机制的有效程度。而拜占庭问题的可能解决方法为:在n≥3f+1的情况下一致性是可能解决。其中,n为计算机总数,f为有问题计算机总数。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。

(5)dbft(delegatedbyzantinefaulttolerance,授权拜占庭容错算法):是由权益来选出记账人,然后记账人之间通过拜占庭容错算法来达成共识。dbft和pbft的关系类似于pos和dpos的关系。

(6)poa(proofofauthority,权威证明机制):所谓权威证明,就是使用一组所谓的“权限”来允许人们在区块链上创建新的节点并确保区块链的安全。

在poa中,验证者(validator)是整个共识机制的关键。验证者不需要昂贵的显卡,也不需要足够的资产,但他必须具有已知的,并且已获得验证的身份。验证者通过放置这个身份来获得担保网络的权利,从而换取区块奖励。若是验证者在整个过程中有恶意行为,或与其他验证者勾结。那通过链上管理可以移除和替换恶意行为者。现有的法律反欺诈保障会被用于整个网络的参与者免受验证者的恶意行为。

poa共识机制能达到较高的tps(transactionspersecond,每秒的交易数),具有高并发的特点,非常适合私有链和联盟链。

(7)混合证明机制:由于不同共识机制有着不同的优劣势,有些系统选择采用多种共识机制的方式来取长补短。较为典型的就是以太坊将要采用pow+pos的共识机制。

可以根据记账节点的选择将上述共识机制划分成两类,一类共识机制中全网所有的节点都可以成为记账节点,如pow、pos;另一类共识机制中是先选出少量节点,然后在这些少量节点中形成共识,如dpos、dbft、poa。

目前所有的区块链共识方法,共识参数中会有一个设计好的确定的区块的出块时间间隔(例如,比特币区块出块时间间隔为10分钟),虽然在实际的区块链网络中区块的出块的时间间隔和设计的时间间隔会有偏差,但是实际出块时间间隔还是会尽量向这个参数靠近。这种固定区块出块时间间隔的方法的缺点是:当交易较少、网络空闲的时候,频繁地产生区块是没有必要的,并且会造成存储空间的浪费;当交易较多、网络拥堵的时候,导致交易拥堵,区块产生不及时,无法及时记录到区块链中。

另一方面,所谓区块链治理,即区块链的治理参与者如何实现区块链升级(如共识参数的修改)的方法。在比特币或以太坊等大多数区块链项目中,区块链参数无法进行链上治理。当治理参与者对共识参数出现分歧时,区块链就有可能出现分叉,例如著名的比特币与比特现金的硬分叉事件。



技术实现要素:

针对相关技术中的上述问题,本发明提出一种区块链的共识方法,区块的出块时间间隔能够根据网络状态进行调节。

本发明的技术方案是这样实现的:

根据本发明的一个方面,提供了一种区块链的共识方法,包括:区块链网络中的节点可以创建区块,在不同的区块高度上,区块的出块时间间隔可变。

根据本发明实施例,区块的出块时间间隔与区块交易数相关参数有关。

根据本发明实施例,区块交易数相关参数包括指定n个区块内的平均交易数,其中n为大于或等于1的正整数。

根据本发明实施例,n通过共识方法中预先设定和/或智能合约确定。

根据本发明实施例,区块的出块时间间隔还和最大区块时间间隔以及最小区块时间间隔相关。

根据本发明实施例,最大区块时间间隔和最小区块时间间隔通过共识方法中预先设定和/或智能合约确定。

根据本发明实施例,区块的出块时间间隔的计算公式为block_interval=min_interval+(max_interval-min_interval)/(transaction_num+1),其中,min_interval为最小区块时间间隔,max_interval为最大区块时间间隔,transaction_num为指定n个区块内的平均交易数。

根据本发明实施例,可以创建区块的节点为授权节点,授权节点通过共识方法中预先设定和/或智能合约确定。

根据本发明实施例,在某一区块高度上,可创建区块的授权节点的数量为m个(m为大于或等于1的正整数),共识方法为每个授权节点分配不同的出块时间,出块时间的计算公式为block_time=parent_block_time+block_interval+timeout*miner_index;其中,parent_block_time为上一区块出块时间,block_interval为区块的出块时间间隔,timeout为超时时间,miner_index为索引值,且对于不同授权节点,miner_index取值不同。

本发明的上述技术方案的有益效果在于:

可以根据网络状态调节区块的出块时间,从而能够避免网络空闲时浪费存储空间;

相比于现有的共识方法,可以在交易量较少时,降低生产区块的速率,避免存储资源浪费;在交易量大时,增大生产区块的速率,及时将交易记录到区块链中,能够根据网络及时调整区块链的状态,且可以避免网络繁忙时不能及时记录交易数据;

通过使用智能合约对授权节点进行治理,能够避免区块链分叉;

通过在每一区块高度上明确当前可创建区块的节点的优先级,当前可创建区块的节点只需在上一个区块的时间戳之后生产区块即可,相比于现有的共识方法创建区块的时间更加灵活。

附图说明

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

图1是根据本发明实施例的共识方法的区块创建流程图;

图2是根据本发明实施例的判断授权节点是否可以创建下一个区块的流程;

图3是根据本发明实施例的计算出块时间的流程图;

图4至图6是根据本发明实施例的5个授权节点的区块创建过程的示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。

为了解决现有技术中存在的技术问题,本发明提出了一种区块链的共识方法。在该共识方法中,区块链网络中的节点可以创建区块,在不同的区块高度上,区块的出块时间间隔可变。由于区块的出块时间间隔可变,因此可以根据网络状态调节区块的出块时间,能够避免网络空闲时浪费存储空间。

在本发明的共识方法中,区块可以由区块链网络中的节点来创建。在一个实施例中,可以创建区块的节点为授权节点。其中,授权节点可以通过共识方法中预先设定和/或智能合约确定。

为了便于理解本发明,首先对授权节点创建区块的流程进行说明。对于一个可创建新区块的授权节点,图1示出了本发明的共识方法的区块创建流程图,包括以下步骤:

s101,开始创建区块流程。

s102,判断是否可以创建下一个区块。如果可以,则继续步骤s103;否则,跳到步骤s108。

s103,创建区块。

s104,计算block_time(出块时间),确定将区块添加到链上并向网络广播的时间。

s105,对区块进行签名。

s106,等待,直到block_time结束。在等待期间,链的状态是否发生改变。如果发生改变,则跳回步骤s101;否则,继续步骤s107。

s107,将区块添加到链上并向网络广播,跳回步骤s101。

s108,等待,直到链的状态发生改变,然后跳回步骤s101。

在步骤s105中,可以使用ecdsa_sign_recoverable(可恢复的椭圆曲线数字签名)对区块进行签名,使用该方法进行签名,签名者的公钥可以从签名中恢复出来。也可以使用其他方法进行签名,只需能满足区块链的加密和验证原理即可。本发明对此不做限定。

对于步骤s102,如图2所示,判断授权节点是否可以创建下一个区块的流程包括以下步骤:

步骤s201,判断next_block_miner_list(下一区块创建者列表)是否在缓存中?如果在缓存中,则跳到步骤步骤s205;否则,继续步骤s202。

步骤s202,获取current_authorized_miner_list(当前已授权区块创建者列表)。

步骤s203,使用ecdsa_recover(椭圆曲线数字签名恢复)从区块签名(或缓存)中恢复出最近一个区块创建者的公钥。

步骤s204,确定next_block_miner_list列表,并将其存储在缓存中。

步骤s205,我是否在next_block_miner_list列表中?如果在列表中,则继续步骤s206;否则,跳到步骤s207。

步骤s206,返回“是”,流程结束。

步骤s207,返回“否”,流程结束。

其中,在next_block_miner_list列表中的所有节点都可以创建区块,但是在某一时刻顺序越高的节点可以创建区块的优先级越高。

对于步骤s104,如图3所示,计算block_time的方法包括以下步骤:

步骤s301,首先设置以下参数:

1.授权节点最长等待时间(或可称为超时时间)timeout。如果在timeout时间内,没有接收到前一个节点的区块,那么下一个节点将广播其区块。

2.最小区块时间间隔min_interval,最大区块时间间隔max_interval,实际区块的出块时间间隔的计算公式为:block_interval=min_interval+(max_interval-min_interval)/x,x为正数。

在一个实施例中,x=transaction_num+1,transaction_num为指定n个区块内的平均交易数,其中n为大于或等于1的正整数。例如,n为1时,transaction_num可以为最近一个区块的交易数,或指定某个区块的交易数;n大于1时,transaction_num可以为最近n个区块内的平均交易数,或指定n个区块的平均交易数。可以通过在共识算法中预先设定transaction_num,或通过智能合约来确定transaction_num,或者预先设定和智能合约两者相结合的方法来确定transaction_num。智能合约也包括dgp智能合约或其他智能合约,本发明不做限定。另外,也可以通过在共识算法中预先设定min_interval和max_interval,或通过智能合约来确定min_interval和max_interval,或者预先设定和智能合约两者相结合的方法来确定min_interval和max_interval。应当理解,当transaction_num为0时,block_interval=max_interval;当transaction_num很大时,block_interval的值会接近于min_interval。也就是说,当区块内的交易数很少时,为了避免生成过多的区块造成存储空间的浪费,调节区块出块时间间隔使其变大,降低出块的速度;当区块内的交易数较多时,调节区块出块时间间隔使其变小,增大出块的速度,使得交易能够尽快被记录到区块中。

x是用来调节区块出块的时间间隔的,在该实施例中x和区块的交易数相关,因为我们希望根据交易数来调节区块的出块时间间隔。若希望根据其他参数来调节区块的出块时间间隔时,x也可以和其他因素相关,本发明对此不做限定。

此外,计算公式block_interval=min_interval+(max_interval-min_interval)/x只是其中一个实施例,block_interval的计算公式也可以为其他形式,本发明的实质在于block_interval不是一个设计的固定值,而是可根据某些参数而改变的可变值。

步骤s302,设置miner_index为next_block_miner_list列表中当前区块创建者公钥的索引。

block_time=parent_block_time+block_interval+timeout*miner_index。

其中parent_block_time为上一区块的区块时间戳,也就是其表示上一区块出块时间,block_interval为区块的出块时间间隔,timeout为每个授权超时时间,miner_index为当前区块创建者在next_block_miner_list中的索引值。其中,对于不同的授权节点,miner_index取值不同。

步骤s303,返回block_time。

上述实施例中是以授权节点创建区块的情况进行说明,但是本发明中区块的出块时间间隔设计方法可用于任何共识算法,并不仅限于有授权节点的共识算法中,例如,pow、pos等共识算法也可使用本发明的区块出块时间间隔设计方案。

为了详细说明本发明的共识方法,下面我们用5个授权节点的区块创建过程进行示例。

如图4所示,假设在网络中5个授权节点a、b、c、d、e,他们都有资格创建新区块,且他们的公钥存储在一个顺序排列的列表中。该列表在区块链的早期就被初始化,可以通过智能合约对该列表进行更新。假设在区块高度为h1的时候,当前授权节点列表current_authorized_miner_list中按顺序排列的节点分别是[a的公钥,b的公钥,c的公钥,d的公钥,e的公钥]。这5个授权节点会轮流生成新区块,区块高度从h1直至h2。

其中,至少需要个授权节点保持一致才能使算法有效工作,n为总的授权节点个数。在本示例中,n=5,因此需要至少3个节点达成一致。也就是说,即使节点d,e节点停止工作,节点a,b,c也能继续创建新的区块。区块链上输出的区块的顺序可能变为abcabc……。

在本示例中,判断节点能够创建下一个区块的共识算法需要满足:1)该节点当前是被授权的;2)最近的个区块不是由该节点创建。

通过这种方法,我们可以判断哪些节点可以创建下一个区块。只需要将创建了最近的个区块的授权节点从current_authorized_miner_list列表中移除。例如,如图5a、图5c所示,在区块高度h2处,当前授权节点列表current_authorized_miner_list中按顺序排列分别是a、b、c、d、e,由于最近的即2个区块的创建者分别是e和a,因此下一个可创建区块的节点列表next_block_miner_list中应该将e和a移除,即为b、c、d,如图5b所示。

虽然节点b、c、d都可以创建下一个区块,但是为了避免他们竞争下一个区块的创建权,应该给它们指定优先级顺序,这样也便于区块链被尽可能多的节点验证过。因此,我们定义next_block_miner_list为一个顺序列表,在current_authorized_miner_list列表中的当前区块创建者的下一个节点排在next_block_miner_list中的第一个位置,并且具有创建下一个区块的最高优先权,以此类推。在图5b中,next_block_miner_list中创建下一个区块的优先权依次是b,c,d。

当优先级顺序确定了之后,接下来计算分配给每个节点的block_time。在next_block_miner_list中排序更前的节点会分配更早的block_time。每个节点使用分配的block_time来创建新的区块,并且在block_time到来前保持等待状态。如果等待过程中没有接收到新的区块,节点就会在等待结束时广播自己创建的区块。block_time的计算方法如上:block_time=parent_block_time+block_interval+timeout*miner_index

其中parent_block_time为上一区块的区块时间戳,block_interval为正常区块间隔,timeout为每个授权节点最长等待时间,miner_index为当前区块创建者在next_block_miner_list中的索引位置。

这样,如果一个节点未能成功广播新的区块,下一个节点会在timeout时间后取代当前节点。例如,如图6所示,在区块高度h2+1处,节点b不能正常工作,那么在next_block_miner_list列表中处于b的下一个位置的节点c在上一个区块的时间parent_block_time的block_interval+timeout时间后会广播其创建的区块。由于下一个区块不能由最近的的区块的创建者进行创建,因此在区块高度h2+2处当前可创建区块的节点不包含节点a,即为节点d,e,b。

本发明共识算法中的授权节点可以通过预先设定确定,或通过智能合约确定,也可以通过预先设定和智能合约相结合的方法确定。

dgp(decentralizedgovernanceprotocol,分布式自治协议)是qtum(量子链)中应用的一项技术。它允许使用区块链上的智能合约在链上达成共识,修改区块链的参数,从而避免分叉。dgp本身通过部署在qtum创世块的智能合约实现,其工作的方式如下:首先,由dgp的一名管理员发起提议去改变某一共识参数。随后,所有的dgp管理员可以对这个提议进行投票。如果提议收到了足够多的赞同票,则该提议中的参数修改生效。然后,提议的内容会被存储在区块链上,成为新的共识。所有节点都通过dgp直接获取新的共识参数。

在本发明的共识方法中,可以使用dgp智能合约进行授权节点的存储与更新。如上,dgp是qtum中实现区块链共识参数无分叉治理的协议,可以使用dgp来存储和更新共识算法中的授权节点列表。授权的节点列表可以看做是一个公钥的列表,这个列表可以通过配置文件初始化,然后再通过dgp进行更新。为使授权节点的更新过程更加安全,dgp更新需满足以下条件:由dgp更新的矿工列表需要至少延迟个块之后真正生效,n是更新前列表的长度。这保证了授权节点列表的更新操作会在其成为区块链上的永久记录之后才真正生效。否则,如果更新操作可以被另一个分叉否定掉,则列表更新前的节点很有可能在这个分叉下继续挖矿甚至产生硬分叉。

综上所述,本发明提供了一种区块出块间隔时间可变的共识方法,并提供了区块出块间隔时间的计算方法。相比于现有的共识方法,可以在交易量较少时,降低生产区块的速率,避免存储资源浪费;在交易量大时,增大生产区块的速率,及时将交易记录到区块链中,能够根据网络及时调整区块链的状态。可以根据网络状态调节区块的出块时间,从而能够避免网络空闲时浪费存储空间,且可以避免网络繁忙时不能及时记录交易数据。通过使用智能合约对授权节点进行治理,能够避免区块链分叉。此外,通过在每一区块高度上明确当前可创建区块的节点的优先级,当前可创建区块的节点只需在上一个区块的时间戳之后生产区块即可,相比于现有的共识方法创建区块的时间更加灵活。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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