コード例 #1
0
        private IJob GetNewJob()
        {
            try
            {
                var blockTemplate = _daemonClient.GetBlockTemplate(_poolConfig.Coin.Options.BlockTemplateModeRequired);

                // TODO: convert generation transaction to ioc & DI based.
                var generationTransaction = new GenerationTransaction(ExtraNonce, _daemonClient, blockTemplate, _poolConfig);
                generationTransaction.Create();

                // create the job notification.
                var job = new Job(_jobCounter.Next(), _hashAlgorithm, blockTemplate, generationTransaction)
                {
                    CleanJobs = true // tell the miners to clean their existing jobs and start working on new one.
                };

                _jobTracker.Add(job);

                return(job);
            }
            catch (RpcException rpcException)
            {
                _logger.Error("New job creation failed: {0:l}", rpcException.Message);
                return(null);
            }
        }
コード例 #2
0
        public void CreateGenerationTransactionTest()
        {
            // create the test object.
            var generationTransaction = new GenerationTransaction(_extraNonce, _blockTemplate, _poolConfig);

            // create the transaction
            generationTransaction.Create();

            // test version.
            generationTransaction.Version.Should().Equal((UInt32)2);
            generationTransaction.Initial.Take(4).ToHexString().Should().Equal("02000000");

            // test the outputs buffer
            generationTransaction.Final.Skip(18).Take(69).ToHexString().Should().Equal("0280010b27010000001976a914329035234168b8da5af106ceb20560401236849888ac80f0fa02000000001976a9147d576fbfca48b899dc750167dd2a2a6572fff49588ac");

            // test the lock time
            generationTransaction.LockTime.Should().Equal((UInt32)0x00);
            generationTransaction.Final.Skip(87).Take(4).ToHexString().Should().Equal("00000000");

            // test the generation transaction initial part.
            generationTransaction.Initial.ToHexString().Should().Equal("02000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2703be9d04062f503253482f04c3e89a5308");

            // test the generation transaction final part.
            generationTransaction.Final.ToHexString().Should().Equal("0d2f6e6f64655374726174756d2f000000000280010b27010000001976a914329035234168b8da5af106ceb20560401236849888ac80f0fa02000000001976a9147d576fbfca48b899dc750167dd2a2a6572fff49588ac00000000");
        }
コード例 #3
0
        public void CreateGenerationTransactionTest()
        {
            // create the test object.
            var generationTransaction = new GenerationTransaction(_extraNonce, _daemonClient, _blockTemplate, _poolConfig);

            // use the exactly same input script data within our sample data.
            generationTransaction.Inputs.First().SignatureScript = _signatureScript;
            generationTransaction.Outputs = _outputs;

            // create the transaction
            generationTransaction.Create();

            // test version.
            generationTransaction.Version.Should().Equal((UInt32)2);
            generationTransaction.Initial.Take(4).ToHexString().Should().Equal("02000000");

            // test inputs count.
            generationTransaction.InputsCount.Should().Equal((UInt32)1);
            generationTransaction.Initial.Skip(4).Take(1).Should().Equal(new byte[] { 0x01 });

            // test the input previous-output hash
            generationTransaction.Initial.Skip(5).Take(32).ToHexString().Should().Equal("0000000000000000000000000000000000000000000000000000000000000000");

            // test the input previous-output index
            generationTransaction.Inputs.First().PreviousOutput.Index.Should().Equal(0xffffffff);
            generationTransaction.Initial.Skip(37).Take(4).ToHexString().Should().Equal("ffffffff");

            // test the lenghts byte
            generationTransaction.Inputs.First().SignatureScript.Initial.Length.Should().Equal(17);
            _extraNonce.ExtraNoncePlaceholder.Length.Should().Equal(8);
            generationTransaction.Inputs.First().SignatureScript.Final.Length.Should().Equal(14);
            generationTransaction.Initial.Skip(41).Take(1).ToHexString().Should().Equal("27");

            // test the signature script initial
            generationTransaction.Initial.Skip(42).Take(17).ToHexString().Should().Equal("03be9d04062f503253482f04c3e89a5308");

            // test the signature script final
            generationTransaction.Final.Take(14).ToHexString().Should().Equal("0d2f6e6f64655374726174756d2f");

            // test the inputs sequence
            generationTransaction.Inputs.First().Sequence.Should().Equal((UInt32)0x00);
            generationTransaction.Final.Skip(14).Take(4).ToHexString().Should().Equal("00000000");

            // test the outputs buffer
            generationTransaction.Final.Skip(18).Take(69).ToHexString().Should().Equal("0280010b27010000001976a914329035234168b8da5af106ceb20560401236849888ac80f0fa02000000001976a9147d576fbfca48b899dc750167dd2a2a6572fff49588ac");

            // test the lock time
            generationTransaction.LockTime.Should().Equal((UInt32)0x00);
            generationTransaction.Final.Skip(87).Take(4).ToHexString().Should().Equal("00000000");

            // test the generation transaction initial part.
            generationTransaction.Initial.ToHexString().Should().Equal("02000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2703be9d04062f503253482f04c3e89a5308");

            // test the generation transaction final part.
            generationTransaction.Final.ToHexString().Should().Equal("0d2f6e6f64655374726174756d2f000000000280010b27010000001976a914329035234168b8da5af106ceb20560401236849888ac80f0fa02000000001976a9147d576fbfca48b899dc750167dd2a2a6572fff49588ac00000000");
        }
コード例 #4
0
        private IJob GetNewJob()
        {
            try
            {
                _logger.Verbose("Trying to get new BlockTemplate... (2)");

                var blockTemplate = _daemonClient.GetBlockTemplate(_poolConfig.Coin.Options.BlockTemplateModeRequired);

                MetronomeTracker.CurrentMetronomeHash = blockTemplate.MetronomeHash;

                if (metronomeActive && BigInteger.Parse(blockTemplate.MetronomeHash, System.Globalization.NumberStyles.HexNumber).IsZero)
                {
                    if (_jobTracker.Current != null)
                    {
                        _jobTracker.Current.CleanJobs = true;
                        SendSleepSignal();
                    }
                    return(null);
                }

                _logger.Information("NEW Metro Hash: {0}", blockTemplate.MetronomeHash);

                // TODO: convert generation transaction to ioc & DI based.
                var generationTransaction = new GenerationTransaction(ExtraNonce, _daemonClient, blockTemplate, _poolConfig);
                generationTransaction.Create();

                // create the job notification.
                var job = new Job(_jobCounter.Next(), _hashAlgorithm, blockTemplate, generationTransaction)
                {
                    CleanJobs = true // tell the miners to clean their existing jobs and start working on new one.
                };

                _jobTracker.Add(job);

                return(job);
            }
            catch (RpcException rpcException)
            {
                /*if (rpcException.Message.Equals("Miners are sleeping", StringComparison.OrdinalIgnoreCase))
                 * {
                 *  _logger.Information("Miners ae sleeping");
                 *  Thread.Sleep(1000);
                 *  continue;
                 * }*/
                _logger.Error("New job creation failed: {0:l}", rpcException.Message);
                return(null);
            }
        }
コード例 #5
0
        protected override void DescribeYourself()
        {
            _logger.Debug(
                "\nCoinbaseInitial={0}\nCoinbaseFinal={1}\nCreationTime={2}\n" +
                "Difficulty={3}\nEncodedDifficulty={4}\nNTime={5}\n" +
                "PreviousBlockHash={6}\nPreviousBlockHashReversed={7}\nVersion={8}",
                CoinbaseInitial,
                CoinbaseFinal,
                CreationTime,
                Difficulty,
                EncodedDifficulty,
                NTime,
                PreviousBlockHash,
                PreviousBlockHashReversed,
                Version
                );
            //LogMeSafely(Target, "Target");
            _logger.Debug("Target={0}", BitConverter.ToString(Target.ToByteArray()).Replace("-", string.Empty));

            MerkleTree.DescribeYourselfSafely();
            BlockTemplate.DescribeYourselfSafely();
            GenerationTransaction.DescribeYourselfSafely();
        }