blockchain.py 999 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. from ouroboros.logger import Logger
  2. '''
  3. Non-forkable Blockchain for simplicity
  4. #TODO consider forkable property
  5. '''
  6. class Blockchain(object):
  7. def __init__(self, R):
  8. self.blocks = []
  9. self.log = Logger(self)
  10. self.R = R # how many slots in single epoch
  11. @property
  12. def epoch_length(self):
  13. return self.R
  14. def __repr__(self):
  15. buff=''
  16. for i in range(len(self.blocks)):
  17. buff+=self.blocks[i]
  18. return buff
  19. def __getitem__(self, i):
  20. return self.blocks[i]
  21. def __len__(self):
  22. return len(self.blocks)
  23. def __add_block(self, block):
  24. self.blocks.append(block)
  25. def add_epoch(self, epoch):
  26. for idx, block in enumerate(epoch):
  27. if not block.empty:
  28. self.__add_block(block)
  29. else:
  30. self.log.info(f"met an empty block at index of index: {block.index},\nrelative slot:{idx}\nabsolute slot: {self.length*idx+block.slot}")