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

31 lines
840 B
TypeScript
Raw Normal View History

2021-10-31 00:06:11 +00:00
import { BaseProvider } from "@ethersproject/providers";
import { IAddressResolver } from "./address-resolver";
export type SelectedResolvedName<T> = [IAddressResolver<T>, T];
2021-10-31 00:06:11 +00:00
2021-10-31 22:51:11 +00:00
export class CompositeAddressResolver<T = any>
implements IAddressResolver<SelectedResolvedName<T>>
{
private resolvers: IAddressResolver<T>[] = [];
addResolver(resolver: IAddressResolver<T>) {
2021-10-31 00:06:11 +00:00
this.resolvers.push(resolver);
}
async resolveAddress(
provider: BaseProvider,
address: string
): Promise<SelectedResolvedName<T> | undefined> {
2021-10-31 00:06:11 +00:00
for (const r of this.resolvers) {
2021-10-31 22:51:11 +00:00
const resolvedAddress = await r.resolveAddress(provider, address);
if (resolvedAddress !== undefined) {
return [r, resolvedAddress];
2021-10-31 00:06:11 +00:00
}
}
return undefined;
// TODO: fallback to address itself
// return address;
}
}