public static bool IsIrreversible(Consensus consensus, Block blk, List <Block> blks2 = null) { double t_1max = consensus.GetRuleCount(blk.height - 1); double t_2max = consensus.GetRuleCount(blk.height + 1); double t_1num = consensus.GetBlockLinkCount(blk); double t_2num = consensus.GetBlockBeLinkCount(blk, blks2); double weight1 = (Math.Min(Get2F1(t_1max), t_1num) + (t_1max * Math.Min(Get2F1(t_2max), t_2num))); double weight2 = Get2F1(t_1max) + (t_1max * Get2F1(t_2max)); return(weight1 >= weight2); }
// Block权重公式: T2_weight = MIN(2/3*T1max,T1num) + 0.5f*(diff) + T1max*MIN(2/3*T3max,T3num) // 权重最大的块胜出为主块 static public double GetBlockWeight(Consensus consensus, Block blk, List <Block> blks2 = null, bool belink = true) { double t_1max = consensus.GetRuleCount(blk.height - 1); double t_2max = consensus.GetRuleCount(blk.height + 1); double t_1num = consensus.GetBlockLinkCount(blk); double t_2num = belink ? consensus.GetBlockBeLinkCount(blk, blks2) : 0; double fDiff = blk.GetDiff(); double weight = (Math.Min(Get2F1(t_1max), t_1num) + fDiff + (t_1max * Math.Min(Get2F1(t_2max), t_2num))); return(weight); }
// Block权重公式: T2_weight = MIN(2/3*T1max,T1num) + 0.5f*(diff) + T1max*MIN(2/3*T3max,T3num) // 权重最大的块胜出为主块 static public double GetBlockWeight(Consensus consensus, Block blk, List <Block> blks2 = null, bool belink = true) { double t_1max = consensus.GetRuleCount(blk.height - 1); double t_2max = consensus.GetRuleCount(blk.height + 1); // GetBlockLinkCount这个如果缺块的链接块判断为主块 但是最后发现他无法拉取到这个块该怎么办? by sxh double t_1num = consensus.GetBlockLinkCount(blk); double t_2num = belink ? consensus.GetBlockBeLinkCount(blk, blks2) : 0; double fDiff = blk.GetDiff(); // 被引用是,是引用为主块的 标记 double weight = (Math.Min(Get2F1(t_1max), t_1num) + fDiff + (t_1max * Math.Min(Get2F1(t_2max), t_2num))); return(weight); }
public static bool IsIrreversible(Consensus consensus, Block blk, List <Block> blks2 = null) { // 假如有2个抵押节点 2 double t_1max = consensus.GetRuleCount(blk.height - 1); // 假如有2个抵押节点 2 double t_2max = consensus.GetRuleCount(blk.height + 1); // 获取块链接别人的链接数 假设有两个节点 2 double t_1num = consensus.GetBlockLinkCount(blk); // 获取块被链接为主块的链接数 2 double t_2num = consensus.GetBlockBeLinkCount(blk, blks2); // T周期块的权重 double weight1 = (Math.Min(Get2F1(t_1max), t_1num) + (t_1max * Math.Min(Get2F1(t_2max), t_2num))); // T周期-满足2F+1块最小权重 double weight2 = Get2F1(t_1max) + (t_1max * Get2F1(t_2max)); return(weight1 >= weight2); }
// Block权重公式: T2_weight = MIN(2/3*T1max,T1num) + 0.5f*(diff) + T1max*MIN(2/3*T3max,T3num) // 权重最大的块胜出为主块 static public double GetBlockWeight(Consensus consensus, Block blk, List <Block> blks2 = null, bool belink = true) { if (blk.height >= 88380) // Smartx 3.1.1 Fix { if (!consensus.IsRule(blk.height, blk.Address)) { return(0); } } double t_1max = consensus.GetRuleCount(blk.height - 1); double t_2max = consensus.GetRuleCount(blk.height + 1); double t_1num = consensus.GetBlockLinkCount(blk); double t_2num = belink ? consensus.GetBlockBeLinkCount(blk, blks2) : 0; double fDiff = blk.GetDiff(); double weight = (Math.Min(Get2F1(t_1max), t_1num) + fDiff + (t_1max * Math.Min(Get2F1(t_2max), t_2num))); return(weight); }