input: def blockchain_system():
      """Compose a basic blockchain system in Python.
      This includes a Block class to represent individual blocks and a Blockchain class to manage the chain.
      The blockchain system supports adding new blocks and retrieving the entire chain in JSON format.
      >>> blockchain = Blockchain()
      >>> blockchain.add_block({"timestamp": "2023-10-01 12:00:00", "data": "First block"})
      >>> blockchain.add_block({"timestamp": "2023-10-01 12:05:00", "data": "Second block"})
      >>> blockchain.get_chain()
      '[
        {
          "index": 0,
          "timestamp": "2023-10-01 12:00:00",
          "data": "First block",
          "previous_hash": null,
          "hash": "..."
        },
        {
          "index": 1,
          "timestamp": "2023-10-01 12:05:00",
          "data": "Second block",
          "previous_hash": "...",
          "hash": "..."
        }
      ]'
      """
output:     
  import hashlib
  import json
  import time
  
  class Block:
      def __init__(self, index, timestamp, data, previous_hash):
          self.index = index
          self.timestamp = timestamp
          self.data = data
          self.previous_hash = previous_hash
          self.hash = self.calculate_hash()
  
      def calculate_hash(self):
          block_string = json.dumps({"index": self.index, "timestamp": self.timestamp, "data": self.data, "previous_hash": self.previous_hash}, sort_keys=True).encode()
          return hashlib.sha256(block_string).hexdigest()
  
  class Blockchain:
      def __init__(self):
          self.chain = [self.create_genesis_block()]
  
      def create_genesis_block(self):
          return Block(0, "2023-10-01 12:00:00", "Genesis Block", "0")
  
      def get_latest_block(self):
          return self.chain[-1]
  
      def add_block(self, data):
          latest_block = self.get_latest_block()
          new_block = Block(latest_block.index + 1, time.strftime("%Y-%m-%d %H:%M:%S"), data, latest_block.hash)
          self.chain.append(new_block)
  
      def get_chain(self):
          return json.dumps([{"index": block.index, "timestamp": block.timestamp, "data": block.data, "previous_hash": block.previous_hash, "hash": block.hash} for block in self.chain], indent=2)
  