def contract(self, *args, **kwargs): ContractFactoryClass = kwargs.pop('ContractFactoryClass', Contract) contract_name = kwargs.pop('contract_name', None) has_address = any(( 'address' in kwargs, len(args) >= 1 and is_address(args[0]), len(args) >= 2 and is_address(args[1]), )) for potential_address in args: validate_address_checksum(potential_address) if has_address: if 'address' in kwargs: address = kwargs.pop('address') elif is_address(args[0]): address = args[0] elif is_address(args[1]): address = args[1] kwargs['abi'] = args[0] validate_address(address) return ContractFactoryClass.factory(self.web3, contract_name, **kwargs)(address) else: try: kwargs['abi'] = args[0] except IndexError: pass return ContractFactoryClass.factory(self.web3, contract_name, **kwargs)
def input_address_formatter(addr): iban = Iban(addr) if iban.isValid() and iban.isDirect(): return add_0x_prefix(iban.address()) elif is_address(addr): validate_address_checksum(addr) return to_normalized_address(addr) raise ValueError("invalid address")