Exemplo n.º 1
0
        public override bool CheckBlockProposal(VoteProcess <DataBlock> voteProcess, DataBlock block, DataBlock lastBlock, out HashSet <long> invalidTransactionIds)
        {
            var generator = new DataBlockGenerator(_dataChain, lastBlock);

            invalidTransactionIds = generator.CheckBlock(block);

            if (invalidTransactionIds.Count > 0)
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 2
0
        public override DataBlock GetBlockProposal(VoteProcess <DataBlock> voteProcess, DataBlock lastBlock, int revision)
        {
            var remove    = new HashSet <long>();
            var generator = new DataBlockGenerator(_dataChain, lastBlock);

            lock (_lock)
            {
                foreach (var item in _transactions)
                {
                    var transaction = item.Value;
                    if (_blockStorage.HistoryContainsTransactionOrRegistration(transaction) != TransactionResultTypes.Ok)
                    {
                        remove.Add(transaction.UniqueIdentifier);
                        continue;
                    }

                    try
                    {
                        if (generator.ConsumeTransaction(transaction as DataTransaction) != TransactionResultTypes.Ok)
                        {
                            remove.Add(transaction.UniqueIdentifier);
                        }
                    }
                    catch (Exception ex)
                    {
                        remove.Add(transaction.UniqueIdentifier);
                        Log.HandleException(ex, this);
                    }
                }

                foreach (var item in remove)
                {
                    _transactions.Remove(item);
                }
            }

            return(generator.GenerateBlock(voteProcess.LocalIssuer, revision));
        }