public void Post([FromBody] TransactionStruct value)
        {
            transQueue.Enqueue(value);

            if (pool == null)
            {
                pool = new Semaphore(1, 1);
            }

            if (mineThread == null || !mineThread.IsAlive)
            {
                mineThread = new Thread(DoMining);

                mineThread.Start();
            }
        }
        private void DoMining()
        {
            pool.WaitOne();
            RestClient client = new RestClient(url);

            while (transQueue.Count > 0)
            {
                TransactionStruct inTrx = transQueue.Dequeue();
                if (minUtils.ValidateTransaction(inTrx.sender, inTrx.receiver, inTrx.amount))
                {
                    RestRequest   req  = new RestRequest("api/Bank/GetBalance/" + inTrx.sender);
                    IRestResponse resp = client.Get(req);

                    float senderBalance = float.Parse(resp.Content);

                    if (senderBalance >= inTrx.amount)
                    {
                        //insert transaction details
                        Block newBlock = new Block();
                        newBlock.Amount      = inTrx.amount;
                        newBlock.SenderID    = Convert.ToUInt32(inTrx.sender);
                        newBlock.RecepientID = Convert.ToUInt32(inTrx.receiver);
                        newBlock.Hash        = "";

                        //get last block
                        req  = new RestRequest("api/Bank/GetLastBlock");
                        resp = client.Get(req);
                        Block lastBlock = JsonConvert.DeserializeObject <Block>(resp.Content);
                        newBlock.PrevHash = lastBlock.Hash;

                        newBlock = minUtils.GenerateHash(newBlock);//create valid hash and add it to new block

                        req = new RestRequest("api/Bank/SubmitBlock");
                        req.AddJsonBody(newBlock);

                        client.Post(req);//send off
                    }
                }
            }

            pool.Release();
        }
Exemplo n.º 3
0
        public TransactionStatusStruct UpBalance(TransactionStruct uBalance)

        {
            TransactionStatusStruct status = new TransactionStatusStruct();



            try
            {
                DateTime now = DateTime.Now;

                MySqlConnection connection = new MySqlConnection(ConnectionString);



                connection.Open();

                MySqlCommand com = new MySqlCommand("select * from api_access where bundleID=sha1(@bundleID)", connection);
                //com.parameters.addwithvalue("@transactionid", ubalance.transactionid);
                com.Parameters.AddWithValue("@bundleID", uBalance.bundleID);

                //com.ExecuteNonQuery();
                MySqlDataReader reader = com.ExecuteReader();
                if (reader.HasRows)
                {
                    connection.Close();
                    connection.Open();
                    com.CommandText = "select * from income_transaction where transactionID = @transactionID";
                    com.Parameters.AddWithValue("@transactionID", uBalance.transactionID);
                    reader = com.ExecuteReader();
                    if (reader.HasRows == false)
                    {
                        connection.Close();

                        connection.Open();
                        com.CommandText = "insert into income_transaction (transactionID,userID,bundleID,amount,cdate,smartPayDate) values (@transactionID,@userID,sha1(@bundleID),@amount,@dateTimeNow,@smartPayDate)";
                        com.Parameters.AddWithValue("@userID", uBalance.userID);
                        com.Parameters.AddWithValue("@amount", uBalance.amount);
                        com.Parameters.AddWithValue("@dateTimeNow", now);
                        com.Parameters.AddWithValue("@smartPayDate", uBalance.transactionDate);

                        //com.ExecuteNonQuery();

                        com.ExecuteNonQuery();
                        //update users_balance set earningValue = earningValue + (select  price from earnings_tariff where earningstpid = (select atypeID from announcement where announcementId=@advertID) ), udate=now() where userId=@userID and udate<DATE_FORMAT(now(), '%Y-%m-%d')
                        connection.Close();


                        connection.Open();
                        com.CommandText = "update users_balance set balanceValue = balanceValue + @amount, cdate=@dateTimeNow where userID=@userID ";
                        communication.sendNotificationAsync("Mədaxil", "Online odəmə sistemi ilə balansiniz artırldı", uBalance.userID);
                        communication.sendPushNotificationAsync("Mədaxil", "Online odəmə sistemi ilə balansiniz artırldı", uBalance.userID);

                        com.ExecuteNonQuery();
                        connection.Close();
                        //update users_balance set earningValue = earningValue + (select  price from earnings_tariff where earningstpid = (select atypeID from announcement where announcementId=@advertID) ), udate=now() where userId=@userID and udate<DATE_FORMAT(now(), '%Y-%m-%d')


                        status.response      = "0";
                        status.transactionID = uBalance.transactionID;
                        return(status);
                    }
                    status.transactionID = uBalance.transactionID;
                    status.response      = "2";
                    return(status);
                }
                status.transactionID = uBalance.transactionID;
                status.response      = "3";
                return(status);
            }
            catch (Exception ex)
            {
                status.response = $"Internal error: {ex.Message}";
                return(status);
            }
        }
Exemplo n.º 4
0
        public TransactionStatusStruct UpBalance([FromBody] TransactionStruct obj)
        {
            PaymentInsert insert = new PaymentInsert(Configuration, _hostingEnvironment);

            return(insert.UpBalance(obj));
        }