一种解决DPOS共识节点权益安全隐患的方法及系统与流程

文档序号:21982671发布日期:2020-08-25 19:19阅读:357来源:国知局
一种解决DPOS共识节点权益安全隐患的方法及系统与流程

本发明涉及dpos共识节点权益安全的技术领域,尤其涉及一种解决dpos共识节点权益安全隐患的方法及系统。



背景技术:

在dpos共识算法中,节点想要参与区块链共识,并从中获得收益,就必须质押权益作为保证,以防止节点在共识中作恶。参与共识的节点质押的权益越多,出块的概率就越高。

当前,有很多节点持有者为了方便,将节点委托给专门的机构来代管,或者将节点放在云服务器上。即使是自主运营的物理节点,很多也都机构化了,比如eos的节点全是由机构运营。以上种种情况,将给共识节点带来权益安全问题。

节点在参与共识的过程中,必须用到私钥,因为共识过程中的通信消息需要私钥的签名来验证身份,否则其他节点将无法验证消息的真伪和安全性。所以,私钥是必须配置在节点中的。如此一来,代管机构、云服务商或者机构自己的运维人员,都有机会盗取节点中的私钥,从而获取节点的质押权益和区块奖励。节点中的权益对这些相关参与者来说,对内或对相关参与者几乎处于不设防状态。

在专利申请cn109714404a--基于raft算法的区块链共识方法及装置中公开:“提供一种基于raft算法的区块链共识方法,区块链中包含预先设置的共识节点,共识节点的状态包括:领导者、跟随者以及候选者,其特征在于,区块链中还设置用于获取共识节点的节点信息的监管者节点,方法包括:在确定共识节点由跟随者状态转换为候选者状态进入选举流程后,通过监管者节点获取选举流程中各共识节点的节点信息;节点信息包括:区块高度、在线时长以及平均投票次数;基于raft算法选举领导者状态的共识节点,领导者状态的共识节点用于记录交易事件并生成新区块;当确定领导者状态的共识节点任期结束时,通过监管者节点将各共识节点的节点信息发送给领导者状态的共识节点;通过领导者状态的共识节点根据各共识节点的区块高度、在线时长、以及平均投票次数确定至多一个推荐候选者共识节点;通过领导者状态的共识节点广播推荐候选者共识节点;当确定推荐候选者共识节点的状态转换为候选者状态时,进入下一任期选举流程。”上述专利申请中通过设置监管者节点,通过监管者节点跟踪并更新各共识节点的区块高度、在线时长以及平均投票次数,进一步的来确定至多一个推荐候选者共识节点并将其进行广播,推荐候选者共识节点的状态转换为候选者状态,进入下一任期选举流程。仅能够对将要候选的节点的安全性进行监督,并不能够对已经被选中参与到区块链共识中的节点进行监督,当节点被选举参与到区块链共识后,如果节点的私钥被盗取,将没有任何办法能够监督到。并且没有任何办法监管到节点的质押权以及出块的奖励。一旦私钥被窃取,对整个区块链网络的安全性,以及对节点持有者的资产所有权将会造成严重的威胁。同时设置监管者节点的方式,也与区块链的去中心化的核心价值相违背。

在专利申请cn110891064a--区块链上根据实用拜占庭算法的共识方法及其系统中公开:“本申请第一方面公开了区块链上根据实用拜占庭算法的共识方法,区块链系统包括多个区块链节点,出块节点组包括预定数量的区块链节点,所述方法包括:所述出块节点组通过实用拜占庭算法对第一区块进行共识;第一区块链节点通过可验证随机函数的方式选择第二区块链节点对所述第一区块进行验证,所述第一区块链节点为出块节点组中的任意一个出块节点,所述第二区块链节点为所述出块节点组以外的区块链节点;所述第二区块链节点对所述第一区块验证成功后,发送验证成功的响应给所述第一区块链节点,以便于所述出块节点组将所述第一区块上链。在一个可能的实施方式中,所述预定数量为3m+1,m为正整数。在一个可能的实施方式中,所述第一区块链节点对交易进行打包成第一区块;所述第一区块链节点对所述第一区块进行验证后,将验证通过的结果发送给所述出块节点组中的其他出块节点进行共识。在一个可能的实施方式中,m=1。”上述专利申请中对新产生的区块进行双重验证,保证区块链的安全性,防止区块链节点作恶。同样的不能对已经被选举参与到区块链共识后的节点进行安全监督,不能解决已经参与到区块链中的共识节点的权益安全隐患。

综上所述,在现有技术中,参与共识的节点的私钥容易被盗取,节点参与共识的安全性以及获得的质押权益和区块奖励的安全性都处于对内或对相关参与方不设防的状态。然而,现有技术中并没有一种好的方法能解决上述问题。



技术实现要素:

针对上述问题,本发明的目的在于提供一种解决dpos共识节点权益安全隐患的方法及系统,能够在保证节点安全参与到共识中的同时,有效杜绝共识节点在dpos算法中质押的权益及出块奖励被代管机构、云服务商或机构内部运维人员窃取,也能在节点无法被有效控制时,及时扭转局面,杜绝损失持续扩大化。

本发明的上述发明目的是通过以下技术方案得以实现的:

一种解决dpos共识节点权益安全隐患的方法,包括以下步骤:

接收一账户地址发送的修改节点地址的请求,所述请求中包括新部署的更新节点地址;

验签所述账户地址,验签通过后,根据所述账户地址在节点映射表中找到与之映射的节点地址,并用所述更新节点地址进行替换,所述节点映射表为预设于dpos共识中的所述节点地址与所述账户地址的对应关系;

所述dpos共识选择出块的出块节点,当所述账户地址被所述dpos共识选中后,通过替换后的所述节点地址进行出块。

进一步地,验签所述账户地址,具体为:

通过所述账户地址发送修改节点地址的请求之前,应用所述账户地址的私钥进行签名;

所述dpos共识在接收到所述账户地址发送的修改所述节点地址的请求之后,验证所述节点映射表中是否包括所述账户地址,并且同时应用预设于所述dpos共识中的所述账户地址的公钥,验证所述账户地址。

进一步地,在接收一所述账户地址发送的修改所述节点地址的请求之前,还包括:

对所述节点地址的私钥加密,将加密后的所述节点地址的私钥写入节点配置文件中,以供所述出块节点参与所述dpos共识的通信;

所述账户地址的私钥由所述出块节点的持有者保存,以供所述出块节点通过所述账户地址修改所述节点地址。

进一步地,所述dpos共识选择出块的所述出块节点,具体包括步骤:

读取所述节点映射表中所有的所述账户地址以及所述账户地址的状态;

根据所述账户地址的质押权益,选择出块的所述账户地址;

根据选定的所述账户地址,从所述节点映射表中读取相对应的所述节点地址;

所述dpos共识将所述节点地址广播到区块链全网。

进一步地,在所述dpos共识选择出块的所述出块节点之后,还包括步骤:

在所述区块链全网中接收到广播的所述节点地址,将广播的所述节点地址与本地的所述节点地址进行对比;

若不相同,所述出块节点不做任何操作,等待从其他的出块节点同步区块;若相同,所述出块节点生成新的所述区块,同时将所述区块广播到所述区块链全网;

当所述区块被确认后,根据所述节点地址在所述节点映射表中读取对应的所述账户地址,将区块奖励转入所述账户地址,完成出块奖励。

一种出块节点,包括出块模块和账户模块;

所述出块模块,用于建立并存储节点地址,并通过所述节点地址参与到dpos共识中,在被所述dpos选中后,通过所述节点地址进行出块;

所述账户模块,用于建立并存储账户地址,通过所述账户地址发送修改节点地址的请求,并将出块获得的区块奖励存储于所述账户地址中。

进一步地,所述出块模块进一步包括:处理子模块和存储子模块;

所述处理子模块,进一步包括:

私钥加密存储单元,用于对所述节点地址的私钥加密,将加密后的所述节点地址的私钥写入节点配置文件中,以供所述出块节点参与所述dpos共识的通信;

区块生成单元,用于在所述区块链全网中接收到广播的所述节点地址之后,将广播的所述节点地址与本地的所述节点地址进行对比;若不相同,所述区块生成单元不做任何操作,等待从其他的出块节点同步区块;若相同,所述区块生成单元生成新的所述区块,同时将所述区块广播到所述区块链全网;

所述存储子模块,进一步包括:

配置文件存储单元,用于存储节点配置文件,其中,所述节点配置文件用于在对所述节点地址的私钥加密,将加密后的所述节点地址的私钥写入所述节点配置文件中,以供所述出块节点参与所述dpos共识的通信。

进一步地,所述账户模块进一步包括:处理子模块和存储子模块;

所述处理子模块,进一步包括:

节点地址修改请求单元,用于发送修改dpos共识中账户地址所对应的节点地址的请求,所述请求中包括新部署的更新节点地址;

所述存储子模块,进一步包括:

资产存储单元,用于存储出块所得的区块奖励。

一种dpos共识,包括处理模块和存储模块;

所述处理模块,进一步包括:

账户地址验签单元,用于在接收到所述账户地址发送的修改所述节点地址的请求之后,验证所述节点映射表中是否包括所述账户地址,并且同时应用预设于所述dpos共识中的所述账户地址的公钥,验证所述账户地址;

节点地址修改单元,用于在所述账户地址验签通过后,根据所述账户地址在节点映射表中找到与之映射的节点地址,并用所述更新节点地址进行替换,所述节点映射表为预设于dpos共识中的所述节点地址与所述账户地址的对应关系,以利于所述dpos共识选择出块的所述出块节点时,通过替换后的所述节点地址进行出块;

dpos共识出块单元,用于读取所述节点映射表中所有的所述账户地址以及所述账户地址的状态;根据所述账户地址的质押权益,选择出块的所述账户地址;根据选定的所述账户地址,从所述节点映射表中读取相对应的所述节点地址;将所述节点地址广播到区块链全网;

区块确认单元,用于确认所生成的区块,并且根据所述节点地址在所述节点映射表中读取对应的所述账户地址,将区块奖励转入所述账户地址,完成出块奖励;

所述存储模块,进一步包括:

节点映射存储单元,用于存储节点映射表,当所述出块节点参与所述dpos共识时,同时提供所述节点地址和所述账户地址,并且将所述节点地址和所述账户地址一一对应的写入所述节点映射表中。

一种解决dpos共识节点权益安全隐患的系统,包括:

dpos共识,若干个参与所述dpos共识的出块节点;

所述dpos共识,进一步包括:

账户地址验签单元,用于在接收到所述账户地址发送的修改所述节点地址的请求之后,验证所述节点映射表中是否包括所述账户地址,并且同时应用预设于所述dpos共识中的所述账户地址的公钥,验证所述账户地址;

节点地址修改单元,用于在所述账户地址验签通过后,根据所述账户地址在节点映射表中找到与之映射的节点地址,并用所述更新节点地址进行替换,所述节点映射表为预设于dpos共识中的所述节点地址与所述账户地址的对应关系,以利于所述dpos共识选择出块的所述出块节点时,通过替换后的所述节点地址进行出块;

dpos共识出块单元,用于读取所述节点映射表中所有的所述账户地址以及所述账户地址的状态;根据所述账户地址的质押权益,选择出块的所述账户地址;根据选定的所述账户地址,从所述节点映射表中读取相对应的所述节点地址;将所述节点地址广播到区块链全网;

区块确认单元,用于确认所生成的区块,并且根据所述节点地址在所述节点映射表中读取对应的所述账户地址,将区块奖励转入所述账户地址,完成出块奖励;

所述出块节点,进一步包括:

所述出块模块,用于建立并存储节点地址,并通过所述节点地址参与到dpos共识中,在被所述dpos选中后,通过所述节点地址进行出块;

所述账户模块,用于建立并存储账户地址,通过所述账户地址发送修改节点地址的请求,并将出块获得的区块奖励存储于所述账户地址中。

与现有技术相比,本发明包括以下至少一种有益效果是:

(1)通过一种解决dpos共识节点权益安全隐患的方法,在发现出块节点无法被有效控制,比如出块节点故障无法修复和重启、远程节点断线失联、云服务瘫痪、节点被黑客劫持等等情况时。重新部署一台节点加入区块链网络,通过账户地址向区块链网络发送修改节点地址的请求,请求中包括新部署的更新节点地址。在区块链网络收到请求后,验证账户地址的签名。验证通过后,通过账户地址在节点映射表中找到原来的节点地址,并用更新节点地址进行替换。下次dpos共识选择出块节点时,将读取新的节点地址进行出块。避免了当节点地址的私钥被窃取后,节点中的权益,比如说质押权益和区块奖励将会受到损失。

(2)通过建立上述的节点地址和账户地址分离的方案,在节点地址的私钥被窃取后,通过账户地址替换一个新的节点地址,在保护了节点中的权益安全的同时,也确保了节点出块的安全性,避免了窃取者随意进行出块,退出出块竞选等操作,进一步维护了整个区块链网络的安全性。

(3)在通过账户地址发送修改节点地址的请求之前,应用账户地址的私钥进行签名,在dpos共识接收到账户地址发送的请求之后,验证节点映射表中是否包括账户地址,并且同时应用预设于dpos共识中的账户地址的公钥,验证账户地址。确保了修改节点地址的请求为节点持有者发出,并且确保节点持有者为已经参与到dpos共识中的节点持有者。

附图说明

图1为本发明一种解决dpos共识节点权益安全隐患的方法的整体体流程图;

图2为本发明一种出块节点的整体结构图;

图3为本发明一种出块节点中出块模块的结构图;

图4为本发明一种出块节点中账户模块的结构图;

图5为本发明一种dpos共识的结构图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。

区块链网络是由无数个区块链节点组成的网络,区块链网络是一个公共账本、公开的数据库,同时也是一个点对点的协作网络。协作方(区块链中的节点)共同维护数据,每个节点都有一份完整的数据备份,所有节点的数据内容必须完全一致,每个节点都可以在本地查找交易记录,每个节点也可以在本地添加交易。要完成这个协作就必须有一个中心来指挥、协调,区块链网络中就必须有一个共识机制,这个机制必须解决两个基本问题。1、谁有权添加区块---一次只有一个节点出块;2、其他节点如何同步数据。

本发明主要针对于dpos共识机制中节点的权益安全隐患问题。dpos(delegatedproofofstake,委托权益证明),是在pow(proofofwork,工作量证明)和pos(proofofstake,权益证明)的基础上发展起来的,是一种基于投票选举的共识算法,持币人选出几个代表节点来运营网络,用专业运行的网络服务器来保证区块链网络的安全和性能。dpos机制中,不需要算力解决数学难题,而是由持币者选出谁是出块节点,如果出块节点不称职,就随时有可能被投票出局。当前出块节点的节点持有者为了方便,一般都是将出块节点委托给专门的机构来代管,或者将节点放在云服务器上。即使是自主运营的物理节点,很多也都机构化了,比如eos的节点全是由机构运营。以上种种情况,将给共识节点带来权益安全问题。当节点中的私钥被窃取后,节点中的权益将几乎处于对内或对相关参与方不设防的状态。

基于以上应用场景,本发明的核心思路为:针对用于出块的出块节点,在参与dpos共识(节点竞选)的时候,同时提供节点地址和账户地址,并且在dpos共识中设置一个节点映射表将节点地址和账户地址对应的存储于节点映射表中。其中节点地址仅用于进行出块操作,可以委托给专门的机构或者放在云服务器上代管。而节点的包括质押权益额,区块奖励等权益都保存于账户地址中,账户地址由节点持有者自己保管。当发现节点地址的私钥被窃取后,账户地址可以立即重新部署一个新的更新节点地址,向dpos发送修改节点地址的请求,dpos在对账户地址进行验签通过后,将在节点映射表中找到与上述账户地址相对应的节点地址,并且用更新节点地址进行替换,后续在被dpos选中后,将用新的节点地址进行操作,原先的旧的节点地址将不能够进行任何操作。

本发明的一个显著特点是:出块节点以节点地址和账户地址分离的形式参与到dpos共识中,节点地址仅用于出块操作,与节点权益相关的重要的内容全部保存于账户地址中,由节点持有者自己保管。并且当节点地址的私钥被窃取后,账户地址能够立即部署一个新的节点地址,替换原来的旧的节点地址,后续的出块操作都用新的节点地址进行,旧的节点地址将不能进行操作,出块节点的实际操控权都掌握在节点持有者自己手中。

第一实施例

如图1所示,其为本发明一种解决dpos共识节点权益安全隐患的方法的具体流程图,它包括:

s1:接收一账户地址发送的修改节点地址的请求,所述请求中包括新部署的更新节点地址。

具体地,在本实施例中,出块节点以节点地址和账户地址分离的形式参与到dpos共识中,节点地址仅用于出块操作,与节点权益相关的重要的内容全部保存于账户地址中,由节点持有者自己保管。当监控到用于出块的节点地址对应的私钥被窃取后,需要重新部署一个新的更新节点地址,并且通过账户地址向dpos共识发送修改节点地址的请求,将更新节点地址在发送请求的同时发送给dpos。

举个简单的例子,一个出块节点将节点地址部署于云服务器上,当被dpos选中为当前的出块节点之后,将通过云服务器自动进行出块操作。对应的为了防止节点权益被窃取,同时部署一个账户地址,并且账户地址对应的私钥由节点持有者自己保存。跟节点权益有关的内容,比如,质押权益额,出块获得的区块奖励,都存储于账户地址中,节点权益的操控权掌握在节点持有者自己手中。dpos共识根据账户地址中的质押权益总额选举将要出块的出块节点,当出块节点被选中后,通过节点地址进行出块操作。然而,当节点地址出块完成后,节点地址将不会接触到出块获得的权益,dpos将会把区块奖励转入对应的账户地址中。当节点持有者发现节点地址所在的云服务器连不上时,可以直接将原先的节点地址废弃,重新部署一个新的节点地址,向dpos共识发送修改节点地址的请求,修改成功后,将通过新的节点地址进行出块操作。不用担心任何原先的节点地址被窃取对节点权益的影响,即使原先的节点地址不能用了,重新部署一个新的节点地址即可。在确保了节点权益安全的情况下,操作极其简单,且节点持有者自己就可以操作,不需要依赖于管理者节点或者其他节点的进行辅助操作,节约了时间的同时节约了修改节点地址的成本。

进一步地,本发明的修改节点地址的方案,也可同时应用于节点地址的私钥丢失的情况,丢失后,重新部署一个新的节点地址,通过账户地址发送修改节点地址的请求,在dpos共识接收了上述请求,并且在节点映射表中完成了节点地址的替换之后,出块节点即可以通过新的节点地址进行出块操作。

为了使得出块节点通过节点地址出块更加的安全简单,出块节点中的权益更加易于被节点持有者掌控,在接收一所述账户地址发送的修改所述节点地址的请求之前,还包括:对所述节点地址的私钥加密,将加密后的所述节点地址的私钥写入节点配置文件中,以供所述出块节点参与所述dpos共识的通信;所述账户地址的私钥由所述出块节点的持有者保存,以供所述出块节点通过所述账户地址修改所述节点地址。

具体地,在本实施例中,节点地址和账户地址都对应一个单独的私钥,节点地址通过自己的私钥进行包括出块在内的操作,账户地址通过自己的私钥进行包括修改节点地址,处理节点权益在内的操作。针对于节点地址的私钥,优选地,可以预先建立加密算法对节点地址对应的私钥进行加密,并且建立节点配置文件,将加密后的节点地址的私钥保存于节点配置文件中。本发明对私钥的加密算法不做任何限定,可以是包括aes算法,hash算法,hmac算法,des在内的算法,只需要在加密时在一个特定的存储介质中,记录下加密算法即可,当需要应用节点地址的私钥进行出块等操作时,可以快速地对加密过的私钥进行解密即可。然而,为了将包括节点权益在内的操控权掌握在自己手中,账户地址的私钥一般都是由出块节点的持有者自己保存,以利于当节点地址的私钥被窃取或者丢失后,节点持有者能够快速的通过账户地址修改节点地址,避免节点权益的损失。

s2:验签所述账户地址,验签通过后,根据所述账户地址在节点映射表中找到与之映射的节点地址,并用所述更新节点地址进行替换,所述节点映射表为预设于dpos共识中的所述节点地址与所述账户地址的对应关系。

具体地,在本实施例中,dpos共识在接收到账户地址发送的修改节点地址的请求之后,需要对账户地址进行验签,以验证账户地址的身份,在对账户地址进行验签通过后,才能进行修改节点地址的操作。

其中,对账户地址进行验签的具体步骤为:

首先,通过所述账户地址发送修改节点地址的请求之前,应用所述账户地址的私钥进行签名。

具体地,为了验证账户地址的身份,在发送修改节点地址的请求之前,都需要用账户地址对应的自己的私钥对上述请求进行签名,将签名后的请求发送给dpos共识。

其次,所述dpos共识在接收到所述账户地址发送的修改所述节点地址的请求之后,验证所述节点映射表中是否包括所述账户地址,并且同时应用预设于所述dpos共识中的所述账户地址的公钥,验证所述账户地址。

具体地,dpos共识在接收到账户地址发送的修改节点地址的请求之后,首先要做的就是,在节点映射表中查找是否包含当前发送请求的账户地址。如果账户地址不在节点映射表中,则不会进行任何操作,以防止不是参与到当前dpos共识的节点进行恶意的操作。当账户地址存在于节点映射表中时,进一步地应用预先存储于dpos共识中的账户地址对应的公钥进行验签,验证账户地址的身份,验签通过后才能进行后续修改节点地址的操作。

对账户地址进行验签通过后,进行修改节点地址的操作,具体为:

对节点映射表进行检索,找到当前账户地址对应的一条记录,用更新节点地址进行替换,更新后,所述的出块操作将应用新的节点地址来进行。

节点映射表是预设于dpos共识中的节点地址与账户地址的对应关系,本发明对对应关系的存储格式不做限定。可以是包括表格,json,对象在内的任何一种形式。举个例子来说,可以通过“key-value”的形式进行存储,因账户地址唯一且一般不会改变,可以直接将账户地址设置为key,将节点地址设置为value,更新节点时直接查找key的值为对应的账户地址的记录,对key的值进行更新即可。再比如,可以通过json对象的形式进行存储,设置一个json对象的数组,数组中的每一条记录都是一个账户地址和节点地址的对应关系的json对象,具体格式可以是“[{账户地址:账户地址1;节点地址:节点地址1},{账户地址:账户地址2;节点地址:节点地址2}]”。

进一步地,由于一个账户地址或者节点地址都会对应一个唯一的公钥,并且都是通过公钥参与到区块链网络或者dpos中,在节点映射表中,我们可以用公钥进行存储。或者其它任何一种唯一的能用来区分不同的账户地址或者节点地址的字段进行存储。本发明对节点映射表中实际存储的内容不做任何限制,只需要能够将账户地址和节点地址的对应关系表述清楚即可。

s3:所述dpos共识选择出块的出块节点,当所述账户地址被所述dpos共识选中后,通过替换后的所述节点地址进行出块。

具体地,在本实施例中,当dpos共识需要出块时,将会通过存储于账户地址中的质押权益总额,选择相应的出块节点进行出块,一般来说dpos共识会选择质押权益总额最多的出块节点进行出块,但是出块的规则不是唯一的,具体的出块规则由dpos共识指定。当特定的出块节点被dpos选中为出块节点之后,将检索节点映射表,找到账户地址对应的节点地址,通过节点地址进行出块。若节点地址没有被修改,将通过原先的节点地址进行出块操作,若节点地址被修改,将通过最新的节点地址进行出块操作。节点地址的修改次数没有任何限制,用于出块的地址永远是最新修改的一个节点地址。

进一步地,所述dpos共识选择出块的所述出块节点,具体包括步骤:

s311:读取所述节点映射表中所有的所述账户地址以及所述账户地址的状态。

具体地,在本实施例中,当dpos共识需要选择出块的出块节点时,首先,需要读取节点映射表,根据节点映射表中账户地址的状态,筛选出所有的账户地址的状态为“质押”的账户地址。

s312:根据所述账户地址的质押权益,选择出块的所述账户地址。

具体地,在本实施例中,在筛选出所有的能够进行出块操作的账户地址之后,需要获取所有需要出块的账户地址中的质押权益额,一般地,在账户地址中都会设置一个表单,用于维护账户地址的质押权益额,以及节点权益等资产相关的内容。获取到每一个账户地址中的质押权益额后,将会根据dpos共识中设定的选举出块的规则,选择出块对应的账户地址,其中,选举出块的规则由dpos共识根据共识的实际情况进行设定,可以是选举质押权益额最高的出块节点进行出块,也可以是融合进其它的比如说包括信用,出块质量等在内的因素,综合考虑选举出最优的用于出块的出块节点。也可以是其他任何一规则,本发明不做任何限定。

s313:根据选定的所述账户地址,从所述节点映射表中读取相对应的所述节点地址。

具体地,在本实施例中,在通过上述选举出块的规则,选举出用于出块的账户地址后,由于出块的操作最终是由节点地址进行,则需要找到与账户地址对应的节点地址。此时,我们就需要再次访问节点映射表,从节点映射表中找到与选择出块的账户地址相对应的节点地址,后续通过节点地址进行出块操作。

在此,区块链系统可以设置一个系统账户,让参与出块竞争的竞争节点向该系统账户转账,转账的数额就是质押权益额,程序中会记录每个节点的质押权益额,然后从其中选择出块节点,但是选择出来的只是账户地址,因此,根据该账户地址从节点映射表中找到对应的节点地址,让该节点地址进行出块操作。

s314:所述dpos共识将所述节点地址广播到区块链全网。

具体地,在本实施例中,从节点映射表中,找到账户地址对应的节点地址之后,需要将出块的节点地址广播到区块链全网,只有将节点地址广播到区块链全网之后,节点地址才能够同步到出块的节点地址,得知自己是否能够能进行出块操作,亦或者是等待其他出块节点进行出块后同步区块。

进一步地,在所述dpos共识选择出块的所述出块节点之后,还包括步骤:

s321:在所述区块链全网中接收到广播的所述节点地址,将广播的所述节点地址与本地的所述节点地址进行对比;若不相同,所述出块节点不做任何操作,等待从其他的出块节点同步区块;若相同,所述出块节点生成新的所述区块,同时将所述区块广播到所述区块链全网。

具体地,在本实施例中,当把被选中出块的节点地址广播到区块链全网之后,区块链全网中的任何一个节点都可以同步到出块的节点地址信息。当参与到dpos竞选的出块接收到被dpos选中的节点地址之后,将用自己的节点地址与区块链全网中广播的节点地址进行比对。只有当广播的节点地址与自己的节点地址相一致时,才能够进行后续的出块操作,否则,只能等待其他被选中的节点地址进行出块操作后,同步区块信息。

s322:当所述区块被确认后,根据所述节点地址在所述节点映射表中读取对应的所述账户地址,将区块奖励转入所述账户地址,完成出块奖励。

具体地,在本实施例中,当通过自己的节点地址与广播的节点地址进行比对后,若两个地址相同,则可以断定出自己就是那个被选中进行出块的节点地址。被选中后,通过节点地址进行出块,出块后将发送给dpos共识,dpos共识将会对所出的区块进行出块,只有当出的区块合格后,才能认定为出块成功。进一步地,出块成功后,dpos共识又要再一次的访问节点映射表,找到出块的节点地址对应的账户地址,将出块的区块奖励转入到账户地址中,由节点持有者自己分配,节点地址整个出块的全过程都不会接触到节点权益。

第二实施例

如图2所示,本发明一种出块节点1的结构图,具体包括出块模块11和账户模块12;

出块模块11,用于建立并存储节点地址,并通过所述节点地址参与到dpos共识中,在被所述dpos选中后,通过所述节点地址进行出块;

账户模块12,用于建立并存储账户地址,通过所述账户地址发送修改节点地址的请求,并将出块获得的区块奖励存储于所述账户地址中。

进一步地,如图3所示,所述出块模块11进一步包括:处理子模块111和存储子模块112;

所述处理子模块111,进一步包括:

私钥加密存储单元1111,用于对所述节点地址的私钥加密,将加密后的所述节点地址的私钥写入节点配置文件中,以供所述出块节点参与所述dpos共识的通信;

区块生成单元1112,用于在所述区块链全网中接收到广播的所述节点地址之后,将广播的所述节点地址与本地的所述节点地址进行对比;若不相同,所述区块生成单元不做任何操作,等待从其他的出块节点同步区块;若相同,所述区块生成单元生成新的所述区块,同时将所述区块广播到所述区块链全网;

所述存储子模块112,进一步包括:

配置文件存储单元1121,用于存储节点配置文件,其中,所述节点配置文件用于在对所述节点地址的私钥加密,将加密后的所述节点地址的私钥写入所述节点配置文件中,以供所述出块节点参与所述dpos共识的通信。

进一步地,如图4所示,所述账户模块12进一步包括:处理子模块121和存储子模块122;

所述处理子模块121,进一步包括:

节点地址修改请求单元1211,用于发送修改dpos共识中账户地址所对应的节点地址的请求,所述请求中包括新部署的更新节点地址;

所述存储子模块122,进一步包括:

资产存储单元1221,用于存储出块所得的区块奖励。

第三实施例

如图5所示,本发明一种dpos共识2的结构图,具体包括处理模块21和存储模块22;

所述处理模块21,进一步包括:

账户地址验签单元211,用于在接收到所述账户地址发送的修改所述节点地址的请求之后,验证所述节点映射表中是否包括所述账户地址,并且同时应用预设于所述dpos共识中的所述账户地址的公钥,验证所述账户地址;

节点地址修改单元212,用于在所述账户地址验签通过后,根据所述账户地址在节点映射表中找到与之映射的节点地址,并用所述更新节点地址进行替换,所述节点映射表为预设于dpos共识中的所述节点地址与所述账户地址的对应关系,以利于所述dpos共识选择出块的所述出块节点时,通过替换后的所述节点地址进行出块;

dpos共识出块单元213,用于读取所述节点映射表中所有的所述账户地址以及所述账户地址的状态;根据所述账户地址的质押权益,选择出块的所述账户地址;根据选定的所述账户地址,从所述节点映射表中读取相对应的所述节点地址;将所述节点地址广播到区块链全网;

区块确认单元214,用于确认所生成的区块,并且根据所述节点地址在所述节点映射表中读取对应的所述账户地址,将区块奖励转入所述账户地址,完成出块奖励;

所述存储模块22,进一步包括:

节点映射存储单元221,用于存储节点映射表,当所述出块节点参与所述dpos共识时,同时提供所述节点地址和所述账户地址,并且将所述节点地址和所述账户地址一一对应的写入所述节点映射表中。

第四实施例

本发明还提供了一种解决dpos共识节点权益安全隐患的系统,其特征在于,包括:

dpos共识2,若干个参与所述dpos共识的出块节点1;

所述dpos共识2,进一步包括:

账户地址验签单元211,用于在接收到所述账户地址发送的修改所述节点地址的请求之后,验证所述节点映射表中是否包括所述账户地址,并且同时应用预设于所述dpos共识中的所述账户地址的公钥,验证所述账户地址;

节点地址修改单元212,用于在所述账户地址验签通过后,根据所述账户地址在节点映射表中找到与之映射的节点地址,并用所述更新节点地址进行替换,所述节点映射表为预设于dpos共识中的所述节点地址与所述账户地址的对应关系,以利于所述dpos共识选择出块的所述出块节点时,通过替换后的所述节点地址进行出块;

dpos共识出块单元213,用于读取所述节点映射表中所有的所述账户地址以及所述账户地址的状态;根据所述账户地址的质押权益,选择出块的所述账户地址;根据选定的所述账户地址,从所述节点映射表中读取相对应的所述节点地址;将所述节点地址广播到区块链全网;

区块确认单元214,用于确认所生成的区块,并且根据所述节点地址在所述节点映射表中读取对应的所述账户地址,将区块奖励转入所述账户地址,完成出块奖励;

所述出块节点1,进一步包括:

所述出块模块11,用于建立并存储节点地址,并通过所述节点地址参与到dpos共识中,在被所述dpos选中后,通过所述节点地址进行出块;

所述账户模块12,用于建立并存储账户地址,通过所述账户地址发送修改节点地址的请求,并将出块获得的区块奖励存储于所述账户地址中。

一种计算机可读存储介质,计算机可读存储介质存储有计算机代码,当计算机代码被执行时,如上述方法被执行。本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取存储器(ram,randomaccessmemory)、磁盘或光盘等。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

本发明的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本发明的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本发明的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个功能或步骤的电路。如本说明书实施例所示实施例揭示的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本说明书实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。

实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子系统执行时,使得所述电子系统执行实施例一所述的方法。在此不再赘述。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

另外,本发明的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本发明的方法和/或技术方案。而调用本发明的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本发明的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本发明的多个实施例的方法和/或技术方案。

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