code: def solidityKeccak(cls, abi_types, values):
          
          if len(abi_types) != len(values):
              raise ValueError(
                  "Length mismatch between provided abi types and values.  Got "
                  "{0} types and {1} values.".format(len(abi_types), len(values))
              )
  
          if isinstance(cls, type):
              w3 = None
          else:
              w3 = cls
          normalized_values = map_abi_data([abi_ens_resolver(w3)], abi_types, values)
  
          hex_string = add_0x_prefix(''.join(
              remove_0x_prefix(hex_encode_abi_type(abi_type, value))
              for abi_type, value
              in zip(abi_types, normalized_values)
          ))
          return cls.keccak(hexstr=hex_string)
docs: Executes keccak256 exactly as Solidity does.
          Takes list of abi_types as inputs -- `[uint24, int8[], bool]`
          and list of corresponding values  -- `[20, [-1, 5, 0], True]`