示例#1
0
        public void ProcessPendingTransactions()
        {
            Block block = addBlock();

            NetworkBroadcaster?.BroadcastBlock(block);
            pendingTransactions = new LinkedList <Transaction>();

            IRewarder   rewarder    = MiningFactory.GetRewarder();
            int         rewardValue = rewarder.GetRewardForBlock(block);
            Transaction reward      = new Transaction(MiningWallet.PublicKey, MiningWallet.PublicKey, rewardValue, TransactionHashFactory);

            reward.SignTransaction(MiningWallet.Signer);
            AddNewTransaction(reward);
        }
示例#2
0
        private Block addBlock()
        {
            Block        lastBlock   = storedChain.Last;
            IHashFactory hashFactory = MiningFactory.GetMiningHashFactoryForTransactions(pendingTransactions, lastBlock);
            Block        block       = new Block(MiningWallet.PublicKey, lastBlock.Hash, pendingTransactions, hashFactory);
            IMiner       miner       = MiningFactory.GetMiner(block.Transactions, lastBlock);

            miner.MineBlock(block);
            block.SignBlock(MiningWallet.Signer);

            storedChain.AddBlock(block);
            WalletManager.AcceptTransactions(block.Transactions);

            return(block);
        }
示例#3
0
        private bool validateBlockHash(Block block)
        {
            IHashFactory hashFactory = MiningFactory.GetMiningHashFactoryById(block.HashAlgorithmId);

            return(block.Hash.SequenceEqual(block.ComputeHash(hashFactory)));
        }