Example #1
0
 public ThingDoer(BakeryConfig baker)
 {
     try
     {
         _baker           = baker;
         _tzScanConnector = new TzScanConnector(baker);
     }
     catch (Exception e)
     {
         Log.Error("Constructor: " + e.Message);
         Log.Error("Constructor: " + e);
         Singleton.Instance.SendMessage("Constructor: " + e.Message);
         Singleton.Instance.SendMessage("Constructor: " + e);
     }
 }
Example #2
0
        private void WaitForBlock(long blockHeight)
        {
            long estimatedBlock;

            do
            {
                Log.Info($"Waiting for {blockHeight}");
                var block = TzScanConnector.GetBlock();
                estimatedBlock = block.Level;
                Log.Info($"Last Block {block.Level}");
                var dateTime = block.Timestamp.ToLocalTime().DateTime;
                var timeSpan = DateTime.Now - dateTime;
                Log.Info($"{block.Level} {dateTime} {timeSpan.ToPrettyFormat()}");
                if (timeSpan.Minutes > 0)
                {
                    estimatedBlock += timeSpan.Minutes;
                    Log.Info($"That block is old. We must be at block {estimatedBlock}");
                }

                if (estimatedBlock >= blockHeight)
                {
                    Log.Info($"We are at {estimatedBlock} finished loop.");
                    var newspanz = TimeSpan.FromSeconds(20);
                    Log.Info($"Waiting for {newspanz} for good measure!");
                    Thread.Sleep(newspanz);
                    return;
                }

                var untilNextBlock = 60 - timeSpan.TotalSeconds % 60;
                var span           = TimeSpan.FromSeconds(untilNextBlock);
                Log.Info($"Waiting for {span}");
                Thread.Sleep(span);
                estimatedBlock += 1;
                Log.Info($"We must be at block {estimatedBlock}");
                var blocksToWait = blockHeight - estimatedBlock;
                if (blocksToWait > 0)
                {
                    var spanToWait = TimeSpan.FromMinutes(blocksToWait);
                    Log.Info($"Waiting for {spanToWait}");
                    Thread.Sleep(spanToWait);
                }
            } while (estimatedBlock < blockHeight);

            var newspan = TimeSpan.FromSeconds(20);

            Log.Info($"Waiting for {newspan} for good measure!");
            Thread.Sleep(newspan);
        }
Example #3
0
        public void Execute()
        {
            List <string>           addressList;
            List <DelegatePayments> payments;

            using (var context = new MyContext())
            {
                addressList = context.DelegateConfig.Where(x => x.TelegramId == _message.From.Id).Select(x => x.Account).ToList();
                payments    = context.DelegatePayments.Where(x => addressList.Contains(x.Account)).ToList();
            }
            var head  = TzScanConnector.GetHead();
            var level = TzScanConnector.GetLevel(head.Hash);

            _approxFinish = TimeSpan.FromMinutes(level.CycleEndBlock() - level.BlockLevel + 20);

            var message         = "";
            var tzScanConnector = new TzScanConnector(Singleton.Instance.Bakers[0]);

            foreach (var account in addressList)
            {
                message = $"This information is straight from tzscan.io for [{account.Substring(0, 4)}…{account.Substring(account.Length - 4)}](https://tzscan.io/{account}?default=rewards) with your expected fee applied.\n";
                foreach (var reward in tzScanConnector.GetDelegateRewards(account))
                {
                    var payment = payments.FirstOrDefault(x => x.Cycle == reward.Cycle && x.Account == account);
                    if (payment != null)
                    {
                        message += $"▫️ *{payment.Reward}ꜩ* for cycle {reward.Cycle}. [{payment.Paid.Substring(0,4)}…{payment.Paid.Substring(payment.Paid.Length-4)}](https://tzscan.io/{payment.Paid})\n";
                    }
                    else
                    {
                        var pendingReward = (reward.Balance / reward.StakingBalance) * (reward.Rewards + reward.ExtraRewards - reward.Losses);
                        message += $"▫️ *{pendingReward.ToTez()}ꜩ* for cycle {reward.Cycle}. {GetText(reward)}\n";
                    }
                }
                Singleton.Instance.Bot.SendTextMessageAsync(_message.From.Id, message, ParseMode.Markdown, true);
            }
        }