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

29 lines
779 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] | null;
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 null;
2021-10-31 00:06:11 +00:00
}
}