Пример #1
0
 public void UpDateMinerState()
 {
     try
     {
         if (this.InvokeRequired)
         {
             this.BeginInvoke(new Action(UpDateMinerState),
                              new object[] {  });
         }
         else
         {
             foreach (Control item in pnlMiner.Controls)
             {
                 MinerView minerView = item as MinerView;
                 if (minerView != null)
                 {
                     minerView.UpdateState();
                 }
                 //Todo: this seems to be a duplicate call as timer invokes this separately. analyze
                 MinerInfo.UpdateState();
             }
         }
     }
     catch (Exception e)
     {
         Logger.Instance.LogError("Error while updating minerstate" + e.Message);
     }
 }
Пример #2
0
        public async Task <bool> AddMiningPool(MinerView minerview)
        {
            try
            {
                if (minerview == null || minerview.Link == null || minerview.Pooltype == null)
                {
                    return(false);
                }
                if (!CheckPoolType(minerview.Link, minerview.Pooltype))
                {
                    return(false);
                }
                var miners = _dbcontext.Miner; // from s in _context.Miner select s;
                var miner  = new Miner();
                miner.Username            = minerview.Username;
                miner.Minertype           = minerview.Minertype;
                miner.Location            = minerview.Location;
                miner.Link                = minerview.Link;
                miner.Total               = minerview.Total;
                miner.Unit                = minerview.Unit;
                miner.Pooltype            = minerview.Pooltype;
                miner.Standardcalculation = minerview.Standardcalculation;
                miner.Updatedate          = DateTime.Now;
                await miners.AddAsync(miner);

                await _dbcontext.SaveChangesAsync();

                return(true);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Пример #3
0
        public void UpdateMinerList()
        {
            List <IMiner> miners = Factory.Instance.CoreObject.Miners;

            pnlMiner.Controls.Clear();

            foreach (IMiner item in miners)
            {
                MinerView view = new MinerView(item, this);
                view.TopLevel = false;
                pnlMiner.Controls.Add(view);
                view.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                view.UpdateState();
                //view.Dock = DockStyle.Fill;
                view.Show();
                if (Factory.Instance.CoreObject.SelectedMiner == item)
                {
                    view.ActivateView();//makes it default. the tick mark

                    //view.SelectView();//marks it as selected
                    //ShowMiningInfo(item);
                    //this.MinerView = view;
                    SelectMiningView(view);
                }
            }
            ShowSettingsCarausal();
        }
Пример #4
0
 public async Task <bool> ModifyMiningPool(int poolid, MinerView minerview)
 {
     try
     {
         return(await _minerservice.ModifyMiningPool(poolid, minerview));
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Пример #5
0
 public async Task <bool> AddMiningPool(MinerView minerview)
 {
     try
     {
         return(await _minerservice.AddMiningPool(minerview));
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Пример #6
0
 public void ActivateMiningView(MinerView view)
 {
     foreach (MinerView item in pnlMiner.Controls)
     {
         if (item == view)
         {
             item.ActivateView();
         }
         else
         {
             item.DeActivateView();
         }
     }
 }
Пример #7
0
 public void ChangeMiningView(MinerView view)
 {
     foreach (MinerView item in pnlMiner.Controls)
     {
         if (item == view)
         {
             SelectMiningView(view);
         }
         else
         {
             item.DeSelectView();
         }
     }
 }
Пример #8
0
    KrateApplication()
    {
        Application.Init();
        this.mainWindow     = generateMainWindow(Application.Top);
        this.navigationMenu = new MenuBar(new MenuBarItem[] {
            new MenuBarItem("_File", new MenuItem [] {
                new MenuItem("_Quit", "", () => { Application.Top.Running = false; }),
            }),
            new MenuBarItem("Views", new MenuItem [] {
                new MenuItem("Dashboard", "", () => {
                    var subView = this.mainWindow.Subviews[0];
                    subView.RemoveAll();

                    var dashboardView = DashboardView.generateWindow(this.mainWindow);
                    this.mainWindow.Add(dashboardView);
                    dashboardView.FocusFirst();
                    dashboardView.LayoutSubviews();
                }),
                new MenuItem("Miner", "", () => {
                    var subView = this.mainWindow.Subviews[0];
                    subView.RemoveAll();

                    var minerView = MinerView.generateWindow(this.mainWindow);
                    this.mainWindow.Add(minerView);
                    minerView.FocusFirst();
                    minerView.LayoutSubviews();
                }),
                new MenuItem("Send Krates", "", () => {
                    var subView = this.mainWindow.Subviews[0];
                    subView.RemoveAll();

                    var costView = SendView.generateWindow(this.mainWindow);
                    this.mainWindow.Add(costView);
                    costView.FocusFirst();
                    costView.LayoutSubviews();
                }),
                new MenuItem("All Transactions", "", () => {
                    var subView = this.mainWindow.Subviews[0];
                    subView.RemoveAll();

                    var transactionsView = TransactionsView.generateWindow(this.mainWindow);
                    this.mainWindow.Add(transactionsView);
                    transactionsView.FocusFirst();
                    transactionsView.LayoutSubviews();
                })
            })
        });
    }
Пример #9
0
        public MinerView GetMinerTop(long minerIndex, long minerColumn)
        {
            minerColumn = Math.Min(minerColumn, 100);

            var minerView = new MinerView();

            if (httpPool != null)
            {
                Dictionary <string, MinerTask> miners = httpPool.GetMinerRewardMin(out long miningHeight);
                if (miners != null)
                {
                    var minerList = miners.Values.OrderByDescending((x) => { double.TryParse(x.power_average, out double power_average); return(power_average); }).ToList();
                    for (var ii = 0; ii < minerColumn; ii++)
                    {
                        if ((minerIndex + ii) >= minerList.Count)
                        {
                            break;
                        }
                        var miner = minerList[(int)minerIndex + ii];

                        if (string.IsNullOrEmpty(miner.power_cur))
                        {
                            miner.power_cur = CalculatePower.GetPowerCompany(CalculatePower.Power(miner.diff));
                        }

                        var minerdata = new MinerViewData();
                        minerdata.number    = $"{miner.address}_{ miner.number}";
                        minerdata.lasttime  = miner.time;
                        minerdata.power_cur = miner.power_cur;

                        double.TryParse(miner.power_average, out double power_average);
                        minerdata.power_average = CalculatePower.GetPowerCompany(power_average);
                        minerView.miners.Add(minerdata);
                    }
                }
            }

            return(minerView);
        }
Пример #10
0
        public async Task <bool> ModifyMiningPool(int poolid, MinerView minerview)
        {
            try
            {
                if (minerview == null || minerview.Link == null || minerview.Pooltype == null)
                {
                    return(false);
                }
                var miner = await _dbcontext.Miner.Where(x => x.Id == poolid).FirstOrDefaultAsync();

                if (miner == null)
                {
                    return(false);
                }
                if (!CheckPoolType(minerview.Link, minerview.Pooltype))
                {
                    return(false);
                }
                miner.Username                = minerview.Username;
                miner.Minertype               = minerview.Minertype;
                miner.Location                = minerview.Location;
                miner.Link                    = minerview.Link;
                miner.Total                   = minerview.Total;
                miner.Unit                    = minerview.Unit;
                miner.Pooltype                = minerview.Pooltype;
                miner.Standardcalculation     = minerview.Standardcalculation;
                miner.Updatedate              = DateTime.Now;
                _dbcontext.Entry(miner).State = EntityState.Modified;
                await _dbcontext.SaveChangesAsync();

                return(true);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Пример #11
0
 public void SelectMiningView(MinerView view)
 {
     view.SelectView();
     this.MinerView = view;
     ShowMiningInfo(view.Miner);
 }
Пример #12
0
        public MinerView GetMinerViewAbstract(string address)
        {
            if (minerViewAbstractTimePass.IsPassSet())
            {
                minerViewAbstractCache.Clear();
            }
            if (minerViewAbstractCache.TryGetValue(address, out MinerView minerViewLast))
            {
                return(minerViewLast);
            }

            var minerView = new MinerView();
            // pool name
            var httpPoolRelay = Entity.Root.GetComponent <HttpPoolRelay>();

            if (httpPoolRelay != null)
            {
                minerView.address = httpPoolRelay.number;
            }
            else
            {
                minerView.address = "Ruler";
            }

            Dictionary <string, BlockSub> minerTransferCache = null;

            using (DbSnapshot snapshot = PoolDBStore.GetSnapshot())
            {
                var str = snapshot.Get($"Pool_Cache_MinerReward");
                if (!string.IsNullOrEmpty(str))
                {
                    minerTransferCache = JsonHelper.FromJson <Dictionary <string, BlockSub> >(str);
                }
            }

            var transfers_cur = minerTransferCache?.Values.FirstOrDefault(c => c.addressOut == address);

            if (transfers_cur != null)
            {
                minerView.amount_cur = transfers_cur.amount;
                minerView.share      = transfers_cur.type;
            }

            // 当前总算力
            var    miners     = httpPool.GetMinerRewardMin(out long miningHeight);
            var    minerList  = miners?.Values.Where((x) => x.address == address).ToList();
            double totalPower = 0L;

            if (minerList != null)
            {
                minerList.Sort((MinerTask a, MinerTask b) => {
                    return(a.number.CompareTo(b.number));
                });

                for (var ii = 0; ii < minerList.Count; ii++)
                {
                    var miner = minerList[ii];
                    if (double.TryParse(miner.power_average, out double power_average))
                    {
                        totalPower += power_average;
                    }
                }
                minerView.totalMiners = minerList.Count;
            }
            minerView.totalPower = CalculatePower.GetPowerCompany(totalPower);

            minerViewAbstractCache.Add(address, minerView);
            return(minerView);
        }
Пример #13
0
        public MinerView GetMinerView(string address, long transferIndex, long transferColumn, long minerIndex, long minerColumn)
        {
            if (getMinerViewTimePass.IsPassSet())
            {
                getMinerViewCache.Clear();
            }
            if (getMinerViewCache.TryGetValue($"{address}_{transferIndex}_{transferColumn}_{minerIndex}_{minerColumn}", out MinerView minerViewLast))
            {
                return(minerViewLast);
            }

            transferColumn = Math.Min(transferColumn, 100);
            minerColumn    = Math.Min(minerColumn, 100);

            var minerView = new MinerView();

            minerView.address = address;

            Dictionary <string, BlockSub> minerTransferCache = null;

            using (DbSnapshot snapshot = PoolDBStore.GetSnapshot())
            {
                var str = snapshot.Get($"Pool_Cache_MinerReward");
                if (!string.IsNullOrEmpty(str))
                {
                    minerTransferCache = JsonHelper.FromJson <Dictionary <string, BlockSub> >(str);
                }
            }

            var transfers_cur = minerTransferCache?.Values.FirstOrDefault(c => c.addressOut == address);

            if (transfers_cur != null)
            {
                minerView.amount_cur = transfers_cur.amount;
                minerView.share      = transfers_cur.type;
            }

            // 交易确认
            using (DbSnapshot snapshot = PoolDBStore.GetSnapshot())
            {
                int TopIndex = snapshot.Queue.GetTopIndex($"Pool_MT_{address}");
                for (int ii = 1; ii <= (int)transferColumn; ii++)
                {
                    var value = snapshot.Queue.Get($"Pool_MT_{address}", TopIndex - (int)transferIndex - ii);
                    if (!string.IsNullOrEmpty(value))
                    {
                        var transfer = JsonHelper.FromJson <BlockSub>(value);
                        if (transfer != null)
                        {
                            minerView.transfers.Add(transfer);
                        }
                    }
                }

                foreach (var transfer in minerView.transfers)
                {
                    // 节点使用自己的地址挖矿
                    if (transfer.addressIn == transfer.addressOut)
                    {
                        transfer.hash = transfer.addressIn;
                    }
                    else
                    {
                        transfer.hash = TransferProcess.GetMinerTansfer(snapshot, transfer.data);
                    }
                }
            }

            var    miners     = httpPool.GetMinerRewardMin(out long miningHeight);
            var    minerList  = miners?.Values.Where((x) => x.address == address).ToList();
            double totalPower = 0L;

            if (minerList != null)
            {
                minerList.Sort((MinerTask a, MinerTask b) => {
                    return(a.number.CompareTo(b.number));
                });

                // 当前页矿机算力
                for (var ii = 0; ii < minerColumn; ii++)
                {
                    if ((minerIndex + ii) >= minerList.Count)
                    {
                        break;
                    }
                    var miner = minerList[(int)minerIndex + ii];

                    if (string.IsNullOrEmpty(miner.power_cur))
                    {
                        miner.power_cur = CalculatePower.GetPowerCompany(CalculatePower.Power(miner.diff));
                    }

                    var minerdata = new MinerViewData();
                    minerdata.number    = miner.number;
                    minerdata.lasttime  = miner.time;
                    minerdata.power_cur = miner.power_cur;

                    double.TryParse(miner.power_average, out double power_average);
                    minerdata.power_average = CalculatePower.GetPowerCompany(power_average);
                    minerView.miners.Add(minerdata);
                }

                // 当前总算力
                for (var ii = 0; ii < minerList.Count; ii++)
                {
                    var miner = minerList[ii];
                    if (double.TryParse(miner.power_average, out double power_average))
                    {
                        totalPower += power_average;
                    }
                }
                minerView.totalMiners = minerList.Count;
            }

            minerView.totalPower = CalculatePower.GetPowerCompany(totalPower);

            getMinerViewCache.Add($"{address}_{transferIndex}_{transferColumn}_{minerIndex}_{minerColumn}", minerView);
            return(minerView);
        }
Пример #14
0
        public MinerView GetMinerView(string address, long transferIndex, long transferColumn, long minerIndex, long minerColumn)
        {
            transferColumn = Math.Min(transferColumn, 100);
            minerColumn    = Math.Min(minerColumn, 100);

            var minerView = new MinerView();

            minerView.address = address;

            var transfers_cur = MinerReward_PPLNS(false)?.Values.FirstOrDefault(c => c.addressOut == address);

            if (transfers_cur != null)
            {
                minerView.amount_cur = transfers_cur.amount;
            }

            using (DbSnapshot snapshot = PoolDBStore.GetSnapshot())
            {
                int TopIndex = snapshot.Queue.GetTopIndex($"Pool_MT_{address}");
                for (int ii = 1; ii <= (int)transferColumn; ii++)
                {
                    var value = snapshot.Queue.Get($"Pool_MT_{address}", TopIndex - (int)transferIndex - ii);
                    if (!string.IsNullOrEmpty(value))
                    {
                        var transfer = JsonHelper.FromJson <BlockSub>(value);
                        if (transfer != null)
                        {
                            minerView.transfers.Add(transfer);
                        }
                    }
                }

                foreach (var transfer in minerView.transfers)
                {
                    // 节点使用自己的地址挖矿
                    if (transfer.addressIn == transfer.addressOut)
                    {
                        transfer.hash = transfer.addressIn;
                    }
                    else
                    {
                        transfer.hash = transferProcess.GetMinerTansfer(snapshot, transfer.data);
                    }
                }
            }

            var miners    = httpPool.GetMinerReward(out long miningHeight);
            var minerList = miners?.Values.Where((x) => x.address == address).ToList();

            double totalPower = 0L;

            if (minerList != null)
            {
                minerList.Sort((MinerTask a, MinerTask b) => {
                    return(a.number.CompareTo(b.number));
                });

                for (var ii = 0; ii < minerColumn; ii++)
                {
                    if ((minerIndex + ii) >= minerList.Count)
                    {
                        break;
                    }
                    var miner = minerList[(int)minerIndex + ii];

                    if (string.IsNullOrEmpty(miner.power_cur))
                    {
                        miner.power_cur = CalculatePower.GetPowerCompany(CalculatePower.Power(miner.diff));
                    }

                    var minerdata = new MinerViewData();
                    minerdata.number    = miner.number;
                    minerdata.lasttime  = miner.time;
                    minerdata.power_cur = miner.power_cur;

                    double.TryParse(miner.power_average, out double power_average);
                    minerdata.power_average = CalculatePower.GetPowerCompany(power_average);
                    minerView.miners.Add(minerdata);

                    totalPower += power_average;
                }
                minerView.totalMiners = minerList.Count;
            }

            minerView.totalPower = CalculatePower.GetPowerCompany(totalPower);

            return(minerView);
        }
Пример #15
0
 public void Init(IPhysicItem pysicItem, IView view)
 {
     this.pysicItem = pysicItem;
     this.view      = (MinerView)view;
 }
Пример #16
0
        public MinerView GetMinerView(string address, long transferIndex, long transferColumn, long minerIndex, long minerColumn)
        {
            var minerView = new MinerView();

            minerView.address = address;

            var transfers_cur = MinerReward_PPLNS(false)?.Values.FirstOrDefault(c => c.addressOut == address);

            if (transfers_cur != null)
            {
                minerView.amount_cur = transfers_cur.amount;
            }

            long counted = 0;

            using (DbSnapshot snapshot = PoolDBStore.GetSnapshot())
            {
                string str_Counted = snapshot.Get("Pool_Counted");
                if (long.TryParse(str_Counted, out counted))
                {
                    counted = counted - transferIndex;
                    for (int i = 0; i < transferColumn; i++)
                    {
                        string str_MT = snapshot.Get($"Pool_MT_{counted-i}");
                        Dictionary <string, BlockSub> minerTransfer = null;
                        if (!string.IsNullOrEmpty(str_MT))
                        {
                            minerTransfer = JsonHelper.FromJson <Dictionary <string, BlockSub> >(str_MT);
                            if (minerTransfer != null)
                            {
                                var transfer = minerTransfer?.Values.FirstOrDefault(c => c.addressOut == address);
                                if (transfer != null)
                                {
                                    string        str_MR          = snapshot.Get($"Pool_MR_{counted - i}");
                                    MinerRewardDB minerRewardLast = null;
                                    if (!string.IsNullOrEmpty(str_MR))
                                    {
                                        minerRewardLast = JsonHelper.FromJson <MinerRewardDB>(str_MR);
                                    }

                                    long.TryParse(minerRewardLast.time, out long time);
                                    transfer.depend = new DateTime(time).ToString("yyyy-MM-dd HH:mm:ss");
                                    minerView.transfers.Add(transfer);
                                }
                            }
                        }
                    }
                }
            }

            // Is the query successful
            using (var dbSnapshot = PoolDBStore.GetSnapshot(0))
            {
                foreach (var transfer in minerView.transfers)
                {
                    transfer.hash = transferProcess.GetMinerTansfer(dbSnapshot, transfer.data);
                }
            }

            var miners    = httpPool.GetMinerReward(out long miningHeight);
            var minerList = miners?.Values.Where((x) => x.address == address).ToList();

            double totalPower = 0L;

            if (minerList != null)
            {
                minerList.Sort((MinerTask a, MinerTask b) => {
                    return(a.number.CompareTo(b.number));
                });

                for (var ii = 0; ii < minerColumn; ii++)
                {
                    if ((minerIndex + ii) >= minerList.Count)
                    {
                        break;
                    }
                    var miner = minerList[(int)minerIndex + ii];

                    if (string.IsNullOrEmpty(miner.power_cur))
                    {
                        miner.power_cur = CalculatePower.GetPowerCompany(CalculatePower.Power(miner.diff));
                    }

                    var minerdata = new MinerViewData();
                    minerdata.number    = miner.number;
                    minerdata.lasttime  = miner.time;
                    minerdata.power_cur = miner.power_cur;

                    double.TryParse(miner.power_average, out double power_average);
                    minerdata.power_average = CalculatePower.GetPowerCompany(power_average);
                    minerView.miners.Add(minerdata);

                    totalPower += power_average;
                }
                minerView.totalMiners = minerList.Count;
            }

            minerView.totalPower = CalculatePower.GetPowerCompany(totalPower);

            return(minerView);
        }