private async Task GenerateRequestsForAsset(string asset, decimal minAmount, DateTime?lastActivity = null) { var createdCount = 0; try { var channels = await GetChannels(asset); var existingRequests = await PrepareExistingRequests(asset); foreach (var channel in channels.Balances) { // check balance if (channel.HubAmount < minAmount || existingRequests.Contains(channel.Multisig)) { continue; } //check last activity date if (lastActivity != null && channel.UpdateDt > lastActivity) { continue; } var client = await _walletCredentialsRepository.GetClientIdByMultisig(channel.Multisig); if (string.IsNullOrWhiteSpace(client)) { continue; } await _offchainRequestService.CreateHubCashoutRequests(asset, client); createdCount++; } } finally { if (createdCount != 0) { await _slackNotificationsSender.SendAsync("Offchain", ":information_source:", $"New {createdCount} hub requests were created for {asset}. (min. {minAmount})"); } await _log.WriteInfoAsync(nameof(ManualHubCashoutFunction), nameof(GenerateRequestsForAsset), $"Asset: {asset}, requests created: {createdCount}", "Finished"); } }
private async Task CreateHubCashoutIfNeed(IOffchainTransfer offchainTransfer) { try { var client = await _walletCredentialsRepository.GetAsync(offchainTransfer.ClientId); var currentRequests = (await _offchainRequestRepository.GetRequestsForClient(offchainTransfer.ClientId)).ToList(); var currentChannels = await _bitcoinApiClient.Balances(client.MultiSig); var hasBtcRequest = currentRequests.FirstOrDefault(x => x.AssetId == LykkeConstants.BitcoinAssetId && x.TransferType == OffchainTransferType.HubCashout) != null; var hasLkkRequest = currentRequests.FirstOrDefault(x => x.AssetId == LykkeConstants.LykkeAssetId && x.TransferType == OffchainTransferType.HubCashout) != null; var btcSetting = await GetAssetSetting(LykkeConstants.BitcoinAssetId); var lkkSetting = await GetAssetSetting(LykkeConstants.LykkeAssetId); var btcHubAmount = !currentChannels.HasError && currentChannels.Balances.ContainsKey(LykkeConstants.BitcoinAssetId) && currentChannels.Balances[LykkeConstants.BitcoinAssetId].Actual ? currentChannels.Balances[LykkeConstants.BitcoinAssetId].HubAmount : 0; var lkkHubAmount = !currentChannels.HasError && currentChannels.Balances.ContainsKey(LykkeConstants.LykkeAssetId) && currentChannels.Balances[LykkeConstants.LykkeAssetId].Actual ? currentChannels.Balances[LykkeConstants.LykkeAssetId].HubAmount : 0; var needBtcCashout = offchainTransfer.AssetId != LykkeConstants.BitcoinAssetId && btcHubAmount > btcSetting.Dust && !hasBtcRequest; var needLkkCashout = offchainTransfer.AssetId != LykkeConstants.LykkeAssetId && lkkHubAmount > lkkSetting.Dust && !hasLkkRequest; await _offchainRequestService.CreateHubCashoutRequests(offchainTransfer.ClientId, needBtcCashout?btcHubAmount : 0, needLkkCashout?lkkHubAmount : 0); } catch (Exception e) { await _log.WriteErrorAsync(nameof(OffchainTransactionFinalizeFunction), nameof(CreateHubCashoutIfNeed), $"{offchainTransfer.ClientId}", e); } }