private async Task SaveTransfersAndAuditAllUserBalances(Dictionary <Guid, CEFSBalance> userIds, List <TransferHistory> transfers, List <int> Currencies, IExchangeDataContext context) { Log.Message(LogLevel.Info, "SaveTransfersAndSuditUserBalances entered."); await context.Database.BulkInsertAsync(transfers); await context.SaveChangesAsync(); // audit all users for all currencies involved. foreach (var currencyId in Currencies) { foreach (var id in userIds.Keys) { await context.AuditUserBalance(id, currencyId); } await context.AuditUserBalance(Constant.SYSTEM_USER_PAYTOPIA, currencyId); await context.AuditUserBalance(Constant.SYSTEM_USER_STAGING, currencyId); await context.AuditUserBalance(Constant.SYSTEM_USER_CEFS, currencyId); } await context.SaveChangesAsync(); Log.Message(LogLevel.Info, "SaveTransfersAndSuditUserBalances exited."); }
private async Task PerformWalletTransactionsAndUpdateDepositsWithIds(List <string> transactionIds, IExchangeDataContext context) { Log.Message(LogLevel.Info, "PerformWalletTransactionsAndUpdateDepositsWithIds entered."); // send transactions to the wallets for System_User cefs payments and update the deposits with the real txId. var cefsDeposits = await context.Deposit.Where(x => transactionIds.Contains(x.Txid)).ToListAsync().ConfigureAwait(false); foreach (var txId in transactionIds) { try { var deposit = cefsDeposits.FirstOrDefault(x => x.Txid == txId); var currency = await context.Currency.FirstOrDefaultAsync(c => c.Id == deposit.CurrencyId).ConfigureAwait(false); var currencyAddress = await context.Address.FirstOrDefaultAsync(a => a.UserId == Constant.SYSTEM_USER_STAGING && a.CurrencyId == deposit.CurrencyId).ConfigureAwait(false); if (currencyAddress == null) { Log.Message(LogLevel.Error, $"No address exists for currency {currency.Symbol}. Unable to process CEF deposit."); continue; } var connector = new WalletConnector(currency.WalletHost, currency.WalletPort, currency.WalletUser, currency.WalletPass, WALLET_TIMEOUT); var result = await connector.SendToAddressAsync(currencyAddress.AddressHash, deposit.Amount); if (result != null) { deposit.Txid = result.Txid; await context.SaveChangesAsync(); } } catch (Exception ex) { Log.Message(LogLevel.Error, $"Wallet Transaction blew up.\r\n{ex.Message}"); } } Log.Message(LogLevel.Info, "PerformWalletTransactionsAndUpdateDepositsWithIds exited."); }