Example #1
0
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")
Example #2
0
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")
Example #3
0
    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)