Given the block's numeric ID, its hash, and the bitcoind-returned block_data,
        use the SPV header chain to verify the block's integrity.

        block_header must be a dict with the following structure:
        * version: protocol version (int)
        * prevhash: previous block hash (hex str)
        * merkleroot: block Merkle root (hex str)
        * timestamp: UNIX time stamp (int)
        * bits: difficulty bits (hex str)
        * nonce: PoW nonce (int)
        * hash: block hash (hex str)
        (i.e. the format that the reference bitcoind returns via JSON RPC)

        Return True on success
        Return False on error

def block_header_verify( cls, headers_path, block_id, block_hash, block_header ):
        """
        Given the block's numeric ID, its hash, and the bitcoind-returned block_data,
        use the SPV header chain to verify the block's integrity.

        block_header must be a dict with the following structure:
        * version: protocol version (int)
        * prevhash: previous block hash (hex str)
        * merkleroot: block Merkle root (hex str)
        * timestamp: UNIX time stamp (int)
        * bits: difficulty bits (hex str)
        * nonce: PoW nonce (int)
        * hash: block hash (hex str)
        (i.e. the format that the reference bitcoind returns via JSON RPC)

        Return True on success
        Return False on error
        """
        prev_header = cls.read_header( headers_path, block_id - 1 )
        prev_hash = prev_header['hash']
        return bits.block_header_verify( block_header, prev_hash, block_hash )