11// SPDX-License-Identifier: MIT
22pragma solidity ^ 0.8.17 ;
33
4- import {ERC165 } from "@openzeppelin/contracts-v5/utils/introspection/ERC165.sol " ;
4+ import {
5+ ERC165
6+ } from "@openzeppelin/contracts-v5/utils/introspection/ERC165.sol " ;
57import {IExtendedResolver} from "../resolvers/profiles/IExtendedResolver.sol " ;
68import {IAddressResolver} from "../resolvers/profiles/IAddressResolver.sol " ;
79import {IAddrResolver} from "../resolvers/profiles/IAddrResolver.sol " ;
810import {INameResolver} from "../resolvers/profiles/INameResolver.sol " ;
911import {INameReverser} from "./INameReverser.sol " ;
12+ import {IERC7996 } from "../utils/IERC7996.sol " ;
1013import {ENSIP19, COIN_TYPE_DEFAULT, COIN_TYPE_ETH} from "../utils/ENSIP19.sol " ;
1114
1215abstract contract AbstractReverseResolver is
1316 IExtendedResolver ,
1417 INameReverser ,
18+ IERC7996 ,
1519 ERC165
1620{
1721 /// @inheritdoc INameReverser
1822 uint256 public immutable coinType;
1923
20- /// @inheritdoc INameReverser
24+ /// @inheritdoc INameReverser
2125 address public immutable chainRegistrar;
2226
2327 /// @notice `resolve()` was called with a profile other than `name()` or `addr(*)`.
@@ -40,9 +44,15 @@ abstract contract AbstractReverseResolver is
4044 return
4145 interfaceId == type (IExtendedResolver).interfaceId ||
4246 interfaceId == type (INameReverser).interfaceId ||
47+ interfaceId == type (IERC7996 ).interfaceId ||
4348 super .supportsInterface (interfaceId);
4449 }
4550
51+ /// @inheritdoc IERC7996
52+ function supportsFeature (bytes4 ) external pure returns (bool ) {
53+ return false ;
54+ }
55+
4656 /// @inheritdoc INameReverser
4757 function chainId () external view returns (uint32 ) {
4858 return ENSIP19.chainFromCoinType (coinType);
@@ -86,14 +96,18 @@ abstract contract AbstractReverseResolver is
8696 (bool valid , ) = ENSIP19.parseNamespace (name, 0 );
8797 if (! valid) revert UnreachableName (name);
8898 return
89- abi.encode (coinType == COIN_TYPE_ETH ? chainRegistrar : address (0 ));
99+ abi.encode (
100+ coinType == COIN_TYPE_ETH ? chainRegistrar : address (0 )
101+ );
90102 } else if (selector == IAddressResolver.addr.selector ) {
91103 (bool valid , ) = ENSIP19.parseNamespace (name, 0 );
92104 if (! valid) revert UnreachableName (name);
93105 (, uint256 ct ) = abi.decode (data[4 :], (bytes32 , uint256 ));
94106 return
95107 abi.encode (
96- coinType == ct ? abi.encodePacked (chainRegistrar) : new bytes (0 )
108+ coinType == ct
109+ ? abi.encodePacked (chainRegistrar)
110+ : new bytes (0 )
97111 );
98112 } else {
99113 revert UnsupportedResolverProfile (selector);
0 commit comments