🌳
pt0/serverF/ethersF/getAlchemyProvF.mts
1import { JsonRpcProvider, EtherscanProvider } from 'ethers'
5const alchemyProvCache: Record<string, JsonRpcProvider> = {}
6const etherscanProvCache: Record<string, EtherscanProvider> = {}
8const networkToAlchemySubdomain: Record<string, string> = {
9 homestead: 'eth-mainnet',
10 arbitrum: 'arb-mainnet',
11 optimism: 'opt-mainnet',
12 base: 'base-mainnet',
13 linea: 'linea-mainnet',
14 zksync: 'zksync-mainnet',
17export const getAlchemyProv = (networkName = 'homestead'): JsonRpcProvider => {
18 if (alchemyProvCache[networkName]) return alchemyProvCache[networkName]
19 const subdomain = networkToAlchemySubdomain[networkName]
20 if (!subdomain) throPtErr('unknownAlchemyNetwork', {networkName})
21 const apiKey = getAlchemyApiTok().trim()
22 const url = `https://${subdomain}.g.alchemy.com/v2/${apiKey}`
23 const provider = new JsonRpcProvider(url)
24 alchemyProvCache[networkName] = provider
25 return provider
28export const getEtherscanProv = (networkName = 'homestead'): EtherscanProvider => {
29 if (etherscanProvCache[networkName]) return etherscanProvCache[networkName]
30 const apiKey = getEtherscanApiTok().trim()
31 const provider = new EtherscanProvider(networkName, apiKey)
32 etherscanProvCache[networkName] = provider
33 return provider