docs: def generate_multi_value_hash(types, values):
      """
      Return the hash of the given list of values.
      This is equivalent to packing and hashing values in a solidity smart contract
      hence the use of `soliditySha3`.
  
      :param types: list of solidity types expressed as strings
      :param values: list of values matching the `types` list
      :return: bytes
      """
      assert len(types) == len(values)
      return Web3Provider.get_web3().soliditySha3(
          types,
          values
      )