Ejemplo n.º 1
0
        public void ZCashJob_Testnet_Validate_FoundersRewardAddress_At_Height()
        {
            var job = new ZCashJob();

            var bt = new ZCashBlockTemplate
            {
                Target            = "0000407f43000000000000000000000000000000000000000000000000000000",
                PreviousBlockhash = "000003be5873fc64b1b784318e3226a1ab2a1805bebba5a0d670be54ff7772e8",
                Bits         = "003355",
                Transactions = new BitcoinBlockTransaction[0],
                Subsidy      = new ZCashBlockSubsidy
                {
                    Founders = 2.5m,
                    Miner    = 10m,
                }
            };

            var clock = new MockMasterClock {
                CurrentTime = DateTimeOffset.FromUnixTimeSeconds(1508869874).UtcDateTime
            };

            job.Init(bt, "1", poolConfig, clusterConfig, clock, poolAddressDestination, BitcoinNetworkType.Test,
                     false, 1, 1, sha256d, sha256d, sha256dReverse);

            bt.Height = 1;
            Assert.Equal(job.GetFoundersRewardAddress(), "t2UNzUUx8mWBCRYPRezvA363EYXyEpHokyi");
            bt.Height = 53126;
            Assert.Equal(job.GetFoundersRewardAddress(), "t2NGQjYMQhFndDHguvUw4wZdNdsssA6K7x2");
            bt.Height = 53127;
            Assert.Equal(job.GetFoundersRewardAddress(), "t2ENg7hHVqqs9JwU5cgjvSbxnT2a9USNfhy");
        }
Ejemplo n.º 2
0
        public void BitcoinJob_Should_Accept_Valid_Share()
        {
            var worker = new StratumClient();

            worker.SetContext(new BitcoinWorkerContext
            {
                Difficulty  = 0.5,
                ExtraNonce1 = "01000058",
            });

            var bt = JsonConvert.DeserializeObject <Miningcore.Blockchain.Bitcoin.DaemonResponses.BlockTemplate>(
                "{\"Version\":536870912,\"PreviousBlockhash\":\"000000000909578519b5be7b37fdc53b2923817921c43108a907b72264da76bb\",\"CoinbaseValue\":5000000000,\"Target\":\"7fffff0000000000000000000000000000000000000000000000000000000000\",\"NonceRange\":\"00000000ffffffff\",\"CurTime\":1508869874,\"Bits\":\"207fffff\",\"Height\":14,\"Transactions\":[],\"CoinbaseAux\":{\"Flags\":\"0b2f454231362f414431322f\"},\"default_witness_commitment\":null}");

            var job = new BitcoinJob();

            // set clock to job creation time
            var clock = new MockMasterClock {
                CurrentTime = DateTimeOffset.FromUnixTimeSeconds(1508869874).UtcDateTime
            };

            job.Init(bt, "1", poolConfig, clusterConfig, clock, poolAddressDestination, Network.RegTest,
                     false, 1, sha256d, sha256d, sha256dReverse);

            // set clock to submission time
            clock.CurrentTime = DateTimeOffset.FromUnixTimeSeconds(1508869907).UtcDateTime;

            var(share, blockHex) = job.ProcessShare(worker, "01000000", "59ef86f2", "8d84ae6a");

            Assert.NotNull(share);
            Assert.True(share.IsBlockCandidate);
            Assert.Equal(share.BlockHash, "601ed85039804bcecbbdb53e0ca358aeb8dabef2366fb64c216aac3aba02b716");
            Assert.Equal(blockHex, "00000020bb76da6422b707a90831c421798123293bc5fd377bbeb5198557090900000000fd5418fe788ef961678e4bacdd1fe3903185b9ec63865bb3d2d279bb0eb48c0bf286ef59ffff7f206aae848d0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff295e0c0b2f454231362f414431322f04f286ef590001000058010000000c2f4d696e696e67436f72652f000000000100f2052a010000001976a9142ebb5cccf9a6bb927661d2953655c43c04accc3788ac00000000");
            Assert.Equal(share.BlockHeight, 14);
            Assert.Equal(share.Difficulty, 0.5);
        }
Ejemplo n.º 3
0
        public void ZCashJob_Testnet_Validate_FoundersRewardAddress_At_Height()
        {
            var job = new EquihashJob();

            var bt = new EquihashBlockTemplate
            {
                Target            = "0000407f43000000000000000000000000000000000000000000000000000000",
                PreviousBlockhash = "000003be5873fc64b1b784318e3226a1ab2a1805bebba5a0d670be54ff7772e8",
                Bits         = "003355",
                Transactions = new BitcoinBlockTransaction[0],
                Subsidy      = new ZCashBlockSubsidy
                {
                    Founders = 2.5m,
                    Miner    = 10m,
                }
            };

            var clock = new MockMasterClock {
                CurrentTime = DateTimeOffset.FromUnixTimeSeconds(1508869874).UtcDateTime
            };

            var equihashCoin = poolConfig.Template.As <EquihashCoinTemplate>();
            var chainConfig  = equihashCoin.GetNetwork(ZcashNetworks.Instance.Mainnet.NetworkType);
            var solver       = EquihashSolverFactory.GetSolver(ModuleInitializer.Container, chainConfig.Solver);

            job.Init(bt, "1", poolConfig, clusterConfig, clock, poolAddressDestination, ZcashNetworks.Instance.Testnet, solver);

            bt.Height = 1;
            Assert.Equal(job.GetFoundersRewardAddress(), "t2UNzUUx8mWBCRYPRezvA363EYXyEpHokyi");
            bt.Height = 53126;
            Assert.Equal(job.GetFoundersRewardAddress(), "t2NGQjYMQhFndDHguvUw4wZdNdsssA6K7x2");
            bt.Height = 53127;
            Assert.Equal(job.GetFoundersRewardAddress(), "t2ENg7hHVqqs9JwU5cgjvSbxnT2a9USNfhy");
        }
Ejemplo n.º 4
0
        public void ScryptN_Hash_Should_Throw_On_Null_Input()
        {
            var clock = new MockMasterClock {
                CurrentTime = new DateTime(2017, 10, 16)
            };
            var hasher = new ScryptN(clock);

            Assert.Throws <ArgumentNullException>(() => hasher.Digest(null));
        }
Ejemplo n.º 5
0
        public void ScryptN_Hash()
        {
            var clock = new MockMasterClock {
                CurrentTime = new DateTime(2017, 10, 16)
            };
            var hasher = new ScryptN(clock, new [] { Tuple.Create(2048L, 1389306217L) });
            var result = hasher.Digest(testValue).ToHexString();

            Assert.Equal("75d08b4c639645f3f1e15c7c412160867821441d365a7bbe3edf2c6b852ccb59", result);
        }
Ejemplo n.º 6
0
        public void BitcoinJob_Should_Not_Accept_Invalid_Share()
        {
            var worker = new StratumClient <BitcoinWorkerContext>
            {
                Context = new BitcoinWorkerContext
                {
                    Difficulty  = 0.5,
                    ExtraNonce1 = "01000058",
                }
            };

            var bt = JsonConvert.DeserializeObject <MiningCore.Blockchain.Bitcoin.DaemonResponses.BlockTemplate>(
                "{\"Version\":536870912,\"PreviousBlockhash\":\"000000000909578519b5be7b37fdc53b2923817921c43108a907b72264da76bb\",\"CoinbaseValue\":5000000000,\"Target\":\"7fffff0000000000000000000000000000000000000000000000000000000000\",\"NonceRange\":\"00000000ffffffff\",\"CurTime\":1508869874,\"Bits\":\"207fffff\",\"Height\":14,\"Transactions\":[],\"CoinbaseAux\":{\"Flags\":\"0b2f454231362f414431322f\"},\"default_witness_commitment\":null}");

            var job = new BitcoinJob <MiningCore.Blockchain.Bitcoin.DaemonResponses.BlockTemplate>();

            // set clock to job creation time
            var clock = new MockMasterClock {
                CurrentTime = DateTimeOffset.FromUnixTimeSeconds(1508869874).UtcDateTime
            };

            job.Init(bt, "1", poolConfig, clusterConfig, clock, poolAddressDestination, BitcoinNetworkType.RegTest,
                     false, 1, sha256d, sha256d, sha256dReverse);

            // set clock to submission time
            clock.CurrentTime = DateTimeOffset.FromUnixTimeSeconds(1508869907).UtcDateTime;

            // invalid extra-nonce 2
            Assert.Throws <StratumException>(() => job.ProcessShare(worker, "02000000", "59ef86f2", "8d84ae6a"));

            // make sure we don't accept case-sensitive duplicate shares as basically 0xdeadbeaf = 0xDEADBEAF.
            var share = job.ProcessShare(worker, "01000000", "59ef86f2", "8d84ae6a");

            Assert.Throws <StratumException>(() => job.ProcessShare(worker, "01000000", "59ef86f2", "8D84AE6A"));

            // invalid time
            Assert.Throws <StratumException>(() => job.ProcessShare(worker, "01000000", "69ef86f2", "8d84ae6a"));

            // invalid nonce
            Assert.Throws <StratumException>(() => job.ProcessShare(worker, "01000000", "59ef86f2", "ad84be6a"));

            // valid share data but invalid submission time
            clock.CurrentTime = DateTimeOffset.FromUnixTimeSeconds(1408869907).UtcDateTime;
            Assert.Throws <StratumException>(() => job.ProcessShare(worker, "01000000", "59ef86f2", "8d84ae6a"));
        }
Ejemplo n.º 7
0
        public void BitcoinJob_Should_Accept_Valid_Share()
        {
            var worker = new StratumClient <BitcoinWorkerContext>
            {
                Context = new BitcoinWorkerContext
                {
                    Difficulty  = 0.5,
                    ExtraNonce1 = "01000058",
                }
            };

            var bt = JsonConvert.DeserializeObject <MiningCore.Blockchain.Bitcoin.DaemonResponses.BlockTemplate>(
                "{\"Version\":536870912,\"PreviousBlockhash\":\"000000000909578519b5be7b37fdc53b2923817921c43108a907b72264da76bb\",\"CoinbaseValue\":5000000000,\"Target\":\"7fffff0000000000000000000000000000000000000000000000000000000000\",\"NonceRange\":\"00000000ffffffff\",\"CurTime\":1508869874,\"Bits\":\"207fffff\",\"Height\":14,\"Transactions\":[],\"CoinbaseAux\":{\"Flags\":\"0b2f454231362f414431322f\"},\"default_witness_commitment\":null}");

            var job = new BitcoinJob <MiningCore.Blockchain.Bitcoin.DaemonResponses.BlockTemplate>();

            // set clock to job creation time
            var clock = new MockMasterClock {
                CurrentTime = DateTimeOffset.FromUnixTimeSeconds(1508869874).UtcDateTime
            };

            job.Init(bt, "1", poolConfig, clusterConfig, clock, poolAddressDestination, BitcoinNetworkType.RegTest,
                     new BitcoinExtraNonceProvider(), false, 1, sha256d, sha256d, sha256dReverse);

            // set clock to submission time
            clock.CurrentTime = DateTimeOffset.FromUnixTimeSeconds(1508869907).UtcDateTime;

            var share = job.ProcessShare(worker, "01000000", "59ef86f2", "8d84ae6a");

            Assert.NotNull(share);
            Assert.True(share.IsBlockCandidate);
            Assert.Equal(share.BlockHash, "000000000fccf11cd0b7d9057441e430c320384b95b034bd28092c4553594b4a");
            Assert.Equal(share.BlockHex, "00000020bb76da6422b707a90831c421798123293bc5fd377bbeb51985570909000000008677145722cbe6f1ebec19fecc724cab5487f3292a69f6908bd512f645bb0635f286ef59ffff7f206aae848d0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff295e0c0b2f454231362f414431322f04f286ef590801000058010000000c2f4d696e696e67436f72652f000000000100f2052a010000001976a9142ebb5cccf9a6bb927661d2953655c43c04accc3788ac00000000");
            Assert.Equal(share.BlockHeight, 14);
            Assert.Equal(share.BlockReward, 50);
            Assert.Equal(share.StratumDifficulty, 0.5);
        }