本发明涉及通信网络技术领域,特别涉及一种实现共识算法的方法。
背景技术
区块链技术(blockchaintechnology,简称bt),也被称之为分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据库记录。最早是比特币的基础技术,目前世界各地均在研究,可广泛应用于金融等各领域。区块链的基本概念包括:(1)交易(transaction):一次操作,导致账本状态的一次改变,如添加一条记录;(2)数据块(block):记录一段时间内发生的交易和状态结果,是对当前账本状态的一次共识;(3)链(chain):由一个个区块按照发生顺序串联而成,是整个状态变化的日志记录。
在区块链系统中,核心机制是共识机制,就是所有记账节点之间如何达成共识,去认定一个记录的有效性,这既是认定的手段,也是防止篡改的手段。目前,存在着多种共识算法,比如pow(proofofwork,工作量证明)、pos(proofofstake,权益证明)、dpos(delegateproofofstake,委托权益证明)、pbft(practicalbyzantinefaulttolerance,实用拜占庭容错算法)等。
然而,在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
现有共识算法都是依赖机器给出结果,在现实世界中,有很多的情况下机器很难对人类的劳动做出适当的评估,也就无法给出适当的回报,不利用区块链的广泛应用。
技术实现要素:
为了解决现有技术的问题,本发明实施例提供了一种实现共识算法的方法和装置。所述技术方案如下:
一方面,提供了一种实现共识算法的方法,所述方法包括:
获取区块代码加入区块链请求;
获取组成所述区块代码的每个子代码的等效劳动时间;
按照预设等效劳动时间与奖励值对应关系,为每个所述子代码的所有者分配相应的奖励值。
进一步地,所述获取组成所述区块代码的每个子代码的等效劳动时间,包括:
根据预设等效劳动时间计算公式,分别计算得到每个所述子代码的等效劳动时间计算值;
分别判断每个所述子代码的等效劳动时间计算值是否小于预设等效劳动时间阈值;
如果某个所述子代码的等效劳动时间计算值小于所述预设等效劳动时间阈值,则将某个所述子代码的等效劳动时间计算值作为某个所述子代码的等效劳动时间;
如果某个所述子代码的等效劳动时间计算值大于等于所述预设等效劳动时间阈值,则将所述预设等效劳动时间阈值作为某个所述子代码的等效劳动时间。
进一步地,所述预设等效劳动时间计算公式为:
所述子代码的难度系数、所述子代码的强度系数与所述子代码对应的完成时长的乘积。
进一步地,所述预设等效劳动时间与奖励值对应关系包括:
在预设时间范围内,每单位等效劳动时间对应的奖励值;其中,每单位等效劳动时间对应的奖励值随着时间的推移递减。
进一步地,所述获取区块代码加入区块链请求之前,还包括:
对所述区块代码进行社区共识测试;
如果所述区块代码通过社区共识测试,则发送加入区块链请求。
进一步地,所述按照预设等效劳动时间与奖励值对应关系,为每个所述子代码的所有者分配相应的奖励值之后,还包括:
按照预设奖励分配比例,每个所述子代码的所有者将每个所述子代码相应的奖励值分配给预设协同者。
进一步地,当所述区块代码加入区块链之后,所述方法还包括:
获取所述区块代码的调用指令,以及为调用所述区块代码所支付的奖励值,其中,为调用所述区块代码所支付的奖励值与所述区块代码中所有的所述子代码的总的等效劳动时间相对应;
将为调用所述区块代码所支付的奖励值,按照所述区块代码中每个所述子代码的等效劳动时间,分配给所述区块代码的每个所述子代码的所有者。
另一方面,提供了一种实现共识算法的装置,所述装置包括:
第一获取模块,用于获取区块代码加入区块链请求;
第二获取模块,用于获取组成所述区块代码的每个子代码的等效劳动时间;
第一分配模块,用于按照预设等效劳动时间与奖励值对应关系,为每个所述子代码的所有者分配相应的奖励值。
进一步地,所述第二获取模块包括:
计算单元,用于根据预设等效劳动时间计算公式,分别计算得到每个所述子代码的等效劳动时间计算值;
判断单元,用于分别判断每个所述子代码的等效劳动时间计算值是否小于预设等效劳动时间阈值;
第一处理单元,用于如果某个所述子代码的等效劳动时间计算值小于所述预设等效劳动时间阈值,则将某个所述子代码的等效劳动时间计算值作为某个所述子代码的等效劳动时间;
第二处理单元,用于如果某个所述子代码的等效劳动时间计算值大于等于所述预设等效劳动时间阈值,则将所述预设等效劳动时间阈值作为某个所述子代码的等效劳动时间。
进一步地,所述预设等效劳动时间计算公式为:
所述子代码的难度系数、所述子代码的强度系数与所述子代码对应的完成时长的乘积。
进一步地,所述预设等效劳动时间与奖励值对应关系包括:
在预设时间范围内,每单位等效劳动时间对应的奖励值;其中,每单位等效劳动时间对应的奖励值随着时间的推移递减。
进一步地,所述装置还包括:
测试模块,用于获取区块代码加入区块链请求之前,对所述区块代码进行社区共识测试;
发送模块,用于如果所述区块代码通过社区共识测试,则发送加入区块链请求。
进一步地,所述装置还包括:
第二分配模块,用于按照预设奖励分配比例,每个所述子代码的所有者将每个所述子代码相应的奖励值分配给预设协同者。
进一步地,所述装置还包括:
处理模块,用于当所述区块代码加入区块链之后,获取所述区块代码的调用指令,以及为调用所述区块代码所支付的奖励值,其中,为调用所述区块代码所支付的奖励值与所述区块代码中所有的所述子代码的总的等效劳动时间相对应;
第三分配模块,用于将为调用所述区块代码所支付的奖励值,按照所述区块代码中每个所述子代码的等效劳动时间,分配给所述区块代码的每个所述子代码的所有者。
本发明实施例提供的技术方案带来的有益效果是:通过等效劳动时间为人类的劳动做出合理的评估,从而给出适当的回报,让共识算法更公平,有利用区块链的广泛应用。如果某个子代码的等效劳动时间计算值大于等于预设等效劳动时间阈值,则将预设等效劳动时间阈值作为某个子代码的等效劳动时间,可以保证每个代码的等效劳动时间不超过一定的值,避免一些恶意的攻击,导致一个代码的等效劳动时间过长,得到过多的奖励值。在预设时间范围内,每单位等效劳动时间对应的奖励值,其中,每单位等效劳动时间对应的奖励值随着时间的推移递减,如果奖励值的总量固定,随着时间的推移,那么奖励值应该是越来越少,直到最后,从而保证了奖励值的价值。将为调用区块代码所支付的奖励值,按照区块代码中每个子代码的等效劳动时间,分配给区块代码的每个子代码的所有者,可以保证当某个服务,依赖了其他几个服务,那这几个服务,也可以在被调用过程中再获得一部分的收益,同样的,每个服务,都会依赖一些底层的服务,收益层层分配下去,自动运行,保证收益最后分配到相关的贡献者。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一提供的一种实现共识算法的方法流程图;
图2是本发明实施例二提供的第一种实现共识算法的方法流程图;
图3是本发明实施例二提供的第二种实现共识算法的方法流程图;
图4是本发明实施例二提供的第三种实现共识算法的方法流程图;
图5是本发明实施例二提供的第四种实现共识算法的方法流程图;
图6是本发明实施例二提供的第五种实现共识算法的方法流程图;
图7是本发明实施例三提供的第一种实现共识算法的装置结构示意图;
图8是本发明实施例三提供的第二种实现共识算法的装置结构示意图;
图9是本发明实施例三提供的第三种实现共识算法的装置结构示意图;
图10是本发明实施例三提供的第四种实现共识算法的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例一
本发明实施例提供了一种实现共识算法的方法,参见图1,该方法包括:
101:获取区块代码加入区块链请求。
102:获取组成区块代码的每个子代码的等效劳动时间。
其中,获取组成区块代码的每个子代码的等效劳动时间,包括:
根据预设等效劳动时间计算公式,分别计算得到每个子代码的等效劳动时间计算值;
分别判断每个子代码的等效劳动时间计算值是否小于预设等效劳动时间阈值;
如果某个子代码的等效劳动时间计算值小于预设等效劳动时间阈值,则将某个子代码的等效劳动时间计算值作为某个子代码的等效劳动时间;
如果某个子代码的等效劳动时间计算值大于等于预设等效劳动时间阈值,则将预设等效劳动时间阈值作为某个子代码的等效劳动时间。
其中,预设等效劳动时间计算公式为:
子代码的难度系数、子代码的强度系数与子代码对应的完成时长的乘积。
103:按照预设等效劳动时间与奖励值对应关系,为每个子代码的所有者分配相应的奖励值。
其中,预设等效劳动时间与奖励值对应关系包括:
在预设时间范围内,每单位等效劳动时间对应的奖励值;其中,每单位等效劳动时间对应的奖励值随着时间的推移递减。
进一步地,获取区块代码加入区块链请求之前,还包括:
对区块代码进行社区共识测试;
如果区块代码通过社区共识测试,则发送加入区块链请求。
进一步地,按照预设等效劳动时间与奖励值对应关系,为每个子代码的所有者分配相应的奖励值之后,还包括:
按照预设奖励分配比例,每个子代码的所有者将每个子代码相应的奖励值分配给预设协同者。
进一步地,当区块代码加入区块链之后,该方法还包括:
获取区块代码的调用指令,以及为调用区块代码所支付的奖励值,其中,为调用区块代码所支付的奖励值与区块代码中所有的子代码的总的等效劳动时间相对应;
将为调用区块代码所支付的奖励值,按照区块代码中每个子代码的等效劳动时间,分配给组成区块代码的每个子代码的所有者。
本发明实施例所述的实现共识算法的方法,通过等效劳动时间为人类的劳动做出合理的评估,从而给出适当的回报,让共识算法更公平,有利用区块链的广泛应用。如果某个子代码的等效劳动时间计算值大于等于预设等效劳动时间阈值,则将预设等效劳动时间阈值作为某个子代码的等效劳动时间,可以保证每个代码的等效劳动时间不超过一定的值,避免一些恶意的攻击,导致一个代码的等效劳动时间过长,得到过多的奖励值。在预设时间范围内,每单位等效劳动时间对应的奖励值,其中,每单位等效劳动时间对应的奖励值随着时间的推移递减,如果奖励值的总量固定,随着时间的推移,那么奖励值应该是越来越少,直到最后,从而保证了奖励值的价值。将为调用区块代码所支付的奖励值,按照区块代码中每个子代码的等效劳动时间,分配给区块代码的每个子代码的所有者,可以保证当某个服务,依赖了其他几个服务,那这几个服务,也可以在被调用过程中再获得一部分的收益,同样的,每个服务,都会依赖一些底层的服务,收益层层分配下去,自动运行,保证收益最后分配到相关的贡献者。
实施例二
本发明实施例提供了一种实现共识算法的方法,参见图2,该方法包括:
201:获取区块代码加入区块链请求。
其中,区块代码要加入区块链作为其上的数据,区块代码也可以称为源代码(可以包含有规范的注释、测试案例、同行评审结果等)。
202:获取组成区块代码的每个子代码的等效劳动时间。
具体地,区块代码包含区块代码的所有者撰写的新的子代码,以及可能需要调用的其他所有者的子代码。例如:区块代码包括,新的子代码a,以及调用的子代码b。
其中,参见图3,获取组成区块代码的每个子代码的等效劳动时间,包括:
202a:根据预设等效劳动时间计算公式,分别计算得到每个子代码的等效劳动时间计算值。
202b:分别判断每个子代码的等效劳动时间计算值是否小于预设等效劳动时间阈值,如果某个子代码的等效劳动时间计算值小于预设等效劳动时间阈值,则执行202c;如果某个子代码的等效劳动时间计算值大于等于预设等效劳动时间阈值,则执行202d。
202c:将某个子代码的等效劳动时间计算值作为某个子代码的等效劳动时间,然后结束。
202d:将预设等效劳动时间阈值作为某个子代码的等效劳动时间,然后结束。
需要说明的是,在具体实现过程中,可以分别循环计算判断得到每个子代码的等效劳动时间。
其中,预设等效劳动时间计算公式为:
子代码的难度系数、子代码的强度系数与子代码对应的完成时长的乘积。
等效劳动时间,主要由三个因素构成:完成时长、难度系数、强度系数。以一个合格的开发者的日常工作来作为衡量的基准,举一个例子:
衡量基准:合格开发者的日常工作
任务名称:冒泡排序算法
任务内容:编写代码,提供详细注释,提供充分的测试case(事例)
难度系数:1
强度系数:1
完成时长:2小时。一个小时编码和写注释,半个小时提供测试case(事例),半个小时完成测试
等效劳动时间:2*1*1=2
通过202a-202d可以将子代码的等效劳动时间限制为不超过预设等效劳动时间阈值,如预设等效劳动时间阈值为2小时,也就意味着,一个子代码的等效劳动时间不能超过2个小时。从而保证每一个子代码的奖励值可以有一个限制,可以避免一些恶意的攻击,导致一个子代码获得过多的奖励值。
203:按照预设等效劳动时间与奖励值对应关系,为每个子代码的所有者分配相应的奖励值。
具体地,可以根据具体应用场景设置奖励值为何种,如可以是token(令牌)。
其中,预设等效劳动时间与奖励值对应关系包括:
在预设时间范围内,每单位等效劳动时间对应的奖励值;其中,每单位等效劳动时间对应的奖励值随着时间的推移递减。
单位等效劳动时间:对特定行业或特定职业,大致等于行业平均一小时劳动产出。每单位等效劳动时间对应的奖励值,例如:设置单位(一小时等)等效劳动时间对应的奖励值为100个token。另外,如果token总量固定,随着时间的推移,那么token的奖励应该是越来越少,比如,一年后,设置单位(一小时等)等效劳动时间对应的奖励值为50个token。
进一步地,参见图4,获取区块代码加入区块链请求之前,还包括:
204:对区块代码进行社区共识测试。
区块代码的提交和确认,时间比较长,需要通过社区(一般指通用群体)达成共识后再生效。比如,开发者提交了源代码,一段时间后才有测试工程师填上完整测试案例,然后开始有专家独立评审,独立打分,获得一定数量(可以根据实际应用场景设置,例如6个)以上专家认可的代码,并且在社区中经过一段时间的公示无异议,才开始打包进区块链中。
205:如果区块代码通过社区共识测试,则发送加入区块链请求。
进一步地,参见图5,按照预设等效劳动时间与奖励值对应关系,为每个子代码的所有者分配相应的奖励值之后,还包括:
206:按照预设奖励分配比例,每个子代码的所有者将每个子代码相应的奖励值分配给预设协同者。
具体地,每个子代码的所有者按照预设奖励分配比例,为协同完成这个子代码的协同者(包括提供数据打包服务器的人)分配相应的奖励值。分配的比例,可以由社区共同确定,也可以由子代码的所有者(也即是源代码提交者)做一个预设奖励分配比例,关键在于其他协同者愿意接受这个预设奖励分配比例。如果没有人愿意接受这个预设奖励分配比例,提交者也不会得到奖励值。
比如,其中一个预设奖励分配比例:
a.40%,源代码的编写工作
b.30%,源代码的测试工作,包括测试案例的编写
c.10%,源代码的标注工作
d.20%,源代码的审核工作,需要至少6个,不超过10个的评审员的意见。评审员平分收益。
进一步地,参见图6,当区块代码加入区块链之后,该方法还包括:
207:获取区块代码的调用指令,以及为调用区块代码所支付的奖励值。
其中,为调用区块代码所支付的奖励值与区块代码中所有的子代码的总的等效劳动时间相对应。
当区块代码在被调用时,也会获得相应的奖励值。因为区块代码在被调用时,区块代码中的所有子代码的等效劳动时间已经计算过了,所以调用者可以很容易得到区块代码中所有的子代码的总的等效劳动时间,按照总的等效劳动时间为区块代码支付奖励值。
208:将为调用区块代码所支付的奖励值,按照区块代码中每个子代码的等效劳动时间,分配给组成区块代码的每个子代码的所有者。
区块代码中的子代码在静态完成阶段和动态执行阶段都会分配相应的奖励值,其中,静态完成阶段和被调用动态执行阶段中为每个子代码的所有者分配奖励值的分配方案可以相同,也可以不同。
一般采用静态完成阶段和被调用动态执行阶段一致的分配方案。例如:一个区块代码1(由子代码a和子代码b组成)的所有者,开发了子代码a,调用了子代码b。子代码a的等效劳动时间为1token,子代码b的等效劳动时间为2token,静态完成阶段达成共识后,子代码a的所有者可以获得1token,子代码b的所有者可以获得2token。当有人需要使用区块代码1,调用区块代码1进入动态执行阶段,区块代码1的调用者需要支付3token,1token分配给区块代码1(也即子代码a的所有者),2token分配给子代码b的所有者。
本发明实施例所述的实现共识算法的方法,通过等效劳动时间为人类的劳动做出合理的评估,从而给出适当的回报,让共识算法更公平,有利用区块链的广泛应用。如果某个子代码的等效劳动时间计算值大于等于预设等效劳动时间阈值,则将预设等效劳动时间阈值作为某个子代码的等效劳动时间,可以保证每个代码的等效劳动时间不超过一定的值,避免一些恶意的攻击,导致一个代码的等效劳动时间过长,得到过多的奖励值。在预设时间范围内,每单位等效劳动时间对应的奖励值,其中,每单位等效劳动时间对应的奖励值随着时间的推移递减,如果奖励值的总量固定,随着时间的推移,那么奖励值应该是越来越少,直到最后,从而保证了奖励值的价值。将为调用区块代码所支付的奖励值,按照区块代码中每个子代码的等效劳动时间,分配给区块代码的每个子代码的所有者,可以保证当某个服务,依赖了其他几个服务,那这几个服务,也可以在被调用过程中再获得一部分的收益,同样的,每个服务,都会依赖一些底层的服务,收益层层分配下去,自动运行,保证收益最后分配到相关的贡献者。
实施例三
参见图7,本发明实施例提供了一种实现共识算法的装置,该装置包括:
第一获取模块301,用于获取区块代码加入区块链请求;
第二获取模块302,用于获取组成区块代码的每个子代码的等效劳动时间;
第一分配模块303,用于按照预设等效劳动时间与奖励值对应关系,为每个子代码的所有者分配相应的奖励值。
进一步地,第二获取模块302包括:
计算单元,用于根据预设等效劳动时间计算公式,分别计算得到每个子代码的等效劳动时间计算值;
判断单元,用于分别判断每个子代码的等效劳动时间计算值是否小于预设等效劳动时间阈值;
第一处理单元,用于如果某个子代码的等效劳动时间计算值小于预设等效劳动时间阈值,则将某个子代码的等效劳动时间计算值作为某个子代码的等效劳动时间;
第二处理单元,用于如果某个子代码的等效劳动时间计算值大于等于预设等效劳动时间阈值,则将预设等效劳动时间阈值作为某个子代码的等效劳动时间。
进一步地,预设等效劳动时间计算公式为:
子代码的难度系数、子代码的强度系数与子代码对应的完成时长的乘积。
进一步地,预设等效劳动时间与奖励值对应关系包括:
在预设时间范围内,每单位等效劳动时间对应的奖励值;其中,每单位等效劳动时间对应的奖励值随着时间的推移递减。
进一步地,参见图8,装置还包括:
测试模块304,用于获取区块代码加入区块链请求之前,对区块代码进行社区共识测试;
发送模块305,用于如果区块代码通过社区共识测试,则发送加入区块链请求。
进一步地,参见图9,装置还包括:
第二分配模块306,用于按照预设奖励分配比例,每个子代码的所有者将每个子代码相应的奖励值分配给预设协同者。
进一步地,参见图10,装置还包括:
处理模块307,用于当区块代码加入区块链之后,获取区块代码的调用指令,以及为调用区块代码所支付的奖励值,其中,为调用区块代码所支付的奖励值与区块代码中所有的子代码的总的等效劳动时间相对应;
第三分配模块308,用于将为调用区块代码所支付的奖励值,按照区块代码中每个子代码的等效劳动时间,分配给区块代码的每个子代码的所有者。
本发明实施例所述的实现共识算法的装置,通过等效劳动时间为人类的劳动做出合理的评估,从而给出适当的回报,让共识算法更公平,有利用区块链的广泛应用。如果某个子代码的等效劳动时间计算值大于等于预设等效劳动时间阈值,则将预设等效劳动时间阈值作为某个子代码的等效劳动时间,可以保证每个代码的等效劳动时间不超过一定的值,避免一些恶意的攻击,导致一个代码的等效劳动时间过长,得到过多的奖励值。在预设时间范围内,每单位等效劳动时间对应的奖励值,其中,每单位等效劳动时间对应的奖励值随着时间的推移递减,如果奖励值的总量固定,随着时间的推移,那么奖励值应该是越来越少,直到最后,从而保证了奖励值的价值。将为调用区块代码所支付的奖励值,按照区块代码中每个子代码的等效劳动时间,分配给区块代码的每个子代码的所有者,可以保证当某个服务,依赖了其他几个服务,那这几个服务,也可以在被调用过程中再获得一部分的收益,同样的,每个服务,都会依赖一些底层的服务,收益层层分配下去,自动运行,保证收益最后分配到相关的贡献者。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。