コード例 #1
0
        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);
        }