Пример #1
0
        public static void BuildNewBlock()
        {
            // start build time
            var startTimer = DateTime.UtcNow;

            // get transaction from pool
            var trxPool = Transaction.GetPool();

            //// get last block to get prev hash and last height
            var lastBlock = GetLastBlock();
            var height    = lastBlock.Height + 1;
            var timestamp = Utils.GetTime();
            var prevHash  = lastBlock.Hash;
            var validator = Stake.GetValidator();


            var transactions = new List <Transaction>(); // JsonConvert.SerializeObject(new List<Transaction>());


            // validator will get coin reward from genesis account
            // to keep total coin in Blockchain not changed
            var conbaseTrx = new Transaction
            {
                Amount = 0,
                // Recipient = "UKC_QPQY9wHP0jxi/0c/YRlch2Uk5ur/T8lcOaawqyoe66o=",
                Recipient = "UkcDrMshfqdHrfckb2SLoSCoG8Lp6MBdrkZ2T83FivTpWC8",
                Fee       = COINT_REWARD,
                TimeStamp = timestamp,
                // Sender = "UKC_rcyChuW7cQcIVoKi1LfSXKfCxZBHysTwyPm88ZsN0BM="
                Sender = "UkcDEfU9gGnm9tGjmFtXRjirf2LuohU5CzjWunEkPNbUcFW",
            };

            if (trxPool.Count() > 0)
            {
                //Get all tx from pool
                conbaseTrx.Recipient = validator;
                //sum all fees and give block creator as reward
                conbaseTrx.Amount = GetTotalFees(trxPool);
                conbaseTrx.Build();

                // add coinbase trx to list
                transactions.Add(conbaseTrx);
                transactions.AddRange(trxPool);

                // clear mempool
                Transaction.DeletePool();
            }
            else
            {
                conbaseTrx.Build();
                transactions.Add(conbaseTrx);
            }

            var block = new Block
            {
                Height       = height,
                TimeStamp    = timestamp,
                PrevHash     = prevHash,
                Transactions = GiveOtherInfos(transactions, height),
                Validator    = validator
            };

            block.Build();


            //block size
            var str = System.Text.Json.JsonSerializer.Serialize(block);

            block.Size = str.Length;

            // get build time
            var endTimer  = DateTime.UtcNow;
            var buildTime = endTimer - startTimer;

            block.BuildTime = buildTime.Milliseconds;
            // end of


            // update  balance

            var txns = block.Transactions;

            AccountServiceImpl.UpdateAccountBalance(txns);


            AddBlock(block);
            PrintBlock(block);

            // move all record in trx pool to transactions table
            foreach (var trx in transactions)
            {
                Transaction.Add(trx);
            }
        }
Пример #2
0
        public static void BuildNewBlock()
        {
            // get transaction from pool
            var trxPool = Transaction.GetPool();

            //// get last block to get prev hash and last height
            var lastBlock = GetLastBlock();
            var height    = lastBlock.Height + 1;
            var timestamp = Utils.GetTime();
            var prevHash  = lastBlock.Hash;
            var validator = Stake.GetValidator();


            var transactions = new List <Transaction>(); // JsonConvert.SerializeObject(new List<Transaction>());


            // validator will get coin reward from genesis account
            // to keep total coin in Blockchain not changed
            var conbaseTrx = new Transaction
            {
                Amount    = 0,
                Recipient = "UKC_QPQY9wHP0jxi/0c/YRlch2Uk5ur/T8lcOaawqyoe66o=",
                Fee       = COINT_REWARD,
                TimeStamp = timestamp,
                Sender    = "UKC_rcyChuW7cQcIVoKi1LfSXKfCxZBHysTwyPm88ZsN0BM="
            };

            if (trxPool.Count() > 0)
            {
                //Get all tx from pool
                conbaseTrx.Recipient = validator;
                conbaseTrx.Amount    = GetTotalFees(trxPool.FindAll().ToList());
                conbaseTrx.Build();

                transactions.Add(conbaseTrx);
                transactions.AddRange(trxPool.FindAll());

                // clear mempool
                trxPool.DeleteAll();
            }
            else
            {
                conbaseTrx.Build();
                transactions.Add(conbaseTrx);
            }


            var block = new Block
            {
                Height       = height,
                TimeStamp    = timestamp,
                PrevHash     = prevHash,
                Transactions = transactions,
                Validator    = validator
            };

            block.Build();
            AddBlock(block);
            PrintBlock(block);

            // move all record in trx pool to transactions table
            foreach (var trx in transactions)
            {
                Transaction.Add(trx);
            }
        }