Exemplo n.º 1
0
 public DataWrapper(string strConString, CommandType objCommandType, MaintainTransaction transactionRequired,
                    string transactionName, SetAutoCommit AutoCommit)
     : this(strConString, objCommandType)
 {
     this.TransactionRequired = transactionRequired;
     this.AutoCommit = AutoCommit;
 }
Exemplo n.º 2
0
        public TransactionResultTypes ConsumeTransaction(MaintainTransaction transaction, bool addExtraTime = false)
        {
            if (transaction.IsExpired(addExtraTime))
            {
                return(TransactionResultTypes.Expired);
            }

            var transactionResult = _maintainChain.BlockStorage.HistoryContainsTransactionOrRegistration(transaction);

            if (transactionResult != TransactionResultTypes.Ok)
            {
                return(transactionResult);
            }

            var type = transaction.TransactionType;

            switch (type)
            {
            case MainTainTransactionTypes.Maintain:
            case MainTainTransactionTypes.Revenue:

                var(result, _, _) = _featureGenerator.AddTransaction(BlockTransactionGeneratorMode.Preprocess, _maintainChain, transaction, null);
                if (result == TransactionResultTypes.Ok)
                {
                    _transactions.Add(transaction);
                }

                return(result);
            }

            return(TransactionResultTypes.InvalidTransaction);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Is used initialize data wrapper object if a transactional query(s) is/are to be excuted.
 /// Transaction Name(s) is/are specified by user(Business logic).
 /// This method is used in case multiple transactions are to be maintained simultaneously.
 /// </summary>
 /// <param name="strConString"></param>
 /// <param name="objCommandType"></param>
 /// <param name="transactionRequired"></param>
 /// <param name="transactionName"></param>
 /// <param name="AutoCommit"></param>
 public DbWrapper(string strConString, CommandType objCommandType, MaintainTransaction transactionRequired,
                  string transactionName, SetAutoCommit AutoCommit)
     : this(strConString, objCommandType)
 {
     this.TransactionRequired = transactionRequired;
     //getTransactionObject(transactionName);
     this.AutoCommit = AutoCommit;
 }
 public DatabaseInteraction(CommandType DbCommandType, MaintainTransaction transactionRequired, SetAutoCommit AutoCommit)
 {
     mDbCommandType           = DbCommandType;
     parameterCollection      = new ArrayList();
     transactionCache         = new Hashtable();
     this.transactionRequired = transactionRequired;
     OpenConnection();
 }
Exemplo n.º 5
0
        public TransactionResultTypes PublishMaintainTransaction(MaintainTransaction transaction)
        {
            transaction.SignKey      = ServiceChain.KeyStore.DecryptedKey;
            transaction.SignKeyIndex = ServiceChain.KeyStore.KeyIndex;

            var message = new NodeTransactionMessage(transaction)
            {
                SignKey = _node.NodeConfiguration.LocaleNodePrivateKey
            };

            // generate signatures
            message.ToByteArray();

            return(_node.TransactionManager.AddNodeTransaction(message, null));
        }
Exemplo n.º 6
0
 /// <summary>
 /// Is used initialize data wrapper object if a transactional query(s) is/are to be excuted.
 /// Uses a default system default transaction Name.
 /// </summary>
 /// <param name="strConString"></param>
 /// <param name="objCommandType"></param>
 /// <param name="transactionRequired"></param>
 /// <param name="AutoCommit"></param>
 //case:2
 public DbWrapper(string strConString, CommandType objCommandType, MaintainTransaction transactionRequired,
                  SetAutoCommit AutoCommit)
     : this(strConString, objCommandType, transactionRequired,
            DEFAULT_TRANSACTION_NAME, AutoCommit)
 {
 }
Exemplo n.º 7
0
        public TransactionResultTypes ValidateMaintainTransaction(MaintainTransaction transaction)
        {
            if (transaction == null)
            {
                return(TransactionResultTypes.InvalidTransaction);
            }

            var chainInfo = ServiceChain.CoreChain.GetChainInfo(ChainId);

            if (chainInfo == null)
            {
                return(TransactionResultTypes.InvalidTransaction);
            }

            var chainKey = chainInfo.GetValidChainKey(transaction.ChainIndex, transaction.SignKeyIndex, transaction.Timestamp);

            if (!transaction.IsSignatureValid(chainKey?.PublicKey))
            {
                return(TransactionResultTypes.InvaidChainKey);
            }

            var type = transaction.TransactionType;

            if (type == MainTainTransactionTypes.Revenue)
            {
                var rev         = transaction as RevenueMaintainTransaction;
                var revenueInfo = rev.RevenueInfo;
                var tick        = rev.Tick;

                var now = Protocol.TicksSinceGenesis(Time.Timestamp);

                if (tick < (now - 1) || tick > now)
                {
                    return(TransactionResultTypes.InvalidTransaction);
                }

                if (revenueInfo == null)
                {
                    return(TransactionResultTypes.InvalidTransaction);
                }

                if (revenueInfo != chainInfo.GetRevenueInfo(revenueInfo.Index))
                {
                    return(TransactionResultTypes.InvalidTransaction);
                }

                if (revenueInfo.Revenue <= 0)
                {
                    return(TransactionResultTypes.InvalidTransaction);
                }

                lock (_revenueLock)
                {
                    var previous = GetRevenueReceivers(tick - 1);
                    if (previous != null)
                    {
                        if (previous.Tick >= tick || previous.Tick != rev.PreviousTick)
                        {
                            return(TransactionResultTypes.InvalidTransaction);
                        }
                    }

                    if (tick != now) // if from previous tick, we allow it only, if there are no revenues for current tick yet.
                    {
                        var r = GetRevenueReceivers(now);
                        if (r != null && r.Accounts.Count > 0)
                        {
                            return(TransactionResultTypes.InvalidTransaction);
                        }
                    }

                    var revenues = GetRevenueReceivers(tick);
                    if (revenues != null)
                    {
                        foreach (var accountId in rev.Accounts)
                        {
                            if (revenues.Accounts.Contains(accountId))
                            {
                                return(TransactionResultTypes.InvalidTransaction);
                            }
                        }
                    }

                    return(TransactionResultTypes.Ok);
                }
            }

            return(TransactionResultTypes.Unknown);
        }
Exemplo n.º 8
0
 public DataWrapper(string strConString, CommandType objCommandType, MaintainTransaction transactionRequired,
                    SetAutoCommit AutoCommit)
     : this(strConString, objCommandType, transactionRequired,
         DEFAULT_TRANSACTION_NAME, AutoCommit)
 {
 }
Exemplo n.º 9
0
 public MaintainItem(long payload, MaintainTransaction maintainTransaction, Connection connection) : base(payload, SenderTypes.Node, connection)
 {
     Transaction = maintainTransaction;
 }