UNPKG

@nomicfoundation/hardhat-viem

Version:
80 lines 2.81 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMode = exports.isDevelopmentNetwork = exports.getChain = void 0; const lodash_memoize_1 = __importDefault(require("lodash.memoize")); const errors_1 = require("./errors"); async function getChain(provider) { const chains = require("viem/chains"); const chainId = await getChainId(provider); if (isDevelopmentNetwork(chainId)) { if (await isHardhatNetwork(provider)) { return chains.hardhat; } else if (await isFoundryNetwork(provider)) { return chains.foundry; } else { throw new errors_1.UnknownDevelopmentNetworkError(); } } const matchingChains = Object.values(chains).filter(({ id }) => id === chainId); if (matchingChains.length === 0) { if (await isHardhatNetwork(provider)) { return { ...chains.hardhat, id: chainId, }; } else if (await isFoundryNetwork(provider)) { return { ...chains.foundry, id: chainId, }; } else { throw new errors_1.NetworkNotFoundError(chainId); } } if (matchingChains.length > 1) { throw new errors_1.MultipleMatchingNetworksError(chainId); } return matchingChains[0]; } exports.getChain = getChain; function isDevelopmentNetwork(chainId) { return chainId === 31337; } exports.isDevelopmentNetwork = isDevelopmentNetwork; async function getMode(provider) { if (await isHardhatNetwork(provider)) { return "hardhat"; } else if (await isFoundryNetwork(provider)) { return "anvil"; } else { throw new errors_1.UnknownDevelopmentNetworkError(); } } exports.getMode = getMode; const getChainId = (0, lodash_memoize_1.default)(async (provider) => Number(await provider.send("eth_chainId"))); const isHardhatNetwork = (0, lodash_memoize_1.default)(async (provider) => detectNetworkByMethodName(provider, NetworkMethod.HARDHAT_METADATA)); const isFoundryNetwork = (0, lodash_memoize_1.default)(async (provider) => detectNetworkByMethodName(provider, NetworkMethod.ANVIL_NODE_INFO)); var NetworkMethod; (function (NetworkMethod) { NetworkMethod["HARDHAT_METADATA"] = "hardhat_metadata"; NetworkMethod["ANVIL_NODE_INFO"] = "anvil_nodeInfo"; })(NetworkMethod || (NetworkMethod = {})); async function detectNetworkByMethodName(provider, methodName) { try { await provider.send(methodName); return true; } catch { return false; } } //# sourceMappingURL=chains.js.map