@ensdomains/ensjs 3.0.0-alpha.41 → 3.0.0-alpha.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/contracts/getContractAddress.js +4 -4
- package/dist/cjs/functions/commitName.js +2 -3
- package/dist/cjs/functions/createSubname.js +2 -8
- package/dist/cjs/functions/getDecryptedName.js +111 -0
- package/dist/cjs/functions/getHistory.js +14 -7
- package/dist/cjs/functions/getNames.js +10 -6
- package/dist/cjs/functions/getOwner.js +28 -15
- package/dist/cjs/functions/getPrice.js +6 -6
- package/dist/cjs/functions/getProfile.js +11 -5
- package/dist/cjs/functions/getWrapperData.js +4 -5
- package/dist/cjs/functions/renewNames.js +13 -20
- package/dist/cjs/functions/{burnFuses.js → setFuses.js} +24 -6
- package/dist/cjs/functions/wrapName.js +9 -25
- package/dist/cjs/generated/factories/BaseRegistrarImplementation__factory.js +2 -2
- package/dist/cjs/generated/factories/BulkRenewal__factory.js +2 -2
- package/dist/cjs/generated/factories/DNSRegistrar__factory.js +2 -2
- package/dist/cjs/generated/factories/DNSSECImpl__factory.js +2 -2
- package/dist/cjs/generated/factories/DefaultReverseResolver__factory.js +2 -2
- package/dist/cjs/generated/factories/ENSRegistry__factory.js +2 -2
- package/dist/cjs/generated/factories/ETHRegistrarController__factory.js +8 -57
- package/dist/cjs/generated/factories/Multicall__factory.js +2 -2
- package/dist/cjs/generated/factories/NameWrapper__factory.js +92 -71
- package/dist/cjs/generated/factories/P256SHA256Algorithm__factory.js +2 -2
- package/dist/cjs/generated/factories/PublicResolver__factory.js +85 -2
- package/dist/cjs/generated/factories/RSASHA1Algorithm__factory.js +2 -2
- package/dist/cjs/generated/factories/RSASHA256Algorithm__factory.js +2 -2
- package/dist/cjs/generated/factories/ReverseRegistrar__factory.js +2 -2
- package/dist/cjs/generated/factories/Root__factory.js +2 -2
- package/dist/cjs/generated/factories/SHA1Digest__factory.js +2 -2
- package/dist/cjs/generated/factories/SHA1NSEC3Digest__factory.js +2 -2
- package/dist/cjs/generated/factories/SHA256Digest__factory.js +2 -2
- package/dist/cjs/generated/factories/StaticMetadataService__factory.js +2 -2
- package/dist/cjs/generated/factories/TLDPublicSuffixList__factory.js +2 -2
- package/dist/cjs/generated/factories/UniversalResolver__factory.js +69 -4
- package/dist/cjs/index.js +6 -4
- package/dist/cjs/utils/ccip.js +3 -3
- package/dist/cjs/utils/consts.js +3 -1
- package/dist/cjs/utils/fuses.js +218 -53
- package/dist/cjs/utils/hexEncodedName.js +2 -0
- package/dist/cjs/utils/labels.js +14 -8
- package/dist/cjs/utils/normalise.js +2 -2
- package/dist/cjs/utils/recordHelpers.js +4 -3
- package/dist/cjs/utils/registerHelpers.js +11 -25
- package/dist/cjs/utils/subgraph-types.js +16 -0
- package/dist/cjs/utils/wrapper.js +3 -3
- package/dist/esm/contracts/getContractAddress.mjs +4 -4
- package/dist/esm/functions/commitName.mjs +2 -3
- package/dist/esm/functions/createSubname.mjs +2 -2
- package/dist/esm/functions/getDecryptedName.mjs +96 -0
- package/dist/esm/functions/getHistory.mjs +14 -7
- package/dist/esm/functions/getNames.mjs +10 -6
- package/dist/esm/functions/getOwner.mjs +26 -13
- package/dist/esm/functions/getPrice.mjs +2 -2
- package/dist/esm/functions/getProfile.mjs +10 -4
- package/dist/esm/functions/getWrapperData.mjs +4 -5
- package/dist/esm/functions/renewNames.mjs +13 -20
- package/dist/esm/functions/setFuses.mjs +30 -0
- package/dist/esm/functions/wrapName.mjs +9 -19
- package/dist/esm/generated/factories/BaseRegistrarImplementation__factory.mjs +1 -1
- package/dist/esm/generated/factories/BulkRenewal__factory.mjs +1 -1
- package/dist/esm/generated/factories/DNSRegistrar__factory.mjs +1 -1
- package/dist/esm/generated/factories/DNSSECImpl__factory.mjs +1 -1
- package/dist/esm/generated/factories/DefaultReverseResolver__factory.mjs +1 -1
- package/dist/esm/generated/factories/ENSRegistry__factory.mjs +1 -1
- package/dist/esm/generated/factories/ETHRegistrarController__factory.mjs +7 -56
- package/dist/esm/generated/factories/Multicall__factory.mjs +1 -1
- package/dist/esm/generated/factories/NameWrapper__factory.mjs +91 -70
- package/dist/esm/generated/factories/P256SHA256Algorithm__factory.mjs +1 -1
- package/dist/esm/generated/factories/PublicResolver__factory.mjs +84 -1
- package/dist/esm/generated/factories/RSASHA1Algorithm__factory.mjs +1 -1
- package/dist/esm/generated/factories/RSASHA256Algorithm__factory.mjs +1 -1
- package/dist/esm/generated/factories/ReverseRegistrar__factory.mjs +1 -1
- package/dist/esm/generated/factories/Root__factory.mjs +1 -1
- package/dist/esm/generated/factories/SHA1Digest__factory.mjs +1 -1
- package/dist/esm/generated/factories/SHA1NSEC3Digest__factory.mjs +1 -1
- package/dist/esm/generated/factories/SHA256Digest__factory.mjs +1 -1
- package/dist/esm/generated/factories/StaticMetadataService__factory.mjs +1 -1
- package/dist/esm/generated/factories/TLDPublicSuffixList__factory.mjs +1 -1
- package/dist/esm/generated/factories/UniversalResolver__factory.mjs +68 -3
- package/dist/esm/index.mjs +6 -4
- package/dist/esm/utils/ccip.mjs +2 -2
- package/dist/esm/utils/consts.mjs +3 -1
- package/dist/esm/utils/fuses.mjs +218 -53
- package/dist/esm/utils/hexEncodedName.mjs +2 -0
- package/dist/esm/utils/labels.mjs +11 -8
- package/dist/esm/utils/normalise.mjs +1 -1
- package/dist/esm/utils/recordHelpers.mjs +2 -1
- package/dist/esm/utils/registerHelpers.mjs +10 -18
- package/dist/esm/utils/subgraph-types.mjs +0 -0
- package/dist/esm/utils/wrapper.mjs +2 -2
- package/dist/types/functions/commitName.d.ts +0 -1
- package/dist/types/functions/createSubname.d.ts +2 -2
- package/dist/types/functions/getDecryptedName.d.ts +9 -0
- package/dist/types/functions/getHistory.d.ts +1 -1
- package/dist/types/functions/getNames.d.ts +3 -3
- package/dist/types/functions/getOwner.d.ts +1 -0
- package/dist/types/functions/getPrice.d.ts +1 -1
- package/dist/types/functions/getProfile.d.ts +1 -0
- package/dist/types/functions/getRecords.d.ts +1 -0
- package/dist/types/functions/getWrapperData.d.ts +44 -5
- package/dist/types/functions/registerName.d.ts +1 -1
- package/dist/types/functions/renewNames.d.ts +5 -6
- package/dist/types/functions/setFuses.d.ts +7 -0
- package/dist/types/functions/types.d.ts +8 -4
- package/dist/types/functions/wrapName.d.ts +3 -3
- package/dist/types/generated/ETHRegistrarController.d.ts +13 -36
- package/dist/types/generated/NameWrapper.d.ts +97 -52
- package/dist/types/generated/PublicResolver.d.ts +50 -1
- package/dist/types/generated/UniversalResolver.d.ts +79 -32
- package/dist/types/generated/factories/UniversalResolver__factory.d.ts +15 -0
- package/dist/types/index.d.ts +60 -9
- package/dist/types/static.d.ts +1 -1
- package/dist/types/utils/consts.d.ts +1 -0
- package/dist/types/utils/fuses.d.ts +115 -45
- package/dist/types/utils/hexEncodedName.d.ts +1 -0
- package/dist/types/utils/labels.d.ts +2 -1
- package/dist/types/utils/registerHelpers.d.ts +7 -25
- package/dist/types/utils/subgraph-types.d.ts +284 -0
- package/dist/types/utils/wrapper.d.ts +1 -1
- package/package.json +5 -5
- package/src/contracts/getContractAddress.ts +4 -4
- package/src/functions/commitName.test.ts +0 -3
- package/src/functions/commitName.ts +1 -2
- package/src/functions/createSubname.ts +5 -6
- package/src/functions/getDecryptedName.test.ts +49 -0
- package/src/functions/getDecryptedName.ts +119 -0
- package/src/functions/getExpiry.ts +1 -1
- package/src/functions/getHistory.ts +59 -25
- package/src/functions/getNames.test.ts +2 -2
- package/src/functions/getNames.ts +26 -13
- package/src/functions/getOwner.test.ts +62 -3
- package/src/functions/getOwner.ts +33 -13
- package/src/functions/getPrice.ts +2 -2
- package/src/functions/getProfile.test.ts +7 -0
- package/src/functions/getProfile.ts +13 -4
- package/src/functions/getWrapperData.test.ts +11 -45
- package/src/functions/getWrapperData.ts +8 -6
- package/src/functions/registerName.test.ts +3 -3
- package/src/functions/registerName.ts +1 -1
- package/src/functions/renewNames.ts +18 -24
- package/src/functions/setFuses.test.ts +240 -0
- package/src/functions/setFuses.ts +44 -0
- package/src/functions/types.ts +8 -4
- package/src/functions/wrapName.test.ts +8 -7
- package/src/functions/wrapName.ts +11 -25
- package/src/generated/ETHRegistrarController.ts +12 -79
- package/src/generated/NameWrapper.ts +155 -99
- package/src/generated/PublicResolver.ts +123 -0
- package/src/generated/UniversalResolver.ts +157 -16
- package/src/generated/factories/BaseRegistrarImplementation__factory.ts +1 -1
- package/src/generated/factories/BulkRenewal__factory.ts +1 -1
- package/src/generated/factories/DNSRegistrar__factory.ts +1 -1
- package/src/generated/factories/DNSSECImpl__factory.ts +1 -1
- package/src/generated/factories/DefaultReverseResolver__factory.ts +1 -1
- package/src/generated/factories/ENSRegistry__factory.ts +1 -1
- package/src/generated/factories/ETHRegistrarController__factory.ts +7 -56
- package/src/generated/factories/Multicall__factory.ts +1 -1
- package/src/generated/factories/NameWrapper__factory.ts +91 -70
- package/src/generated/factories/P256SHA256Algorithm__factory.ts +1 -1
- package/src/generated/factories/PublicResolver__factory.ts +84 -1
- package/src/generated/factories/RSASHA1Algorithm__factory.ts +1 -1
- package/src/generated/factories/RSASHA256Algorithm__factory.ts +1 -1
- package/src/generated/factories/ReverseRegistrar__factory.ts +1 -1
- package/src/generated/factories/Root__factory.ts +1 -1
- package/src/generated/factories/SHA1Digest__factory.ts +1 -1
- package/src/generated/factories/SHA1NSEC3Digest__factory.ts +1 -1
- package/src/generated/factories/SHA256Digest__factory.ts +1 -1
- package/src/generated/factories/StaticMetadataService__factory.ts +1 -1
- package/src/generated/factories/TLDPublicSuffixList__factory.ts +1 -1
- package/src/generated/factories/UniversalResolver__factory.ts +68 -3
- package/src/index.ts +15 -14
- package/src/static.ts +1 -1
- package/src/utils/ccip.ts +2 -2
- package/src/utils/consts.ts +1 -0
- package/src/utils/fuses.ts +299 -102
- package/src/utils/hexEncodedName.ts +3 -0
- package/src/utils/labels.ts +13 -11
- package/src/utils/normalise.ts +1 -1
- package/src/utils/recordHelpers.ts +2 -1
- package/src/utils/registerHelpers.ts +14 -42
- package/src/utils/subgraph-types.ts +312 -0
- package/src/utils/wrapper.ts +2 -2
- package/dist/cjs/utils/generateFuseInput.js +0 -40
- package/dist/esm/functions/burnFuses.mjs +0 -12
- package/dist/esm/utils/generateFuseInput.mjs +0 -15
- package/dist/types/functions/burnFuses.d.ts +0 -3
- package/dist/types/utils/generateFuseInput.d.ts +0 -3
- package/src/functions/burnFuses.test.ts +0 -148
- package/src/functions/burnFuses.ts +0 -16
- package/src/utils/generateFuseInput.ts +0 -13
|
@@ -4,6 +4,30 @@ import { ENSArgs } from '..'
|
|
|
4
4
|
import { decodeContenthash } from '../utils/contentHash'
|
|
5
5
|
import { labelhash } from '../utils/labels'
|
|
6
6
|
import { namehash } from '../utils/normalise'
|
|
7
|
+
import {
|
|
8
|
+
AbiChanged,
|
|
9
|
+
AddrChanged,
|
|
10
|
+
AuthorisationChanged,
|
|
11
|
+
ContenthashChanged,
|
|
12
|
+
ExpiryExtended,
|
|
13
|
+
FusesSet,
|
|
14
|
+
InterfaceChanged,
|
|
15
|
+
MulticoinAddrChanged,
|
|
16
|
+
NameChanged,
|
|
17
|
+
NameRegistered,
|
|
18
|
+
NameRenewed,
|
|
19
|
+
NameTransferred,
|
|
20
|
+
NameUnwrapped,
|
|
21
|
+
NameWrapped,
|
|
22
|
+
NewOwner,
|
|
23
|
+
NewResolver,
|
|
24
|
+
NewTtl,
|
|
25
|
+
PubkeyChanged,
|
|
26
|
+
TextChanged,
|
|
27
|
+
Transfer,
|
|
28
|
+
VersionChanged,
|
|
29
|
+
WrappedTransfer,
|
|
30
|
+
} from '../utils/subgraph-types'
|
|
7
31
|
|
|
8
32
|
type DomainEvent =
|
|
9
33
|
| 'NewOwner'
|
|
@@ -14,6 +38,7 @@ type DomainEvent =
|
|
|
14
38
|
| 'NameWrapped'
|
|
15
39
|
| 'NameUnwrapped'
|
|
16
40
|
| 'FusesSet'
|
|
41
|
+
| 'ExpiryExtended'
|
|
17
42
|
type RegistrationEvent = 'NameRegistered' | 'NameRenewed' | 'NameTransferred'
|
|
18
43
|
type ResolverEvent =
|
|
19
44
|
| 'AddrChanged'
|
|
@@ -38,30 +63,35 @@ const eventFormat: {
|
|
|
38
63
|
[key in EventTypes]: { [n in EventFormat[key]]: (args: any) => object }
|
|
39
64
|
} = {
|
|
40
65
|
Domain: {
|
|
41
|
-
NewOwner: (args:
|
|
42
|
-
NewResolver: (args:
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
66
|
+
NewOwner: (args: NewOwner) => ({ owner: args.owner.id }),
|
|
67
|
+
NewResolver: (args: NewResolver) => ({
|
|
68
|
+
resolver: args.resolver.id.split('-')[0],
|
|
69
|
+
}),
|
|
70
|
+
Transfer: (args: Transfer) => ({ owner: args.owner.id }),
|
|
71
|
+
NewTTL: (args: NewTtl) => ({ ttl: args.ttl }),
|
|
72
|
+
WrappedTransfer: (args: WrappedTransfer) => ({ owner: args.owner.id }),
|
|
73
|
+
NameWrapped: (args: NameWrapped) => ({
|
|
47
74
|
fuses: args.fuses,
|
|
48
75
|
owner: args.owner.id,
|
|
49
|
-
|
|
76
|
+
expiryDate: args.expiryDate,
|
|
50
77
|
}),
|
|
51
|
-
NameUnwrapped: (args:
|
|
52
|
-
FusesSet: (args:
|
|
78
|
+
NameUnwrapped: (args: NameUnwrapped) => ({ owner: args.owner.id }),
|
|
79
|
+
FusesSet: (args: FusesSet) => ({ fuses: args.fuses }),
|
|
80
|
+
ExpiryExtended: (args: ExpiryExtended) => ({ expiryDate: args.expiryDate }),
|
|
53
81
|
},
|
|
54
82
|
Registration: {
|
|
55
|
-
NameRegistered: (args:
|
|
83
|
+
NameRegistered: (args: NameRegistered) => ({
|
|
56
84
|
registrant: args.registrant.id,
|
|
57
85
|
expiryDate: args.expiryDate,
|
|
58
86
|
}),
|
|
59
|
-
NameRenewed: (args:
|
|
60
|
-
NameTransferred: (args:
|
|
87
|
+
NameRenewed: (args: NameRenewed) => ({ expiryDate: args.expiryDate }),
|
|
88
|
+
NameTransferred: (args: NameTransferred) => ({ owner: args.newOwner.id }),
|
|
61
89
|
},
|
|
62
90
|
Resolver: {
|
|
63
|
-
AddrChanged: (args:
|
|
64
|
-
MulticoinAddrChanged: (
|
|
91
|
+
AddrChanged: (args: AddrChanged) => ({ addr: args.addr.id }),
|
|
92
|
+
MulticoinAddrChanged: (
|
|
93
|
+
args: Omit<MulticoinAddrChanged, 'addr'> & { multiaddr: string },
|
|
94
|
+
) => {
|
|
65
95
|
const format = formatsByCoinType[parseInt(args.coinType)]
|
|
66
96
|
if (!format) {
|
|
67
97
|
return {
|
|
@@ -82,21 +112,23 @@ const eventFormat: {
|
|
|
82
112
|
addr: format.encoder(Buffer.from(args.multiaddr.slice(2), 'hex')),
|
|
83
113
|
}
|
|
84
114
|
},
|
|
85
|
-
NameChanged: (args:
|
|
86
|
-
AbiChanged: (args:
|
|
87
|
-
PubkeyChanged: (args:
|
|
88
|
-
TextChanged: (args:
|
|
89
|
-
ContenthashChanged: (args:
|
|
90
|
-
|
|
91
|
-
|
|
115
|
+
NameChanged: (args: NameChanged) => ({ name: args.name }),
|
|
116
|
+
AbiChanged: (args: AbiChanged) => ({ contentType: args.contentType }),
|
|
117
|
+
PubkeyChanged: (args: PubkeyChanged) => ({ x: args.x, y: args.y }),
|
|
118
|
+
TextChanged: (args: TextChanged) => ({ key: args.key, value: args.value }),
|
|
119
|
+
ContenthashChanged: (args: ContenthashChanged) => ({
|
|
120
|
+
hash: decodeContenthash(args.hash),
|
|
121
|
+
}),
|
|
122
|
+
InterfaceChanged: (args: InterfaceChanged) => ({
|
|
123
|
+
interfaceId: args.interfaceID,
|
|
92
124
|
implementer: args.implementer,
|
|
93
125
|
}),
|
|
94
|
-
AuthorisationChanged: (args:
|
|
126
|
+
AuthorisationChanged: (args: AuthorisationChanged) => ({
|
|
95
127
|
owner: args.owner,
|
|
96
128
|
target: args.target,
|
|
97
129
|
isAuthorized: args.isAuthorized,
|
|
98
130
|
}),
|
|
99
|
-
VersionChanged: (args:
|
|
131
|
+
VersionChanged: (args: VersionChanged) => ({ version: args.version }),
|
|
100
132
|
},
|
|
101
133
|
}
|
|
102
134
|
|
|
@@ -154,7 +186,7 @@ export async function getHistory(
|
|
|
154
186
|
}
|
|
155
187
|
...on NameWrapped {
|
|
156
188
|
fuses
|
|
157
|
-
|
|
189
|
+
expiryDate
|
|
158
190
|
owner {
|
|
159
191
|
id
|
|
160
192
|
}
|
|
@@ -166,7 +198,9 @@ export async function getHistory(
|
|
|
166
198
|
}
|
|
167
199
|
...on FusesSet {
|
|
168
200
|
fuses
|
|
169
|
-
|
|
201
|
+
}
|
|
202
|
+
...on ExpiryExtended {
|
|
203
|
+
expiryDate
|
|
170
204
|
}
|
|
171
205
|
}
|
|
172
206
|
registration {
|
|
@@ -29,7 +29,7 @@ const letterItems = [
|
|
|
29
29
|
]
|
|
30
30
|
|
|
31
31
|
const domainLetterItems = [
|
|
32
|
-
'[',
|
|
32
|
+
...Array(3).fill('['),
|
|
33
33
|
'x',
|
|
34
34
|
'w',
|
|
35
35
|
't',
|
|
@@ -172,7 +172,7 @@ describe('getNames', () => {
|
|
|
172
172
|
type: 'wrappedOwner',
|
|
173
173
|
page: 0,
|
|
174
174
|
})
|
|
175
|
-
expect(pageOne).toHaveLength(
|
|
175
|
+
expect(pageOne).toHaveLength(2)
|
|
176
176
|
})
|
|
177
177
|
describe('orderBy', () => {
|
|
178
178
|
describe('registrations', () => {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ENSArgs } from '..'
|
|
2
2
|
import { truncateFormat } from '../utils/format'
|
|
3
|
-
import {
|
|
3
|
+
import { AllCurrentFuses, decodeFuses } from '../utils/fuses'
|
|
4
4
|
import { decryptName } from '../utils/labels'
|
|
5
|
+
import { Domain, Registration, WrappedDomain } from '../utils/subgraph-types'
|
|
5
6
|
|
|
6
7
|
export type Name = {
|
|
7
8
|
id: string
|
|
@@ -16,7 +17,7 @@ export type Name = {
|
|
|
16
17
|
createdAt?: Date
|
|
17
18
|
registrationDate?: Date
|
|
18
19
|
expiryDate?: Date
|
|
19
|
-
fuses?:
|
|
20
|
+
fuses?: AllCurrentFuses
|
|
20
21
|
registration?: {
|
|
21
22
|
expiryDate: Date
|
|
22
23
|
registrationDate: Date
|
|
@@ -44,7 +45,7 @@ type OwnerParams = {
|
|
|
44
45
|
|
|
45
46
|
type WrappedOwnerParams = {
|
|
46
47
|
type: 'wrappedOwner'
|
|
47
|
-
orderBy?: 'expiryDate' | '
|
|
48
|
+
orderBy?: 'expiryDate' | 'name'
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
type AllParams = {
|
|
@@ -57,23 +58,35 @@ type AllParams = {
|
|
|
57
58
|
type Params = BaseParams &
|
|
58
59
|
(RegistrantParams | OwnerParams | WrappedOwnerParams | AllParams)
|
|
59
60
|
|
|
60
|
-
const mapDomain = (domain:
|
|
61
|
-
const decrypted = decryptName(
|
|
61
|
+
const mapDomain = ({ name, ...domain }: Domain) => {
|
|
62
|
+
const decrypted = name ? decryptName(name) : undefined
|
|
62
63
|
return {
|
|
63
64
|
...domain,
|
|
64
65
|
name: decrypted,
|
|
65
|
-
truncatedName: truncateFormat(decrypted),
|
|
66
|
+
truncatedName: decrypted ? truncateFormat(decrypted) : undefined,
|
|
66
67
|
createdAt: new Date(parseInt(domain.createdAt) * 1000),
|
|
67
68
|
type: 'domain',
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
71
|
|
|
71
|
-
const mapWrappedDomain = (wrappedDomain:
|
|
72
|
-
const domain = mapDomain(wrappedDomain.domain)
|
|
72
|
+
const mapWrappedDomain = (wrappedDomain: WrappedDomain) => {
|
|
73
|
+
const domain = mapDomain(wrappedDomain.domain) as Omit<
|
|
74
|
+
ReturnType<typeof mapDomain>,
|
|
75
|
+
'registration'
|
|
76
|
+
> & {
|
|
77
|
+
registration?: {
|
|
78
|
+
expiryDate: string | Date
|
|
79
|
+
registrationDate: string | Date
|
|
80
|
+
}
|
|
81
|
+
}
|
|
73
82
|
if (domain.registration) {
|
|
74
83
|
domain.registration = {
|
|
75
|
-
expiryDate: new Date(
|
|
76
|
-
|
|
84
|
+
expiryDate: new Date(
|
|
85
|
+
parseInt(domain.registration.expiryDate as string) * 1000,
|
|
86
|
+
),
|
|
87
|
+
registrationDate: new Date(
|
|
88
|
+
parseInt(domain.registration.registrationDate as string) * 1000,
|
|
89
|
+
),
|
|
77
90
|
}
|
|
78
91
|
}
|
|
79
92
|
return {
|
|
@@ -84,8 +97,8 @@ const mapWrappedDomain = (wrappedDomain: any) => {
|
|
|
84
97
|
}
|
|
85
98
|
}
|
|
86
99
|
|
|
87
|
-
const mapRegistration = (registration:
|
|
88
|
-
const decrypted = decryptName(registration.domain.name)
|
|
100
|
+
const mapRegistration = (registration: Registration) => {
|
|
101
|
+
const decrypted = decryptName(registration.domain.name!)
|
|
89
102
|
return {
|
|
90
103
|
expiryDate: new Date(parseInt(registration.expiryDate) * 1000),
|
|
91
104
|
registrationDate: new Date(parseInt(registration.registrationDate) * 1000),
|
|
@@ -275,7 +288,7 @@ const getNames = async (
|
|
|
275
288
|
id: address,
|
|
276
289
|
first: pageSize,
|
|
277
290
|
skip: (page || 0) * pageSize,
|
|
278
|
-
orderBy,
|
|
291
|
+
orderBy: orderBy === 'labelName' ? 'name' : orderBy,
|
|
279
292
|
orderDirection,
|
|
280
293
|
}
|
|
281
294
|
}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
import { JsonRpcProvider } from '@ethersproject/providers'
|
|
1
2
|
import { ENS } from '..'
|
|
2
3
|
import setup from '../tests/setup'
|
|
3
4
|
|
|
4
5
|
let ensInstance: ENS
|
|
5
6
|
let revert: Awaited<ReturnType<typeof setup>>['revert']
|
|
7
|
+
let provider: JsonRpcProvider
|
|
8
|
+
let accounts: string[]
|
|
6
9
|
|
|
7
10
|
beforeAll(async () => {
|
|
8
|
-
;({ ensInstance, revert } = await setup())
|
|
11
|
+
;({ ensInstance, revert, provider } = await setup())
|
|
12
|
+
accounts = await provider.listAccounts()
|
|
9
13
|
})
|
|
10
14
|
|
|
11
15
|
afterAll(async () => {
|
|
@@ -13,8 +17,63 @@ afterAll(async () => {
|
|
|
13
17
|
})
|
|
14
18
|
|
|
15
19
|
describe('getOwner', () => {
|
|
16
|
-
it('should return
|
|
20
|
+
it('should return correct ownership level and values for a wrapped .eth name', async () => {
|
|
17
21
|
const result = await ensInstance.getOwner('wrapped.eth')
|
|
18
|
-
expect(result
|
|
22
|
+
expect(result).toEqual({
|
|
23
|
+
ownershipLevel: 'nameWrapper',
|
|
24
|
+
owner: accounts[1],
|
|
25
|
+
expired: false,
|
|
26
|
+
})
|
|
27
|
+
})
|
|
28
|
+
it('should return correct ownership level and values for an expired wrapped .eth name', async () => {
|
|
29
|
+
const result = await ensInstance.getOwner('expired-wrapped.eth')
|
|
30
|
+
expect(result).toEqual({
|
|
31
|
+
ownershipLevel: 'nameWrapper',
|
|
32
|
+
owner: '0x0000000000000000000000000000000000000000',
|
|
33
|
+
expired: true,
|
|
34
|
+
})
|
|
35
|
+
})
|
|
36
|
+
it('should return correct ownership level and values for an unwrapped .eth name', async () => {
|
|
37
|
+
const result = await ensInstance.getOwner('test123.eth')
|
|
38
|
+
expect(result).toEqual({
|
|
39
|
+
ownershipLevel: 'registrar',
|
|
40
|
+
owner: accounts[1],
|
|
41
|
+
registrant: accounts[1],
|
|
42
|
+
expired: false,
|
|
43
|
+
})
|
|
44
|
+
})
|
|
45
|
+
it('should return correct ownership level and values for an expired unwrapped .eth name', async () => {
|
|
46
|
+
const result = await ensInstance.getOwner('expired.eth')
|
|
47
|
+
expect(result).toEqual({
|
|
48
|
+
ownershipLevel: 'registrar',
|
|
49
|
+
owner: accounts[1],
|
|
50
|
+
registrant: accounts[1].toLowerCase(),
|
|
51
|
+
expired: true,
|
|
52
|
+
})
|
|
53
|
+
})
|
|
54
|
+
describe('subname', () => {
|
|
55
|
+
it('should return correct ownership level and values for a unwrapped name', async () => {
|
|
56
|
+
const result = await ensInstance.getOwner('test.with-subnames.eth')
|
|
57
|
+
expect(result).toEqual({
|
|
58
|
+
ownershipLevel: 'registry',
|
|
59
|
+
owner: accounts[2],
|
|
60
|
+
})
|
|
61
|
+
})
|
|
62
|
+
it('should return correct ownership level and values for a wrapped name', async () => {
|
|
63
|
+
const result = await ensInstance.getOwner(
|
|
64
|
+
'test.wrapped-with-subnames.eth',
|
|
65
|
+
)
|
|
66
|
+
expect(result).toEqual({
|
|
67
|
+
ownershipLevel: 'nameWrapper',
|
|
68
|
+
owner: accounts[2],
|
|
69
|
+
})
|
|
70
|
+
})
|
|
71
|
+
it('should return correct ownership level and values for an expired wrapped name', async () => {
|
|
72
|
+
const result = await ensInstance.getOwner('test.expired-wrapped.eth')
|
|
73
|
+
expect(result).toEqual({
|
|
74
|
+
ownershipLevel: 'nameWrapper',
|
|
75
|
+
owner: accounts[2],
|
|
76
|
+
})
|
|
77
|
+
})
|
|
19
78
|
})
|
|
20
79
|
})
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import type { Result } from '@ethersproject/abi'
|
|
2
|
+
import { defaultAbiCoder } from '@ethersproject/abi'
|
|
3
3
|
import { hexStripZeros } from '@ethersproject/bytes'
|
|
4
4
|
import { ENSArgs } from '..'
|
|
5
5
|
import { labelhash } from '../utils/labels'
|
|
@@ -9,6 +9,7 @@ type Owner = {
|
|
|
9
9
|
registrant?: string
|
|
10
10
|
owner?: string
|
|
11
11
|
ownershipLevel: 'nameWrapper' | 'registry' | 'registrar'
|
|
12
|
+
expired?: boolean
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
const singleContractOwnerRaw = async (
|
|
@@ -146,26 +147,43 @@ const decode = async (
|
|
|
146
147
|
|
|
147
148
|
const registryOwner = (decodedData[0] as Result)[0]
|
|
148
149
|
const nameWrapperOwner = (decodedData[1] as Result)[0]
|
|
149
|
-
let registrarOwner
|
|
150
|
+
let registrarOwner: string | undefined = (
|
|
151
|
+
decodedData[2] as Result | undefined
|
|
152
|
+
)?.[0]
|
|
153
|
+
let baseReturnObject: {
|
|
154
|
+
expired?: boolean
|
|
155
|
+
} = {}
|
|
150
156
|
|
|
151
157
|
// check for only .eth names
|
|
152
158
|
if (labels[labels.length - 1] === 'eth') {
|
|
153
|
-
if
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
159
|
+
// if there is no registrar owner, the name is expired
|
|
160
|
+
// but we still want to get the registrar owner prior to expiry
|
|
161
|
+
if (labels.length === 2) {
|
|
162
|
+
if (!registrarOwner) {
|
|
163
|
+
const graphRegistrantResult = await gqlInstance.client.request(
|
|
164
|
+
registrantQuery,
|
|
165
|
+
{
|
|
166
|
+
namehash: makeNamehash(name),
|
|
167
|
+
},
|
|
168
|
+
)
|
|
169
|
+
registrarOwner =
|
|
170
|
+
graphRegistrantResult.domain?.registration?.registrant?.id
|
|
171
|
+
baseReturnObject = {
|
|
172
|
+
expired: true,
|
|
173
|
+
}
|
|
174
|
+
} else {
|
|
175
|
+
baseReturnObject = {
|
|
176
|
+
expired: false,
|
|
177
|
+
}
|
|
178
|
+
}
|
|
162
179
|
}
|
|
163
180
|
// if the owner on the registrar is the namewrapper, then the namewrapper owner is the owner
|
|
164
181
|
// there is no "registrant" for wrapped names
|
|
165
|
-
if (registrarOwner === nameWrapper.address) {
|
|
182
|
+
if (registrarOwner?.toLowerCase() === nameWrapper.address.toLowerCase()) {
|
|
166
183
|
return {
|
|
167
184
|
owner: nameWrapperOwner,
|
|
168
185
|
ownershipLevel: 'nameWrapper',
|
|
186
|
+
...baseReturnObject,
|
|
169
187
|
}
|
|
170
188
|
}
|
|
171
189
|
// if there is a registrar owner, then it's not a subdomain but we have also passed the namewrapper clause
|
|
@@ -177,6 +195,7 @@ const decode = async (
|
|
|
177
195
|
registrant: registrarOwner,
|
|
178
196
|
owner: registryOwner,
|
|
179
197
|
ownershipLevel: 'registrar',
|
|
198
|
+
...baseReturnObject,
|
|
180
199
|
}
|
|
181
200
|
}
|
|
182
201
|
if (hexStripZeros(registryOwner) !== '0x') {
|
|
@@ -187,6 +206,7 @@ const decode = async (
|
|
|
187
206
|
registrant: undefined,
|
|
188
207
|
owner: registryOwner,
|
|
189
208
|
ownershipLevel: 'registrar',
|
|
209
|
+
expired: true,
|
|
190
210
|
}
|
|
191
211
|
}
|
|
192
212
|
// this means that the subname is wrapped
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defaultAbiCoder } from '@ethersproject/abi
|
|
2
|
-
import { BigNumber } from '@ethersproject/bignumber
|
|
1
|
+
import { defaultAbiCoder } from '@ethersproject/abi'
|
|
2
|
+
import { BigNumber } from '@ethersproject/bignumber'
|
|
3
3
|
import { ENSArgs } from '..'
|
|
4
4
|
|
|
5
5
|
const raw = async (
|
|
@@ -119,6 +119,13 @@ describe('getProfile', () => {
|
|
|
119
119
|
deploymentAddresses.LegacyPublicResolver,
|
|
120
120
|
)
|
|
121
121
|
})
|
|
122
|
+
it('should return the decoded name for a name with encoded labels', async () => {
|
|
123
|
+
const result = await ensInstance.getProfile(
|
|
124
|
+
'[9dd2c369a187b4e6b9c402f030e50743e619301ea62aa4c0737d4ef7e10a3d49].with-subnames.eth',
|
|
125
|
+
)
|
|
126
|
+
expect(result).toBeDefined()
|
|
127
|
+
expect(result?.decryptedName).toBe('xyz.with-subnames.eth')
|
|
128
|
+
})
|
|
122
129
|
it('should return undefined for an unregistered name', async () => {
|
|
123
130
|
const result = await ensInstance.getProfile('test123123123cool.eth')
|
|
124
131
|
expect(result).toBeUndefined()
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { formatsByName } from '@ensdomains/address-encoder'
|
|
2
|
-
import { defaultAbiCoder } from '@ethersproject/abi
|
|
2
|
+
import { defaultAbiCoder } from '@ethersproject/abi'
|
|
3
3
|
import { hexStripZeros, isBytesLike } from '@ethersproject/bytes'
|
|
4
4
|
import { ENSArgs } from '..'
|
|
5
5
|
import { decodeContenthash, DecodedContentHash } from '../utils/contentHash'
|
|
@@ -37,6 +37,7 @@ type ResolvedProfile = {
|
|
|
37
37
|
createdAt: string | null
|
|
38
38
|
address?: string
|
|
39
39
|
name?: string | null
|
|
40
|
+
decryptedName?: string | null
|
|
40
41
|
match?: boolean
|
|
41
42
|
message?: string
|
|
42
43
|
records?: {
|
|
@@ -360,6 +361,7 @@ const graphFetch = async (
|
|
|
360
361
|
const query = gqlInstance.gql`
|
|
361
362
|
query getRecords($id: String!) {
|
|
362
363
|
domain(id: $id) {
|
|
364
|
+
name
|
|
363
365
|
isMigrated
|
|
364
366
|
createdAt
|
|
365
367
|
resolver {
|
|
@@ -377,6 +379,7 @@ const graphFetch = async (
|
|
|
377
379
|
const customResolverQuery = gqlInstance.gql`
|
|
378
380
|
query getRecordsWithCustomResolver($id: String!, $resolverId: String!) {
|
|
379
381
|
domain(id: $id) {
|
|
382
|
+
name
|
|
380
383
|
isMigrated
|
|
381
384
|
createdAt
|
|
382
385
|
}
|
|
@@ -414,11 +417,12 @@ const graphFetch = async (
|
|
|
414
417
|
|
|
415
418
|
if (!domain) return
|
|
416
419
|
|
|
417
|
-
const { isMigrated, createdAt } = domain
|
|
420
|
+
const { isMigrated, createdAt, name: decryptedName } = domain
|
|
418
421
|
|
|
419
422
|
const returnedRecords: ProfileResponse = {}
|
|
420
423
|
|
|
421
|
-
if (!resolverResponse || !wantedRecords)
|
|
424
|
+
if (!resolverResponse || !wantedRecords)
|
|
425
|
+
return { isMigrated, createdAt, decryptedName }
|
|
422
426
|
|
|
423
427
|
Object.keys(wantedRecords).forEach((key: string) => {
|
|
424
428
|
const data = wantedRecords[key as keyof ProfileOptions]
|
|
@@ -433,6 +437,7 @@ const graphFetch = async (
|
|
|
433
437
|
|
|
434
438
|
return {
|
|
435
439
|
...returnedRecords,
|
|
440
|
+
decryptedName,
|
|
436
441
|
isMigrated,
|
|
437
442
|
createdAt,
|
|
438
443
|
}
|
|
@@ -486,6 +491,7 @@ const getProfileFromName = async (
|
|
|
486
491
|
)
|
|
487
492
|
let isMigrated: boolean | null = null
|
|
488
493
|
let createdAt: string | null = null
|
|
494
|
+
let decryptedName: string | null = null
|
|
489
495
|
let result: Awaited<ReturnType<typeof getDataForName>> | null = null
|
|
490
496
|
if (!graphResult) {
|
|
491
497
|
if (!fallback) return
|
|
@@ -506,13 +512,16 @@ const getProfileFromName = async (
|
|
|
506
512
|
const {
|
|
507
513
|
isMigrated: _isMigrated,
|
|
508
514
|
createdAt: _createdAt,
|
|
515
|
+
decryptedName: _decryptedName,
|
|
509
516
|
...wantedRecords
|
|
510
517
|
}: {
|
|
511
518
|
isMigrated: boolean
|
|
512
519
|
createdAt: string
|
|
520
|
+
decryptedName: string
|
|
513
521
|
} & InternalProfileOptions = graphResult
|
|
514
522
|
isMigrated = _isMigrated
|
|
515
523
|
createdAt = _createdAt
|
|
524
|
+
decryptedName = _decryptedName
|
|
516
525
|
let recordsWithFallback = usingOptions
|
|
517
526
|
? wantedRecords
|
|
518
527
|
: (_options as InternalProfileOptions)
|
|
@@ -547,7 +556,7 @@ const getProfileFromName = async (
|
|
|
547
556
|
? "Records fetch didn't complete"
|
|
548
557
|
: "Name doesn't have a resolver",
|
|
549
558
|
}
|
|
550
|
-
return { ...result, isMigrated, createdAt, message: undefined }
|
|
559
|
+
return { ...result, isMigrated, createdAt, decryptedName, message: undefined }
|
|
551
560
|
}
|
|
552
561
|
|
|
553
562
|
const getProfileFromAddress = async (
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { BigNumber } from 'ethers'
|
|
2
1
|
import { ENS } from '../index'
|
|
3
2
|
import setup from '../tests/setup'
|
|
4
3
|
|
|
@@ -7,22 +6,6 @@ let revert: Awaited<ReturnType<typeof setup>>['revert']
|
|
|
7
6
|
let createSnapshot: Awaited<ReturnType<typeof setup>>['createSnapshot']
|
|
8
7
|
let withWrappedSnapshot: any
|
|
9
8
|
|
|
10
|
-
const unwrappedNameDefault = {
|
|
11
|
-
expiryDate: new Date(0).toString(),
|
|
12
|
-
fuseObj: {
|
|
13
|
-
CANNOT_BURN_FUSES: false,
|
|
14
|
-
CANNOT_CREATE_SUBDOMAIN: false,
|
|
15
|
-
CANNOT_SET_RESOLVER: false,
|
|
16
|
-
CANNOT_SET_TTL: false,
|
|
17
|
-
CANNOT_TRANSFER: false,
|
|
18
|
-
CANNOT_UNWRAP: false,
|
|
19
|
-
PARENT_CANNOT_CONTROL: false,
|
|
20
|
-
CAN_DO_EVERYTHING: true,
|
|
21
|
-
},
|
|
22
|
-
owner: '0x0000000000000000000000000000000000000000',
|
|
23
|
-
rawFuses: BigNumber.from(0),
|
|
24
|
-
}
|
|
25
|
-
|
|
26
9
|
beforeAll(async () => {
|
|
27
10
|
;({ ensInstance, revert, createSnapshot } = await setup())
|
|
28
11
|
|
|
@@ -41,9 +24,9 @@ afterAll(async () => {
|
|
|
41
24
|
describe('getWrapperData', () => {
|
|
42
25
|
it('should return default data for an unwrapped name', async () => {
|
|
43
26
|
const result = await ensInstance.getWrapperData('with-profile.eth')
|
|
44
|
-
expect(
|
|
45
|
-
|
|
46
|
-
)
|
|
27
|
+
expect(result?.expiryDate).toBeUndefined()
|
|
28
|
+
expect(result?.rawFuses).toEqual(0)
|
|
29
|
+
expect(result?.child.CAN_DO_EVERYTHING).toBeTruthy()
|
|
47
30
|
})
|
|
48
31
|
it('should return with CAN_DO_EVERYTHING set to true for a name with no fuses burned', async () => {
|
|
49
32
|
const result = await ensInstance.getWrapperData(
|
|
@@ -51,23 +34,13 @@ describe('getWrapperData', () => {
|
|
|
51
34
|
)
|
|
52
35
|
expect(result).toBeTruthy()
|
|
53
36
|
if (result) {
|
|
54
|
-
expect(result.
|
|
55
|
-
expect(
|
|
56
|
-
Object.values(result.fuseObj).reduce(
|
|
57
|
-
(prev, curr) => (curr ? prev + 1 : prev),
|
|
58
|
-
0,
|
|
59
|
-
),
|
|
60
|
-
).toBe(1)
|
|
61
|
-
expect(result.rawFuses.toHexString()).toBe('0x00')
|
|
37
|
+
expect(result.child.CAN_DO_EVERYTHING).toBe(true)
|
|
38
|
+
expect(result.rawFuses).toBe(0)
|
|
62
39
|
}
|
|
63
40
|
})
|
|
64
41
|
it('should return with other correct fuses', async () => {
|
|
65
|
-
const tx = await ensInstance.
|
|
66
|
-
|
|
67
|
-
'CANNOT_UNWRAP',
|
|
68
|
-
'CANNOT_CREATE_SUBDOMAIN',
|
|
69
|
-
'CANNOT_SET_TTL',
|
|
70
|
-
],
|
|
42
|
+
const tx = await ensInstance.setFuses('wrapped.eth', {
|
|
43
|
+
named: ['CANNOT_UNWRAP', 'CANNOT_CREATE_SUBDOMAIN', 'CANNOT_SET_TTL'],
|
|
71
44
|
addressOrIndex: 1,
|
|
72
45
|
})
|
|
73
46
|
await tx.wait()
|
|
@@ -75,17 +48,10 @@ describe('getWrapperData', () => {
|
|
|
75
48
|
const result = await ensInstance.getWrapperData('wrapped.eth')
|
|
76
49
|
expect(result).toBeTruthy()
|
|
77
50
|
if (result) {
|
|
78
|
-
expect(result.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
CANNOT_SET_RESOLVER: false,
|
|
83
|
-
CANNOT_SET_TTL: true,
|
|
84
|
-
CANNOT_CREATE_SUBDOMAIN: true,
|
|
85
|
-
PARENT_CANNOT_CONTROL: true,
|
|
86
|
-
CAN_DO_EVERYTHING: false,
|
|
87
|
-
})
|
|
88
|
-
expect(result.rawFuses.toHexString()).toBe('0x71')
|
|
51
|
+
expect(result.child.CAN_DO_EVERYTHING).toBe(false)
|
|
52
|
+
expect(result.child.CANNOT_UNWRAP).toBe(true)
|
|
53
|
+
expect(result.child.CANNOT_CREATE_SUBDOMAIN).toBe(true)
|
|
54
|
+
expect(result.child.CANNOT_SET_TTL).toBe(true)
|
|
89
55
|
}
|
|
90
56
|
})
|
|
91
57
|
it('should return correct expiry', async () => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BigNumber } from '@ethersproject/bignumber
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber'
|
|
2
2
|
import { ENSArgs } from '../index'
|
|
3
3
|
import { decodeFuses } from '../utils/fuses'
|
|
4
4
|
import { namehash } from '../utils/normalise'
|
|
@@ -14,18 +14,20 @@ const raw = async ({ contracts }: ENSArgs<'contracts'>, name: string) => {
|
|
|
14
14
|
const decode = async ({ contracts }: ENSArgs<'contracts'>, data: string) => {
|
|
15
15
|
const nameWrapper = await contracts?.getNameWrapper()!
|
|
16
16
|
try {
|
|
17
|
-
const [owner,
|
|
17
|
+
const [owner, fuses, expiry] = nameWrapper.interface.decodeFunctionResult(
|
|
18
18
|
'getData',
|
|
19
19
|
data,
|
|
20
|
-
)
|
|
20
|
+
) as [string, number, BigNumber]
|
|
21
21
|
|
|
22
|
-
const fuses = BigNumber.from(_fuses)
|
|
23
22
|
const fuseObj = decodeFuses(fuses)
|
|
24
23
|
|
|
25
|
-
const expiryDate =
|
|
24
|
+
const expiryDate =
|
|
25
|
+
expiry.gt(0) && expiry.lt(BigNumber.from(2).pow(32))
|
|
26
|
+
? new Date(expiry.mul(1000).toString())
|
|
27
|
+
: undefined
|
|
26
28
|
|
|
27
29
|
return {
|
|
28
|
-
fuseObj,
|
|
30
|
+
...fuseObj,
|
|
29
31
|
expiryDate,
|
|
30
32
|
rawFuses: fuses,
|
|
31
33
|
owner,
|
|
@@ -23,6 +23,8 @@ describe('registerName', () => {
|
|
|
23
23
|
await revert()
|
|
24
24
|
})
|
|
25
25
|
it('should return a registration transaction and succeed', async () => {
|
|
26
|
+
const controller = await ensInstance.contracts!.getEthRegistrarController()!
|
|
27
|
+
|
|
26
28
|
const name = 'cool-swag.eth'
|
|
27
29
|
const duration = 31536000
|
|
28
30
|
const { customData, ...commitPopTx } =
|
|
@@ -37,14 +39,12 @@ describe('registerName', () => {
|
|
|
37
39
|
await provider.send('evm_increaseTime', [60])
|
|
38
40
|
await provider.send('evm_mine', [])
|
|
39
41
|
|
|
40
|
-
const { secret
|
|
42
|
+
const { secret } = customData!
|
|
41
43
|
|
|
42
|
-
const controller = await ensInstance.contracts!.getEthRegistrarController()!
|
|
43
44
|
const [price] = await controller.rentPrice(name, duration)
|
|
44
45
|
|
|
45
46
|
const tx = await ensInstance.registerName(name, {
|
|
46
47
|
secret,
|
|
47
|
-
wrapperExpiry,
|
|
48
48
|
duration,
|
|
49
49
|
owner: accounts[1],
|
|
50
50
|
addressOrIndex: accounts[1],
|