Radish alpha
r
Radicle web interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
Reduce resolver queries and parallelize queries
Sebastian Martinez committed 4 years ago
commit 79356c9f3b6357de312d946daa21e95600b8de35
parent ff1a2fc87a066950ab31924ef988d15535d9f438
2 files changed +12 -8
modified src/base/registrations/registrar.ts
@@ -1,7 +1,7 @@
import { ethers } from 'ethers';
import { writable } from 'svelte/store';
import type { BigNumber } from 'ethers';
-
import type { EnsResolver } from '@ethersproject/providers';
+
import type { EnsResolver, Resolver } from '@ethersproject/providers';
import type { TypedDataSigner } from '@ethersproject/abstract-signer';
import * as session from '@app/session';
import { Failure } from '@app/error';
@@ -96,20 +96,20 @@ export async function getRegistration(name: string, config: Config): Promise<Reg
  };
}

-
export async function getAvatar(name: string, config: Config): Promise<string | null> {
+
export async function getAvatar(name: string, config: Config, resolver?: Resolver): Promise<string | null> {
  name = name.toLowerCase();

-
  const resolver = await config.provider.getResolver(name);
+
  resolver = resolver ?? await config.provider.getResolver(name);
  if (! resolver) {
    return null;
  }
  return resolver.getText('avatar');
}

-
export async function getSeed(name: string, config: Config): Promise<string | null> {
+
export async function getSeed(name: string, config: Config, resolver?: Resolver): Promise<string | null> {
  name = name.toLowerCase();

-
  const resolver = await config.provider.getResolver(name);
+
  resolver = resolver ?? await config.provider.getResolver(name);
  if (! resolver) {
    return null;
  }
modified src/utils.ts
@@ -250,14 +250,18 @@ export async function resolveIdxProfile(caip10: string, config: Config): Promise
export async function resolveEnsProfile(address: string, profileType: ProfileType, config: Config): Promise<EnsProfile | null> {
  const name = await config.provider.lookupAddress(address);
  if (name) {
+

+
    const resolver = await config.provider.getResolver(name);
    if (profileType === ProfileType.Full) {
      const registration = await getRegistration(name, config);
      if (registration) {
        return registration.profile;
      }
    } else if (profileType === ProfileType.Project) {
-
      const avatar = await getAvatar(name, config);
-
      const seedHost = await getSeed(name, config);
+
      const project = await Promise.allSettled([getAvatar(name, config, resolver), getSeed(name, config, resolver)]);
+

+
      const [avatar, seedHost] =
+
        project.map(r => r.status == "fulfilled" ? r.value : null);

      return {
        name,
@@ -270,7 +274,7 @@ export async function resolveEnsProfile(address: string, profileType: ProfileTyp
        github: null,
      };
    } else if (profileType === ProfileType.Minimal) {
-
      const avatar = await getAvatar(name, config);
+
      const avatar = await getAvatar(name, config, resolver);

      return {
        name,