class Block:
	''' This class represents a tuple of the form (h, e, txs).
		Each blocks parent hash h may be computed simply as a hash of the parent block. '''

	def __init__(self, h, e, txs):
		self.h = h	# parent hash
		self.e = e	# epoch number
		self.txs = txs	# transactions payload
		self.votes = []	 # Epoch votes
		self.notarized = False	# block notarization flag
		self.finalized = False	# block finalization flag

	def __repr__(self):
		return "Block=[h={0}, e={1}, txs={2}, notarized={3}, finalized={4}]".format(
			self.h, self.e, self.txs, self.notarized, self.finalized)

	def __hash__(self):
		# python hash is used for demostranation porpuses only.
		return hash((self.h, self.e, str(self.txs)))

	def __eq__(self, other):
		return self.h == other.h and self.e == other.e and self.txs == other.txs

	def encode(self):
		return(("{0},{1},{2}".format(self.h, self.e, self.txs)).encode())
