input: 
  import hashlib
  import json
  from datetime import datetime
  from typing import List
  
  class Block:
      def __init__(self, index: int, timestamp: str, data: str, previous_hash: str):
          self.index = index
          self.timestamp = timestamp
          self.data = data
          self.previous_hash = previous_hash
          self.hash = self.hash_block()
  
      def hash_block(self) -> str:
          sha = hashlib.sha256()
          sha.update((str(self.index) + 
                      str(self.timestamp) + 
                      str(self.data) + 
                      str(self.previous_hash)).encode('utf-8'))
          return sha.hexdigest()
  
  def create_genesis_block() -> Block:
      """ Manually construct a genesis block with index zero and arbitrary 
      previous hash.
      """
      return Block(0, datetime.now().isoformat(), "Genesis Block", "0")
  
  def next_block(last_block: Block, data: str) -> Block:
      """ Generate the next block in the blockchain.
      """
      this_index = last_block.index + 1
      this_timestamp = datetime.now().isoformat()
      this_hash = last_block.hash
      return Block(this_index, this_timestamp, data, this_hash)
  
  def create_blockchain(blockchain_transactions: List[str]) -> List[Block]:
      """ Create a full blockchain starting with the genesis block.
      >>> create_blockchain(['transaction1', 'transaction2'])
      [Block(0, '2023-10-01T12:34:56.789012', 'Genesis Block', '0', 'a5d...'), Block(1, '2023-10-01T12:34:56.789012', 'transaction1', 'a5d...'), Block(2, '2023-10-01T12:34:56.789012', 'transaction2', 'b6e...')]
      """
      blockchain = [create_genesis_block()]
      previous_block = blockchain[0]
  
      for transaction in blockchain_transactions:
          block_to_add = next_block(previous_block, transaction)
          blockchain.append(block_to_add)
          previous_block = block_to_add
  
      return blockchain
  
output:     blockchain = [create_genesis_block()]
      previous_block = blockchain[0]
  
      for transaction in blockchain_transactions:
          block_to_add = next_block(previous_block, transaction)
          blockchain.append(block_to_add)
          previous_block = block_to_add
  
      return blockchain