Ejemplo n.º 1
0
def test_ens_encode_name_normalizes_name_before_encoding():
    assert ens_encode_name('Öbb.at') == ens_encode_name('öbb.at')
    assert ens_encode_name('nhÉéÉéÉé.eth') == ens_encode_name('nhéééééé.eth')
    assert ens_encode_name('TESTER.eth') == ens_encode_name('tester.eth')
    assert ens_encode_name('test\u200btest.com') == ens_encode_name(
        'testtest.com')
    assert ens_encode_name("O\u0308bb.at") == ens_encode_name("öbb.at")
Ejemplo n.º 2
0
    def _resolve(self, name: str, fn_name: str = 'addr') -> Optional[Union[ChecksumAddress, str]]:
        normal_name = normalize_name(name)

        resolver, current_name = self._get_resolver(normal_name, fn_name)
        if not resolver:
            return None

        node = self.namehash(normal_name)

        # handle extended resolver case
        if _resolver_supports_interface(resolver, EXTENDED_RESOLVER_INTERFACE_ID):
            contract_func_with_args = (fn_name, [node])

            calldata = resolver.encodeABI(*contract_func_with_args)
            contract_call_result = resolver.caller.resolve(
                ens_encode_name(normal_name), calldata
            )
            result = self._decode_ensip10_resolve_data(
                contract_call_result, resolver, fn_name
            )
            return to_checksum_address(result) if is_address(result) else result
        elif normal_name == current_name:
            lookup_function = getattr(resolver.functions, fn_name)
            result = lookup_function(node).call()
            if is_none_or_zero_address(result):
                return None
            return to_checksum_address(result) if is_address(result) else result
        return None
Ejemplo n.º 3
0
def test_ens_encode_name_validating_total_encoded_name_size(name, expected):
    # This test is important because dns validation technically limits the total encoded domain name
    # size to 255. ENSIP-10 expects the name to be DNS encoded with one of the validation exceptions
    # being that the total encoded size can be any length.
    ens_encoded = ens_encode_name(name)
    assert len(ens_encoded) > 255
    assert ens_encoded == expected
Ejemplo n.º 4
0
def test_offchain_resolver_function_call_raises_with_ccip_read_disabled(
        ens, monkeypatch):
    offchain_resolver = ens.resolver('offchainexample.eth')

    # should fail here with `ccip_read_enabled` flag set to False
    with pytest.raises(OffchainLookup):
        offchain_resolver.functions.resolve(
            ens_encode_name('offchainexample.eth'),
            ENCODED_ADDR_CALLDATA,
        ).call(ccip_read_enabled=False)

    # pass flag on specific call via ContractCaller is also an option
    with pytest.raises(OffchainLookup):
        offchain_resolver.caller(ccip_read_enabled=False).resolve(
            ens_encode_name('offchainexample.eth'),
            ENCODED_ADDR_CALLDATA,
        )
Ejemplo n.º 5
0
def test_ens_encode_name_raises_ValidationError_on_label_lengths_over_63(
        name, invalid_label_index):
    with pytest.raises(
            ValidationError,
            match=f'Label at position {invalid_label_index} too long'):
        ens_encode_name(name)
Ejemplo n.º 6
0
def test_ens_encode_name_returns_single_zero_byte_for_empty_name(empty_name):
    assert ens_encode_name(empty_name) == b'\00'
Ejemplo n.º 7
0
def test_ens_encode_name(name, expected):
    assert ens_encode_name(name) == expected