一种基于一致性hash的能源区块链区块存储方法技术

技术编号:25396626 阅读:19 留言:0更新日期:2020-08-25 23:01
本发明专利技术提出一种基于一致性hash的能源区块链区块存储方法,区块链中最大节点数为N,编号为0‑N‑1,n为2^N,对于每一个节点T,通过对节点地址进行hash运算得出hash值h(T),h(T)%n为该节点对应于hash环中的位置;每一个记账周期中,主节点将交易打包为区块之后,计算区块hash值h(B),写入到区块头中,将区块头信息发送到所有参与节点,参与节点将区块头记录到本地;通过取模运算h(B)%n,得出在hash环中的位置,将区块体发送到该位置上一个节点和下一个节点进行记录,在收到回复之后,主节点将区块体记录到本地。通过此方式,将区块记录在少数节点中,减少了存储空间,提高了性能。

【技术实现步骤摘要】
一种基于一致性hash的能源区块链区块存储方法
本专利技术涉及能源区块链技术,具体涉及一种基于一致性hash的能源区块链区块存储方法。
技术介绍
能源行业的交易和传统交易相比,有着交易频率高,数据量大的特点,传统的联盟链区块链方案将所有数据存储到所有节点中,并且交易验证需要通过主节点进行,这对存储空间和主节点的性能都有较大的影响。能源行业对安全的要求没有金融类交易的要求高,可以考虑将区块存储到少数节点中,在节点出现故障的时候通过存储的备份进行恢复。
技术实现思路
本专利技术所要解决的技术问题是,针对分布式能源交易的特点,提出一种存储效率高,故障恢复快的适用于能源交易的区块存储方案。本专利技术为解决上述技术问题所采用的技术方案是:一种基于一致性hash的能源区块链区块存储方法,包括以下步骤:(1)节点状态初始化:对每一个节点IP进行hash运算,得到hash值h(T),通过对h(T)进行取模运算,得到m(T)=h(T)%n,其中n=2^N,N为最大节点数。每个节点将全局所有节点的m(T)以及IP地址记录到本地,并与hash环上一个节点和下一个节点建立TCP长连接。所有通过PBFT算法对主节点达成共识,选出主节点;(2)客户端提交交易:客户端将交易发送到主节点,主节点将交易记录到本地交易池中;(3)主节点打包交易并备份存储区块体:主节点将当前交易池中所有交易打包到区块中,并通过hash运算得出区块hash,h(B)。主节点通过对h(B)进行取模运算m(B)=h(B)%n,得到区块在hash环中的位置,通过对比本地所有节点的位置m(T),找到m(T)>m(B)和m(T)<m(B)的两个节点L和H,将区块体发送到节点L和H中,L和H记录到本地;(4)所有节点记录区块头:主节点将区块hash、时间戳、merkle根、前一区块hash等打包为区块头,发送给所有节点,节点收到区块头之后,记录到本地中。进一步的,还包括节点加入,具体包括以下步骤:(1)当节点加入时,节点向主节点发送节点加入请求,主节点接受到加入请求之后,验证节点数目是否大于最大节点数N,如果大于,则否决加入请求。如果小于,则将节点数加一;(2)主节点向所有参与节点发送节点加入请求,包括节点IP,时间戳等。每个节点对新进入的节点计算其在hash环中的位置h(T),如果h(T)不在本节点hash环的上一个或者下一个位置;(3)如果h(T)在本节点上一位置或者下一位置,则与新节点建立连接,并将结果发送到主节点中;(4)主节点将新加入节点记录为观察者节点,新的区块hash环位置m(B)在新节点m(T)中时,区块即发送到原来的节点,也发送到新节点中;(5)新加入的节点从与其连接的上下游节点中获取需要本节点保存的区块,保存在本地。当区块获取完成后,向主节点和连接的上下游节点发送状态转换请求,主节点接受到之后,将节点状态从观察者节点转变为记账节点,以后的需要m(T)保存的区块直接发送到新节点中。上下游节点接收到之后,将旧的TCP连接关闭。节点加入成功。进一步的,还包括节点退出,具体包括以下步骤:(1)当节点退出时,节点向主节点发送节点退出请求,主节点接受到请求之后,将节点数减一,向所有节点发送退出请求,节点接收到之后,判断是否在自己的上下游,如果不在,则仅仅删除该节点信息。如果在,则重新与新的上下游节点建立连接;(2)主节点将退出节点状态置为观察者节点,新的区块即发送到退出节点,也发送到其上一或者下一节点;(3)上下游节点向退出节点获取需要保存的区块信息,保存到本地,所有信息获取完成之后,断开与退出节点的连接,并通知主节点;(4)主节点收到所有上下游节点通知后,删除并通知退出节点,节点接收到之后自动退出。进一步的,还包括节点意外退出,具体包括以下步骤:(1)当节点由于某种原因意外退出时,主节点的心跳包将会监测到此状况,主节点发现节点意外退出时,首先向所有节点发送节点意外退出请求,节点收到之后,判断是否在自己的上下游,如果不在,则删除节点信息并返回,如果在,则删除信息并断开与意外节点的TCP连接;(2)上下游节点分别相互建立TCP连接,从主节点中获取需要保存的区块信息。并将节点状态置为同步节点,在此时间中,如果客户端发出验证请求,则返回失败,要求客户端一段时间后重新发送;(3)节点获取到完整的数据之后,主节点将节点状态切回记账节点,并将节点数减一。进一步的,还包括主节点意外退出,具体包括以下步骤:(1)节点在一段时间未收到心跳包,则认为主节点以及退出,向所有节点发送视图切换请求;(2)所有节点通过PBFT对新的主节点达成共识,新的主节点与所有节点建立TCP长链接,并将节点状态置为同步节点,此时所有交易和查账请求都会返回一个一段时间重新发送的结果;(3)主节点向hash环中的所有节点获取完整区块数据,获取之后通过与自己的区块头进行验证,验证通过则记录到本地;(4)将所有区块同步之后,主节点将状态置为记账节点,所有交易请求和查账请求可以正常处理,并将节点数减一;(5)原来的节点恢复之后,发现视图切换,则重新发起节点加入请求。本专利技术的有益效果是:每一个区块全量数据仅在主节点和两个备份节点中存储,极大的降低了存储空间,通过一致性hash,能够极大的避免节点加入和退出的时候对全局状态造成影响,将状态变化的影响局限于小范围,并且通过hash算法最大限度的平均了每个节点实际的存储占用。附图说明图1为本专利技术所述hash环。图2为本专利技术所述节点初始化过程。图3为本专利技术所述区块保存与查找过程。具体实施方式下面结合附图和实施例,对本专利技术进行进一步的详细说明。但不应将此理解为本专利技术上述主题的范围仅限于以下的实施例,凡基于本
技术实现思路
所实现的技术均属于本专利技术的范围。本专利技术所涉及的存储结构,主要包括以下两个方面:1、区块链结构,主要包括区块头和区块体,区块体中包括本周期中的所有交易,以及交易merkle树。区块头中包括区块hash,上一区块hash、时间戳以及交易merkle根。区块链结构是整个方案的基础,锁保存的数据为全局共识数据。2、本地存储结构,主要包括所有节点状态、最大节点数、hash环位置等。实施例1本实施例假设在一个能源交易场景中,最大节点数为10,有6个记账节点p1-p6,节点进行初始化,整个过程如图2所示。(1)p1-p5相互连接,相互发送各自的IP信息等,通过PBFT选举出主节点,假设p1被选举为主节点,主节点通过对所有节点IP进行hash运算,得出节点hashh(T)。当前最大节点数为10,通过h(T)%1024计算得出各个节点的hash环位置m(T),假设p1-p6分别为5、407、213、525、609、923。所有节点在hash环中的位置如图1所示,空心点表示本文档来自技高网
...

【技术保护点】
1.一种基于一致性hash的能源区块链区块存储方法,其特征在于,包括以下步骤:/n(1)节点状态初始化:对每一个节点IP进行hash运算,得到hash值h(T),通过对h(T)进行取模运算,得到m(T)=h(T)%n,其中n=2^N,N为最大节点数;每个节点将全局所有节点的m(T)以及IP地址记录到本地,并与hash环上一个节点和下一个节点建立TCP长连接;所有通过PBFT算法对主节点达成共识,选出主节点;/n(2)客户端提交交易:客户端将交易发送到主节点,主节点将交易记录到本地交易池中;/n(3)主节点打包交易并备份存储区块体:主节点将当前交易池中所有交易打包到区块中,并通过hash运算得出区块hash,h(B);主节点通过对h(B)进行取模运算m(B)=h(B)%n,得到区块在hash环中的位置,通过对比本地所有节点的位置m(T),找到m(T)>m(B)和m(T)<m(B)的两个节点L和H,将区块体发送到节点L和H中,L和H记录到本地;/n(4)所有节点记录区块头:主节点将区块hash、时间戳、merkle根、前一区块hash打包为区块头,发送给所有节点,节点收到区块头之后,记录到本地中;/n(5)客户端查账:客户端向主节点发送查账请求,主节点返回包含该交易的区块hash;客户端通过区块hash和节点hash环计算得到存储区块体的节点IP,对存储区块体的两个节点发起查账请求,节点L和H在接受到查账请求之后,将区块中的交易数据返回;客户端验证交易签名,验证通过则表示交易成功。/n...

【技术特征摘要】
1.一种基于一致性hash的能源区块链区块存储方法,其特征在于,包括以下步骤:
(1)节点状态初始化:对每一个节点IP进行hash运算,得到hash值h(T),通过对h(T)进行取模运算,得到m(T)=h(T)%n,其中n=2^N,N为最大节点数;每个节点将全局所有节点的m(T)以及IP地址记录到本地,并与hash环上一个节点和下一个节点建立TCP长连接;所有通过PBFT算法对主节点达成共识,选出主节点;
(2)客户端提交交易:客户端将交易发送到主节点,主节点将交易记录到本地交易池中;
(3)主节点打包交易并备份存储区块体:主节点将当前交易池中所有交易打包到区块中,并通过hash运算得出区块hash,h(B);主节点通过对h(B)进行取模运算m(B)=h(B)%n,得到区块在hash环中的位置,通过对比本地所有节点的位置m(T),找到m(T)>m(B)和m(T)<m(B)的两个节点L和H,将区块体发送到节点L和H中,L和H记录到本地;
(4)所有节点记录区块头:主节点将区块hash、时间戳、merkle根、前一区块hash打包为区块头,发送给所有节点,节点收到区块头之后,记录到本地中;
(5)客户端查账:客户端向主节点发送查账请求,主节点返回包含该交易的区块hash;客户端通过区块hash和节点hash环计算得到存储区块体的节点IP,对存储区块体的两个节点发起查账请求,节点L和H在接受到查账请求之后,将区块中的交易数据返回;客户端验证交易签名,验证通过则表示交易成功。


2.根据权利权利要求1所述的一种基于一致性hash的能源区块链区块存储方法,其特征在于,还包括节点加入,具体包括以下步骤:
(1)当节点加入时,节点向主节点发送节点加入请求,主节点接受到加入请求之后,验证节点数目是否大于最大节点数N,如果大于,则否决加入请求;如果小于,则将节点数加一;
(2)主节点向所有参与节点发送节点加入请求,包括节点IP、时间戳;每个节点对新进入的节点计算其在hash环中的位置h(T),如果h(T)不在本节点hash环的上一个或者下一个位置;
(3)如果h(T)在本节点上一位置或者下一位置,则与新节点建立连接,并将结果发送到主节点中;
(4)主节点将新加入节点记录为观察者节点,新的区块hash环位置m(B)在新节点m(T)中时,区块即发送到原来的节点,也发送到新节点中;
(5)新加入的节点从与其连接的上下游节点中获取需要本节点保存的区块,保存在本地;当区块获取完成后,向主节点和连接的上下游节点发送状态转换请求,主节点接受到之后,...

【专利技术属性】
技术研发人员:何涛桂勋姚兰
申请(专利权)人:成都汉为科技有限公司
类型:发明
国别省市:四川;51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1