示例#1
0
        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);
        }
示例#3
0
        private async Task <ManualCashoutSettings> GetSetting()
        {
            var settings = await _offchainSettingsRepository.Get <string>(Constants.ManualHubCashoutSettingsKey);

            return(settings.DeserializeJson(() => new ManualCashoutSettings()));
        }