input: 
  def create_blockchain_system():
      """Compose a basic blockchain system in Python. The system includes a hash function for SHA-256, 
      a Block class to represent each block, and a Blockchain class to manage the chain. The Blockchain class 
      also includes a method to add blocks and another to return the entire blockchain as a JSON string.
      >>> block1 = {'timestamp': '2023-10-01', 'data': 'First block'}
      >>> block2 = {'timestamp': '2023-10-02', 'data': 'Second block'}
      >>> blockchain = Blockchain()
      >>> blockchain.add_block(block1)
      >>> blockchain.add_block(block2)
      >>> blockchain.get_chain()
      '[
        {
          "index": 0,
          "timestamp": "2023-10-01",
          "data": "First block",
          "previous_hash": null,
          "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
        },
        {
          "index": 1,
          "timestamp": "2023-10-02",
          "data": "Second block",
          "previous_hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
          "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
        }
      ]'
      """
  
output:     
  import hashlib
  import json
  from time import time
  
  def hash_function(data):
      return hashlib.sha256(json.dumps(data, sort_keys=True).encode()).hexdigest()
  
  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 hash_function(block_string)
  
  class Blockchain:
      def __init__(self):
          self.chain = [self.create_genesis_block()]
  
      def create_genesis_block(self):
          return Block(0, "2023-10-01", "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(), 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)
  