input: def create_blockchain_with_basic_operations(self) -> str:
      """Creates a basic blockchain with core operations for adding blocks and hashing them.
      The blockchain should include a method to create a new block and a method to hash a block.
      
      Example:
      blockchain = Blockchain()
      block_1 = blockchain.create_block(12345, '0')
      encoded_block_1 = blockchain.hash_block(block_1)
      
      The expected output value should be the hash of the first block in the blockchain.
      """
output:     class Blockchain:
          def __init__(self):
              self.chain = []
              self.create_block(0, '0')  # Genesis block
  
          def create_block(self, data, previous_hash):
              block = {
                  'index': len(self.chain),
                  'data': data,
                  'previous_hash': previous_hash,
                  'timestamp': str(datetime.datetime.now())
              }
              self.chain.append(block)
              return block
  
          def hash_block(self, block):
              encoded_block = json.dumps(block, sort_keys=True).encode()
              return hashlib.sha256(encoded_block).hexdigest()
  
      blockchain = Blockchain()
      block_1 = blockchain.create_block(12345, '0')
      encoded_block_1 = blockchain.hash_block(block_1)
      return encoded_block_1