private Dictionary <byte[], Tuple <long, LargeInteger> > ProcessBalanceDiff(Direction direction, List <Block> blocks, Dictionary <byte[], Tuple <long, LargeInteger> > previousDiff = null) { var ret = previousDiff ?? new Dictionary <byte[], Tuple <long, LargeInteger> >(new ByteArrayComparer()); var transactions = new List <Transaction>(); foreach (var block in blocks) { foreach (var transaction in block.Transactions) { transactions.Add(transaction); } } foreach (var block in blocks) { if (block.Height == 0) { continue; } ret = balanceLedger.RewardMiner(block.MinerAddress, direction, ret); if (ret == null) { break; } } if (ret != null) { ret = balanceLedger.CreateDiff(transactions, direction, ret); } return(ret); }
public ChainManager(BalanceLedger ledger) { balanceLedger = ledger; var files = Directory.EnumerateFiles("chains"); if (!File.Exists(@"chains\main")) { main = new Chain(); main.AddBlock(Block.Genesis); balanceLedger.ApplyDiff(balanceLedger.RewardMiner(new byte[33], Direction.Forward)); } else { foreach (var filename in files) { if (filename == @"chains\main") { main = new Chain("main"); } else { forks.Add(new Chain(filename.Split(@"\")[1])); } } } }