@nomicfoundation/hardhat-viem
Version:
Hardhat plugin for viem
80 lines • 2.81 kB
JavaScript
;
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