Files
smom-dbis-138/hardhat.config.js
defiQUG 76aa419320 feat: bridges, PMM, flash workflow, token-aggregation, and deployment docs
- CCIP/trustless bridge contracts, GRU tokens, DEX/PMM tests, reserve vault.
- Token-aggregation service routes, planner, chain config, relay env templates.
- Config snapshots and multi-chain deployment markdown updates.
- gitignore services/btc-intake/dist/ (tsc output); do not track dist.

Run forge build && forge test before deploy (large solc graph).

Made-with: Cursor
2026-04-07 23:40:52 -07:00

106 lines
2.9 KiB
JavaScript

require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config();
function resolveAccounts() {
const rawPrivateKey = (process.env.PRIVATE_KEY || "").trim();
if (!rawPrivateKey) {
return [];
}
const normalizedPrivateKey = rawPrivateKey.startsWith("0x")
? rawPrivateKey
: `0x${rawPrivateKey}`;
if (/^0x[0-9a-fA-F]{64}$/.test(normalizedPrivateKey)) {
return [normalizedPrivateKey];
}
console.warn(
"Ignoring PRIVATE_KEY in Hardhat config because it is not a valid 32-byte hex key."
);
return [];
}
const sharedAccounts = resolveAccounts();
/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
solidity: {
compilers: [
{ version: "0.8.20", settings: { optimizer: { enabled: true, runs: 200 }, viaIR: true } },
{ version: "0.8.22", settings: { optimizer: { enabled: true, runs: 200 }, viaIR: true } },
],
},
networks: {
hardhat: {
chainId: 31337,
},
mainnet: {
url: process.env.ETHEREUM_MAINNET_RPC || "https://eth.llamarpc.com",
accounts: sharedAccounts,
chainId: 1,
},
chain138: {
url: process.env.CHAIN138_RPC_URL || "https://rpc.d-bis.org",
accounts: sharedAccounts,
chainId: 138,
},
sepolia: {
url: process.env.SEPOLIA_RPC_URL || "https://rpc.sepolia.org",
accounts: sharedAccounts,
chainId: 11155111,
},
bsc: {
url: process.env.BSC_MAINNET_RPC || process.env.BSC_RPC_URL || "https://bsc-dataseed.binance.org",
accounts: sharedAccounts,
chainId: 56,
},
polygon: {
url: process.env.POLYGON_MAINNET_RPC || "https://polygon-rpc.com",
accounts: sharedAccounts,
chainId: 137,
},
gnosis: {
url: process.env.GNOSIS_RPC_URL || "https://rpc.gnosischain.com",
accounts: sharedAccounts,
chainId: 100,
},
cronos: {
url: process.env.CRONOS_RPC_URL || "https://evm.cronos.org",
accounts: sharedAccounts,
chainId: 25,
},
optimism: {
url: process.env.OPTIMISM_MAINNET_RPC || "https://mainnet.optimism.io",
accounts: sharedAccounts,
chainId: 10,
},
base: {
url: process.env.BASE_MAINNET_RPC || "https://mainnet.base.org",
accounts: sharedAccounts,
chainId: 8453,
},
arbitrum: {
url: process.env.ARBITRUM_MAINNET_RPC || "https://arb1.arbitrum.io/rpc",
accounts: sharedAccounts,
chainId: 42161,
},
avalanche: {
url: process.env.AVALANCHE_RPC_URL || process.env.AVALANCHE_MAINNET_RPC || "https://api.avax.network/ext/bc/C/rpc",
accounts: sharedAccounts,
chainId: 43114,
},
},
// Single Etherscan API key = V2 for all chains (see docs/deployment/ETHERSCAN_V2_VERIFY_OTHER_CHAINS.md)
etherscan: {
apiKey: process.env.ETHERSCAN_API_KEY || "",
},
paths: {
sources: "./contracts",
tests: "./test",
cache: "./cache",
artifacts: "./artifacts",
},
};