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); } }
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); }
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); } }