private async Task <SaveResult> SaveTransactions(AkromaContext context, BlockWithTransactions unsavedBlock)
        {
            if (!unsavedBlock.Transaction.Any())
            {
                return(SaveResult.Success());
            }

            foreach (var transaction in unsavedBlock.Transaction)
            {
                var aka    = UnitConversion.Convert.FromWeiToBigDecimal(transaction.Value);
                var toSave = new TransactionEntity
                {
                    Hash             = transaction.Hash,
                    Nonce            = transaction.Nonce.HexValue,
                    BlockHash        = transaction.BlockHash,
                    BlockNumber      = int.Parse(transaction.BlockNumber.Value.ToString()),
                    TransactionIndex = int.Parse(transaction.TransactionIndex.Value.ToString()),
                    From             = transaction.From,
                    To        = transaction.To,
                    Value     = decimal.Parse(aka.ToString()),
                    Gas       = transaction.Gas.HexValue,
                    GasPrice  = transaction.GasPrice.HexValue,
                    Timestamp = long.Parse(unsavedBlock.Timestamp.Value.ToString()),
                    Input     = transaction.Input
                };
                context.Transactions.Add(toSave);
                await context.SaveChangesAsync();
            }
            return(SaveResult.Success());
        }
        private async Task <SaveResult> SaveBlock(AkromaContext context, Block unsavedBlock)
        {
            var blockNumber = unsavedBlock.Number.Value;
            //TODO: THIS IS SLOW AF.
            var exists = await context.Blocks.AnyAsync(b => b.Number == blockNumber);

            if (exists)
            {
                return(SaveResult.Success(true));
            }

            var toSave = new BlockEntity
            {
                Number           = int.Parse(unsavedBlock.Number.Value.ToString()),
                Hash             = unsavedBlock.Hash,
                ParentHash       = unsavedBlock.ParentHash,
                Nonce            = unsavedBlock.Nonce,
                Sha3Uncles       = unsavedBlock.Sha3Uncles,
                LogsBloom        = unsavedBlock.LogsBloom,
                TransactionsRoot = unsavedBlock.TransactionsRoot,
                StateRoot        = unsavedBlock.StateRoot,
                Miner            = unsavedBlock.Miner,
                Difficulty       = unsavedBlock.Difficulty.HexValue,
                TotalDifficulty  = unsavedBlock.TotalDifficulty.HexValue,
                Size             = int.Parse(unsavedBlock.Size.Value.ToString()),
                ExtraData        = unsavedBlock.ExtraData,
                GasLimit         = long.Parse(unsavedBlock.GasLimit.Value.ToString()),
                GasUsed          = long.Parse(unsavedBlock.GasUsed.Value.ToString()),
                Timestamp        = int.Parse(unsavedBlock.Timestamp.Value.ToString())
            };

            foreach (var uncle in unsavedBlock.Uncles)
            {
                toSave.Uncles.Add(new UncleEntity
                {
                    Block = toSave,
                    Data  = uncle
                });
            }
            context.Blocks.Add(toSave);
            var saved = await context.SaveChangesAsync();

            return(new SaveResult
            {
                Exists = false,
                Ok = saved == 1
            });
        }
        public async Task MigrateDatabase()
        {
            var builder    = new DbContextOptionsBuilder <AkromaContext>();
            var connection = Environment.GetEnvironmentVariable("Database__ExplorerConnectionString") ?? "";

            if (string.IsNullOrEmpty(connection))
            {
                throw new Exception("unable to get connection string from env var");
            }

            builder.UseSqlServer(connection);
            var akromaContext = new AkromaContext(builder.Options);
            // await akromaContext.Database.EnsureDeletedAsync();
            await akromaContext.Database.MigrateAsync();

            //var service = new ImportService(akromaContext);
            //await service.Execute();
        }
Exemple #4
0
 public SQLTransactionsRepository(AkromaContext context)
 {
     _context = context;
 }
 public SQLAddressRepository(AkromaContext context)
 {
     _context = context;
 }
 public SQLBlocksRepository(AkromaContext context)
 {
     _context = context;
 }
Exemple #7
0
 public SQLNetworkRepository(AkromaContext context)
 {
     _context = context;
 }
 public SQLPriceRepository(AkromaContext context)
 {
     _context = context;
 }