public async Task GeneratorTransaction() { var cancelTokenSource = new CancellationTokenSource(); var ct = cancelTokenSource.Token; var rnd = new Random(); using (var context = new BitcoindDbContext(DbContextOptions)) { for (var i = 1; i < 1000; i++) { var bitcoin = new Key(); var bitcoinaddress = bitcoin.PubKey.GetAddress(Network.TestNet); var amount = rnd.Next(1, i); var confirmation = (byte)rnd.Next(0, 4); var transaction = new TransactionEntity { Address = bitcoinaddress.ToString(), Amount = amount, IdempotencyKey = Guid.NewGuid(), Data = DateTime.UtcNow, Confirmation = confirmation }; await context .Transactions .AddAsync(transaction, ct); } await context .SaveChangesAsync(ct); } }
public async Task <object> SendBtcAsync( ITransactionInfo info, CancellationToken ct ) { var wallet = await _context .Wallets .FirstOrDefaultAsync(e => e.Balance > info.Amount, ct); if (wallet == null) { throw new Exception("Wallet not found for the transaction"); } var transaction = new TransactionEntity { Address = info.Address, Amount = info.Amount, IdempotencyKey = info.IdempotencyKey, Data = DateTime.UtcNow, WalletId = wallet.Id, Type = TransactionType.Send }; await _context .Transactions .AddAsync(transaction, ct); await _context .SaveChangesAsync(ct); return(Transaction.FromDbo(transaction)); }
public async Task <object> GetLastAsync( CancellationToken ct ) { var d = await GetSendListAsync(ct); var transactions = await _context.Transactions .Where(x => x.IsNew || x.Confirmation < 3) .ToListAsync(ct); foreach (var transaction in transactions) { transaction.IsNew = false; } await _context .SaveChangesAsync(ct); return(transactions .Select(Transaction.FromDbo) .ToList()); }