def validate_account(value): if not is_text(value): raise ValidationError("Address must be 20 bytes encoded as hexidecimal") elif not is_hex_address(value): raise ValidationError("Address must be 20 bytes encoded as hexidecimal") elif is_checksum_formatted_address(value) and not is_checksum_address(value): raise ValidationError("Address does not validate EIP55 checksum")
def validate_address_checksum(address): """ Helper function for validating an address EIP55 checksum """ if is_checksum_formatted_address(address): if not is_checksum_address(address): raise ValueError("'address' has an invalid EIP55 checksum")
def check_single_version_update( self, text: str, ) -> None: lines = text.splitlines() seen_elements = set() for action, full_insert in zip(*[iter(lines)] * 2): insert = False if full_insert == '*': full_insert = action insert = True # Use the same regex as in the rotki servers to obtain the assets asset_data = self._parse_full_insert(full_insert) assert asset_data.cryptocompare is not None or asset_data.coingecko is not None assert len(asset_data.name) != 0 assert len(asset_data.symbol) != 0 # Check agains duplicate information if insert: assert asset_data.cryptocompare not in seen_elements, f'Duplicate cryptocompare {asset_data.cryptocompare}' assert asset_data.coingecko not in seen_elements, f'Duplicate coingecko {asset_data.coingecko}' assert asset_data.name not in seen_elements, f'Duplicate name {asset_data.name}' assert asset_data.symbol not in seen_elements, f'Duplicate symbol {asset_data.symbol}' # For ethereum address, make a checksum of addresses if asset_data.ethereum_address is not None: assert is_checksum_formatted_address(asset_data.ethereum_address) assert asset_data.ethereum_address in action if insert: assert asset_data.ethereum_address not in seen_elements, f'Duplicate address {asset_data.ethereum_address}' seen_elements.add(asset_data.ethereum_address) if insert: seen_elements.update((asset_data.symbol, asset_data.name)) if (asset_data.cryptocompare is not None) and len(asset_data.cryptocompare) != 0: seen_elements.add(asset_data.cryptocompare) if (asset_data.coingecko is not None) and len(asset_data.coingecko) != 0: seen_elements.add(asset_data.coingecko)