@@ -52,26 +52,22 @@ class ENS {
52
52
//is supposed to be the "default resolver"; I'm not sure what that means,
53
53
//but I figure using the resolver for "addr.reverse" ought to suffice,
54
54
//right? So let's set up a resolver for it.
55
- const reverseResolutionSpecialName = "addr.reverse" ;
56
- debug ( "made it here" ) ;
57
55
//but in order to set its resolver, we first have to set its owner.
58
- await this . setNameOwner ( { from, name : reverseResolutionSpecialName } ) ;
59
- debug ( "owner set" ) ;
56
+ await this . setNameOwner ( { from, name : "addr.reverse" } ) ;
60
57
//now we can actually set the resolver
61
58
const { resolverAddress } = await this . ensureResolverExists ( {
62
59
from,
63
- name : reverseResolutionSpecialName
60
+ name : "addr.reverse"
64
61
} ) ;
65
62
debug ( "resolver set: %s" , resolverAddress ) ;
66
- //...but wait! we need it to be owned by the registry, not by us.
67
- //(otherwise the deployment will revert.) so, let's hand over
68
- //ownership to the registry.
69
- await this . alienateNameOwner ( {
63
+ //...but wait! we need it to be owned by the registry (or 0) , not by us.
64
+ //(otherwise the deployment will revert.) so, let's hand over ownership to
65
+ //the registry.
66
+ await this . updateNameOwner ( {
70
67
from,
71
- owner : registryAddress ,
72
- name : reverseResolutionSpecialName
68
+ newOwner : registryAddress ,
69
+ name : "addr.reverse"
73
70
} ) ;
74
- debug ( "owner alienated" ) ;
75
71
//now we can do the deployment!
76
72
const reverseRegistrar = await ReverseRegistrar . new (
77
73
registryAddress ,
@@ -80,33 +76,24 @@ class ENS {
80
76
from
81
77
}
82
78
) ;
83
- debug ( "deployed" ) ;
84
79
//except, we're not done... we need to transfer ownership from the registry
85
80
//to the reverse registrar.
86
81
//(if there were a previous reverse registrar, this would happen automatically,
87
82
//but there wasn't, so it doesn't.)
88
- //so, first let's claim the name for ourself again
89
- await this . setNameOwner ( { from, name : reverseResolutionSpecialName } ) ;
90
- debug ( "reclaimed" ) ;
91
- //and now let's give it away again
92
- await this . alienateNameOwner ( {
83
+ await this . updateNameOwner ( {
93
84
from,
94
- owner : reverseRegistrar . address ,
95
- name : reverseResolutionSpecialName
85
+ newOwner : reverseRegistrar . address ,
86
+ name : "addr.reverse"
96
87
} ) ;
97
- debug ( "re-alienated" ) ;
88
+ //and we're done!
98
89
}
99
90
100
91
async ensureResolverExists ( { from, name } ) {
101
92
// See if the resolver is set, if not then set it
102
- debug ( "getting resolver" ) ;
103
93
const resolverAddress = await this . ensjs . name ( name ) . getResolver ( ) ;
104
- debug ( "got resolver" ) ;
105
94
// names with no set resolver have 0x0 returned
106
95
if ( resolverAddress !== "0x0000000000000000000000000000000000000000" ) {
107
- debug ( "getting addr" ) ;
108
96
const resolvedAddress = await this . ensjs . name ( name ) . getAddress ( "ETH" ) ;
109
- debug ( "got addr" ) ;
110
97
return { resolvedAddress, resolverAddress } ;
111
98
}
112
99
// deploy a resolver if one isn't set
@@ -116,11 +103,8 @@ class ENS {
116
103
117
104
let registryAddress = this . determineENSRegistryAddress ( ) ;
118
105
119
- debug ( "deploying resolver" ) ;
120
106
const publicResolver = await PublicResolver . new ( registryAddress , { from } ) ;
121
- debug ( "deployed; setting resolver" ) ;
122
107
await this . ensjs . name ( name ) . setResolver ( publicResolver . address , { from } ) ;
123
- debug ( "set resolver" ) ;
124
108
return { resolvedAddress : null , resolverAddress : publicResolver . address } ;
125
109
}
126
110
@@ -185,33 +169,29 @@ class ENS {
185
169
}
186
170
}
187
171
188
- //this method assumes that the current owner is `from`,
189
- //and sets the new owner to be `owner`.
190
- async alienateNameOwner ( { name, from, owner } ) {
191
- //setNameOwner goes down the tree, from top to bottom.
192
- //here, however, we have to go *up* the tree.
193
- //as such, we are going to process the labels in order, rather
194
- //than in reverse order.
172
+ //this method assumes that from owns the parent!
173
+ //it won't work otherwise!
174
+ async updateNameOwner ( { name, from, newOwner } ) {
175
+ //this method does *not* walk the tree.
176
+ //it only updates this individual entry.
195
177
196
- let remaining = name ;
197
- while ( remaining !== "" ) {
198
- let label , suffix ;
199
- const dotIndex = remaining . indexOf ( "." ) ; //find the first dot
200
- if ( dotIndex !== - 1 ) {
201
- label = remaining . slice ( 0 , dotIndex ) ; //everything before the dot
202
- suffix = remaining . slice ( dotIndex + 1 ) ; //everything after the dot
203
- } else {
204
- label = remaining ;
205
- suffix = "" ;
206
- }
207
- await this . devRegistry . setSubnodeOwner (
208
- suffix !== "" ? hash ( suffix ) : "0x0" ,
209
- sha3 ( label ) ,
210
- owner ,
211
- { from }
212
- ) ;
213
- remaining = suffix ;
178
+ let label , suffix ;
179
+
180
+ const dotIndex = name . indexOf ( "." ) ; //find the first dot
181
+ if ( dotIndex !== - 1 ) {
182
+ label = name . slice ( 0 , dotIndex ) ; //everything before the dot
183
+ suffix = name . slice ( dotIndex + 1 ) ; //everything after the dot
184
+ } else {
185
+ label = name ;
186
+ suffix = "" ;
214
187
}
188
+
189
+ await this . devRegistry . setSubnodeOwner (
190
+ suffix !== "" ? hash ( suffix ) : "0x0" ,
191
+ sha3 ( label ) ,
192
+ newOwner ,
193
+ { from }
194
+ ) ;
215
195
}
216
196
217
197
parseAddress ( addressOrContract ) {
0 commit comments