예제 #1
0
        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]));
                    }
                }
            }
        }
예제 #2
0
        public Miner(BalanceLedger balanceLedger, TransactionPool transactionPool, ChainManager chainManager)
        {
            _balanceLedger   = balanceLedger;
            _transactionPool = transactionPool;
            _chainManager    = chainManager;

            var minerAddressBytes = HexConverter.ToBytes(Program.Settings.minerAddr);

            if (minerAddressBytes != null && minerAddressBytes.Length < 34)
            {
                minerAddress = ByteManipulator.BigEndianTruncate(minerAddressBytes, 33);
                Console.WriteLine($"[Miner] Miner initialized with address {HexConverter.ToPrefixString(minerAddress)}");
            }
            else
            {
                Console.WriteLine("[Miner] Warning: Invalid address. Miner initialized with address 0x0");
                minerAddress = new byte[33];
            }
        }
예제 #3
0
 public TransactionPool(BalanceLedger balanceLedger)
 {
     _balanceLedger = balanceLedger;
 }