code: def method_id(name, encode_types):
      
      function_types = [
          _canonical_type(type_)
          for type_ in encode_types
      ]
  
      function_signature = '{function_name}({canonical_types})'.format(
          function_name=name,
          canonical_types=','.join(function_types),
      )
  
      function_keccak = utils.sha3(function_signature)
      first_bytes = function_keccak[:4]
  
      return big_endian_to_int(first_bytes)
docs: Return the unique method id.
  
      The signature is defined as the canonical expression of the basic
      prototype, i.e. the function name with the parenthesised list of parameter
      types. Parameter types are split by a single comma - no spaces are used.
  
      The method id is defined as the first four bytes (left, high-order in
      big-endian) of the Keccak (SHA-3) hash of the signature of the function.