1.一种具有动态信任的委托权益证明共识算法,其特征在于,该算法的实现过程包括:步骤S100、区块链网络为节点定义一个信任值属性Trust和一个评估值属性Evaluation,基于如下公式,对区块链网络中每个节点的信任值t和评估值e进行初始化,e=0,其中,n为区块链网络中节点的数目,t的上标1表示第一个选举周期;
步骤S200、区块链网络基于信任模型和上一选举周期r‑1内的历史交易记录为相关节点计算局部信任值cij,进而计算当前选举周期内每个节点的唯一全局信任值 具体操作为:步骤S210、在区块链网络中,根据节点间的交易关系对n个节点进行划分,对于一个给定的节点nodei,如果任何节点nodej收到一个来自节点nodei的交易,则将节点nodej划分为集合FDTxNodesi,否则将节点nodej划分为集合Non‑FDTxNodesi,同时,如果任何节点nodej有指向nodei的交易,则将其划分为集合RDTxNodesi,其中i、j∈{1,2,3,…,n},且i≠j,步骤S220、对于节点nodei和节点nodej,初始化局部信任值cij=0,步骤S230、对于节点nodei来说,当与节点nodej存在正向直接交易时,根据上一选举周期r‑1内的交易历史记录,查询从节点nodei发向节点nodej的有效交易数量sat(i,j)和无效交易数量unsat(i,j),并计算绝对有效交易数sij,得到节点nodei对节点nodej的局部信任值cij,所述绝对有效交易数sij和局部信任值cij的表达式如下:sij=sat(i,j)‑unsat(i,j),
其中,i∈{1,2,3,…,n},j取值为集合FDTxNodesi中的所有节点,步骤S240、对于节点nodei来说,当与节点nodej不存在正向直接交易时,根据上一选举周期r‑1内的交易历史记录,查询从节点nodei到节点nodej的所有交易路径与中间节点nodek,计算节点nodei对节点nodej的局部信任值cij,局部信任值cij的表达式如下:其中,k∈{1,2,3,...,n},k取值为所有的中间节点,如果k取值为FDTxNodesi∩RDTxNodesj中的所有节点,则按上述表达式计算局部信任值cij,否则迭代选取中间节点nodek,并对局部信任值cij进行迭代计算,步骤S250、对于区块链网络的n个节点nodei,基于节点nodeu对节点nodei的局部信任值cui及上一选举周期r‑1内节点nodeu的全局信任值 得到当前选举周期r内每个节点的唯一全局信任值 所述全局信任值 的表达式如下:其中,i、u∈{1,2,3,...,n},r从第二选举周期开始取值;
步骤S300、基于一个综合考虑投票数与信任值的评估准则f,为每个节点nodei计算一个评估值ei,并根据区块链网络中所有节点的评估值e[]对证人节点进行选择,生成一个证人节点列表WitnessNodes[],具体操作为:步骤S310、定义并初始化一个空的证人节点列表WitnessNodes[]和得票数集合votes[],步骤S320、对于任意节点nodei,如果基于自身权益向认可的节点nodej进行投票,那么nodej的得票数等于投票节点自身所持有币数的总和,所述得票数的表达式如下:votesj=∑coin(nodei),
其中,j∈{1,2,3,...,n},n为区块链网络中节点的数目,coin(nodei)表示节点nodei所持有币的数量,nodei取值为所有对nodej进行过投票的节点,步骤S330、对于区块链网络的n个节点nodei,基于一个综合考虑得票数votesi与当前选举周期r内全局信任值 的评估准则f来计算最新评估值ei,所述评估准则f与评估值ei的表达式如下:其中,i∈{1,2,3,...,n},n为区块链网络中节点的数目,votesi表示节点nodei的得票数,步骤S340、根据所有节点的评估值e[]对节点进行排序,选取前N个节点成为证人节点,加入一个证人节点列表WitnessNodes[];
步骤S400、①证人节点列表中的证人节点轮流生成一个区块,并对块消息进行环签名,具体操作为:* n
步骤S411、区块链网络选取一个大素数p、一个散列函数H:{0,1} →{0,1}、一个随机数α并计算g0=gmod p,得到公共参数params,所述公共参数params的表达式如下:params=<G1,G2,g,g0,p,e>,
其中,G1,G2是两个阶数为p的循环群, 为一个生成元,e:G1×G1→G2是一个双线性配对;
步骤S412、证人节点列表WitnessNodes[]中的所有证人节点自组织形成一个环,证人节点nodei的唯一地址信息Addressi作为其身份信息IDi,组成身份信息集合R={ID1,ID2,...,IDn},步骤S413、针对证人节点列表WitnessNodes[]中的所有证人节点,选择随机数作为证人节点nodei的私钥,并计算 作为证人节点nodei的公钥,其中,i∈{1,2,3,...,n},n为区块链网络中节点的数目;
步骤S414、证人节点列表WitnessNodes[]中的证人节点轮流具有生成块的权利,当前出块节点nodes生成一个块,生成块消息m,所述块消息m的表达式如下:m=<HASH(PreBlock),TimeStamp,D,nonce,MerkleTreeRoot,Txs>,其中,HASH(PreBlock)表示前一个块的哈希,TimeStamp表示时间戳,D表示系统设定的挖矿难度值,nonce表示随机值,MerkleTreeRoot表示Merkle树根,Txs表示一些交易,步骤S415、当前出块节点nodes对整个块信息使用环签名方案生成一个环签名σrs,所述环签名σrs的生成过程如下:(1)计算h=H(m||R),
*
(2)对于i∈{1,2,...,n}\s,s表示当前的出块节点,随机选取zi∈Zp ,对于i∈{1,*
2,...,n},随机选取ri∈Zp,
(3)对于i∈{1,2,...,n}\s,s表示当前的出块节点,计算(4)对于i=s,s表示当前的出块节点,计算
(5)输出对于块消息m的环签名σrs={(σ1,r1),(σ2,r2),..,(σn,rn),m};
②同时广播此块消息到证人节点列表中,其余证人节点对环签名和区块的合法性与有效性进行校验,如果超过50%的证人节点校验通过并回复了确认消息,则此区块达成了共识,将此区块添加到区块链网络中,否则轮到证人节点列表中的下一个证人节点重新执行本步骤。
2.根据权利要求1所述的一种具有动态信任的委托权益证明共识算法,其特征在于,该算法实现过程中,每一选举周期都需要重新进行证人节点的选择,当此选举周期结束并进入下一选举周期时,区块链网络要循环进行步骤S200到步骤S400的操作,重新进行唯一全局信任值的计算、评估值的计算、证人节点的选择、证人节点的出块。
3.根据权利要求1所述的一种具有动态信任的委托权益证明共识算法,其特征在于,执行步骤S400时,将经过签名的块消息广播给证人节点列表中,其余证人节点对环签名和区块的合法性与有效性进行校验,具体操作为:步骤S421、计算h=H(m||R);
步骤S422、验证 是否成立,
若成立,则接受签名,
若不成立,则不接受签名。
4.根据权利要求1所述的一种具有动态信任的委托权益证明共识算法,其特征在于,所述信任模型为EigenTrust信任模型。