@wagmi/cli
Version:
Manage and generate code from Ethereum ABIs
72 lines • 2.63 kB
JavaScript
import { blockExplorer } from './blockExplorer.js';
const apiUrls = {
// Ethereum
[]: 'https://api.etherscan.io/api',
[]: 'https://api-goerli.etherscan.io/api',
[]: 'https://api-holesky.etherscan.io/api',
[]: 'https://api-sepolia.etherscan.io/api',
// Optimism
[]: 'https://api-optimistic.etherscan.io/api',
[]: 'https://api-goerli-optimistic.etherscan.io/api',
[]: 'https://api-sepolia-optimistic.etherscan.io/api',
// Base
[]: 'https://api-sepolia.basescan.org/api',
[]: 'https://api.basescan.org/api',
// Polygon
[]: 'https://api.polygonscan.com/api',
[]: 'https://api-testnet.polygonscan.com/api',
// Arbitrum
[]: 'https://api.arbiscan.io/api',
[]: 'https://api-goerli.arbiscan.io/api',
[]: 'https://api-sepolia.arbiscan.io/api',
// BNB Smart Chain
[]: 'https://api.bscscan.com/api',
[]: 'https://api-testnet.bscscan.com/api',
// Heco Chain
[]: 'https://api.hecoinfo.com/api',
[]: 'https://api-testnet.hecoinfo.com/api',
// Fantom
[]: 'https://api.ftmscan.com/api',
[]: 'https://api-testnet.ftmscan.com/api',
// Avalanche
[]: 'https://api.snowscan.xyz/api',
[]: 'https://api-testnet.snowscan.xyz/api',
// Celo
[]: 'https://api.celoscan.io/api',
[]: 'https://api-alfajores.celoscan.io/api',
// Fraxtal
[]: 'https://api.fraxscan.com/api',
[]: 'https://api-holesky.fraxscan.com/api',
// Gnosis
[]: 'https://api.gnosisscan.io/api',
// Blast
[]: 'https://api.blastscan.io/api',
};
/**
* Fetches contract ABIs from Etherscan.
*/
export function etherscan(config) {
const { apiKey, cacheDuration, chainId } = config;
const contracts = config.contracts.map((x) => ({
...x,
address: typeof x.address === 'string' ? { [chainId]: x.address } : x.address,
}));
return blockExplorer({
apiKey,
baseUrl: apiUrls[chainId],
cacheDuration,
contracts,
getAddress({ address }) {
if (!address)
throw new Error('address is required');
if (typeof address === 'string')
return address;
const contractAddress = address[chainId];
if (!contractAddress)
throw new Error(`No address found for chainId "${chainId}". Make sure chainId "${chainId}" is set as an address.`);
return contractAddress;
},
name: 'Etherscan',
});
}
//# sourceMappingURL=etherscan.js.map