diff --git a/packages/web3-eth-ens/CHANGELOG.md b/packages/web3-eth-ens/CHANGELOG.md index c9be2f93561..e5dea285207 100644 --- a/packages/web3-eth-ens/CHANGELOG.md +++ b/packages/web3-eth-ens/CHANGELOG.md @@ -159,4 +159,13 @@ Documentation: - `defaultReturnFormat` was added to all methods that have `ReturnType` param. (#6947) -## [Unreleased] \ No newline at end of file +## [Unreleased] + +### Added + +- `getText` now supports first param Address +- `getName` has optional second param checkInterfaceSupport + +### Fixed + +- `getName` reverse resolution \ No newline at end of file diff --git a/packages/web3-eth-ens/src/ens.ts b/packages/web3-eth-ens/src/ens.ts index 254a33bc842..8f3e1806127 100644 --- a/packages/web3-eth-ens/src/ens.ts +++ b/packages/web3-eth-ens/src/ens.ts @@ -33,6 +33,7 @@ import { TransactionReceipt, Web3NetAPI, } from 'web3-types'; +import { isAddress } from 'web3-validator'; import { PublicResolverAbi } from './abi/ens/PublicResolver.js'; import { networkIds, registryAddresses } from './config.js'; import { Registry } from './registry.js'; @@ -174,8 +175,10 @@ export class ENS extends Web3Context { * @param key - The key to resolve https://github.com/ethereum/ercs/blob/master/ERCS/erc-634.md#global-keys * @returns - The value content stored in the resolver for the specified key */ - public async getText(ENSName: string, key: string): Promise { - return this._resolver.getText(ENSName, key); + public async getText(ENSNameOrAddr: string | Address, key: string): Promise { + if(isAddress(ENSNameOrAddr)) + return this._resolver.getText(await(this._resolver.getName(ENSNameOrAddr,false)), key); + return this._resolver.getText(ENSNameOrAddr, key); } /** @@ -183,8 +186,8 @@ export class ENS extends Web3Context { * @param ENSName - The node to resolve * @returns - The name */ - public async getName(ENSName: string): Promise { - return this._resolver.getName(ENSName); + public async getName(ENSName: string, checkInterfaceSupport = true): Promise { + return this._resolver.getName(ENSName, checkInterfaceSupport); } /** diff --git a/packages/web3-eth-ens/src/resolver.ts b/packages/web3-eth-ens/src/resolver.ts index c93d150e805..cb345055d95 100644 --- a/packages/web3-eth-ens/src/resolver.ts +++ b/packages/web3-eth-ens/src/resolver.ts @@ -130,12 +130,17 @@ export class Resolver { } public async getName( - address: string + address: string, + checkInterfaceSupport = true ) { - const resolverContract = await this.getResolverContractAdapter(address); - await this.checkInterfaceSupport(resolverContract, methodsInInterface.name); + const reverseName = `${address.toLowerCase().substring(2)}.addr.reverse`; + const resolverContract = await this.getResolverContractAdapter(reverseName); + + if(checkInterfaceSupport) + await this.checkInterfaceSupport(resolverContract, methodsInInterface.name); + return resolverContract.methods - .name(namehash(address)).call() + .name(namehash(reverseName)).call() } } diff --git a/packages/web3-eth-ens/test/unit/resolver.test.ts b/packages/web3-eth-ens/test/unit/resolver.test.ts index f0df74bd2a7..da189e5a45d 100644 --- a/packages/web3-eth-ens/test/unit/resolver.test.ts +++ b/packages/web3-eth-ens/test/unit/resolver.test.ts @@ -239,6 +239,8 @@ describe('resolver', () => { describe('name', () => { it('getName', async () => { + const address = "0x314159265dd8dbb310642f98f50c066173c1259b"; + const supportsInterfaceMock = jest .spyOn(contract.methods, 'supportsInterface') .mockReturnValue({ @@ -255,12 +257,13 @@ describe('resolver', () => { }); }); - await resolver.getName(ENS_NAME); + await resolver.getName(address); expect(supportsInterfaceMock).toHaveBeenCalledWith( interfaceIds[methodsInInterface.name], ); - expect(nameMock).toHaveBeenCalledWith(namehash(ENS_NAME)); + const reverseName = `${address.toLowerCase().substring(2)}.addr.reverse`; + expect(nameMock).toHaveBeenCalledWith(namehash(reverseName)); }) })