'The Block model is mainly used for (de)serialization and integrity
checking.
Args:
transaction (:obj:`list` of :class:`~.Transaction`):
Transactions to be included in the Block.
node_pubkey (str): The public key of the node creating the
Block.
timestamp (str): The Unix time a Block was created.
voters (:obj:`list` of :obj:`str`): A list of a federation
nodes\' public keys supposed to vote on the Block.
signature (str): A cryptographic signature ensuring the
integrity and validity of the creator of a Block.'

def __init__(self, transactions=None, node_pubkey=None, timestamp=None, voters=None, signature=None):

    if ((transactions is not None) and (not isinstance(transactions, list))):
        raise TypeError('`transactions`    must    be    a    list    instance    or    None')
    else:
        self.transactions = (transactions or [])
    if ((voters is not None) and (not isinstance(voters, list))):
        raise TypeError('`voters`    must    be    a    list    instance    or    None')
    else:
        self.voters = (voters or [])
    if (timestamp is not None):
        self.timestamp = timestamp
    else:
        self.timestamp = gen_timestamp()
    self.node_pubkey = node_pubkey
    self.signature = signature
