<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def pack_balance_proof( nonce: Nonce, balance_hash: BalanceHash, additional_hash: AdditionalHash, canonical_identifier: CanonicalIdentifier, msg_type: MessageTypeId = MessageTypeId.BALANCE_PROOF, ) -> bytes: """Packs balance proof data to be signed Packs the given arguments in a byte array in the same configuration the contracts expect the signed data to have. """

    return pack_data([
        'address',
        'uint256',
        'uint256',
        'uint256',
        'bytes32',
        'uint256',
        'bytes32',
    ], [
        canonical_identifier.token_network_address,
        canonical_identifier.chain_identifier,
        msg_type,
        canonical_identifier.channel_identifier,
        balance_hash,
        nonce,
        additional_hash,
    ])