Stop writing boilerplate
EVM chain config
One .env file. All frameworks — Hardhat, Foundry, viem, and ethers. 18+ chains auto-detected.
$
npm install evmchain-config
The problem
Every Solidity project has this boilerplate. It's fragile, repetitive, and error-prone.
// The old way — repeated for every project
import * as dotenv from 'dotenv';
dotenv.config();
const config: HardhatUserConfig = {
networks: {
ethereum: { url: process.env.ETHEREUM_RPC_URL!, chainId: 1, accounts: [process.env.PRIVATE_KEY!] },
arbitrum: { url: process.env.ARBITRUM_RPC_URL!, chainId: 42161, accounts: [process.env.PRIVATE_KEY!] },
base: { url: process.env.BASE_RPC_URL!, chainId: 8453, accounts: [process.env.PRIVATE_KEY!] },
optimism: { url: process.env.OPTIMISM_RPC_URL!, chainId: 10, accounts: [process.env.PRIVATE_KEY!] },
// ... repeated 10 more times
}
};
The solution
One config loader. Works with every EVM framework.
HARDHAT
import { loadEvmChainsSync } from 'hardhat-evmchain';
export default {
solidity: '0.8.24',
...loadEvmChainsSync(),
};
VIEM
import { createMultichainClients }
from 'viem-multichain';
const { getClient } =
await createMultichainClients();
const eth = getClient('ethereum');
.ENV (ONE FILE FOR ALL FRAMEWORKS)
ETHEREUM_RPC_URL=https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY
ARBITRUM_RPC_URL=https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY
BASE_RPC_URL=https://base-mainnet.g.alchemy.com/v2/YOUR_KEY
PRIVATE_KEY=0x...
Why it works
Auto-detection
Reads RPC URLs from env var names. ARBITRUM_RPC_URL → arbitrum chain. No manual mapping.
Framework adapters
Built-in adapters for Hardhat, viem, and ethers. Same config, all frameworks.
Validation
Warns about public RPCs on mainnet, missing explorer keys, invalid key formats.
18+ chains
Ethereum, Arbitrum, Base, Optimism, Polygon, zkSync, Linea, Scroll, Blast, and more.
Ecosystem
Install just what you need.