Пример #1
0
 internal Work(DifficultyTarget target, IReadOnlyList <byte> header, ShareSubmitInfo info, ulong nonceBase)
 {
     this.target    = target;
     this.header    = header;
     this.info      = info;
     this.nonceBase = nonceBase;
     uniq           = System.Threading.Interlocked.Increment(ref next);
 }
Пример #2
0
        public void GivingTargetIsNotEnough()
        {
            var uut    = new WorkGenerator();
            var target = new DifficultyTarget();

            uut.SetTarget(target); // nonsensical difficulty... but that's still enough for it
            Assert.Throws <InvalidOperationException>(() => uut.WannaConsume(0));
        }
Пример #3
0
        public void ConsumingZeroThrows()
        {
            var uut    = new WorkGenerator();
            var target = new DifficultyTarget();

            uut.SetHeader(DummySubmit, new byte[] { 1 });
            uut.SetTarget(target);
            Assert.Throws <ArgumentException>(() => uut.WannaConsume(0));
        }
Пример #4
0
        public void ReadyWhenHeaderAndDiffProvided()
        {
            var uut    = new WorkGenerator();
            var target = new DifficultyTarget();

            uut.SetHeader(DummySubmit, new byte[] { 1 });
            uut.SetTarget(target);
            Assert.False(uut.Empty);
        }
Пример #5
0
        static WorkGenerator MakeFedWorkGenerator()
        {
            var gen    = new WorkGenerator();
            var target = new DifficultyTarget();

            gen.SetHeader(DummySubmit, new byte[] { 1 });
            gen.SetTarget(target);
            return(gen);
        }
Пример #6
0
        public void ReadyCanBeInterrupted()
        {
            var uut    = new WorkGenerator();
            var target = new DifficultyTarget();

            uut.SetHeader(DummySubmit, new byte[] { 1 });
            uut.SetTarget(target);
            uut.Stop();
            Assert.True(uut.Empty);
        }
Пример #7
0
        public void InterruptedIsReadyWithJustHeader()
        {
            var uut    = new WorkGenerator();
            var target = new DifficultyTarget();

            uut.SetHeader(DummySubmit, new byte[] { 1 });
            uut.SetTarget(target);
            uut.Stop();
            uut.SetHeader(DummySubmit, new byte[] { 2 });
            Assert.False(uut.Empty);
        }
Пример #8
0
        public void ConsumingBurnsRequestedNonces()
        {
            var target = new DifficultyTarget();
            var uut    = new WorkGenerator();
            var hdr    = new byte[] { 1 };
            var info   = DummySubmit;

            uut.SetHeader(info, hdr);
            uut.SetTarget(target);
            var work = uut.WannaConsume(1);

            Assert.Equal(1u, uut.ConsumedNonces);
            Assert.Same(work.target, target);
            Assert.Same(work.header, hdr); // and be careful, to save on copies it takes references to everything.
            Assert.Same(work.info, info);
        }
Пример #9
0
        private void ___writeHeader(Stream stream)
        {
            // try for cached write first
            byte[] cachedHeader = getCachedHeader();
            if (cachedHeader != null)
            {
                stream.Write(cachedHeader);
                return;
            }

            EnsureParsedHeader();
            stream.Write(Version.ToByteArrayLe());
            stream.Write(PreviousBlockHash.Bytes.ReverseBytes());
            stream.Write(MerkleRoot.Bytes.ReverseBytes());
            stream.Write(TimeSeconds.ToByteArrayLe());
            stream.Write(DifficultyTarget.ToByteArrayLe());
            stream.Write(Nonce.ToByteArrayLe());
        }
Пример #10
0
 internal void SetTarget(DifficultyTarget target) => this.target = target;