@ensdomains/ensjs 3.0.0-alpha.10 → 3.0.0-alpha.11

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.
Files changed (234) hide show
  1. package/dist/cjs/contracts/baseRegistrar.d.ts +1 -1
  2. package/dist/cjs/contracts/index.d.ts +3 -3
  3. package/dist/cjs/contracts/multicall.d.ts +1 -1
  4. package/dist/cjs/contracts/registry.d.ts +1 -1
  5. package/dist/cjs/functions/burnFuses.js +1 -1
  6. package/dist/cjs/functions/createSubname.d.ts +3 -1
  7. package/dist/cjs/functions/createSubname.js +4 -2
  8. package/dist/cjs/functions/deleteSubname.d.ts +1 -1
  9. package/dist/cjs/functions/deleteSubname.js +3 -2
  10. package/dist/cjs/functions/getExpiry.d.ts +9 -2
  11. package/dist/cjs/functions/getExpiry.js +52 -7
  12. package/dist/cjs/functions/getFuses.d.ts +2 -3
  13. package/dist/cjs/functions/getFuses.js +4 -13
  14. package/dist/cjs/functions/getSpecificRecord.js +8 -1
  15. package/dist/cjs/functions/getSubnames.d.ts +1 -1
  16. package/dist/cjs/functions/getSubnames.js +1 -1
  17. package/dist/cjs/functions/transferSubname.d.ts +12 -3
  18. package/dist/cjs/functions/transferSubname.js +5 -3
  19. package/dist/cjs/functions/wrapName.d.ts +3 -1
  20. package/dist/cjs/functions/wrapName.js +35 -29
  21. package/dist/cjs/generated/BaseRegistrarImplementation.d.ts +222 -201
  22. package/dist/cjs/generated/DNSRegistrar.d.ts +68 -64
  23. package/dist/cjs/generated/DNSSECImpl.d.ts +111 -111
  24. package/dist/cjs/generated/DefaultReverseResolver.d.ts +17 -17
  25. package/dist/cjs/generated/ENSRegistry.d.ts +126 -111
  26. package/dist/cjs/generated/ETHRegistrarController.d.ts +111 -109
  27. package/dist/cjs/generated/Multicall.d.ts +60 -60
  28. package/dist/cjs/generated/NameWrapper.d.ts +493 -354
  29. package/dist/cjs/generated/P256SHA256Algorithm.d.ts +11 -7
  30. package/dist/cjs/generated/PublicResolver.d.ts +259 -235
  31. package/dist/cjs/generated/RSASHA1Algorithm.d.ts +11 -7
  32. package/dist/cjs/generated/RSASHA256Algorithm.d.ts +11 -7
  33. package/dist/cjs/generated/ReverseRegistrar.d.ts +112 -103
  34. package/dist/cjs/generated/Root.d.ts +77 -77
  35. package/dist/cjs/generated/SHA1Digest.d.ts +7 -7
  36. package/dist/cjs/generated/SHA1NSEC3Digest.d.ts +11 -7
  37. package/dist/cjs/generated/SHA256Digest.d.ts +7 -7
  38. package/dist/cjs/generated/StaticMetadataService.d.ts +7 -7
  39. package/dist/cjs/generated/TLDPublicSuffixList.d.ts +7 -7
  40. package/dist/cjs/generated/UniversalResolver.d.ts +31 -31
  41. package/dist/cjs/generated/common.d.ts +1 -0
  42. package/dist/cjs/generated/factories/DNSRegistrar__factory.d.ts +3 -15
  43. package/dist/cjs/generated/factories/DNSRegistrar__factory.js +3 -26
  44. package/dist/cjs/generated/factories/DNSSECImpl__factory.d.ts +3 -15
  45. package/dist/cjs/generated/factories/DNSSECImpl__factory.js +3 -26
  46. package/dist/cjs/generated/factories/ETHRegistrarController__factory.js +14 -4
  47. package/dist/cjs/generated/factories/NameWrapper__factory.js +210 -79
  48. package/dist/cjs/generated/factories/P256SHA256Algorithm__factory.d.ts +3 -15
  49. package/dist/cjs/generated/factories/P256SHA256Algorithm__factory.js +3 -26
  50. package/dist/cjs/generated/factories/RSASHA1Algorithm__factory.d.ts +3 -15
  51. package/dist/cjs/generated/factories/RSASHA1Algorithm__factory.js +3 -26
  52. package/dist/cjs/generated/factories/RSASHA256Algorithm__factory.d.ts +3 -15
  53. package/dist/cjs/generated/factories/RSASHA256Algorithm__factory.js +3 -26
  54. package/dist/cjs/generated/factories/SHA1Digest__factory.d.ts +3 -15
  55. package/dist/cjs/generated/factories/SHA1Digest__factory.js +3 -26
  56. package/dist/cjs/generated/factories/SHA1NSEC3Digest__factory.d.ts +3 -15
  57. package/dist/cjs/generated/factories/SHA1NSEC3Digest__factory.js +3 -26
  58. package/dist/cjs/generated/factories/SHA256Digest__factory.d.ts +3 -15
  59. package/dist/cjs/generated/factories/SHA256Digest__factory.js +3 -26
  60. package/dist/cjs/generated/factories/TLDPublicSuffixList__factory.d.ts +3 -15
  61. package/dist/cjs/generated/factories/TLDPublicSuffixList__factory.js +3 -26
  62. package/dist/cjs/generated/factories/index.d.ts +14 -0
  63. package/dist/cjs/generated/factories/index.js +29 -1
  64. package/dist/cjs/generated/index.d.ts +29 -1
  65. package/dist/cjs/generated/index.js +31 -3
  66. package/dist/cjs/index.d.ts +12 -6
  67. package/dist/cjs/index.js +3 -2
  68. package/dist/cjs/utils/wrapperExpiry.d.ts +5 -0
  69. package/dist/cjs/utils/wrapperExpiry.js +30 -0
  70. package/dist/esm/contracts/baseRegistrar.d.ts +1 -1
  71. package/dist/esm/contracts/index.d.ts +3 -3
  72. package/dist/esm/contracts/multicall.d.ts +1 -1
  73. package/dist/esm/contracts/registry.d.ts +1 -1
  74. package/dist/esm/functions/burnFuses.js +1 -1
  75. package/dist/esm/functions/createSubname.d.ts +3 -1
  76. package/dist/esm/functions/createSubname.js +4 -2
  77. package/dist/esm/functions/deleteSubname.d.ts +1 -1
  78. package/dist/esm/functions/deleteSubname.js +3 -2
  79. package/dist/esm/functions/getExpiry.d.ts +9 -2
  80. package/dist/esm/functions/getExpiry.js +52 -7
  81. package/dist/esm/functions/getFuses.d.ts +2 -3
  82. package/dist/esm/functions/getFuses.js +5 -14
  83. package/dist/esm/functions/getSpecificRecord.js +8 -1
  84. package/dist/esm/functions/getSubnames.d.ts +1 -1
  85. package/dist/esm/functions/getSubnames.js +1 -1
  86. package/dist/esm/functions/transferSubname.d.ts +12 -3
  87. package/dist/esm/functions/transferSubname.js +5 -3
  88. package/dist/esm/functions/wrapName.d.ts +3 -1
  89. package/dist/esm/functions/wrapName.js +35 -29
  90. package/dist/esm/generated/BaseRegistrarImplementation.d.ts +222 -201
  91. package/dist/esm/generated/DNSRegistrar.d.ts +68 -64
  92. package/dist/esm/generated/DNSSECImpl.d.ts +111 -111
  93. package/dist/esm/generated/DefaultReverseResolver.d.ts +17 -17
  94. package/dist/esm/generated/ENSRegistry.d.ts +126 -111
  95. package/dist/esm/generated/ETHRegistrarController.d.ts +111 -109
  96. package/dist/esm/generated/Multicall.d.ts +60 -60
  97. package/dist/esm/generated/NameWrapper.d.ts +493 -354
  98. package/dist/esm/generated/P256SHA256Algorithm.d.ts +11 -7
  99. package/dist/esm/generated/PublicResolver.d.ts +259 -235
  100. package/dist/esm/generated/RSASHA1Algorithm.d.ts +11 -7
  101. package/dist/esm/generated/RSASHA256Algorithm.d.ts +11 -7
  102. package/dist/esm/generated/ReverseRegistrar.d.ts +112 -103
  103. package/dist/esm/generated/Root.d.ts +77 -77
  104. package/dist/esm/generated/SHA1Digest.d.ts +7 -7
  105. package/dist/esm/generated/SHA1NSEC3Digest.d.ts +11 -7
  106. package/dist/esm/generated/SHA256Digest.d.ts +7 -7
  107. package/dist/esm/generated/StaticMetadataService.d.ts +7 -7
  108. package/dist/esm/generated/TLDPublicSuffixList.d.ts +7 -7
  109. package/dist/esm/generated/UniversalResolver.d.ts +31 -31
  110. package/dist/esm/generated/common.d.ts +1 -0
  111. package/dist/esm/generated/factories/DNSRegistrar__factory.d.ts +3 -15
  112. package/dist/esm/generated/factories/DNSRegistrar__factory.js +2 -25
  113. package/dist/esm/generated/factories/DNSSECImpl__factory.d.ts +3 -15
  114. package/dist/esm/generated/factories/DNSSECImpl__factory.js +2 -25
  115. package/dist/esm/generated/factories/ETHRegistrarController__factory.js +14 -4
  116. package/dist/esm/generated/factories/NameWrapper__factory.js +210 -79
  117. package/dist/esm/generated/factories/P256SHA256Algorithm__factory.d.ts +3 -15
  118. package/dist/esm/generated/factories/P256SHA256Algorithm__factory.js +2 -25
  119. package/dist/esm/generated/factories/RSASHA1Algorithm__factory.d.ts +3 -15
  120. package/dist/esm/generated/factories/RSASHA1Algorithm__factory.js +2 -25
  121. package/dist/esm/generated/factories/RSASHA256Algorithm__factory.d.ts +3 -15
  122. package/dist/esm/generated/factories/RSASHA256Algorithm__factory.js +2 -25
  123. package/dist/esm/generated/factories/SHA1Digest__factory.d.ts +3 -15
  124. package/dist/esm/generated/factories/SHA1Digest__factory.js +2 -25
  125. package/dist/esm/generated/factories/SHA1NSEC3Digest__factory.d.ts +3 -15
  126. package/dist/esm/generated/factories/SHA1NSEC3Digest__factory.js +2 -25
  127. package/dist/esm/generated/factories/SHA256Digest__factory.d.ts +3 -15
  128. package/dist/esm/generated/factories/SHA256Digest__factory.js +2 -25
  129. package/dist/esm/generated/factories/TLDPublicSuffixList__factory.d.ts +3 -15
  130. package/dist/esm/generated/factories/TLDPublicSuffixList__factory.js +2 -25
  131. package/dist/esm/generated/factories/index.d.ts +14 -0
  132. package/dist/esm/generated/factories/index.js +14 -0
  133. package/dist/esm/generated/index.d.ts +29 -1
  134. package/dist/esm/generated/index.js +15 -1
  135. package/dist/esm/index.d.ts +12 -6
  136. package/dist/esm/index.js +3 -2
  137. package/dist/esm/utils/wrapperExpiry.d.ts +5 -0
  138. package/dist/esm/utils/wrapperExpiry.js +26 -0
  139. package/package.json +12 -10
  140. package/src/ABIs/Multicall.json +452 -0
  141. package/src/contracts/index.ts +1 -1
  142. package/src/functions/batch.test.ts +6 -6
  143. package/src/functions/batchWrappers.test.ts +5 -5
  144. package/src/functions/burnFuses.test.ts +5 -10
  145. package/src/functions/burnFuses.ts +1 -1
  146. package/src/functions/createSubname.test.ts +6 -10
  147. package/src/functions/createSubname.ts +14 -2
  148. package/src/functions/deleteSubname.test.ts +9 -28
  149. package/src/functions/deleteSubname.ts +3 -2
  150. package/src/functions/getDNSOwner.test.ts +1 -5
  151. package/src/functions/getExpiry.test.ts +26 -4
  152. package/src/functions/getExpiry.ts +87 -9
  153. package/src/functions/getFuses.test.ts +10 -33
  154. package/src/functions/getFuses.ts +10 -16
  155. package/src/functions/getHistory.test.ts +23 -11
  156. package/src/functions/getName.test.ts +4 -4
  157. package/src/functions/getNames.test.ts +97 -68
  158. package/src/functions/getOwner.test.ts +10 -25
  159. package/src/functions/getProfile.test.ts +32 -24
  160. package/src/functions/getResolver.test.ts +2 -6
  161. package/src/functions/getSpecificRecord.test.ts +16 -13
  162. package/src/functions/getSpecificRecord.ts +10 -4
  163. package/src/functions/getSubnames.test.ts +21 -17
  164. package/src/functions/getSubnames.ts +9 -2
  165. package/src/functions/makeCommitment.test.ts +2 -2
  166. package/src/functions/setName.test.ts +10 -11
  167. package/src/functions/setRecord.test.ts +12 -9
  168. package/src/functions/setRecords.test.ts +6 -5
  169. package/src/functions/setResolver.test.ts +6 -9
  170. package/src/functions/transferName.test.ts +13 -27
  171. package/src/functions/transferSubname.test.ts +11 -30
  172. package/src/functions/transferSubname.ts +28 -10
  173. package/src/functions/unwrapName.test.ts +13 -28
  174. package/src/functions/wrapName.test.ts +109 -34
  175. package/src/functions/wrapName.ts +45 -29
  176. package/src/generated/BaseRegistrarImplementation.ts +382 -296
  177. package/src/generated/DNSRegistrar.ts +103 -89
  178. package/src/generated/DNSSECImpl.ts +180 -149
  179. package/src/generated/DefaultReverseResolver.ts +37 -21
  180. package/src/generated/ENSRegistry.ts +257 -184
  181. package/src/generated/ETHRegistrarController.ts +252 -191
  182. package/src/generated/Multicall.ts +73 -57
  183. package/src/generated/NameWrapper.ts +979 -649
  184. package/src/generated/P256SHA256Algorithm.ts +21 -16
  185. package/src/generated/PublicResolver.ts +452 -362
  186. package/src/generated/RSASHA1Algorithm.ts +21 -16
  187. package/src/generated/RSASHA256Algorithm.ts +21 -16
  188. package/src/generated/ReverseRegistrar.ts +193 -141
  189. package/src/generated/Root.ts +146 -86
  190. package/src/generated/SHA1Digest.ts +12 -11
  191. package/src/generated/SHA1NSEC3Digest.ts +21 -16
  192. package/src/generated/SHA256Digest.ts +12 -11
  193. package/src/generated/StaticMetadataService.ts +22 -6
  194. package/src/generated/TLDPublicSuffixList.ts +10 -6
  195. package/src/generated/UniversalResolver.ts +44 -40
  196. package/src/generated/common.ts +2 -0
  197. package/src/generated/factories/DNSRegistrar__factory.ts +4 -56
  198. package/src/generated/factories/DNSSECImpl__factory.ts +4 -49
  199. package/src/generated/factories/ETHRegistrarController__factory.ts +14 -4
  200. package/src/generated/factories/NameWrapper__factory.ts +210 -79
  201. package/src/generated/factories/P256SHA256Algorithm__factory.ts +4 -40
  202. package/src/generated/factories/RSASHA1Algorithm__factory.ts +4 -40
  203. package/src/generated/factories/RSASHA256Algorithm__factory.ts +4 -40
  204. package/src/generated/factories/SHA1Digest__factory.ts +4 -40
  205. package/src/generated/factories/SHA1NSEC3Digest__factory.ts +4 -40
  206. package/src/generated/factories/SHA256Digest__factory.ts +4 -40
  207. package/src/generated/factories/TLDPublicSuffixList__factory.ts +4 -40
  208. package/src/generated/factories/index.ts +14 -0
  209. package/src/generated/index.ts +29 -1
  210. package/src/index.ts +3 -2
  211. package/src/tests/setup.ts +18 -13
  212. package/src/tests/withProvider.test.ts +2 -2
  213. package/src/utils/wrapperExpiry.ts +31 -0
  214. package/dist/cjs/contracts/doNotCallOnChainUniversalResolverProxy.d.ts +0 -3
  215. package/dist/cjs/contracts/doNotCallOnChainUniversalResolverProxy.js +0 -4
  216. package/dist/cjs/generated/DoNotCallOnChainUniversalResolverProxy.d.ts +0 -144
  217. package/dist/cjs/generated/DoNotCallOnChainUniversalResolverProxy.js +0 -2
  218. package/dist/cjs/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.d.ts +0 -56
  219. package/dist/cjs/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.js +0 -171
  220. package/dist/esm/contracts/doNotCallOnChainUniversalResolverProxy.d.ts +0 -3
  221. package/dist/esm/contracts/doNotCallOnChainUniversalResolverProxy.js +0 -2
  222. package/dist/esm/generated/DoNotCallOnChainUniversalResolverProxy.d.ts +0 -144
  223. package/dist/esm/generated/DoNotCallOnChainUniversalResolverProxy.js +0 -1
  224. package/dist/esm/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.d.ts +0 -56
  225. package/dist/esm/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.js +0 -167
  226. package/src/ABIs/ETHRegistrarController.json +0 -494
  227. package/src/ABIs/NameWrapper.json +0 -1183
  228. package/src/ABIs/PublicResolver.json +0 -875
  229. package/src/ABIs/ReverseRegistrar.json +0 -323
  230. package/src/ABIs/StaticMetadataService.json +0 -32
  231. package/src/ABIs/UniversalResolver.json +0 -187
  232. package/src/contracts/doNotCallOnChainUniversalResolverProxy.ts +0 -5
  233. package/src/generated/DoNotCallOnChainUniversalResolverProxy.ts +0 -285
  234. package/src/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.ts +0 -186
@@ -19,11 +19,11 @@ afterAll(async () => {
19
19
  describe('getName', () => {
20
20
  it('should get a primary name from an address', async () => {
21
21
  const result = await ENSInstance.getName(
22
- '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
22
+ '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
23
23
  )
24
24
  expect(result).toBeTruthy()
25
25
  if (result) {
26
- expect(result.name).toBe('jefflau.eth')
26
+ expect(result.name).toBe('with-profile.eth')
27
27
  expect(result.match).toBeTruthy()
28
28
  }
29
29
  })
@@ -34,13 +34,13 @@ describe('getName', () => {
34
34
  expect(result).toBeUndefined()
35
35
  })
36
36
  it('should return with a false match for a name with no forward resolution', async () => {
37
- const tx = await ENSInstance.setName('jefflau.eth')
37
+ const tx = await ENSInstance.setName('with-profile.eth')
38
38
  await tx?.wait()
39
39
 
40
40
  const result = await ENSInstance.getName(accounts[0])
41
41
  expect(result).toBeTruthy()
42
42
  if (result) {
43
- expect(result.name).toBe('jefflau.eth')
43
+ expect(result.name).toBe('with-profile.eth')
44
44
  expect(result.match).toBeFalsy()
45
45
  }
46
46
  })
@@ -1,6 +1,6 @@
1
1
  import { ENS } from '..'
2
- import { OwnedName, Registration } from '../functions/getNames'
3
2
  import setup from '../tests/setup'
3
+ import { Name } from './getNames'
4
4
 
5
5
  let ENSInstance: ENS
6
6
 
@@ -14,12 +14,43 @@ const testProperties = (obj: object, ...properties: string[]) =>
14
14
  const testNotProperties = (obj: object, ...properties: string[]) =>
15
15
  properties.map((property) => expect(obj).not.toHaveProperty(property))
16
16
 
17
+ const letterItems = [
18
+ 'w',
19
+ '9',
20
+ '8',
21
+ '7',
22
+ '6',
23
+ '5',
24
+ '4',
25
+ ...Array(5).fill('3'),
26
+ ...Array(11).fill('2'),
27
+ ...Array(11).fill('1'),
28
+ '0',
29
+ ]
30
+
31
+ const domainLetterItems = [
32
+ '[',
33
+ 'w',
34
+ 't',
35
+ 't',
36
+ '9',
37
+ '8',
38
+ '7',
39
+ '6',
40
+ '5',
41
+ '4',
42
+ ...Array(5).fill('3'),
43
+ ...Array(11).fill('2'),
44
+ ...Array(11).fill('1'),
45
+ '0',
46
+ ]
47
+
17
48
  describe('getNames', () => {
18
49
  let totalRegistrations: number = 0
19
50
  let totalOwnedNames: number = 0
20
51
  it('should get the registrations for an address', async () => {
21
52
  const result = await ENSInstance.getNames({
22
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
53
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
23
54
  type: 'registrant',
24
55
  })
25
56
  totalRegistrations = result.length
@@ -39,7 +70,7 @@ describe('getNames', () => {
39
70
  })
40
71
  it('should get the owned names for an address', async () => {
41
72
  const result = await ENSInstance.getNames({
42
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
73
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
43
74
  type: 'owner',
44
75
  })
45
76
  totalOwnedNames = result.length
@@ -58,39 +89,51 @@ describe('getNames', () => {
58
89
  })
59
90
  it('should get the registrations for an address with pagination', async () => {
60
91
  const pageOne = await ENSInstance.getNames({
61
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
92
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
62
93
  type: 'registrant',
63
94
  page: 0,
64
95
  })
65
96
  expect(pageOne).toHaveLength(10)
66
97
  const pageTwo = await ENSInstance.getNames({
67
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
98
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
68
99
  type: 'registrant',
69
100
  page: 1,
70
101
  })
71
- expect(pageTwo).toHaveLength(totalRegistrations % 10)
102
+ expect(pageTwo).toHaveLength(10)
103
+ const pageThree = await ENSInstance.getNames({
104
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
105
+ type: 'registrant',
106
+ page: 2,
107
+ })
108
+ expect(pageThree).toHaveLength(10)
109
+ const pageFour = await ENSInstance.getNames({
110
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
111
+ type: 'registrant',
112
+ page: 3,
113
+ })
114
+ expect(pageFour).toHaveLength(totalRegistrations % 10)
72
115
  })
73
116
  it('should get the owned names for an address with pagination', async () => {
74
117
  const pageOne = await ENSInstance.getNames({
75
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
118
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
76
119
  type: 'owner',
77
120
  page: 0,
78
121
  })
79
122
  expect(pageOne).toHaveLength(10)
80
123
  const pageTwo = await ENSInstance.getNames({
81
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
124
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
82
125
  type: 'owner',
83
126
  page: 1,
84
127
  })
85
128
  expect(pageTwo).toHaveLength(10)
86
129
  const pageThree = await ENSInstance.getNames({
87
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
130
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
88
131
  type: 'owner',
89
132
  page: 2,
90
133
  })
91
134
  expect(pageThree).toHaveLength(10)
92
135
  const pageFour = await ENSInstance.getNames({
93
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
136
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
94
137
  type: 'owner',
95
138
  page: 3,
96
139
  })
@@ -100,147 +143,133 @@ describe('getNames', () => {
100
143
  describe('registrations', () => {
101
144
  it('descending registrationDate', async () => {
102
145
  const registrationDateOrderedDesc = (await ENSInstance.getNames({
103
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
146
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
104
147
  type: 'registrant',
105
148
  orderBy: 'registrationDate',
106
149
  orderDirection: 'desc',
107
- })) as Registration[]
150
+ })) as Name[]
108
151
  registrationDateOrderedDesc.reduce((prev, curr) => {
109
- expect(prev.registrationDate.getTime()).toBeGreaterThanOrEqual(
110
- curr.registrationDate.getTime(),
152
+ expect(prev.registrationDate!.getTime()).toBeGreaterThanOrEqual(
153
+ curr.registrationDate!.getTime(),
111
154
  )
112
155
  return curr
113
156
  })
114
157
  })
115
158
  it('ascending registrationDate', async () => {
116
159
  const registrationDateOrderedAsc = (await ENSInstance.getNames({
117
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
160
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
118
161
  type: 'registrant',
119
162
  orderBy: 'registrationDate',
120
163
  orderDirection: 'asc',
121
- })) as Registration[]
164
+ })) as Name[]
122
165
  registrationDateOrderedAsc.reduce((prev, curr) => {
123
- expect(prev.registrationDate.getTime()).toBeLessThanOrEqual(
124
- curr.registrationDate.getTime(),
166
+ expect(prev.registrationDate!.getTime()).toBeLessThanOrEqual(
167
+ curr.registrationDate!.getTime(),
125
168
  )
126
169
  return curr
127
170
  })
128
171
  })
129
172
  it('descending expiryDate', async () => {
130
173
  const expiryDateOrderedDesc = (await ENSInstance.getNames({
131
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
174
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
132
175
  type: 'registrant',
133
176
  orderBy: 'expiryDate',
134
177
  orderDirection: 'desc',
135
- })) as Registration[]
178
+ })) as Name[]
136
179
  expiryDateOrderedDesc.reduce((prev, curr) => {
137
- expect(prev.expiryDate.getTime()).toBeGreaterThanOrEqual(
138
- curr.expiryDate.getTime(),
180
+ expect(prev.expiryDate!.getTime()).toBeGreaterThanOrEqual(
181
+ curr.expiryDate!.getTime(),
139
182
  )
140
183
  return curr
141
184
  })
142
185
  })
143
186
  it('ascending expiryDate', async () => {
144
187
  const expiryDateOrderedAsc = (await ENSInstance.getNames({
145
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
188
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
146
189
  type: 'registrant',
147
190
  orderBy: 'expiryDate',
148
191
  orderDirection: 'asc',
149
- })) as Registration[]
192
+ })) as Name[]
150
193
  expiryDateOrderedAsc.reduce((prev, curr) => {
151
- expect(prev.expiryDate.getTime()).toBeLessThanOrEqual(
152
- curr.expiryDate.getTime(),
194
+ expect(prev.expiryDate!.getTime()).toBeLessThanOrEqual(
195
+ curr.expiryDate!.getTime(),
153
196
  )
154
197
  return curr
155
198
  })
156
199
  })
157
200
  it('descending labelName', async () => {
158
201
  const labelNameOrderedDesc = (await ENSInstance.getNames({
159
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
202
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
160
203
  type: 'registrant',
161
204
  orderBy: 'labelName',
162
205
  orderDirection: 'desc',
163
- })) as Registration[]
164
- labelNameOrderedDesc.reduce((prev, curr) => {
165
- expect((prev.labelName || '') > (curr.labelName || '')).toBeTruthy()
166
- return curr
167
- })
206
+ })) as Name[]
207
+ expect(labelNameOrderedDesc.map((n) => n.labelName![0])).toStrictEqual(
208
+ letterItems,
209
+ )
168
210
  })
169
211
  it('ascending labelName', async () => {
170
212
  const labelNameOrderedAsc = (await ENSInstance.getNames({
171
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
213
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
172
214
  type: 'registrant',
173
215
  orderBy: 'labelName',
174
216
  orderDirection: 'asc',
175
- })) as Registration[]
176
- labelNameOrderedAsc.reduce((prev, curr) => {
177
- expect((prev.labelName || '') < (curr.labelName || '')).toBeTruthy()
178
- return curr
179
- })
217
+ })) as Name[]
218
+ expect(labelNameOrderedAsc.map((n) => n.labelName![0])).toStrictEqual(
219
+ letterItems.reverse(),
220
+ )
180
221
  })
181
222
  })
182
223
  describe('owned names', () => {
183
224
  it('descending createdAt', async () => {
184
225
  const createdAtOrderedDesc = (await ENSInstance.getNames({
185
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
226
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
186
227
  type: 'owner',
187
228
  orderBy: 'createdAt',
188
229
  orderDirection: 'desc',
189
- })) as OwnedName[]
230
+ })) as Name[]
190
231
  createdAtOrderedDesc.reduce((prev, curr) => {
191
- expect(prev.createdAt.getTime()).toBeGreaterThanOrEqual(
192
- curr.createdAt.getTime(),
232
+ expect(prev.createdAt!.getTime()).toBeGreaterThanOrEqual(
233
+ curr.createdAt!.getTime(),
193
234
  )
194
235
  return curr
195
236
  })
196
237
  })
197
238
  it('ascending createdAt', async () => {
198
239
  const createdAtOrderedAsc = (await ENSInstance.getNames({
199
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
240
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
200
241
  type: 'owner',
201
242
  orderBy: 'createdAt',
202
243
  orderDirection: 'asc',
203
- })) as OwnedName[]
244
+ })) as Name[]
204
245
  createdAtOrderedAsc.reduce((prev, curr) => {
205
- expect(prev.createdAt.getTime()).toBeLessThanOrEqual(
206
- curr.createdAt.getTime(),
246
+ expect(prev.createdAt!.getTime()).toBeLessThanOrEqual(
247
+ curr.createdAt!.getTime(),
207
248
  )
208
249
  return curr
209
250
  })
210
251
  })
211
252
  it('descending labelName', async () => {
212
253
  const labelNameOrderedDesc = (await ENSInstance.getNames({
213
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
254
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
214
255
  type: 'owner',
215
256
  orderBy: 'labelName',
216
257
  orderDirection: 'desc',
217
- })) as Registration[]
218
- labelNameOrderedDesc.reduce((prev, curr) => {
219
- if (
220
- (!prev.labelName && !curr.labelName) ||
221
- (!prev.labelName && curr.labelName)
222
- )
223
- return curr
224
- expect((prev.labelName || '') > (curr.labelName || '')).toBeTruthy()
225
- return curr
226
- })
258
+ })) as Name[]
259
+ expect(labelNameOrderedDesc.map((n) => n.name[0])).toStrictEqual(
260
+ domainLetterItems,
261
+ )
227
262
  })
228
263
  it('ascending labelName', async () => {
229
264
  const labelNameOrderedAsc = (await ENSInstance.getNames({
230
- address: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
265
+ address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
231
266
  type: 'owner',
232
267
  orderBy: 'labelName',
233
268
  orderDirection: 'asc',
234
- })) as Registration[]
235
- labelNameOrderedAsc.reduce((prev, curr) => {
236
- if (
237
- (!prev.labelName && !curr.labelName) ||
238
- (prev.labelName && !curr.labelName)
239
- )
240
- return curr
241
- expect((prev.labelName || '') < (curr.labelName || '')).toBeTruthy()
242
- return curr
243
- })
269
+ })) as Name[]
270
+ expect(labelNameOrderedAsc.map((n) => n.name[0])).toStrictEqual(
271
+ domainLetterItems.reverse(),
272
+ )
244
273
  })
245
274
  })
246
275
  })
@@ -10,10 +10,6 @@ let accounts: string[]
10
10
  beforeAll(async () => {
11
11
  ;({ ENSInstance, revert, provider } = await setup())
12
12
  accounts = await provider.listAccounts()
13
- const tx = await ENSInstance.wrapName('parthtejpal.eth', {
14
- wrappedOwner: accounts[0],
15
- })
16
- await tx.wait()
17
13
  })
18
14
 
19
15
  afterAll(async () => {
@@ -26,19 +22,19 @@ describe('getOwner', () => {
26
22
  expect(result).toBeUndefined()
27
23
  })
28
24
  it('should return the owner, registrant, and ownership level for a registered name', async () => {
29
- const result = await ENSInstance.getOwner('jefflau.eth')
25
+ const result = await ENSInstance.getOwner('with-profile.eth')
30
26
  expect(result).toMatchObject({
31
- owner: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
32
- registrant: '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
27
+ owner: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
28
+ registrant: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
33
29
  ownershipLevel: 'registrar',
34
30
  })
35
31
  })
36
32
  it('should return nameWrapper as the ownership level for a wrapped name', async () => {
37
- const result = await ENSInstance.getOwner('parthtejpal.eth')
33
+ const result = await ENSInstance.getOwner('wrapped.eth')
38
34
  expect(result?.ownershipLevel).toBe('nameWrapper')
39
35
  })
40
36
  it('should return the owner at a specific level if specified', async () => {
41
- const result = await ENSInstance.getOwner('parthtejpal.eth', 'registrar')
37
+ const result = await ENSInstance.getOwner('wrapped.eth', 'registrar')
42
38
  const nameWrapperAddress = (await ENSInstance.contracts!.getNameWrapper())
43
39
  .address
44
40
  expect(result?.ownershipLevel).toBe('registrar')
@@ -54,20 +50,9 @@ describe('getOwner', () => {
54
50
  baseRegistrarAddress.toLowerCase(),
55
51
  )
56
52
  })
57
- // it('should return registry as the ownership level for an unwrapped subname', async () => {
58
- // const result0 = await ENSInstance.getOwner('fleek.eth')
59
- // console.log(result0?.owner, accounts[2])
60
-
61
- // const tx = await ENSInstance.createSubname({
62
- // name: 'test.fleek.eth',
63
- // contract: 'registry',
64
- // owner: accounts[0],
65
- // options: { addressOrIndex: accounts[1] },
66
- // })
67
-
68
- // await tx.wait()
69
-
70
- // const result = await ENSInstance.getOwner('test.fleek.eth')
71
- // expect(result?.ownershipLevel).toBe('registry')
72
- // })
53
+ it('should return registry as the ownership level for an unwrapped subname', async () => {
54
+ const result = await ENSInstance.getOwner('test.with-subnames.eth')
55
+ expect(result?.ownershipLevel).toBe('registry')
56
+ expect(result?.owner).toBe('0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC')
57
+ })
73
58
  })
@@ -1,11 +1,15 @@
1
+ import { ethers } from 'ethers'
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: ethers.providers.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 () => {
@@ -15,14 +19,14 @@ afterAll(async () => {
15
19
  const checkRecords = (
16
20
  result: Record<string, any> | undefined,
17
21
  textLength = 3,
18
- coinTypeLength = 5,
22
+ coinTypeLength = 3,
19
23
  ) => {
20
24
  expect(result).toBeDefined()
21
25
  if (result) {
22
26
  expect(result.records?.texts).toHaveLength(textLength)
23
27
  expect(result.records?.coinTypes).toHaveLength(coinTypeLength)
24
28
  expect(result.resolverAddress).toBe(
25
- '0x42D63ae25990889E35F215bC95884039Ba354115',
29
+ '0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8',
26
30
  )
27
31
  }
28
32
  }
@@ -33,30 +37,30 @@ describe('getProfile', () => {
33
37
  describe('with an address', () => {
34
38
  it('should return a profile object with no other args', async () => {
35
39
  const result = await ENSInstance.getProfile(
36
- '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
40
+ '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
37
41
  )
38
42
  expect(result).toBeDefined()
39
43
  if (result) {
40
- expect((result as any).name).toBe('jefflau.eth')
44
+ expect((result as any).name).toBe('with-profile.eth')
41
45
  expect((result as any).address).toBeUndefined()
42
46
  checkRecords(result)
43
47
  }
44
48
  })
45
49
  it('should return a profile object with specified records', async () => {
46
50
  const result = await ENSInstance.getProfile(
47
- '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
51
+ '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
48
52
  { texts: ['description', 'url'], coinTypes: ['ETC', '0'] },
49
53
  )
50
54
  expect(result).toBeDefined()
51
55
  if (result) {
52
- expect((result as any).name).toBe('jefflau.eth')
56
+ expect((result as any).name).toBe('with-profile.eth')
53
57
  expect((result as any).address).toBeUndefined()
54
58
  checkRecords(result, 2, 3)
55
59
  }
56
60
  })
57
61
  it('should return a profile object with all of each specified record type', async () => {
58
62
  const result = await ENSInstance.getProfile(
59
- '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
63
+ '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
60
64
  { texts: true, coinTypes: true },
61
65
  )
62
66
  checkRecords(result)
@@ -70,37 +74,42 @@ describe('getProfile', () => {
70
74
  })
71
75
  describe('with a name', () => {
72
76
  it('should return a profile object with no other args', async () => {
73
- const result = await ENSInstance.getProfile('jefflau.eth')
77
+ const result = await ENSInstance.getProfile('with-profile.eth')
74
78
  expect((result as any).address).toBe(
75
- '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
79
+ '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
76
80
  )
77
81
  checkRecords(result)
78
82
  })
79
83
  it('should return a profile object with specified records', async () => {
80
- const result = await ENSInstance.getProfile('jefflau.eth', {
84
+ const result = await ENSInstance.getProfile('with-profile.eth', {
81
85
  texts: ['description', 'url'],
82
86
  coinTypes: ['ETC', '0'],
83
87
  })
84
88
  expect((result as any).address).toBe(
85
- '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
89
+ '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
86
90
  )
87
91
  checkRecords(result, 2, 3)
88
92
  })
89
93
  it('should return a profile object with all of each specified record type', async () => {
90
- const result = await ENSInstance.getProfile('jefflau.eth', {
94
+ const result = await ENSInstance.getProfile('with-profile.eth', {
91
95
  texts: true,
92
96
  coinTypes: true,
93
97
  })
94
98
  checkRecords(result)
95
99
  })
96
100
  it('should return a profile object for a specified resolver', async () => {
97
- const result = await ENSInstance.getProfile('saganaki.xyz', {
98
- resolverAddress: '0x12299799a50340fb860d276805e78550cbad3de3',
101
+ const tx = await ENSInstance.wrapName('test123.eth', {
102
+ wrappedOwner: accounts[1],
103
+ addressOrIndex: 1,
104
+ })
105
+ await tx.wait()
106
+ const result = await ENSInstance.getProfile('test123.eth', {
107
+ resolverAddress: '0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8',
99
108
  })
100
109
  expect(result).toBeDefined()
101
- expect(result?.address).toBe('0x157545BfD441453921049998128Ff090c1c11230')
110
+ expect(result?.address).toBe(accounts[1])
102
111
  expect(result?.resolverAddress).toBe(
103
- '0x12299799a50340fb860d276805e78550cbad3de3',
112
+ '0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8',
104
113
  )
105
114
  })
106
115
  it('should return undefined for an unregistered name', async () => {
@@ -110,22 +119,21 @@ describe('getProfile', () => {
110
119
  })
111
120
  describe('with an old resolver', () => {
112
121
  it('should use fallback methods for a name with an older resolver (no multicall)', async () => {
113
- const result = await ENSInstance.getProfile('pepeq6.eth')
122
+ const result = await ENSInstance.getProfile('with-legacy-resolver.eth')
114
123
  expect(result).toBeDefined()
115
124
  if (result) {
116
125
  expect(result.address).toBe(
117
- '0x6308F1c6f283583C8bf8E31Da793B87718b051eD',
126
+ '0x70997970C51812dc3A010C7d01b50e0d17dc79C8',
127
+ )
128
+ expect(result.resolverAddress).toBe(
129
+ '0x5f3f1dbd7b74c6b46e8c44f98792a1daf8d69154',
118
130
  )
119
131
  }
120
132
  })
121
133
  })
122
134
  describe('with an unmigrated name', () => {
123
- beforeAll(async () => {
124
- ;({ ENSInstance } = await setup(true))
125
- jest.setTimeout(20000)
126
- })
127
135
  it('should return an object with isMigrated false and a message', async () => {
128
- const result = await ENSInstance.getProfile('jefflau.test')
136
+ const result = await ENSInstance.getProfile('legacy.test')
129
137
  expect(result).toBeTruthy()
130
138
  if (result) {
131
139
  expect(result.isMigrated).toBe(false)
@@ -9,11 +9,7 @@ beforeAll(async () => {
9
9
 
10
10
  describe('getResolver', () => {
11
11
  it('should find the resolver for a name with a resolver', async () => {
12
- const result = await ENSInstance.getResolver('jefflau.eth')
13
- expect(result).toBe('0x42D63ae25990889E35F215bC95884039Ba354115')
14
- })
15
- it('should return .eth resolver for an unregistered name', async () => {
16
- const result = await ENSInstance.getResolver('test123123cool.eth')
17
- expect(result).toBe('0x3E8Dc215A6E404A7Ba811DE5Da3ff2A809AE94E2')
12
+ const result = await ENSInstance.getResolver('with-profile.eth')
13
+ expect(result).toBe('0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8')
18
14
  })
19
15
  })
@@ -14,11 +14,11 @@ describe('getSpecificRecord', () => {
14
14
  expect(result).toBeUndefined()
15
15
  })
16
16
  it('should return null for a name with no contenthash record', async () => {
17
- const result = await ENSInstance.getContentHash('jefflau.eth')
17
+ const result = await ENSInstance.getContentHash('with-profile.eth')
18
18
  expect(result).toBeUndefined()
19
19
  })
20
20
  it('should return the contenthash for a name with the record set', async () => {
21
- const result = await ENSInstance.getContentHash('matoken.eth')
21
+ const result = await ENSInstance.getContentHash('with-contenthash.eth')
22
22
  expect(result).toMatchObject({
23
23
  protocolType: 'ipfs',
24
24
  decoded: 'bafybeico3uuyj3vphxpvbowchdwjlrlrh62awxscrnii7w7flu5z6fk77y',
@@ -29,13 +29,16 @@ describe('getSpecificRecord', () => {
29
29
 
30
30
  describe('getText', () => {
31
31
  it('should return a record from a key', async () => {
32
- const result = await ENSInstance.getText('jefflau.eth', 'description')
32
+ const result = await ENSInstance.getText(
33
+ 'with-profile.eth',
34
+ 'description',
35
+ )
33
36
  expect(result).toBe('Hello2')
34
37
  })
35
38
 
36
39
  it('should return null for a non-existent key', async () => {
37
40
  const result = await ENSInstance.getText(
38
- 'jefflau.eth',
41
+ 'with-profile.eth',
39
42
  'thiskeydoesntexist',
40
43
  )
41
44
  expect(result).toBeUndefined()
@@ -44,32 +47,32 @@ describe('getSpecificRecord', () => {
44
47
 
45
48
  describe('getAddr', () => {
46
49
  it('should return the ETH addr record if no coinType is provided', async () => {
47
- const result = await ENSInstance.getAddr('jefflau.eth')
48
- expect(result).toBe('0x866B3c4994e1416B7C738B9818b31dC246b95eEE')
50
+ const result = await ENSInstance.getAddr('with-profile.eth')
51
+ expect(result).toBe('0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC')
49
52
  })
50
53
  it('should return the correct address based on a coin ID input as a number', async () => {
51
- const result = await ENSInstance.getAddr('jefflau.eth', 61)
54
+ const result = await ENSInstance.getAddr('with-profile.eth', 61)
52
55
  expect((result as any).addr).toBe(
53
- '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
56
+ '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
54
57
  )
55
58
  expect((result as any).coin).toBe('ETC')
56
59
  })
57
60
  it('should return the correct address based on a coin ID input as a string', async () => {
58
- const result = await ENSInstance.getAddr('jefflau.eth', '61')
61
+ const result = await ENSInstance.getAddr('with-profile.eth', '61')
59
62
  expect((result as any).addr).toBe(
60
- '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
63
+ '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
61
64
  )
62
65
  expect((result as any).coin).toBe('ETC')
63
66
  })
64
67
  it('should return the correct address based on a coin name', async () => {
65
- const result = await ENSInstance.getAddr('jefflau.eth', 'ETC')
68
+ const result = await ENSInstance.getAddr('with-profile.eth', 'ETC')
66
69
  expect((result as any).addr).toBe(
67
- '0x866B3c4994e1416B7C738B9818b31dC246b95eEE',
70
+ '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
68
71
  )
69
72
  expect((result as any).coin).toBe('ETC')
70
73
  })
71
74
  it('should return null for a non-existent coin', async () => {
72
- const result = await ENSInstance.getAddr('jefflau.eth', 'BNB')
75
+ const result = await ENSInstance.getAddr('with-profile.eth', 'BNB')
73
76
  expect(result).toBeUndefined()
74
77
  })
75
78
  })
@@ -15,11 +15,17 @@ export const _getContentHash = {
15
15
  }
16
16
  },
17
17
  decode: async ({ contracts }: ENSArgs<'contracts'>, data: string) => {
18
+ let response: any
18
19
  const publicResolver = await contracts?.getPublicResolver()!
19
- const [response] = publicResolver.interface.decodeFunctionResult(
20
- 'contenthash',
21
- data,
22
- )
20
+ try {
21
+ ;[response] = publicResolver.interface.decodeFunctionResult(
22
+ 'contenthash',
23
+ data,
24
+ )
25
+ } catch {
26
+ return
27
+ }
28
+
23
29
  if (!response) {
24
30
  return
25
31
  }