public async Task Cashout()
        {
            var currentMultiCashout = await _multiCashoutRepository.GetCurrentMultiCashout();

            if (currentMultiCashout != null)
            {
                Transaction tx = null;
                try
                {
                    tx = await _bitcoinTransactionService.GetTransaction(currentMultiCashout.TransactionHash);
                }
                catch
                {
                }
                if (tx != null)
                {
                    await _multiCashoutRepository.CompleteMultiCashout(currentMultiCashout.MultipleCashoutId);
                }
                else
                {
                    await RetryBroadcast(currentMultiCashout);
                }
            }

            var cashouts = (await _cashoutRequestRepository.GetOpenRequests()).OrderBy(o => o.Date).ToList();

            if (!cashouts.Any())
            {
                return;
            }
            var maxCount = await _settingsRepository.Get(Constants.MaxCountAggregatedCashouts, MaxCountAggregatedCashoutsDefault);

            var cashoutDelay = TimeSpan.FromSeconds(await _settingsRepository.Get(Constants.MaxCashoutDelaySeconds, MaxCashoutDelaySecondsDefault));

            cashouts = cashouts.Take(maxCount).ToList();

            if (cashouts.Count < maxCount && DateTime.UtcNow - cashouts.First().Date < cashoutDelay)
            {
                return;
            }

            var multiCashoutId = Guid.NewGuid();
            CreateMultiCashoutTransactionResult createTxData = null;
            string signedHex;

            try
            {
                createTxData = await _lykkeTransactionBuilderService.GetMultipleCashoutTransaction(cashouts.ToList(), multiCashoutId);

                signedHex = await _signatureApi.SignTransaction(createTxData.Transaction.ToHex());
            }
            catch (Exception)
            {
                if (createTxData != null)
                {
                    await _spentOutputService.RemoveSpentOutputs(createTxData.Transaction);
                }
                throw;
            }

            var signedTx = new Transaction(signedHex);

            var txHash = signedTx.GetHash().ToString();

            await _cashoutRequestRepository.SetMultiCashoutId(createTxData.UsedRequests.Select(o => o.CashoutRequestId), multiCashoutId);

            await _multiCashoutRepository.CreateMultiCashout(multiCashoutId, signedHex, txHash);

            await _bitcoinBroadcastService.BroadcastTransaction(multiCashoutId, createTxData.UsedRequests.Select(o => o.CashoutRequestId).ToList(),
                                                                signedTx);

            await _multiCashoutRepository.CompleteMultiCashout(multiCashoutId);

            SendCompleteCashoutEvents(createTxData.UsedRequests, txHash);
        }