Пример #1
0
 public HashSet <Address> GetAddresses()
 {
     using (var entities = new BlockchainEntities())
     {
         var addresses = new HashSet <Address>(entities.accounts.Select(_ => _.address).ToList().Select(Address.FromRawBytes));
         return(addresses);
     }
 }
Пример #2
0
 public List <SignedLedger> GetLedgersFromHeight(long startHeight)
 {
     using (var entities = new BlockchainEntities())
     {
         var rawLedgers = entities.ledgers.Where(_ => _.height >= startHeight).ToList();
         return(rawLedgers.Select(_ => LedgerCompressionEngine.ReadZippedLedger(_.raw)).ToList());
     }
 }
Пример #3
0
 public byte[] GetRawLedger(long height)
 {
     using (var entities = new BlockchainEntities())
     {
         var ledger = entities.ledgers.FirstOrDefault(_ => _.height == height);
         return(ledger?.raw);
     }
 }
Пример #4
0
 public SignedLedger GetLedgerByHash(LedgerHash hash)
 {
     using (var entities = new BlockchainEntities())
     {
         var ledger = entities.ledgers.FirstOrDefault(_ => _.hash == hash.Bytes);
         var raw    = ledger?.raw;
         return(LedgerCompressionEngine.ReadZippedLedger(raw));
     }
 }
Пример #5
0
 public SignedLedger GetLastLedgerFromRaw()
 {
     using (var entities = new BlockchainEntities())
     {
         var max = entities.ledgers.OrderByDescending(ledger => ledger.height).FirstOrDefault();
         Debug.Assert(max == null || max.raw != null && max.raw.Length != 0);
         return(LedgerCompressionEngine.ReadZippedLedger(max?.raw));
     }
 }
 // we initialize every repository and load data from database
 public void Initialize()
 {
     using (var entities = new BlockchainEntities())
     {
         foreach (var repository in repositories.Values)
         {
             repository.Initialize(entities);
         }
     }
 }
Пример #7
0
        protected override void Populate(RepositoryManager repositories, BlockchainEntities entities)
        {
            // Here we save only binarized ledger
            var bytes            = GetSignedLedgerBytes(Data.Ledger);
            var light            = Data.Ledger.Ledger.LedgerLight;
            var ledgerRepository = repositories.GetRepository <LedgerRepository>();

            ledgerRepository.CreateOrUpdate(entities, new LedgerEntity(Data.Ledger.Hash, light, Data.Ledger.Ledger.MerkleHash, bytes));

            // TODO Save this after
            SaveState(repositories, entities, light.Height);
        }
        protected override void Populate(RepositoryManager repositories, BlockchainEntities entities)
        {
            // get transformed data
            foreach (var entity in Data)
            {
                repository.CreateOrUpdate(entities, entity);
            }

            var heights     = repositories.GetRepository <TableLedgerHeightRepository>();
            var heightTable = new TableLedgerHeight(repository.TableName, height);

            heights.CreateOrUpdate(entities, heightTable);

            logger.Log($"{repository.TableName}: {Data.Count()}, Height: {height}");
        }
Пример #9
0
 public void Save(RepositoryManager repositories)
 {
     using (var entities = new BlockchainEntities())
     {
         using (new PerformanceLogger(logger, "PopulateEntitiesLogger"))
         {
             // TODO this is slow
             Populate(repositories, entities);
         }
         using (new PerformanceLogger(logger, "SaveDatabaseLogger"))
         {
             entities.SaveChanges();
         }
     }
     OnSaveFinished();
 }
Пример #10
0
        public List <SignedLedgerState> GetLedgersWithStateFromHeight(long startHeight)
        {
            using (var entities = new BlockchainEntities())
            {
                var rawLedgers    = entities.ledgers.Where(_ => _.height >= startHeight).ToList();
                var readedLedgers = rawLedgers.Select(_ => LedgerCompressionEngine.ReadZippedLedger(_.raw));

                var rawStateChanges    = entities.ledgerstatechanges.Where(_ => _.ledger_height >= startHeight).ToList();
                var readedStateChanges = rawStateChanges.Select(_ => ReadStateChange(_.ledger_height, _.raw));

                var results = from ledger in readedLedgers
                              join state in readedStateChanges
                              on ledger.Ledger.LedgerLight.Height equals state.Item1
                              select new SignedLedgerState(ledger, state.Item2);

                return(results.ToList());
            }
        }
Пример #11
0
        private void SaveState(RepositoryManager repositories, BlockchainEntities entities, long height)
        {
            var stateChangeRepository = repositories.GetRepository <LedgerStateChangeRepository>();

            stateChangeRepository.CreateOrUpdate(entities, new LedgerStateChangeSimple(height, GetLedgerStateChangeBytes(Data.State)));
        }
Пример #12
0
 protected override DbSet <tableledgerheight> GetDbSet(BlockchainEntities entities)
 {
     return(entities.tableledgerheights);
 }
Пример #13
0
 protected override bool CheckIsNew(BlockchainEntities entities, TableLedgerHeight item)
 {
     return(item.Height == 0);
 }
Пример #14
0
 protected override DbSet <ledger> GetDbSet(BlockchainEntities entities)
 {
     return(entities.ledgers);
 }
Пример #15
0
 protected override bool CheckIsNew(BlockchainEntities entities, LedgerEntity item)
 {
     return(true);
 }
Пример #16
0
 protected abstract void Populate(RepositoryManager repositories, BlockchainEntities entities);
Пример #17
0
 public abstract void Initialize(BlockchainEntities entities);
Пример #18
0
 protected override bool CheckIsNew(BlockchainEntities entities, AccountEntity item)
 {
     return(item.IsNew);
 }
Пример #19
0
 protected override DbSet <account> GetDbSet(BlockchainEntities entities)
 {
     return(entities.accounts);
 }
 protected override bool CheckIsNew(BlockchainEntities entities, LedgerStateChangeSimple item)
 {
     return(true);
 }