Пример #1
0
 public IActionResult StakeRoulette(Stake stake)
 {
     try
     {
         var userId = context.HttpContext.Request.Headers["Basic"];
         if (string.IsNullOrEmpty(userId))
         {
             return(Unauthorized());
         }
         if (users.Any(u => u.UserId == userId))
         {
             if (users.FirstOrDefault(u => u.UserId == userId).Credit > stake.Value &&
                 (stake.Color.Trim().ToLower().Contains("rojo") ||
                  stake.Color.Trim().ToLower().Contains("verde")) &&
                 stake.Number <= 36 &&
                 stake.Value < 10000)
             {
                 return(StatusCode(200));
             }
             else
             {
                 return(BadRequest());
             }
         }
         else
         {
             return(Unauthorized());
         }
     }
     catch
     {
         return(StatusCode(500));
     }
 }
Пример #2
0
        private Stake CalculateNewStake(Stake oldStake, MatchUpdate matchUpdate)
        {
            var newStake = new Stake
            {
                MatchId    = oldStake.MatchId,
                BlueScore  = oldStake.BlueScore,
                RedScore   = oldStake.RedScore,
                IsBettable = false,
                Ratio      = oldStake.Ratio
            };

            if (oldStake.BlueScore < matchUpdate.BlueScore || oldStake.RedScore < matchUpdate.RedScore)
            {
                return(newStake);
            }

            newStake.IsBettable = true;
            if ((oldStake.BlueScore > oldStake.RedScore && matchUpdate.BlueScore > matchUpdate.OldBlueScore) ||
                (oldStake.RedScore > oldStake.BlueScore && matchUpdate.RedScore > matchUpdate.OldRedScore))
            {
                newStake.Ratio -= _configuration.BaseRatioStep;
            }
            else
            {
                newStake.Ratio += _configuration.BaseRatioStep;
            }

            newStake.Ratio = Math.Clamp(newStake.Ratio, _configuration.MinimalStake, _configuration.MaximalStake);

            return(newStake);
        }
Пример #3
0
        public bool Double(User u)
        {
            lock (locker)
            {
                if (State != GameState.Playing)
                {
                    return(false);
                }

                if (CurrentUser != u)
                {
                    return(false);
                }

                if (!_cs.Remove(u.DiscordUser.Id, "Blackjack-double", u.Bet))
                {
                    return(false);
                }

                //read up in Join() why this is done
                using (var uow = _db.UnitOfWork)
                {
                    var s = new Stake()
                    {
                        Amount = u.Bet,
                        UserId = u.DiscordUser.Id,
                        Source = "BlackJack",
                    };
                    s = uow._context.Set <Stake>().Add(s).Entity;
                    _stakes.Add(s);
                    uow.Complete();
                }

                u.Bet *= 2;

                u.Cards.Add(Deck.Draw());

                if (u.GetHandValue() == 21)
                {
                    //blackjack
                    u.State = User.UserState.Blackjack;
                }
                else if (u.GetHandValue() > 21)
                {
                    // user busted
                    u.State = User.UserState.Bust;
                }
                else
                {
                    //with double you just get one card, and then you're done
                    u.State = User.UserState.Stand;
                }
                _currentUserMove.TrySetResult(true);

                return(true);
            }
        }
Пример #4
0
 void AddPurchase(string symbol, float num, float price)
 {
     Stake Stake = null;
     Shares.TryGetValue(symbol, out Stake);
     if (Stake == null)
     {
         Stake = new Stake();
         Shares.Add(symbol, Stake);
     }
     Stake.AddPurchase(num, price);
 }
Пример #5
0
 public override double StakeVariance(Stake stake, double stakechance)
 {
     if (stake is WoodenStake)
     {
         return(0.0);
     }
     else
     {
         return(stakechance * 0.45);
     }
 }
Пример #6
0
 public override double StakeVariance(Stake stake, double stakechance)
 {
     if (stake is SilverStake)
     {
         return(stakechance * 0.75);
     }
     else
     {
         return(stakechance);
     }
 }
Пример #7
0
 public override double StakeVariance(Stake stake, double stakechance)
 {
     if (stake is HolyStake)
     {
         return(stakechance * 0.25);
     }
     else
     {
         return(0.0);
     }
 }
Пример #8
0
        void JD_OnStake(Stake Staked)
        {
            UpdateLable(lblSiteInvested, Staked.bankroll.ToString());

            if (JD.Settings.chatstake)
            {
                ch.OnChat(new Chat {
                    Date = jdInstance.ToDateTime(Staked.date.ToString()), Type = "info", Message = string.Format("INFO: we just staked {0} CLAM (total = {1} CLAM; your total = {2} CLAM)", Staked.stake, Staked.total, Staked.stake_pft, Staked.date), UID = "", User = ""
                });
            }
        }
Пример #9
0
        public Blockchain()
        {
            // db
            DbAccess.Initialize();

            Initialize();

            //initilize stake
            Stake.Initialize();
            Console.WriteLine(" initilize success ...");
        }
Пример #10
0
        public override int GetHashCode()
        {
            //https://stackoverflow.com/a/892640/3131828
            unchecked
            {
                int h = 23;
                h *= 31 + (Name?.GetHashCode() ?? 0);
                h *= 31 + (Stake?.GetHashCode() ?? 0);
                h *= 31 + WonDays.GetHashCode();

                return(h);
            }
        }
Пример #11
0
        public async Task <IActionResult> OnGetAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            Stake = await _context.Stakes.SingleOrDefaultAsync(m => m.ID == id);

            if (Stake == null)
            {
                return(NotFound());
            }
            return(Page());
        }
Пример #12
0
        public async Task <IActionResult> OnPostAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            Stake = await _context.Stakes.FindAsync(id);

            if (Stake != null)
            {
                _context.Stakes.Remove(Stake);
                await _context.SaveChangesAsync();
            }

            return(RedirectToPage("./Index"));
        }
Пример #13
0
        public async Task <bool> Join(IUser user, long bet)
        {
            await locker.WaitAsync();

            try
            {
                if (State != GameState.Starting)
                {
                    return(false);
                }

                if (Players.Count >= 5)
                {
                    return(false);
                }

                if (!await _cs.RemoveAsync(user, "BlackJack-gamble", bet, gamble: true))
                {
                    return(false);
                }

                //add it to the stake, in case bot crashes or gets restarted during the game
                //funds will be refunded to the players on next startup
                using (var uow = _db.UnitOfWork)
                {
                    var s = new Stake()
                    {
                        Amount = bet,
                        UserId = user.Id,
                        Source = "BlackJack",
                    };
                    s = uow._context.Set <Stake>().Add(s).Entity;
                    _stakes.Add(s);
                    uow.Complete();
                }

                Players.Add(new User(user, bet));
                var _ = PrintState();
                return(true);
            }
            finally
            {
                locker.Release();
            }
        }
Пример #14
0
        private Stake CalculateNewStake(Stake stake, Match match, IDictionary <int, int> betsByStakeIds)
        {
            var newStake = new Stake
            {
                BlueScore  = stake.BlueScore,
                RedScore   = stake.RedScore,
                IsBettable = true,
                MatchId    = stake.MatchId,
                Ratio      = stake.Ratio
            };

            if (betsByStakeIds.ContainsKey(stake.Id))
            {
                _logger.LogInformation($"Penalty = {_configuration.BaseStep * _configuration.BetPenaltyRatio * betsByStakeIds[stake.Id]}");
                _logger.LogInformation($"Base = {_configuration.BaseStep}");
                _logger.LogInformation($"BetRatio = {_configuration.BetPenaltyRatio}");
                _logger.LogInformation($"Bets = {betsByStakeIds[stake.Id]}");
                newStake.Ratio -= _configuration.BaseStep * _configuration.BetPenaltyRatio * betsByStakeIds[stake.Id];
            }

            foreach (var otherStake in match.Stakes)
            {
                if (stake == otherStake || !betsByStakeIds.ContainsKey(otherStake.Id))
                {
                    continue;
                }

                var blueDifference = stake.BlueScore - otherStake.BlueScore;
                var redDifference  = stake.RedScore - otherStake.RedScore;
                var distance       = blueDifference * blueDifference + redDifference * redDifference;
                var increase       = _configuration.BaseStep * distance *
                                     _configuration.DistanceRatio * betsByStakeIds[otherStake.Id];
                newStake.Ratio += increase;

                _logger.LogInformation($"Distance = {distance}");
                _logger.LogInformation($"DistanceRatio = {_configuration.DistanceRatio}");
                _logger.LogInformation($"Increase = {increase}");
            }

            newStake.Ratio = Math.Clamp(newStake.Ratio, _configuration.MinimalStake, _configuration.MaximalStake);
            return(newStake);
        }
Пример #15
0
        public eServiceStatus Start(eScanType scanType)
        {
            CompareValueDifferent = ProcessorConfigInfo.CompareValue;
            ScanType           = scanType;
            CountBet           = 1;
            MaxCountBet        = ProcessorConfigInfo.MaxCountBet;
            LastBetTime        = DateTime.Now.AddMinutes(-10);
            LastBetIbetSuccess = DateTime.Now.AddMinutes(-10);

            BetStakeType = ProcessorConfigInfo.BetStakeType;
            Stake        = ProcessorConfigInfo.BetStake;

            BetStake = new List <int>();
            var stak = Stake.Split(new[] { '#' });

            foreach (var s in stak)
            {
                if (!string.IsNullOrEmpty(s))
                {
                    int stake;
                    int.TryParse(s, out stake);
                    if (stake != 0)
                    {
                        //Logger.Info("STAKE " + stake);
                        BetStake.Add(stake);
                    }
                }
            }

            BetStake.Shuffle();


            TimeOffStakeOdds = ProcessorConfigInfo.TimeOffStakeOdds;
            MinOddDefBet     = ProcessorConfigInfo.MinOddDefBet;
            MinTimeToBet     = ProcessorConfigInfo.MinTimeToBet;

            BetAgainstIbet = ProcessorConfigInfo.RebetIbet;
            //WaitingTimeRebetIbet = ProcessorConfigInfo.WaitingTimeRebetIbet;
            AcceptMinLossIbet = ProcessorConfigInfo.AcceptMinLossIbet;

            if (ProcessorConfigInfo.AccountFirst.ServerType == eServerType.Ibet)
            {
                IbetMaxStakeMatch = ProcessorConfigInfo.AccountFirst.MaxStake;
                IbetRateExchange  = ProcessorConfigInfo.AccountFirst.RateExchange;
                SboMaxStakeMatch  = ProcessorConfigInfo.AccountSecond.MaxStake;
                SboRateExchange   = ProcessorConfigInfo.AccountSecond.RateExchange;
            }
            else
            {
                IbetMaxStakeMatch = ProcessorConfigInfo.AccountSecond.MaxStake;
                IbetRateExchange  = ProcessorConfigInfo.AccountSecond.RateExchange;
                SboMaxStakeMatch  = ProcessorConfigInfo.AccountFirst.MaxStake;
                SboRateExchange   = ProcessorConfigInfo.AccountFirst.RateExchange;
            }

            try
            {
                Initialize();
                ProcessorName = IbetEngine.UserName + " - " + SboEngine.UserName;
                //EngineLogger engineLogger = new EngineLogger(engineName);

                //if (SboEngine.CheckLogin() && PiEngine.CheckLogin())
                //{
                SboEngine.EngineName = ProcessorName;
                //SboEngine.EngineLogger = engineLogger;
                SboEngine.Rebet = ProcessorConfigInfo.RebetSbo;
                //SboEngine.InitEngine();
                SboEngine.UpdateAvailabeCredit();
                SboEngine.StartScanEngine(scanType);

                //PiEngine.InitEngine();
                IbetEngine.EngineName = ProcessorName;
                //PiEngine.EngineLogger = engineLogger;
                IbetEngine.UpdateAvailabeCredit();
                IbetEngine.StartScanEngine(scanType);

                objUpdateCreditTimer = new Timer(WaitUpdateCreditCallback, null, 60000 * 5, 60000 * 5);
                StartFailCount       = 0;

                _driver.OnSboScanUpdate += OnSboUpdateScan;

                //SboEngine.UpdateLiveDataChange += SboEngineOnUpdateLiveDataChange;
                //IbetSboDriver.OnSboScanUpdate += OnSboUpdateScan;
                //ServerCallback.OnSboScanUpdate += OnSboUpdateScan;
                //ServerCallback.OnIbetScanUpdate += OnIbetUpdateScan;
                ServerCallback.OnTransactionStatic += ServerCallback_OnTransaction;
                FireProcessStateChange(eServiceStatus.Started, ProcessorName);
                Status = eServiceStatus.Started;

                //List<TransactionDTO> transactionDtos;
                //while (TransactionQueue.TryDequeue(out transactionDtos))
                //{
                //    // do nothing
                //}
                //processBetThread = new Thread(DoBetTransaction);
                //processBetThread.Start();
                //}

                // return eServiceStatus.Unknown;
            }
            catch (Exception ex)
            {
                Logger.Error("Start Processor Fail !", ex);

                StartFailCount++;

                SboEngine.Dispose();
                SboEngine.Dispose();
                Status = eServiceStatus.Unknown;
            }

            return(Status);
        }
        private Bet SetEvents(Bet bet, Event ev, bool setSportTime = true)
        {
            if (ev.IsBlock)
            {
                return(bet);
            }
            int eventId = ev.Id;
            Dictionary <int, CustomFactor> s = ev.Factors;


            Tuple <int, float> rez;

            float _1;

            rez     = SetEvent(out _1, s, 921, 3150, 3144);
            bet._1  = _1;
            bet._1o = "event" + eventId + "win1," + rez.Item1 + "," + eventId;
            //bet._1o = "event" + event_id + "win1";


            float _X;

            rez    = SetEvent(out _X, s, 922, 3152);
            bet._X = _X;
            //bet._Xo = "event" + event_id + "draw";
            bet._Xo = "event" + eventId + "draw," + rez.Item1 + "," + eventId;


            float _2;

            rez     = SetEvent(out _2, s, 923, 3151, 3145);
            bet._2  = _2;
            bet._2o = "event" + eventId + "win2," + rez.Item1 + "," + eventId;
            //bet._2o = "event" + event_id + "win2";


            float _1X;

            rez      = SetEvent(out _1X, s, 924);
            bet._1X  = _1X;
            bet._1Xo = "event" + eventId + "win1draw," + rez.Item1 + "," + eventId;
            //bet._1Xo = "event" + event_id + "win1draw";


            float _12;

            rez      = SetEvent(out _12, s, 1571);
            bet._12  = _12;
            bet._12o = "event" + eventId + "win1win2," + rez.Item1 + "," + eventId;
            //bet._12o = "event" + event_id + "win1win2";

            float _X2;

            rez      = SetEvent(out _X2, s, 925);
            bet._X2  = _X2;
            bet._X2o = "event" + eventId + "win2draw," + rez.Item1 + "," + eventId;
            //bet._X2o = "event" + event_id + "win2draw";

            float _F1;

            rez         = SetEvent(out _F1, s, 927, 937, 1845);
            bet._F1_Cof = rez.Item2;
            bet._F1     = _F1;
            bet._F1o    = "event" + eventId + "hand1odds," + rez.Item1 + "," + eventId;
            //bet._F1o = "event" + event_id + "hand1odds";


            float _F2;

            rez         = SetEvent(out _F2, s, 928, 938, 1846);
            bet._F2_Cof = rez.Item2;
            bet._F2     = _F2;
            bet._F2o    = "event" + eventId + "hand2odds," + rez.Item1 + "," + eventId;
            //bet._F2o = "event" + event_id + "hand2odds";

            float _B;

            rez        = SetEvent(out _B, s, 930, 940, 1848);
            bet._Tmax  = _B;
            bet._Tmaxo = "event" + eventId + "over," + rez.Item1 + "," + eventId;
            //bet._Tmaxo = "event" + event_id + "over";
            bet._Total_Cof = rez.Item2;


            float _T;

            rez        = SetEvent(out _T, s, 931, 941, 1849);
            bet._Tmin  = _T;
            bet._Tmino = "event" + eventId + "under," + rez.Item1 + "," + eventId;
            //bet._Tmino = "event" + event_id + "under";
            if (bet._Total_Cof == 0)
            {
                bet._Total_Cof = rez.Item2;
            }
            else if (bet._Total_Cof != rez.Item2)
            {
                if (rez.Item2 != 0)
                {
                }
            }


            if (setSportTime)
            {
                string timeData = ev.EventMisc?.Comment;
                if (string.IsNullOrWhiteSpace(timeData))
                {
                    timeData = "";
                }


                if (bet.SportType == SportType.Баскетбол)
                {
                    Regex           reg = new Regex("\\(.*\\)"); // при перерыве время не показывает
                    MatchCollection m   = reg.Matches(timeData);
                    if (m.Count == 0)
                    {
                        bet.Time = "1";
                    }
                    else
                    {
                        bet.Time = m[0].Value.Replace("(", "").Replace(")", "").Split(' ').Count().ToString();
                    }
                }

                else if (bet.SportType == SportType.Футбол)
                {
                    EventMisc xtr = ev.EventMisc;
                    if (xtr?.TimerSeconds != null)
                    {
                        string timerSeconds = xtr.TimerSeconds.ToString();
                        bet.Time = (Convert.ToInt32(timerSeconds) / 60) + "'";
                    }
                    else
                    {
                        bet.Time = "90'";
                    }
                }

                else if (bet.SportType == SportType.Бадминтон ||
                         bet.SportType == SportType.Настольный_теннис ||
                         bet.SportType == SportType.Теннис ||
                         bet.SportType == SportType.Волейбол)
                {
                    Regex reg = new Regex("\\(.*\\)");
                    var   m   = reg.Matches(timeData);
                    if (m.Count == 0)
                    {
                        bet.Time = "1";
                    }
                    else
                    {
                        bet.Time = m[0].Value.Replace("(", "").Replace(")", "").Split(' ').Count().ToString();
                    }
                }

                else if (bet.SportType == SportType.Гандбол)
                {
                    var xtr = ev.EventMisc;
                    if (xtr != null)
                    {
                        var timerSeconds  = xtr.TimerSeconds?.ToString();
                        var timeDirection = xtr.TimerDirection?.ToString();
                        if (timeDirection == "1")
                        {
                            bet.Time = "П";
                        }
                        else
                        {
                            bet.Time = (Convert.ToInt32(timerSeconds) / 60) + "'";
                        }
                    }
                }


                else if (bet.SportType == SportType.Хоккей)
                {
                    EventMisc xtr = ev.EventMisc;
                    if (xtr != null)
                    {
                        string timerSeconds = xtr.TimerSeconds?.ToString();

                        bet.Time = (Convert.ToInt32(timerSeconds) / 60) + "'";
                    }
                    else
                    {
                    }
                }
                else
                {
                    bet.Time = "-1";
                }
            }

            if (bet.SportType == SportType.Теннис)
            {
                var gameBet = ParseGameRezult(bet, eventId, s, 1609, 1610);
                if (gameBet != null)
                {
                    bet.Games.Add(gameBet);
                }
                gameBet = ParseGameRezult(bet, eventId, s, 1747, 1748);
                if (gameBet != null)
                {
                    bet.Games.Add(gameBet);
                }
                gameBet = ParseGameRezult(bet, eventId, s, 1750, 1751);
                if (gameBet != null)
                {
                    bet.Games.Add(gameBet);
                }
                gameBet = ParseGameRezult(bet, eventId, s, 1753, 1754);
                if (gameBet != null)
                {
                    bet.Games.Add(gameBet);
                }
            }

            foreach (KeyValuePair <int, CustomFactor> factor in s)
            {
                if (factor.Value.IsBlocked)
                {
                    continue;
                }
                var stake = new Stake();


                if (factor.Key == 931 ||
                    factor.Key == 941 ||
                    factor.Key == 1849)
                {
                    stake.StakeType = StakeType.Tmin;
                    stake.ParametrO = $"event{eventId}under,{factor.Key},{eventId}";
                }
                else if (factor.Key == 930 ||
                         factor.Key == 940 ||
                         factor.Key == 1848)
                {
                    stake.StakeType = StakeType.Tmax;
                    stake.ParametrO = $"event{eventId}over,{factor.Key},{eventId}";
                }

                else if (factor.Key == 1697 ||
                         factor.Key == 1728 ||
                         factor.Key == 1731 ||
                         factor.Key == 1734 ||
                         factor.Key == 1737)
                {
                    stake.StakeType = StakeType.Tmin;
                    stake.ParametrO = $"{eventId}f{factor.Value.F},{factor.Key},{eventId}";
                }

                else if (factor.Key == 1696 ||
                         factor.Key == 1727 ||
                         factor.Key == 1730 ||
                         factor.Key == 1733 ||
                         factor.Key == 1736)
                {
                    stake.StakeType = StakeType.Tmax;
                    stake.ParametrO = $"{eventId}f{factor.Value.F},{factor.Key},{eventId}";
                }

                else if (factor.Key == 927 ||
                         factor.Key == 937 ||
                         factor.Key == 1845)
                {
                    stake.StakeType = StakeType.Fora1;
                    stake.ParametrO = $"event{eventId}hand1odds,{factor.Key},{eventId}";
                }
                else if (factor.Key == 2427 ||
                         factor.Key == 2433 ||
                         factor.Key == 2436)
                {
                    if (factor.Key == 2427 && bet.SportType == SportType.Волейбол)
                    {
                        continue;
                    }
                    stake.StakeType = StakeType.Fora1;
                    stake.ParametrO = $"{eventId}f{factor.Value.F},{factor.Key},{eventId}";
                }


                else if (factor.Key == 928 ||
                         factor.Key == 938 ||
                         factor.Key == 1846)
                {
                    stake.StakeType = StakeType.Fora2;
                    stake.ParametrO = $"event{eventId}hand2odds,{factor.Key},{eventId}";
                }
                else if (factor.Key == 2428 ||
                         factor.Key == 2434 ||
                         factor.Key == 2437)
                {
                    if (factor.Key == 2428 && bet.SportType == SportType.Волейбол)
                    {
                        continue;
                    }
                    stake.StakeType = StakeType.Fora2;
                    stake.ParametrO = $"{eventId}f{factor.Value.F},{factor.Key},{eventId}";
                }


                else if (factor.Key == 974 ||
                         factor.Key == 1809 ||
                         factor.Key == 1812 ||
                         factor.Key == 1815)
                {
                    stake.StakeType = StakeType.ITmax;
                    stake.Team      = ETeam.Team1;
                    stake.ParametrO = $"{eventId}f{factor.Value.F},{factor.Key},{eventId}";
                }
                else if (factor.Key == 976 ||
                         factor.Key == 1810 ||
                         factor.Key == 1813 ||
                         factor.Key == 1816)
                {
                    stake.StakeType = StakeType.ITmin;
                    stake.Team      = ETeam.Team1;
                    stake.ParametrO = $"{eventId}f{factor.Value.F},{factor.Key},{eventId}";
                }
                else if (factor.Key == 978 ||
                         factor.Key == 1854 ||
                         factor.Key == 1873 ||
                         factor.Key == 1880)
                {
                    stake.StakeType = StakeType.ITmax;
                    stake.Team      = ETeam.Team2;
                    stake.ParametrO = $"{eventId}f{factor.Value.F},{factor.Key},{eventId}";
                }
                else if (factor.Key == 980 ||
                         factor.Key == 1871 ||
                         factor.Key == 1874 ||
                         factor.Key == 1881)
                {
                    stake.StakeType = StakeType.ITmin;
                    stake.Team      = ETeam.Team2;
                    stake.ParametrO = $"{eventId}f{factor.Value.F},{factor.Key},{eventId}";
                }
                else
                {
                    continue;
                }

                stake.Coef = factor.Value.V;
                if (!String.IsNullOrWhiteSpace(factor.Value.Pt))
                {
                    stake.Parametr = Convert.ToSingle(factor.Value.Pt.Replace(".", ","));
                }
                if (stake.StakeType == StakeType.Fora1 ||
                    stake.StakeType == StakeType.Fora2)
                {
                    bet.Foras.Add(stake);
                }
                else if (stake.StakeType == StakeType.Tmax ||
                         stake.StakeType == StakeType.Tmin)
                {
                    bet.Totals.Add(stake);
                }
                else if (stake.StakeType == StakeType.ITmax ||
                         stake.StakeType == StakeType.ITmin)
                {
                    bet.ITotals.Add(stake);
                }
            }

            return(bet);
        }
Пример #17
0
 public override double StakeVariance(Stake stake, double stakechance)
 {
     return(stakechance * 0.50);
 }
Пример #18
0
 public virtual double StakeVariance(Stake stake, double stakechance)
 {
     return(stakechance);
 }
Пример #19
0
        public static void BuildNewBlock()
        {
            // get transaction from pool
            var trxPool = Transaction.GetPool();

            //// get last block to get prev hash and last height
            var lastBlock = GetLastBlock();
            var height    = lastBlock.Height + 1;
            var timestamp = Utils.GetTime();
            var prevHash  = lastBlock.Hash;
            var validator = Stake.GetValidator();


            var transactions = new List <Transaction>(); // JsonConvert.SerializeObject(new List<Transaction>());


            // validator will get coin reward from genesis account
            // to keep total coin in Blockchain not changed
            var conbaseTrx = new Transaction
            {
                Amount    = 0,
                Recipient = "UKC_QPQY9wHP0jxi/0c/YRlch2Uk5ur/T8lcOaawqyoe66o=",
                Fee       = COINT_REWARD,
                TimeStamp = timestamp,
                Sender    = "UKC_rcyChuW7cQcIVoKi1LfSXKfCxZBHysTwyPm88ZsN0BM="
            };

            if (trxPool.Count() > 0)
            {
                //Get all tx from pool
                conbaseTrx.Recipient = validator;
                conbaseTrx.Amount    = GetTotalFees(trxPool.FindAll().ToList());
                conbaseTrx.Build();

                transactions.Add(conbaseTrx);
                transactions.AddRange(trxPool.FindAll());

                // clear mempool
                trxPool.DeleteAll();
            }
            else
            {
                conbaseTrx.Build();
                transactions.Add(conbaseTrx);
            }


            var block = new Block
            {
                Height       = height,
                TimeStamp    = timestamp,
                PrevHash     = prevHash,
                Transactions = transactions,
                Validator    = validator
            };

            block.Build();
            AddBlock(block);
            PrintBlock(block);

            // move all record in trx pool to transactions table
            foreach (var trx in transactions)
            {
                Transaction.Add(trx);
            }
        }
Пример #20
0
 void AddStake(string symbol, float num, float price)
 {
     Stake s = new Stake();
     Purchase p = new Purchase();
     p.NumShares = num;
     p.Price = price;
     s.Orders = new List<Purchase>();
     s.Orders.Add(p);
     s.TotShares = p.NumShares;
     s.AvgPrice = p.Price;
     Shares.Add(symbol, s);
 }
Пример #21
0
        public static void Report()
        {
            foreach (string folder in Directory.GetDirectories(GBCommon.DataFolder))
            {
                GameType gameType = (GameType)Enum.Parse(typeof(GameType), folder.Remove(0, GBCommon.DataFolder.Length).TrimStart('\\'));
                DateTime continuationStartDate = GBCommon.ReadContinuationDate(GBCommon.ConstructReportContinuationFileName(gameType));
                DateTime latest = continuationStartDate;

                var files = new DirectoryInfo(folder).GetFiles("*.json", SearchOption.TopDirectoryOnly).Where(file => file.LastWriteTime > continuationStartDate + TimeSpan.FromSeconds(1));
                foreach (var file in files)
                {
                    AveragedNonWeightedBetItemManager mgr = new AveragedNonWeightedBetItemManager();
                    mgr.Deserialize(file.FullName, OddsType.ThreeWay);
                    if (mgr.CurrentBets.Count < 1)
                    {
                        throw new FileLoadException(string.Format("Record file {0} not valid", file.Name));
                    }
                    BetItem firstBet  = mgr.CurrentBets[0];
                    Stake   bestStake = mgr.BestStake(firstBet.GameName, firstBet.GameType, firstBet.Odds.Type);
                    string  output    = bestStake.ROI.ToString("p2")
                                        + " "
                                        + bestStake.BetItem.MatchDate.ToShortDateString()
                                        + " "
                                        + bestStake.BetItem.Teams[0].Name
                                        + " "
                                        + bestStake.BetItem.Teams[1].Name
                                        + " "
                                        + bestStake.BetItem.BookMaker.Replace(' ', '_')
                                        + " "
                                        + bestStake.BetItem.Odds.Type.ToString()
                                        + " "
                                        + bestStake.Decision;
                    GBCommon.Report(output, gameType);
                    if (file.LastWriteTime > latest)
                    {
                        latest = file.LastWriteTime;
                    }

                    // If the game stake exists, delete the old one
                    var deleteStakeResponse = GBCommon.SendRequest(
                        "{\"BetItem.GameName\": \"" + bestStake.BetItem.GameName + "\"}",
                        ConfigurationManager.AppSettings["datastore"],
                        ConfigurationManager.AppSettings["apikey"],
                        ConfigurationManager.AppSettings["passwd"],
                        "application/json",
                        "DELETE"
                        );
                    using (StreamReader streamReader = new StreamReader(deleteStakeResponse.GetResponseStream()))
                    {
                        var text = streamReader.ReadToEnd();
                        Console.WriteLine(text);
                    }

                    // Add the new stake
                    var addStakeResponse = GBCommon.SendRequest(
                        JsonConvert.SerializeObject(bestStake),
                        ConfigurationManager.AppSettings["datastore"],
                        ConfigurationManager.AppSettings["apikey"],
                        ConfigurationManager.AppSettings["passwd"],
                        "application/json",
                        "PUT"
                        );
                    using (StreamReader streamReader = new StreamReader(addStakeResponse.GetResponseStream()))
                    {
                        var text = streamReader.ReadToEnd();
                        Console.WriteLine(text);
                    }
                }

                if (latest > continuationStartDate)
                {
                    GBCommon.WriteContinuationDate(GBCommon.ConstructReportContinuationFileName(gameType), latest);
                }
            }

            GBCommon.LogInfo("Reporting Completed.");
        }
Пример #22
0
        public void CreateStakeTest()
        {
            var item = new Stake(SR.I1000, StakeType.Unit);

            Assert.IsNotNull(item);
        }
Пример #23
0
        public eServiceStatus Start(eScanType scanType)
        {
            CompareValueDifferent = ProcessorConfigInfo.CompareValue;
            //CompareValueDifferent = ProcessorConfigInfo.CompareValue + 0.005;
            ScanType    = scanType;
            CountBet    = 1;
            MaxCountBet = ProcessorConfigInfo.MaxCountBet;
            LastBetTime = DateTime.Now.AddMinutes(-10);

            BetStakeType = ProcessorConfigInfo.BetStakeType;
            Stake        = ProcessorConfigInfo.BetStake;

            BetStake = new List <int>();
            var stak = Stake.Split(new[] { '#' });

            foreach (var s in stak)
            {
                if (!string.IsNullOrEmpty(s))
                {
                    int stake;
                    int.TryParse(s, out stake);
                    if (stake != 0)
                    {
                        //Logger.Info("STAKE " + stake);
                        BetStake.Add(stake);
                    }
                }
            }

            BetStake.Shuffle();


            TimeOffStakeOdds = ProcessorConfigInfo.TimeOffStakeOdds;
            MinOddDefBet     = ProcessorConfigInfo.MinOddDefBet;
            MinTimeToBet     = ProcessorConfigInfo.MinTimeToBet;

            BetAgainstIbet    = ProcessorConfigInfo.RebetIbet;
            AcceptMinLossIbet = ProcessorConfigInfo.AcceptMinLossIbet;

            if (ProcessorConfigInfo.AccountFirst.ServerType == eServerType.Pina)
            {
                IbetMaxStakeMatch = ProcessorConfigInfo.AccountFirst.MaxStake;
                IbetRateExchange  = ProcessorConfigInfo.AccountFirst.RateExchange;
                SboMaxStakeMatch  = ProcessorConfigInfo.AccountSecond.MaxStake;
                SboRateExchange   = ProcessorConfigInfo.AccountSecond.RateExchange;
            }
            else
            {
                IbetMaxStakeMatch = ProcessorConfigInfo.AccountSecond.MaxStake;
                IbetRateExchange  = ProcessorConfigInfo.AccountSecond.RateExchange;
                SboMaxStakeMatch  = ProcessorConfigInfo.AccountFirst.MaxStake;
                SboRateExchange   = ProcessorConfigInfo.AccountFirst.RateExchange;
            }

            try
            {
                Initialize();
                ProcessorName = PiEngine.UserName + " - " + IsnEngine.UserName;

                IsnEngine.EngineName = ProcessorName;
                IsnEngine.Rebet      = ProcessorConfigInfo.RebetSbo;
                IsnEngine.UpdateAvailabeCredit();
                IsnEngine.StartScanEngine(scanType);

                PiEngine.Rebet      = ProcessorConfigInfo.RebetSbo;
                PiEngine.EngineName = ProcessorName;
                PiEngine.UpdateAvailabeCredit();
                PiEngine.StartScanEngine(scanType);

                objUpdateCreditTimer = new Timer(WaitUpdateCreditCallback, null, 60000 * 5, 60000 * 5);
                StartFailCount       = 0;

                IsnEngine.UpdateLiveDataChange += OnIsnUpdateScan;

                //tạm đóng
                //PiSboDriver.OnSboScanUpdate += PiSboDriver_OnSboScanUpdate;
                //_driver.OnSboScanUpdate += OnSboUpdateScan;

                FireProcessStateChange(eServiceStatus.Started, ProcessorName);
                Status = eServiceStatus.Started;
            }
            catch (Exception ex)
            {
                Logger.Error("Start Processor Fail !", ex);

                StartFailCount++;

                PiEngine.Dispose();
                IsnEngine.Dispose();
                Status = eServiceStatus.Unknown;
            }

            return(Status);
        }
Пример #24
0
        public static void BuildNewBlock()
        {
            // start build time
            var startTimer = DateTime.UtcNow;

            // get transaction from pool
            var trxPool = Transaction.GetPool();

            //// get last block to get prev hash and last height
            var lastBlock = GetLastBlock();
            var height    = lastBlock.Height + 1;
            var timestamp = Utils.GetTime();
            var prevHash  = lastBlock.Hash;
            var validator = Stake.GetValidator();


            var transactions = new List <Transaction>(); // JsonConvert.SerializeObject(new List<Transaction>());


            // validator will get coin reward from genesis account
            // to keep total coin in Blockchain not changed
            var conbaseTrx = new Transaction
            {
                Amount = 0,
                // Recipient = "UKC_QPQY9wHP0jxi/0c/YRlch2Uk5ur/T8lcOaawqyoe66o=",
                Recipient = "UkcDrMshfqdHrfckb2SLoSCoG8Lp6MBdrkZ2T83FivTpWC8",
                Fee       = COINT_REWARD,
                TimeStamp = timestamp,
                // Sender = "UKC_rcyChuW7cQcIVoKi1LfSXKfCxZBHysTwyPm88ZsN0BM="
                Sender = "UkcDEfU9gGnm9tGjmFtXRjirf2LuohU5CzjWunEkPNbUcFW",
            };

            if (trxPool.Count() > 0)
            {
                //Get all tx from pool
                conbaseTrx.Recipient = validator;
                //sum all fees and give block creator as reward
                conbaseTrx.Amount = GetTotalFees(trxPool);
                conbaseTrx.Build();

                // add coinbase trx to list
                transactions.Add(conbaseTrx);
                transactions.AddRange(trxPool);

                // clear mempool
                Transaction.DeletePool();
            }
            else
            {
                conbaseTrx.Build();
                transactions.Add(conbaseTrx);
            }

            var block = new Block
            {
                Height       = height,
                TimeStamp    = timestamp,
                PrevHash     = prevHash,
                Transactions = GiveOtherInfos(transactions, height),
                Validator    = validator
            };

            block.Build();


            //block size
            var str = System.Text.Json.JsonSerializer.Serialize(block);

            block.Size = str.Length;

            // get build time
            var endTimer  = DateTime.UtcNow;
            var buildTime = endTimer - startTimer;

            block.BuildTime = buildTime.Milliseconds;
            // end of


            // update  balance

            var txns = block.Transactions;

            AccountServiceImpl.UpdateAccountBalance(txns);


            AddBlock(block);
            PrintBlock(block);

            // move all record in trx pool to transactions table
            foreach (var trx in transactions)
            {
                Transaction.Add(trx);
            }
        }
Пример #25
0
 public Table(Stake stk)
 {
     _stk = stk;
 }
Пример #26
0
        public void CreateStakeWrongIdTest()
        {
            var item = new Stake(0, StakeType.Unit);

            Assert.IsNotNull(item);
        }
Пример #27
0
        public void Value_ReturnsCorrectly()
        {
            var stake = new Stake(StakeValue);

            Assert.Equal(StakeValue, stake.Value, DecimalPrecision);
        }