public static void Findstake(Options o) { var blockRepository = new BlockRepository(); var transactionRepository = new TransactionRepository(blockRepository); var rpcclient = new RPCClient("http://127.0.0.1:" + o.Port, o.User, o.Password); var parser = new BlockChainParser(rpcclient, blockRepository, transactionRepository); var blockcount = rpcclient.GetBlockCount(); var difficulty = rpcclient.GetDifficulty().pos; if (blockcount < 999) { Console.WriteLine("Not connected to wallet" + blockcount); return; } var unspents = new List <UnspentTransactionData>(); var templates = new List <MintTemplate>(); try { var listunspents = JsonConvert.DeserializeObject <List <Unspent> >(File.ReadAllText(System.IO.Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + o.FileListUnspent)); unspents = listunspents .Select(unspent => new UnspentTransactionData { txid = unspent.txid, vout = unspent.vout, address = unspent.address }) .ToList(); Console.WriteLine(""); Console.Write("Importing blocks"); using (var progress = new ProgressBar()) { var max = unspents.Count; var counter = 0; unspents.ForEach(unspent => { unspent.blockhash = parser.GetBlockHash(unspent.txid); unspent.blockheight = parser.Parse(unspent.blockhash); parser.Parse(unspent.blockhash); progress.Report((double)counter / max); counter++; }); } float minMarginDifficulty = 2.0f; Console.WriteLine(""); Console.Write("Importing adresses"); using (var progress = new ProgressBar()) { var addresses = unspents.Select(un => un.address).Distinct().ToList(); var max = addresses.Count; var counter = 0; addresses.ForEach(address => { progress.Report((double)counter / max); var unspentsbyaddress = transactionRepository.GetUnspents(address); unspentsbyaddress.ForEach(unspent => { var m = new MintTemplate( unspent.Id, address, unspent.BlockFromTime, unspent.PrevTxOffset, unspent.PrevTxTime, unspent.PrevTxOutIndex, (uint)unspent.PrevTxOutValue); m.SetBitsWithDifficulty(((Convert.ToSingle(difficulty) - minMarginDifficulty))); if (templates.All(t => t.Id != m.Id)) { templates.Add(m); } }); counter++; }); } } catch (Exception) { //show error Console.WriteLine("Loading " + System.IO.Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + o.FileListUnspent + " listunspent data not succeeded"); return; } Console.WriteLine(""); Console.Write("Loading stakemodifiers"); using (var progress = new ProgressBar()) { var start = blockcount - (6 * 24 * 31) - 10; var end = blockcount; for (uint i = start; i < end; i++) { progress.Report((double)(i - start) / (end - start)); parser.Parse(i); } } var lastblock = blockRepository.GetBlockState(blockcount - 6); //not the very last var lastblocktime = lastblock.bt; var blockModifiers = blockRepository.GetStakeModifiers(lastblock.h); var currentTime = ConvertToUnixTimestamp(DateTime.UtcNow); var results = new List <CheckStakeResult>(); var resultsStakes = new List <PossibleStake>(); Console.WriteLine(""); Console.Write("Searching"); using (var progress = new ProgressBar()) { var start = currentTime; var end = lastblocktime + PeercoinConstants.Findstakelimit; for (uint timestamp = start; timestamp < end; timestamp++) { progress.Report((double)(timestamp - start) / (end - start)); var modifier = Mint.GetModifier(blockModifiers, timestamp); foreach (var template in templates) { var result = Mint.CheckStakeKernelHash(template, timestamp, modifier.Value); if (result.success) { if (results.All(r => r.Id != template.Id && r.txTime != timestamp)) { Console.WriteLine(" " + template.OfAddress + ": " + ConvertFromUnixTimestamp(timestamp) + " difficulty: " + result.minimumDifficulty.ToString("0.00")); results.Add(new CheckStakeResult() { Id = template.Id, OfAddress = template.OfAddress, minimumDifficulty = result.minimumDifficulty, txTime = timestamp }); resultsStakes = Enrich(resultsStakes, templates, results); ExportResults(resultsStakes, results); } } } } } Console.WriteLine("Done"); if (results.Count > 0) { Console.WriteLine("Findstake results exported to StakeDates.csv"); } }//end