From 0ec24659a80ec2501656046e6ab83c9792b918ff Mon Sep 17 00:00:00 2001 From: jdevcs Date: Fri, 25 Feb 2022 17:03:14 +0100 Subject: [PATCH] web3 errors --- packages/web3-common/src/constants.ts | 2 + packages/web3-common/src/errors.ts | 8 ++++ packages/web3-eth-ens/src/resolver.ts | 63 ++++++++++++--------------- 3 files changed, 38 insertions(+), 35 deletions(-) diff --git a/packages/web3-common/src/constants.ts b/packages/web3-common/src/constants.ts index 971543160dd..bfa1b363f81 100644 --- a/packages/web3-common/src/constants.ts +++ b/packages/web3-common/src/constants.ts @@ -88,3 +88,5 @@ export const JSONRPC_ERR_UNAUTHORIZED = 4001; export const JSONRPC_ERR_UNSUPPORTED_METHOD = 4200; export const JSONRPC_ERR_DISCONNECTED = 4900; export const JSONRPC_ERR_CHAIN_DISCONNECTED = 4901; + +export const ERR_ENS_CHECK_INTERFACE_SUPPORT = 901; diff --git a/packages/web3-common/src/errors.ts b/packages/web3-common/src/errors.ts index c8eb002a436..2f8bca81484 100644 --- a/packages/web3-common/src/errors.ts +++ b/packages/web3-common/src/errors.ts @@ -46,6 +46,7 @@ import { ERR_INVALID_PASSWORD, ERR_IV_LENGTH, ERR_PBKDF2_ITERATIONS, + ERR_ENS_CHECK_INTERFACE_SUPPORT, } from './constants'; import { isResponseWithError } from './json_rpc'; @@ -481,3 +482,10 @@ export class PBKDF2IterationsError extends Web3Error { super('c > 1000, pbkdf2 is less secure with less iterations'); } } + +export class ENSCheckInterfaceSupportError extends Web3Error { + public code = ERR_ENS_CHECK_INTERFACE_SUPPORT; + public constructor(errorDetails: string) { + super(`ENS resolver check interface support error. "${errorDetails}"`); + } +} diff --git a/packages/web3-eth-ens/src/resolver.ts b/packages/web3-eth-ens/src/resolver.ts index e5a67d0b9a3..983adffd35d 100644 --- a/packages/web3-eth-ens/src/resolver.ts +++ b/packages/web3-eth-ens/src/resolver.ts @@ -1,6 +1,10 @@ import { Address, sha3, isHexStrict } from 'web3-utils'; import { Contract, NonPayableCallOptions } from 'web3-eth-contract'; -import { inputAddressFormatter } from 'web3-common'; +import { + inputAddressFormatter, + ResolverMethodMissingError, + ENSCheckInterfaceSupportError, +} from 'web3-common'; import { interfaceIds, methodsInInterface } from './config'; import { Registry } from './registry'; import { RESOLVER } from './abi/resolver'; @@ -27,56 +31,49 @@ export class Resolver { resolverContract: Contract, methodName: string, ) { - if (interfaceIds[methodName] === undefined) throw new Error(); // ResolverMethodMissingError(resolver address, methodName); + if (interfaceIds[methodName] === undefined) + throw new ResolverMethodMissingError( + resolverContract.options.address ?? '', + methodName, + ); let supported = false; - try { - supported = (await resolverContract.methods - .supportsInterface(interfaceIds[methodName]) - .call()) as Awaited>; - } catch (err) { - // TODO throw new Error - } - if (!supported) throw new Error(); // new ResolverMethodMissingError(resolver address, methodName); + supported = (await resolverContract.methods + .supportsInterface(interfaceIds[methodName]) + .call()) as Awaited>; + + if (!supported) + throw new ResolverMethodMissingError( + resolverContract.options.address ?? '', + methodName, + ); } public async setAddress(ENSName: string, address: Address, txConfig: NonPayableCallOptions) { const resolverContract = await this.getResolverContractAdapter(ENSName); await this.checkInterfaceSupport(resolverContract, methodsInInterface.setAddr); - try { - return resolverContract.methods - .setAddr(namehash(ENSName), inputAddressFormatter(address)) - .send(txConfig); - } catch (error) { - throw new Error(); // to do web3 error - } + return resolverContract.methods + .setAddr(namehash(ENSName), inputAddressFormatter(address)) + .send(txConfig); } public async setPubkey(ENSName: string, x: string, y: string, txConfig: NonPayableCallOptions) { const resolverContract = await this.getResolverContractAdapter(ENSName); await this.checkInterfaceSupport(resolverContract, methodsInInterface.setPubkey); - try { - // TODO: verify that X and Y coordinates of pub key are normalized? - return resolverContract.methods - .setPubkey(namehash(ENSName), namehash(x), namehash(y)) - .send(txConfig); - } catch (error) { - throw new Error(); // to do web3 error - } + // TODO: verify that X and Y coordinates of pub key are normalized? + return resolverContract.methods + .setPubkey(namehash(ENSName), namehash(x), namehash(y)) + .send(txConfig); } public async setContenthash(ENSName: string, hash: string, txConfig: NonPayableCallOptions) { const resolverContract = await this.getResolverContractAdapter(ENSName); await this.checkInterfaceSupport(resolverContract, methodsInInterface.setContenthash); - try { - return resolverContract.methods.setContenthash(namehash(ENSName), hash).send(txConfig); - } catch (error) { - throw new Error(); // to do web3 error - } + return resolverContract.methods.setContenthash(namehash(ENSName), hash).send(txConfig); } public async supportsInterface(ENSName: string, interfaceId: string) { @@ -92,11 +89,7 @@ export class Resolver { interfaceIdParam = interfaceIdParam.slice(0, 10); } - try { - return resolverContract.methods.supportsInterface(interfaceIdParam).call(); - } catch (error) { - throw new Error(); // to do web3 error - } + return resolverContract.methods.supportsInterface(interfaceIdParam).call(); } public async getAddress(ENSName: string) {