@snapshot-labs/snapshot.js 0.11.38 → 0.11.39

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/src/utils.ts CHANGED
@@ -29,8 +29,10 @@ interface Strategy {
29
29
  params: any;
30
30
  }
31
31
 
32
- const ENS_RESOLVER_ABI = [
33
- 'function text(bytes32 node, string calldata key) external view returns (string memory)'
32
+ const ENS_REGISTRY = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e';
33
+ const ENS_ABI = [
34
+ 'function text(bytes32 node, string calldata key) external view returns (string memory)',
35
+ 'function resolver(bytes32 node) view returns (address)' // ENS registry ABI
34
36
  ];
35
37
  const EMPTY_ADDRESS = '0x0000000000000000000000000000000000000000';
36
38
 
@@ -65,7 +67,7 @@ async function parseScoreAPIResponse(res: any) {
65
67
  let data: any = await res.text();
66
68
  try {
67
69
  data = JSON.parse(data);
68
- } catch (e) {
70
+ } catch (e: any) {
69
71
  return Promise.reject({
70
72
  code: res.status || 500,
71
73
  message: 'Failed to parse response from score API',
@@ -204,7 +206,7 @@ export async function call(provider, abi: any[], call: any[], options?) {
204
206
  try {
205
207
  const params = call[2] || [];
206
208
  return await contract[call[1]](...params, options || {});
207
- } catch (e) {
209
+ } catch (e: any) {
208
210
  return Promise.reject(e);
209
211
  }
210
212
  }
@@ -245,7 +247,7 @@ export async function multicall(
245
247
  return results.map((call, i) =>
246
248
  itf.decodeFunctionResult(calls[i][1], call)
247
249
  );
248
- } catch (e) {
250
+ } catch (e: any) {
249
251
  return Promise.reject(e);
250
252
  }
251
253
  }
@@ -263,7 +265,7 @@ export async function subgraphRequest(url: string, query, options: any = {}) {
263
265
  let responseData: any = await res.text();
264
266
  try {
265
267
  responseData = JSON.parse(responseData);
266
- } catch (e) {
268
+ } catch (e: any) {
267
269
  throw new Error(
268
270
  `Errors found in subgraphRequest: URL: ${url}, Status: ${
269
271
  res.status
@@ -388,7 +390,7 @@ export async function getScores(
388
390
  return options.returnValue === 'all'
389
391
  ? response.result
390
392
  : response.result[options.returnValue || 'scores'];
391
- } catch (e) {
393
+ } catch (e: any) {
392
394
  if (e.errno) {
393
395
  return Promise.reject({ code: e.errno, message: e.toString(), data: '' });
394
396
  }
@@ -448,7 +450,7 @@ export async function getVp(
448
450
  const res = await fetch(url, init);
449
451
  const response = await parseScoreAPIResponse(res);
450
452
  return response.result;
451
- } catch (e) {
453
+ } catch (e: any) {
452
454
  if (e.errno) {
453
455
  return Promise.reject({ code: e.errno, message: e.toString(), data: '' });
454
456
  }
@@ -502,7 +504,7 @@ export async function validate(
502
504
  const res = await fetch(url, init);
503
505
  const response = await parseScoreAPIResponse(res);
504
506
  return response.result;
505
- } catch (e) {
507
+ } catch (e: any) {
506
508
  if (e.errno) {
507
509
  return Promise.reject({ code: e.errno, message: e.toString(), data: '' });
508
510
  }
@@ -535,25 +537,34 @@ export async function getEnsTextRecord(
535
537
  options: any = {}
536
538
  ) {
537
539
  const {
538
- ensResolvers: ensResolversOpt,
540
+ ensResolvers = networks[network]?.ensResolvers ||
541
+ networks['1'].ensResolvers,
539
542
  broviderUrl,
540
543
  ...multicallOptions
541
544
  } = options;
542
- const ensResolvers =
543
- ensResolversOpt ||
544
- networks[network].ensResolvers ||
545
- networks['1'].ensResolvers;
545
+
546
546
  const ensHash = namehash(ensNormalize(ens));
547
547
  const provider = getProvider(network, { broviderUrl });
548
548
 
549
- const result = await multicall(
549
+ const calls = [
550
+ [ENS_REGISTRY, 'resolver', [ensHash]], // Query for resolver from registry
551
+ ...ensResolvers.map((address: string) => [
552
+ address,
553
+ 'text',
554
+ [ensHash, record]
555
+ ]) // Query for text record from each resolver
556
+ ];
557
+
558
+ const [[resolverAddress], ...textRecords]: string[][] = await multicall(
550
559
  network,
551
560
  provider,
552
- ENS_RESOLVER_ABI,
553
- ensResolvers.map((address: any) => [address, 'text', [ensHash, record]]),
561
+ ENS_ABI,
562
+ calls,
554
563
  multicallOptions
555
564
  );
556
- return result.flat().find((r: string) => r) || '';
565
+
566
+ const resolverIndex = ensResolvers.indexOf(resolverAddress);
567
+ return resolverIndex !== -1 ? textRecords[resolverIndex]?.[0] : null;
557
568
  }
558
569
 
559
570
  export async function getSpaceUri(
@@ -563,7 +574,7 @@ export async function getSpaceUri(
563
574
  ): Promise<string | null> {
564
575
  try {
565
576
  return await getEnsTextRecord(id, 'snapshot', network, options);
566
- } catch (e) {
577
+ } catch (e: any) {
567
578
  console.log(e);
568
579
  return null;
569
580
  }
@@ -574,10 +585,9 @@ export async function getEnsOwner(
574
585
  network = '1',
575
586
  options: any = {}
576
587
  ): Promise<string | null> {
577
- const registryAddress = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e';
578
588
  const provider = getProvider(network, options);
579
589
  const ensRegistry = new Contract(
580
- registryAddress,
590
+ ENS_REGISTRY,
581
591
  ['function owner(bytes32) view returns (address)'],
582
592
  provider
583
593
  );