import { getDefaultProvider, BaseProvider } from '@ethersproject/providers'; import React, { useContext, useMemo } from 'react'; import { JsonRpcMulticallProvider } from './JsonRpcMulticallProvider'; export type AvatarContextType = { /** * An ethers provider */ provider: BaseProvider; }; const AvatarContext = React.createContext<AvatarContextType>(null!); export type AvatarProviderProps = { /** * An ethers provider */ provider?: BaseProvider; /** * If true, ethers lookups will be batched in multicalls * for more efficient RPC calls */ batchLookups?: boolean; } & React.PropsWithChildren<unknown>; export function AvatarProvider({ provider, batchLookups, children }: AvatarProviderProps) { const finalProvider = useMemo(() => { if (provider) { if (batchLookups) { return new JsonRpcMulticallProvider(provider); } return provider; } else { return getDefaultProvider(); } }, [batchLookups, provider]); return <AvatarContext.Provider value={{ provider: finalProvider }}>{children}</AvatarContext.Provider>; } export function useAvatarEthersProvider() { const avatarContext = useContext(AvatarContext); if (!avatarContext) { return getDefaultProvider(); } return avatarContext.provider; }