otterscan/src/api/address-resolver/index.ts

53 lines
1.7 KiB
TypeScript
Raw Normal View History

2021-10-31 00:06:11 +00:00
import { BaseProvider } from "@ethersproject/providers";
2021-10-31 08:10:42 +00:00
import { ensRenderer } from "../../components/ENSName";
2021-10-31 22:51:11 +00:00
import { tokenRenderer } from "../../components/TokenName";
2021-10-31 08:10:42 +00:00
import { IAddressResolver, ResolvedAddressRenderer } from "./address-resolver";
import {
CompositeAddressResolver,
SelectedResolvedName,
} from "./CompositeAddressResolver";
2021-10-31 00:06:11 +00:00
import { ENSAddressResolver } from "./ENSAddressResolver";
2021-10-31 22:51:11 +00:00
import { ERCTokenResolver } from "./ERCTokenResolver";
2021-10-31 00:06:11 +00:00
2021-10-31 22:51:11 +00:00
export type ResolvedAddresses = Record<string, SelectedResolvedName<any>>;
2021-10-31 00:08:10 +00:00
2021-10-31 00:06:11 +00:00
// Create and configure the main resolver
export const ensResolver = new ENSAddressResolver();
2021-10-31 22:51:11 +00:00
export const ercTokenResolver = new ERCTokenResolver();
2021-10-31 00:06:11 +00:00
2021-10-31 22:51:11 +00:00
const _mainResolver = new CompositeAddressResolver();
_mainResolver.addResolver(ensResolver);
2021-10-31 22:51:11 +00:00
_mainResolver.addResolver(ercTokenResolver);
2021-10-31 22:51:11 +00:00
export const mainResolver: IAddressResolver<SelectedResolvedName<any>> =
_mainResolver;
2021-10-31 00:06:11 +00:00
2021-10-31 08:10:42 +00:00
export const resolverRendererRegistry = new Map<
2021-10-31 22:51:11 +00:00
IAddressResolver<any>,
ResolvedAddressRenderer<any>
2021-10-31 08:10:42 +00:00
>();
resolverRendererRegistry.set(ensResolver, ensRenderer);
2021-10-31 22:51:11 +00:00
resolverRendererRegistry.set(ercTokenResolver, tokenRenderer);
2021-10-31 08:10:42 +00:00
2021-10-31 00:06:11 +00:00
export const batchPopulate = async (
provider: BaseProvider,
addresses: string[]
2021-10-31 00:10:15 +00:00
): Promise<ResolvedAddresses> => {
2021-10-31 22:51:11 +00:00
const solvers: Promise<SelectedResolvedName<any> | undefined>[] = [];
2021-10-31 00:06:11 +00:00
for (const a of addresses) {
solvers.push(mainResolver.resolveAddress(provider, a));
}
const results = await Promise.all(solvers);
const resultMap: ResolvedAddresses = {};
2021-10-31 00:06:11 +00:00
for (let i = 0; i < results.length; i++) {
const r = results[i];
if (r === undefined) {
continue;
}
resultMap[addresses[i]] = r;
2021-10-31 00:06:11 +00:00
}
return resultMap;
2021-10-31 00:06:11 +00:00
};