Exemplo n.º 1
0
        public async Task SynchronizeWalletsAsync()
        {
            var walletsWithBalances = (await _bitcoinApiWrapper.TryListWalletsWithBalancesAsync().ConfigureAwait(false)).ToList();

            await _walletRepository.TryUpdateWalletsAsync(walletsWithBalances).ConfigureAwait(false);

            var walletsWithTransactions = (await Task.WhenAll(walletsWithBalances.Select(async wallet =>
            {
                var transactions = await _bitcoinApiWrapper.TryListTransactionsAsync(wallet.Name).ConfigureAwait(false);

                foreach (var transaction in transactions)
                {
                    wallet.Transactions.Add(transaction);
                }

                return(wallet);
            })).ConfigureAwait(false)).ToList();

            await _walletRepository.TryUpdateTransactionsAsync(walletsWithTransactions).ConfigureAwait(false);
        }
Exemplo n.º 2
0
        public async Task <SendBtcResultDto> SendBtcAsync(SendBtcDto btc)
        {
            var wallets = await _bitcoinApiWrapper.TryListWalletsWithBalancesAsync().ConfigureAwait(false);

            var walletsList = wallets.Where(x => x.Balance > btc.Amount).ToList();

            if (walletsList.Count == 0)
            {
                throw new Exception(Errors.NotEnoughFundsError);
            }

            var rand         = new Random(DateTime.Now.Millisecond);
            var randIndex    = rand.Next(0, walletsList.Count);
            var randomWallet = walletsList[randIndex];

            string transactionId = await _bitcoinApiWrapper.TrySendBtcAsync(btc, randomWallet.Name).ConfigureAwait(false);

            return(new SendBtcResultDto()
            {
                TransactionId = transactionId
            });
        }