public Task AddBlock(Block block) { var persisted = new PersistedBlock(block); var prevHeader = MainChain .Find(x => x.Entity.Header.BlockId == block.Header.PreviousBlock) .Select(x => x.Entity.Header) .FirstOrDefault(); if (prevHeader != null) { persisted.Statistics.BlockTime = Convert.ToInt32(TimeSpan.FromTicks(block.Header.Timestamp - prevHeader.Timestamp).TotalSeconds); } MainChain.Insert(persisted); foreach (var txn in block.Transactions) { var pt = txn.Instructions.Select(ins => new PersistedInstruction(block.Header.BlockId, txn.TransactionId, ins, _addressEncoder.HashPublicKey(ins.PublicKey))).ToList(); Instructions.InsertBulk(pt); } ForkChain.Delete(x => x.Entity.Header.BlockId == block.Header.BlockId); return(Task.CompletedTask); }
public PersistedInstruction(Instruction entity, IAddressEncoder addressEncoder) : base(entity) { Id = entity.InstructionId; Statistics.PublicKeyHash = addressEncoder.HashPublicKey(entity.PublicKey); }