Пример #1
0
        public uint NBitcoinStyle_CalculateNextWorkRequired(BlockHeader header, uint lastRetargetTime)
        {
            if (_nbitcoin_consensus.PowNoRetargeting)
            {
                return(header.Bits);
            }

            // Limit adjustment step
            var nActualTimespan = TimeSpan.FromSeconds(header.TimeStamp - lastRetargetTime);

            if (nActualTimespan < TimeSpan.FromTicks(_nbitcoin_consensus.PowTargetTimespan.Ticks / 4))
            {
                nActualTimespan = TimeSpan.FromTicks(_nbitcoin_consensus.PowTargetTimespan.Ticks / 4);
            }
            if (nActualTimespan > TimeSpan.FromTicks(_nbitcoin_consensus.PowTargetTimespan.Ticks * 4))
            {
                nActualTimespan = TimeSpan.FromTicks(_nbitcoin_consensus.PowTargetTimespan.Ticks * 4);
            }

            // Retarget
            var bnNew = new NBitcoin_Target(header.Bits).ToBigInteger();
            var cmp   = new NBitcoin_Target(bnNew).ToCompact();

            bnNew = bnNew * (new BigInteger((long)nActualTimespan.TotalSeconds));
            bnNew = bnNew / (new BigInteger((long)_nbitcoin_consensus.PowTargetTimespan.TotalSeconds));
            var newTarget = new NBitcoin_Target(bnNew);

            if (newTarget > _nbitcoin_consensus.PowLimit)
            {
                newTarget = _nbitcoin_consensus.PowLimit;
            }

            return(newTarget.ToCompact());
        }
Пример #2
0
        public NBitcoin.Target NBitcoinCalculateNextWorkRequired(BlockHeader header, uint lastRetargetTime)
        {
            NBitcoin.Consensus consensus = NBitcoin.Network.Main.Consensus;

            // Limit adjustment step
            var nActualTimespan = TimeSpan.FromSeconds(header.TimeStamp - lastRetargetTime);

            if (nActualTimespan < TimeSpan.FromTicks(consensus.PowTargetTimespan.Ticks / 4))
            {
                nActualTimespan = TimeSpan.FromTicks(consensus.PowTargetTimespan.Ticks / 4);
            }
            if (nActualTimespan > TimeSpan.FromTicks(consensus.PowTargetTimespan.Ticks * 4))
            {
                nActualTimespan = TimeSpan.FromTicks(consensus.PowTargetTimespan.Ticks * 4);
            }

            // Retarget
            var  bnNew = new NBitcoin.Target(header.Bits).ToBigInteger();
            uint cmp   = new NBitcoin.Target(bnNew).ToCompact();

            bnNew = bnNew * (new BigInteger((long)nActualTimespan.TotalSeconds));
            bnNew = bnNew / (new BigInteger((long)consensus.PowTargetTimespan.TotalSeconds));
            var newTarget = new NBitcoin.Target(bnNew);

            if (newTarget > consensus.PowLimit)
            {
                newTarget = consensus.PowLimit;
            }

            return(newTarget);
        }
Пример #3
0
 public void Setup()
 {
     _t1     = new MS_Target(_perfectCompactValue);
     _nt1    = new NBitcoin_Target(_perfectCompactValue);
     _header = new BlockHeader
     {
         TimeStamp = _blockTime,
         Bits      = _bits
     };
 }
Пример #4
0
        public void NBitcoinCalculateNextWorkRequiredTest(uint lastRetargetTime, int height, uint blockTime, uint bits, uint expectedResult)
        {
            var header = new BlockHeader
            {
                TimeStamp = blockTime,
                Bits      = bits
            };

            NBitcoin.Target result = NBitcoinCalculateNextWorkRequired(header, lastRetargetTime);
            Assert.Equal(expectedResult, result.ToCompact());
        }