public HashSet <Address> GetAddresses() { using (var entities = new BlockchainEntities()) { var addresses = new HashSet <Address>(entities.accounts.Select(_ => _.address).ToList().Select(Address.FromRawBytes)); return(addresses); } }
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()); } }
public byte[] GetRawLedger(long height) { using (var entities = new BlockchainEntities()) { var ledger = entities.ledgers.FirstOrDefault(_ => _.height == height); return(ledger?.raw); } }
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)); } }
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); } } }
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}"); }
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(); }
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()); } }
private void SaveState(RepositoryManager repositories, BlockchainEntities entities, long height) { var stateChangeRepository = repositories.GetRepository <LedgerStateChangeRepository>(); stateChangeRepository.CreateOrUpdate(entities, new LedgerStateChangeSimple(height, GetLedgerStateChangeBytes(Data.State))); }
protected override DbSet <tableledgerheight> GetDbSet(BlockchainEntities entities) { return(entities.tableledgerheights); }
protected override bool CheckIsNew(BlockchainEntities entities, TableLedgerHeight item) { return(item.Height == 0); }
protected override DbSet <ledger> GetDbSet(BlockchainEntities entities) { return(entities.ledgers); }
protected override bool CheckIsNew(BlockchainEntities entities, LedgerEntity item) { return(true); }
protected abstract void Populate(RepositoryManager repositories, BlockchainEntities entities);
public abstract void Initialize(BlockchainEntities entities);
protected override bool CheckIsNew(BlockchainEntities entities, AccountEntity item) { return(item.IsNew); }
protected override DbSet <account> GetDbSet(BlockchainEntities entities) { return(entities.accounts); }
protected override bool CheckIsNew(BlockchainEntities entities, LedgerStateChangeSimple item) { return(true); }