コード例 #1
0
        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);
            }
        }