@@ -3,7 +3,19 @@ import {constants, Contract, Signer, utils} from 'ethers';
3
3
import { COIN_TYPE_ETH , deployContract , getDomainInfo } from './utils' ;
4
4
import { ExpectedTopLevelDomain , MissingDomain } from './errors' ;
5
5
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
+ } ;
7
19
8
20
const { namehash} = utils ;
9
21
const { HashZero} = constants ;
@@ -13,7 +25,7 @@ interface DomainRegistrationOptions {
13
25
}
14
26
15
27
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 ] ) ;
17
29
const resolverNode = namehash ( 'resolver' ) ;
18
30
const resolverLabel = utils . id ( 'resolver' ) ;
19
31
await ens . setSubnodeOwner ( HashZero , resolverLabel , await signer . getAddress ( ) ) ;
@@ -23,14 +35,18 @@ export async function createResolver(signer: Signer, ens: Contract) {
23
35
}
24
36
25
37
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
+ ) ;
27
43
await ens . setSubnodeOwner ( HashZero , utils . id ( 'reverse' ) , await signer . getAddress ( ) ) ;
28
44
await ens . setSubnodeOwner ( namehash ( 'reverse' ) , utils . id ( 'addr' ) , reverseRegistrar . address ) ;
29
45
return reverseRegistrar ;
30
46
}
31
47
32
48
export async function deployENS ( signer : Signer ) {
33
- const ens = await deployContract ( signer , ENSRegistry , [ ] ) ;
49
+ const ens = await deployContract ( signer , getContracts ( ) . ENSRegistry , [ ] ) ;
34
50
const resolver = await createResolver ( signer , ens ) ;
35
51
const reverseRegistrar = await createReverseRegistrar ( signer , ens , resolver ) ;
36
52
return new ENS ( signer , ens , resolver , reverseRegistrar ) ;
@@ -54,7 +70,7 @@ export class ENS {
54
70
const node = namehash ( domain ) ;
55
71
this . registrars = {
56
72
...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 ] )
58
74
} ;
59
75
await this . ens . setSubnodeOwner ( HashZero , utils . id ( domain ) , this . registrars [ domain ] . address ) ;
60
76
}
@@ -63,7 +79,11 @@ export class ENS {
63
79
const { label, node, decodedRootNode} = getDomainInfo ( domain ) ;
64
80
await this . registrars [ decodedRootNode ] . register ( label , await this . signer . getAddress ( ) ) ;
65
81
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
+ ) ;
67
87
await this . ens . setOwner ( node , registrar . address ) ;
68
88
this . registrars = {
69
89
...this . registrars ,
0 commit comments