Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        // 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);
        }
Exemplo n.º 3
0
        // 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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        // 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);
        }