public override bool CheckBlockProposal(VoteProcess <MaintainBlock> voteProcess, MaintainBlock block, MaintainBlock lastBlock, out HashSet <long> invalidTransactionIds) { var generator = new MaintainBlockGenerator(_maintainChain, lastBlock); invalidTransactionIds = generator.CheckBlock(block); if (invalidTransactionIds.Count > 0) { return(false); } return(true); }
public override MaintainBlock GetBlockProposal(VoteProcess <MaintainBlock> voteProcess, MaintainBlock lastBlock, int revision) { var remove = new HashSet <long>(); var generator = new MaintainBlockGenerator(_maintainChain, 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 MaintainTransaction) != 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)); }