Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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());
        }