public async Task Process() { var multisigsWithOldRequests = await PrepareExistingRequests(); var channels = await GetChannels(Constants.BtcAssetId); var ordered = channels.Balances.Where(x => x.ClientAmount == 0).OrderByDescending(x => x.HubAmount); var broadcastedCount = 0; var maxBroadcastCount = await _offchainSettingsRepository.Get(Constants.MaxCommitmentBroadcastCountSettingsKey, MaxBroadcastCount); try { foreach (var item in ordered) { if (broadcastedCount >= maxBroadcastCount) { return; } if (multisigsWithOldRequests.ContainsKey(item.Multisig)) { try { await _logger.WriteInfoAsync(nameof(BroadcastCommitmentFunction), nameof(Process), $"Multisig: {item.Multisig}", "Start commitment broadcasting"); var response = await BroadcastCommitment(item.Multisig, Constants.BtcAssetId); broadcastedCount++; await _offchainRequestService.Complete(multisigsWithOldRequests[item.Multisig]); await _logger.WriteInfoAsync(nameof(BroadcastCommitmentFunction), nameof(Process), $"Multisig: {item.Multisig}, hash: {response.TransactionHash}", "Finish commitment broadcasting"); } catch (Exception e) { await _logger.WriteErrorAsync(nameof(BroadcastCommitmentFunction), nameof(Process), $"Multisig: {item.Multisig}", e); } } } } finally { if (broadcastedCount > 0) { await _slackNotificationsSender.SendAsync("Offchain", ":information_source:", $"New {broadcastedCount} hub commitments were broadcasted"); } } }
private async Task <Dictionary <string, decimal> > GetSettings() { var settings = await _offchainSettingsRepository.Get <string>(Constants.HubCashoutSettingsKey); var data = settings.DeserializeJson(() => new Dictionary <string, decimal>()); if (!data.ContainsKey(Constants.BtcAssetId)) { data[Constants.BtcAssetId] = Constants.BtcDefaultCashout; } if (!data.ContainsKey(Constants.LkkAssetId)) { data[Constants.LkkAssetId] = Constants.LkkDefaultCashout; } return(data); }
private async Task <ManualCashoutSettings> GetSetting() { var settings = await _offchainSettingsRepository.Get <string>(Constants.ManualHubCashoutSettingsKey); return(settings.DeserializeJson(() => new ManualCashoutSettings())); }