Files
linea-monorepo/contracts/hardhat.config.ts
2025-06-23 15:58:20 +02:00

169 lines
4.9 KiB
TypeScript

import "@nomicfoundation/hardhat-toolbox";
import "@nomicfoundation/hardhat-foundry";
import "@openzeppelin/hardhat-upgrades";
import "@nomicfoundation/hardhat-foundry";
import * as dotenv from "dotenv";
import "hardhat-deploy";
import "hardhat-storage-layout";
// import "hardhat-tracer"; // This plugin does not work with the latest hardhat version
import { HardhatUserConfig } from "hardhat/config";
import { getBlockchainNode, getL2BlockchainNode } from "./common";
import "./scripts/operational/tasks/getCurrentFinalizedBlockNumberTask";
import "./scripts/operational/tasks/grantContractRolesTask";
import "./scripts/operational/tasks/renounceContractRolesTask";
import "./scripts/operational/tasks/setRateLimitTask";
import "./scripts/operational/tasks/setVerifierAddressTask";
import "./scripts/operational/tasks/setMessageServiceOnTokenBridgeTask";
import "solidity-docgen";
import { overrides } from "./hardhat_overrides";
dotenv.config();
const BLOCKCHAIN_TIMEOUT = parseInt(process.env.BLOCKCHAIN_TIMEOUT_MS ?? "300000");
const EMPTY_HASH = "0x0000000000000000000000000000000000000000000000000000000000000000";
const blockchainNode = getBlockchainNode();
const l2BlockchainNode = getL2BlockchainNode();
const useViaIR = process.env.ENABLE_VIA_IR === "true";
const config: HardhatUserConfig = {
paths: {
artifacts: "./build",
sources: "./src",
},
solidity: {
// NB: double check the autoupdate shell script version complies to the latest solidity version if you add a new one.
/// @dev Please see the overrides file for a list of files not targetting the default EVM version of Prague.
compilers: [
{
version: "0.8.30",
settings: {
viaIR: useViaIR,
optimizer: {
enabled: true,
runs: 10_000,
},
evmVersion: "prague",
},
},
{
version: "0.8.28",
settings: {
viaIR: useViaIR,
optimizer: {
enabled: true,
runs: 10_000,
},
evmVersion: "cancun",
},
},
{
version: "0.8.15",
settings: {
viaIR: useViaIR,
optimizer: {
enabled: true,
runs: 10_000,
},
evmVersion: "london",
},
},
],
overrides: overrides,
},
namedAccounts: {
deployer: {
default: 0,
},
},
networks: {
hardhat: {
hardfork: "prague",
},
mainnet: {
accounts: [process.env.MAINNET_PRIVATE_KEY || EMPTY_HASH],
url: "https://mainnet.infura.io/v3/" + process.env.INFURA_API_KEY,
},
sepolia: {
accounts: [process.env.SEPOLIA_PRIVATE_KEY || EMPTY_HASH],
url: "https://sepolia.infura.io/v3/" + process.env.INFURA_API_KEY,
},
linea_mainnet: {
accounts: [process.env.LINEA_MAINNET_PRIVATE_KEY || EMPTY_HASH],
url: "https://linea-mainnet.infura.io/v3/" + process.env.INFURA_API_KEY,
},
linea_sepolia: {
accounts: [process.env.LINEA_SEPOLIA_PRIVATE_KEY || EMPTY_HASH],
url: "https://linea-sepolia.infura.io/v3/" + process.env.INFURA_API_KEY,
},
custom: {
accounts: [process.env.CUSTOM_PRIVATE_KEY || EMPTY_HASH],
url: process.env.CUSTOM_BLOCKCHAIN_URL ? process.env.CUSTOM_BLOCKCHAIN_URL : "",
},
zkevm_dev: {
gasPrice: 1322222229,
url: blockchainNode,
accounts: [process.env.PRIVATE_KEY || EMPTY_HASH],
timeout: BLOCKCHAIN_TIMEOUT,
},
l2: {
url: l2BlockchainNode ?? "",
accounts: [process.env.L2_PRIVATE_KEY || EMPTY_HASH],
allowUnlimitedContractSize: true,
},
},
gasReporter: {
enabled: !!process.env.REPORT_GAS,
},
mocha: {
timeout: 20000,
},
etherscan: {
apiKey: {
mainnet: process.env.ETHERSCAN_API_KEY ?? "",
sepolia: process.env.ETHERSCAN_API_KEY ?? "",
linea_sepolia: process.env.LINEASCAN_API_KEY ?? "",
linea_mainnet: process.env.LINEASCAN_API_KEY ?? "",
},
customChains: [
{
network: "linea_sepolia",
chainId: 59141,
urls: {
apiURL: "https://api-sepolia.lineascan.build/api",
browserURL: "https://sepolia.lineascan.build/",
},
},
{
network: "linea_mainnet",
chainId: 59144,
urls: {
apiURL: "https://api.lineascan.build/api",
browserURL: "https://lineascan.build/",
},
},
],
},
docgen: {
exclude: [
"_testing",
"bridging/token/utils/StorageFiller39.sol",
"bridging/token/CustomBridgedToken.sol",
"governance/TimeLock.sol",
"security/access/PermissionsManager.sol",
"security/reentrancy/TransientStorageReentrancyGuardUpgradeable.sol",
"tokens",
"verifiers",
],
pages: "files",
outputDir: "docs/api/",
// For compatibility with docs.linea.build
pageExtension: ".mdx",
templates: "docs/docgen-templates",
},
};
export default config;