public TransactionResultTypes ConsumeTransaction(DataTransaction transaction, bool addExtraTime = false) { if (transaction.IsExpired(addExtraTime)) { return(TransactionResultTypes.Expired); } if (!transaction.IsDataTransactionValid) { return(TransactionResultTypes.InvalidContent); } var transactionResult = _dataChain.BlockStorage.HistoryContainsTransactionOrRegistration(transaction); if (transactionResult != TransactionResultTypes.Ok) { return(transactionResult); } var accountId = transaction.AccountId; var dataAccount = _dataChain.GetDataAccount(accountId, false); if (dataAccount == null) { dataAccount = new DataAccount(accountId); } var type = transaction.TransactionType; switch (type) { case DataTransactionTypes.FeatureRequest: case DataTransactionTypes.Data: case DataTransactionTypes.Attachement: var(result, _, _) = _featureGenerator.AddTransaction(BlockTransactionGeneratorMode.Preprocess, _dataChain, transaction, dataAccount); if (result == TransactionResultTypes.Ok) { _transactions.Add(transaction); } return(result); } return(TransactionResultTypes.InvalidTransaction); }