Skip to content

Commit e1c352a

Browse files
authored
🏄 Defer an error about missing ENS peer dependencies to execution (#803)
1 parent f0b525d commit e1c352a

File tree

3 files changed

+34
-9
lines changed

3 files changed

+34
-9
lines changed

.changeset/angry-eggs-perform.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@ethereum-waffle/ens": patch
3+
---
4+
5+
🏄 Defer an error about missing ENS peer dependencies to execution

waffle-ens/src/ENS.ts

+26-6
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,19 @@ import {constants, Contract, Signer, utils} from 'ethers';
33
import {COIN_TYPE_ETH, deployContract, getDomainInfo} from './utils';
44
import {ExpectedTopLevelDomain, MissingDomain} from './errors';
55

6-
const {ENSRegistry, FIFSRegistrar, ReverseRegistrar, PublicResolver} = contracts;
6+
const getContracts = () => {
7+
const {ENSRegistry, FIFSRegistrar, ReverseRegistrar, PublicResolver} = contracts;
8+
const result = {ENSRegistry, FIFSRegistrar, ReverseRegistrar, PublicResolver};
9+
for (const key of Object.keys(result)) {
10+
if (!contracts[key]) {
11+
throw new Error(
12+
`Contract ${key} is missing from ENS dependencies.` +
13+
'Have you installed peer dependencies "@ensdomains/ens" and "@ensdomains/resolver"?'
14+
);
15+
}
16+
}
17+
return result;
18+
};
719

820
const {namehash} = utils;
921
const {HashZero} = constants;
@@ -13,7 +25,7 @@ interface DomainRegistrationOptions {
1325
}
1426

1527
export async function createResolver(signer: Signer, ens: Contract) {
16-
const resolver = await deployContract(signer, PublicResolver, [ens.address]);
28+
const resolver = await deployContract(signer, getContracts().PublicResolver, [ens.address]);
1729
const resolverNode = namehash('resolver');
1830
const resolverLabel = utils.id('resolver');
1931
await ens.setSubnodeOwner(HashZero, resolverLabel, await signer.getAddress());
@@ -23,14 +35,18 @@ export async function createResolver(signer: Signer, ens: Contract) {
2335
}
2436

2537
export async function createReverseRegistrar(signer: Signer, ens: Contract, resolver: Contract) {
26-
const reverseRegistrar = await deployContract(signer, ReverseRegistrar, [ens.address, resolver.address]);
38+
const reverseRegistrar = await deployContract(
39+
signer,
40+
getContracts().ReverseRegistrar,
41+
[ens.address, resolver.address]
42+
);
2743
await ens.setSubnodeOwner(HashZero, utils.id('reverse'), await signer.getAddress());
2844
await ens.setSubnodeOwner(namehash('reverse'), utils.id('addr'), reverseRegistrar.address);
2945
return reverseRegistrar;
3046
}
3147

3248
export async function deployENS(signer: Signer) {
33-
const ens = await deployContract(signer, ENSRegistry, []);
49+
const ens = await deployContract(signer, getContracts().ENSRegistry, []);
3450
const resolver = await createResolver(signer, ens);
3551
const reverseRegistrar = await createReverseRegistrar(signer, ens, resolver);
3652
return new ENS(signer, ens, resolver, reverseRegistrar);
@@ -54,7 +70,7 @@ export class ENS {
5470
const node = namehash(domain);
5571
this.registrars = {
5672
...this.registrars,
57-
[domain]: await deployContract(this.signer, FIFSRegistrar, [this.ens.address, node])
73+
[domain]: await deployContract(this.signer, getContracts().FIFSRegistrar, [this.ens.address, node])
5874
};
5975
await this.ens.setSubnodeOwner(HashZero, utils.id(domain), this.registrars[domain].address);
6076
}
@@ -63,7 +79,11 @@ export class ENS {
6379
const {label, node, decodedRootNode} = getDomainInfo(domain);
6480
await this.registrars[decodedRootNode].register(label, await this.signer.getAddress());
6581
await this.ens.setResolver(node, this.resolver.address);
66-
const registrar: Contract = await deployContract(this.signer, FIFSRegistrar, [this.ens.address, node]);
82+
const registrar: Contract = await deployContract(
83+
this.signer,
84+
getContracts().FIFSRegistrar,
85+
[this.ens.address, node]
86+
);
6787
await this.ens.setOwner(node, registrar.address);
6888
this.registrars = {
6989
...this.registrars,

waffle-ens/src/contracts.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ try {
2828
...require('@ensdomains/ens'),
2929
...require('@ensdomains/resolver')
3030
};
31-
} catch (ensRequireError) {
32-
console.error('Failed to import ens dependencies. Have you installed peer dependencies "@ensdomains/ens" and "@ensdomains/resolver"?')
31+
} catch {
32+
// If the dependencies are missing, a descriptive error is thrown
33+
// when trying to use one of the ENS functions.
3334
}
34-
3535
}

0 commit comments

Comments
 (0)