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"); }
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); }
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"); }
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)); }
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); }
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")); }
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); }