Let's Build the Tiniest Blockchain

Perhaps change your block class to look like this:

import datetime as date
import hashlib as hasher

class Block():
    def __init__(self, index, timestamp, data, previous_hash = None):
        self.index = index
        self.timestamp = timestamp
        self.data = data
        self.previous_hash = previous_hash

    def __hash__(self):
        sha = hasher.sha256()
        sha.update(str(self.index) + str(self.timestamp) + str(self.data) +  str(self.previous_hash))
        return int(sha.hexdigest(), base=16)

    def __getitem__(self, key):
        if key == 'index': return self.index
        elif key == 'timestamp': return self.timestamp
        elif key == 'data': return self.data
        elif key == 'previous_hash': return self.previous_hash
        elif key == 'hash': return hash(self)

def next_block(last_block):
  this_index = last_block.index + 1
  this_timestamp = date.datetime.now()
  this_data = "Hey! I'm block " + str(this_index)
  this_hash = hash(last_block)
  return Block(this_index, this_timestamp, this_data, this_hash)

if __name__ == '__main__':
    # Manually construct a block with
    # index zero and arbitrary previous hash
    blk = Block(0, date.datetime.now(), "Genesis Block")

    blockchain = [blk]
    previous_block = blockchain[0]

    # How many blocks should we add to the chain
    # after the genesis block?
    num_of_blocks_to_add = 20

    # Add blocks to the chain
    for i in range(0, num_of_blocks_to_add):
        block_to_add = next_block(previous_block)
        blockchain.append(block_to_add)
        previous_block = block_to_add
        # Tell everyone about it!
        print "Block #{} has been added to the blockchain!".format(block_to_add.index)
        print "Hash: {}\n".format(hash(block_to_add)) 

It's more pythonic :p.

/r/Python Thread Link - medium.com