input: 
  def basic_blockchain() -> str:
      """
      Creates a basic blockchain system in Python. The system includes functions to 
      create a block with an index, timestamp, data, and a hash of the previous block, 
      and to add new blocks to the blockchain. Additionally, it provides a function 
      to get the entire blockchain in JSON format.
      
      Example:
      b1 = Block(0, '2023-01-01 12:00:00', 'Genesis Block', None)
      b2 = Block(1, '2023-01-02 12:00:00', 'Transaction Data', b1.hash)
      bc = Blockchain()
      bc.chain.append(b1)
      bc.chain.append(b2)
      bc.get_chain()
      
      Output:
      '[
        {
          "index": 0,
          "timestamp": "2023-01-01 12:00:00",
          "data": "Genesis Block",
          "previous_hash": null,
          "hash": "hashvalue1"
        },
        {
          "index": 1,
          "timestamp": "2023-01-02 12:00:00",
          "data": "Transaction Data",
          "previous_hash": "hashvalue1",
          "hash": "hashvalue2"
        }
      ]'
      """
  
  # Additional code for the blockchain implementation would follow here.
  
output:     
      import hashlib
      import json
      from time import gmtime, strftime
  
      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):
              genesis_block = Block(0, strftime("%Y-%m-%d %H:%M:%S", gmtime()), "Genesis Block", "0")
              self.chain.append(genesis_block)
  
          def add_block(self, data):
              previous_block = self.chain[-1]
              new_block = Block(len(self.chain), strftime("%Y-%m-%d %H:%M:%S", gmtime()), data, previous_block.hash)
              self.chain.append(new_block)
  
          def get_chain(self):
              chain_data = []
              for block in self.chain:
                  chain_data.append({
                      "index": block.index,
                      "timestamp": block.timestamp,
                      "data": block.data,
                      "previous_hash": block.previous_hash,
                      "hash": block.hash
                  })
              return json.dumps(chain_data, indent=4)
  
      bc = Blockchain()
      bc.add_block("Transaction Data 1")
      bc.add_block("Transaction Data 2")
      return bc.get_chain()
  