一种基于raft协议的区块链工作方法及系统与流程

文档序号:19788559发布日期:2020-01-24 13:55阅读:419来源:国知局
一种基于raft协议的区块链工作方法及系统与流程

本发明涉及区块链领域,特别涉及一种基于raft协议的区块链工作方法及系统。



背景技术:

在区块链技术领域,在共识效率方面,pow(工作量证明),pos(权益证明),dpos(委托权益证明),pbft(实用拜占庭容错系统)及其变种,都是目前采用通常共识,但是他们多大都属于公链和少部分联盟链采用。在联盟链网络中,由于接入点都是可靠实体单位,因此区块链共识算法更加关注在效率提升。

在区块链网络协议中,所有节点身份平等,因此整个网络中没有主从之分;raft协议本质上是有主节点和从节点,但是他们中leader节点都是根据raft协议动态选举出来,在任意时刻,我们不知道谁是主节点,谁是从节点,身份是不固定的,满足节点身份不可预测,更加符合区块链平等性。

现在已经有其他专利或者技术,都是关注在raft选举或者对出块按照raft协议提议(propse)和回答确认,并没有完整一套行之有效交互流程,对交易,打包规则,投票/出块,记账一套完整解决方案。



技术实现要素:

本发明的目的在于:提供了一种基于raft协议的区块链工作方法及系统,解决了将raft协议运用在区块链领域并形成完整解决方案的问题。

本发明采用的技术方案如下:

一种基于raft协议的区块链工作方法,包括leader节点和follower节点:

由leader节点发起对所有接收到的交易生成的区块的投票,由follower节点投票后leader节点对投票结果进行确认,follower节点对满足条件的交易进行记账并将账本广播到follower节点。

本方案结合raft协议系统阐述交易、交易转化、打包和出块的所有流程,是对整个流程独特优化,提出整套解决思路和流程,使区块链共识和流程完美结合,以确保最终超高效率。

还包括candidate节点,当区块链中没有leader节点时,区块链上所有节点均切换为candidate节点。在raft协议中,通常有选举过程:

所述leader节点由candidate节点选举产生,所有candidate节点中,区块链长度最大作为选举leader节点的必要条件。

如果网络中没有主节点leader节点,则所有节点都切换到candidate节点,参与选举成为leader节点,同时发起投票,向其他节点广播,其他节点收到广播,对结果进行投票,如果发起节点收到大于网络预设比例节点同意,则认为是leader节点,否则再进行投票或者切换到follower节点。

所述由leader节点发起对所有接收到的交易生成的区块的投票,由follower节点投票后leader节点对投票结果进行确认,follower节点对满足条件的交易进行记账并将账本广播到follower节点包括以下步骤:

s1、sdk将交易发送到follower节点或leader节点中的一个,若sdk将交易发送到follower节点,则转入步骤s2,若sdk将交易发送到follower节点,则转入步骤

s2、follower节点接收交易,验证交易是否合法,验证通过后将交易发送到leader节点,转入步骤s3;

s3、follower节点接收交易,验证交易是否合法,验证通过后follower节点将交易加入打包模块;

s4、打包模块根据交易构建对应的区块,将区块发送到出块模块;

s5、出块模块根据区块链出块规则进行出块,将区块发送到raft状态机;

s6、raft状态机对收到的区块进行广播并发起投票;

s7、follower节点接收广播进行投票,将投票结果回复给leader节点的raft状态机;

s8、leader节点的raft状态机统计对应区块投票结果,若满足预设的条件则更新区块的状态记录同时更新本地的事务日志并将区块数据加入本地账本;

s9、leader节点将区块的状态记录、本地的事务日志和本地账本进行广播,follower节点根据广播更新区块的状态记录同时更新本地的事务日志并将区块数据加入本地账本。

还包括在步骤s1之前在区块链的所有节点中进行选举,选出leader节点和follower节点。直到整个选举确认leader,整个网络才能正常工作。

所述步骤s5中的出块规则包括:

规则1:交易内容大小累计满足预设条件则出块;

规则2:预设交易出块时间,在交易达到出块时间时直接出块;

规则3:果新交易是区块配置更改记录,则立即出块。

上述出块规则原理与fabric超级账本的出块规则类似

所述事务日志包括区块记录term、index、类型、数据记录中的至少一个。

一种基于raft协议的区块链系统,包括若干区块链上的节点,所述节点包括:

存储器,用于存储可执行指令;

多核处理器,用于执行所述存储器中存储的可执行指令,实现如权利要求1所述的leader节点和follower节点的操作。

综上所述,由于采用了上述技术方案,本发明的有益效果是:

1.本发明一种基于raft协议的区块链工作方法及系统,本协议对交易转发有明确规定,对出块出块规则阐述,在出块共识上使用raft协议流程,对区块链投票完成后记录写入账本都有系统描述,整个流程是完整的,清晰的,并在实践工程上检验效率是优于dpos;

2.本发明一种基于raft协议的区块链工作方法及系统,解决了将raft协议运用在区块链领域并形成完整解决方案的问题。

附图说明

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

图1是本发明的流程示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合图1对本发明作进一步地详细描述,所描述的实施例不应视为对本发明的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本发明实施例的目的,不是旨在限制本发明。

对本发明实施例进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。

交易(transaction),等同于计算机术语“事务”,包括对智能合约的调用,以实现对账本中的目标账户的相关数据的操作,包括增、查、改的操作修改账户中的键值(key-value)对形式的数据,或者在账本中增加新的账户,并非单指商业语境中的交易,鉴于在区块链技术中约定俗成地使用了“交易”这一术语,本发明实施例遵循了这一习惯。

区块(block),记录一段时间内交易所更新的账本数据的数据结构,被标记上时间戳和之前一个区块的独特标记(例如数字指纹),区块经过区块链网络中节点的共识验证后,会被追加到区块链的末尾成为新的区块。

区块链(blockchain),区块以顺序相连的方式组合成的一种链式数据结构,在每个区块中引用前一个区块或者其子集的哈希值,从而以密码学的方式保证所记录交易的防篡改和防伪造。

区块链网络,通过共识的方式将新区块纳入区块链的一系列的、无中心的节点的集合。

账本(ledger),区块链网络中以账户为维度所记录的数据的总和,包括账本数据、账本状态、账本状态证明和区块索引等元素。

账本数据,实际区块数据存储,即区块链中记录的一系列有序的、不可篡改的交易的记录,可以表现为文件系统的文件的形式,交易中调用的智能合约被执行时,实现对账户/账户中数据的更新。

账本状态,也称为状态数据,即账本数据的状态,可以表现为数据库终中的键值对的形式,其中实时账本状态用于表示共识的交易所更新的键值对的最新记录,历史账本状态用于表示键值对的历史记录。

共识(consensus),是区块链网络中的一个过程,用于在涉及的多个节点之间对交易结果达成一致,实现共识的机制包括工作量证明(pow)、权益证明(pos,proofofstake)、股份授权证明(dpos,delegatedproof-of-stake)、消逝时间量证明(poet,proofofelapsedtime)等。

智能合约(smartcontracts),也称为链码(chaincode),部署在区块链网络中的根据条件而触发执行的程序,用于通过查询、增加、修改来操作账本,以实现对账本的查询或更新。

raft协议:raft算法是paxos算法的一个简化实现。raft算法主要用于联盟链,对是一种投票模型分布式协议协调,主从模型分布式机制,广泛用于分布式各种应用和软件中。

实施例1

一种基于raft协议的区块链工作方法,包括leader节点和follower节点:

由leader节点发起对所有接收到的交易生成的区块的投票,由follower节点投票后leader节点对投票结果进行确认,follower节点对满足条件的交易进行记账并将账本广播到follower节点。

本方案结合raft协议系统阐述交易、交易转化、打包和出块的所有流程,是对整个流程独特优化,提出整套解决思路和流程,使区块链共识和流程完美结合,以确保最终超高效率。

实施例2

本实施例与实施例1的区别仅在于,还包括candidate节点,当区块链中没有leader节点时,区块链上所有节点均切换为candidate节点。在raft协议中,通常有选举过程:

所述leader节点由candidate节点选举产生,所有candidate节点中,区块链长度最大作为选举leader节点的必要条件。

如果网络中没有主节点leader节点,则所有节点都切换到candidate节点,参与选举成为leader节点,同时发起投票,向其他节点广播,其他节点收到广播,对结果进行投票,如果发起节点收到大于网络预设比例节点同意,则认为是leader节点,否则再进行投票或者切换到follower节点。

实施例3

本实施例在实施例1的基础上,所述由leader节点发起对所有接收到的交易生成的区块的投票,由follower节点投票后leader节点对投票结果进行确认,follower节点对满足条件的交易进行记账并将账本广播到follower节点包括以下步骤:

s1、sdk将交易发送到follower节点或leader节点中的一个,若sdk将交易发送到follower节点,则转入步骤s2,若sdk将交易发送到follower节点,则转入步骤s3;

s2、follower节点接收交易,验证交易是否合法,验证通过后将交易发送到leader节点,转入步骤s3;

s3、leader节点接收交易,验证交易是否合法,验证通过后leader节点将交易加入打包模块;

s4、打包模块根据交易构建对应的区块,将区块发送到出块模块;

s5、出块模块根据区块链出块规则进行出块,将区块发送到raft状态机;

s6、raft状态机对收到的区块进行广播并发起投票;

s7、follower节点接收广播进行投票,将投票结果回复给leader节点的raft状态机;

s8、leader节点的raft状态机统计对应区块投票结果,若满足预设的条件则更新区块的状态记录同时更新本地的事务日志并将区块数据加入本地账本;

s9、leader节点将区块的状态记录、本地的事务日志和本地账本进行广播,follower节点根据广播更新区块的状态记录同时更新本地的事务日志并将区块数据加入本地账本。

实施例4

本实施例在实施例3的基础上,还包括在步骤s1之前在区块链的所有节点中进行选举,选出leader节点和follower节点。直到整个选举确认leader,整个网络才能正常工作。

所述步骤s5中的出块规则包括:

规则1:交易内容大小累计满足预设条件则出块;

规则2:预设交易出块时间,在交易达到出块时间时直接出块;

规则3:果新交易是区块配置更改记录,则立即出块。

上述出块规则原理与fabric超级账本的出块规则类似

所述事务日志包括区块记录term、index、类型、数据记录中的至少一个。

实施例5

本实施一种基于raft协议的区块链系统,包括若干区块链上的节点,所述节点包括:

存储器,用于存储可执行指令;

多核处理器,用于执行所述存储器中存储的可执行指令,实现如权利要求1所述的leader节点和follower节点的操作。

如果本节点是follower节点,则本节点上可执行的指令包括:

1、接受交易,并且验证交易是否合法,验证通过后,将交易转发到leader节点;

2、接受leader节点发送的区块广播,记录广播加入本地raft协议状态机,如果广播是投票则回复leader节点投票结果,如果是广播区块信息则把包含区块记录term、index、类型、数据记录写入本地日志;

3、将区块hash、高度写入索引,区块数据加入本地账本文件中。

如果本节点是leader节点:

1、接受交易,并且验证交易是否合法,验证通过后,将交易加入打包模块;

2、接受其他节点交易,检验投票规则是否符合,交易是否存在重放攻击等,检验通过后加入到打包模块;

3、把打包模块打包的交易加入到本地区块链出块模块,出块模按照规则出块;

4、把区块加入raft状态机的提议流程,raft状态机在稍后对未确认区块记录广播;

5、接受follower节点对某条区块记录广播记录投票状态回复;

6、把对区块状态记录加入到本地raft协议状态机,本地状态机统计区块投票结果,大于预设比例,则更改状态记录,写入本地事物日志;

7、对事务日志进行读取,读取投票记录,修改状态机标识;同步读取游标,以便后续游标继续在当前以后读取,防止重复;

8、将区块hash、高度写入索引,区块数据加入本地账本文件中。

实施例6

本实施例一个完整的基于raft协议的区块链工作方法,首先,建立由n个节点组成的区块链网络,共识机制采用raft协议;

在网络开始工作时,所有节点都转化为candidate节点参与选举成为leader节点,同时发起投票,向其他节点广播,其他节点收到广播,对结果进行投票,如果发起节点收到大于50%节点同意,则认为是leader节点。

在确定leader节点后,其它节点均转换为follower节点,然后:

s1、sdk将交易发送到follower节点或leader节点中的一个,若sdk将交易发送到follower节点,则转入步骤s2,若sdk将交易发送到follower节点,则转入步骤s3;

s2、follower节点接收交易,验证交易是否合法,验证通过后将交易发送到leader节点,转入步骤s3;

s3、leader节点接收交易,接收交易包括直接接收sdk发送的交易,接收后验证交易是否合法,验证通过后leader节点将交易加入打包模块;还包括接收follower节点发送的交易,检验投票规则是否符合,交易是否存在重放攻击等,验证通过后leader节点将交易加入打包模块;

s4、打包模块根据交易构建对应的区块,将区块发送到出块模块;

s5、出块模块根据区块链出块规则进行出块,将区块发送到raft状态机;出块规则包括:

规则1:交易内容大小累计满足预设条件则出块;预设大小可为1m或2m等大小;

规则2:预设交易出块时间,在交易达到出块时间时直接出块;如规定30s、1min等时间后自动触发交易出块;

规则3:果新交易是区块配置更改记录,则立即出块。

s6、raft状态机对收到的区块进行广播并发起投票;

s7、follower节点接收广播进行投票,将投票结果回复给leader节点的raft状态机;

s8、leader节点的raft状态机统计对应区块投票结果,若通过比例大于50%则更新区块的状态记录同时更新本地的事务日志并将区块数据加入本地账本;

s9、leader节点将区块的状态记录、本地的事务日志和本地账本进行广播,follower节点根据广播更新区块的状态记录同时更新本地的事务日志并将区块数据加入本地账本。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

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