Files
assetxContracts/hardhat.config.ts

283 lines
6.3 KiB
TypeScript
Raw Permalink Normal View History

2025-12-18 13:07:35 +08:00
import "@nomicfoundation/hardhat-foundry";
import type { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import "@matterlabs/hardhat-zksync-deploy";
import "@matterlabs/hardhat-zksync-solc";
import "hardhat-abi-exporter";
import * as dotenv from "dotenv";
dotenv.config();
import "hardhat-contract-sizer";
import "hardhat-gas-reporter";
import "@openZeppelin/hardhat-upgrades";
import "@typechain/hardhat";
const accounts =
process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [];
const config: HardhatUserConfig = {
// 编译配置
solidity: {
version: "0.8.28",
settings: {
optimizer: {
enabled: true,
runs: 200,
},
viaIR: true,
outputSelection: {
'*': {
'*': [
'abi',
'evm.bytecode',
'evm.deployedBytecode',
'evm.methodIdentifiers',
'metadata',
'storageLayout' // 用于升级验证
],
'': ['ast'] // 源代码 AST
},
},
},
},
zksolc: {
version: "1.3.22",
compilerSource: "binary",
settings: {
isSystem: false, // optional. Enables Yul instructions available only for zkSync system contracts and libraries
forceEvmla: false, // optional. Falls back to EVM legacy assembly if there is a bug with Yul
optimizer: {
enabled: true, // optional. True by default
mode: 'z' // optional. 3 by default, z to optimize bytecode size
},
},
},
// 设置单个测试用例的最大执行时间
mocha: {
timeout: 10 * 60 * 1000,
},
// 网络配置
networks: {
hardhat: {
allowUnlimitedContractSize: false,
chainId: 1,
},
localhost:{
url:"http://127.0.0.1:8545",
accounts:accounts,
},
eth: {
url: "https://ethereum-rpc.publicnode.com",
accounts: accounts,
chainId: 1,
},
op: {
url: "https://optimism-rpc.publicnode.com",
accounts: accounts,
chainId: 10,
},
bsc: {
url:"https://bsc.drpc.org",
accounts: accounts,
chainId: 56,
},
wld: {
url: "https://480.rpc.thirdweb.com",
accounts: accounts,
chainId: 480,
},
polygon: {
url:"https://polygon.drpc.org",
accounts: accounts,
chainId: 137,
},
ftm: {
url: "https://fantom-json-rpc.stakely.io",
accounts: accounts,
chainId: 250,
},
zk: {
url: "https://mainnet.era.zksync.io",
accounts: accounts,
ethNetwork: "mainnet",
zksync: true,
chainId: 324,
},
linea: {
url: "https://linea.drpc.org",
accounts: accounts,
chainId: 59144,
},
base: {
url: "https://base.drpc.org",
accounts: accounts,
chainId: 8453,
},
arb: {
url: "https://public-arb-mainnet.fastnode.io",
accounts: accounts,
chainId: 42161,
},
blast: {
url: "https://blast.drpc.org",
accounts: accounts,
chainId: 81457,
},
avax: {
url:"https://endpoints.omniatech.io/v1/avax/mainnet/public",
accounts: accounts,
chainId: 43114,
},
gateLayer: {
url: "https://gatelayer-mainnet.gatenode.cc",
accounts: accounts,
chainId: 10088,
},
baseSepolia: {
url: "https://base-sepolia.drpc.org",
accounts: accounts,
chainId: 84532,
},
arbSepolia: {
url: "https://arbitrum-sepolia.gateway.tenderly.co",
accounts: accounts,
chainId: 421614,
},
},
// gas报告配置
gasReporter: {
currency: "USDT",
enabled: !!process.env.REPORT_GAS,
},
// 合约大小报告配置
contractSizer: {
alphaSort: true,
disambiguatePaths: false,
runOnCompile: true,
strict: false,
only: [],
},
// ABI导出配置
abiExporter: {
path: "./abis",
runOnCompile: true,
clear: true,
flat: true,
pretty: false,
except: ["lib"],
},
// 合约验证配置 (Etherscan V2 API)
etherscan: {
apiKey: process.env.ETHERSCAN_API_KEY as string,
customChains: [
{
network: "arbSepolia",
chainId: 421614,
urls: {
apiURL: "https://api-sepolia.arbiscan.io/api",
browserURL: "https://sepolia.arbiscan.io"
}
},
{
network: "arb",
chainId: 42161,
urls: {
apiURL: "https://api.arbiscan.io/api",
browserURL: "https://arbiscan.io"
}
},
{
network: "baseSepolia",
chainId: 84532,
urls: {
apiURL: "https://api-sepolia.basescan.org/api",
browserURL: "https://sepolia.basescan.org"
}
},
{
network: "base",
chainId: 8453,
urls: {
apiURL: "https://api.basescan.org/api",
browserURL: "https://basescan.org"
}
},
{
network: "op",
chainId: 10,
urls: {
apiURL: "https://api-optimistic.etherscan.io/api",
browserURL: "https://optimistic.etherscan.io"
}
},
{
network: "polygon",
chainId: 137,
urls: {
apiURL: "https://api.polygonscan.com/api",
browserURL: "https://polygonscan.com"
}
},
{
network: "bsc",
chainId: 56,
urls: {
apiURL: "https://api.bscscan.com/api",
browserURL: "https://bscscan.com"
}
},
{
network: "ftm",
chainId: 250,
urls: {
apiURL: "https://api.ftmscan.com/api",
browserURL: "https://ftmscan.com"
}
},
{
network: "avax",
chainId: 43114,
urls: {
apiURL: "https://api.snowtrace.io/api",
browserURL: "https://snowtrace.io"
}
},
{
network: "linea",
chainId: 59144,
urls: {
apiURL: "https://api.lineascan.build/api",
browserURL: "https://lineascan.build"
}
}
]
},
// Sourcify 验证配置(可选)
sourcify: {
enabled: false // 设置为 true 可启用 Sourcify 验证
},
// 覆盖配置
paths: {
sources: "./contracts",
tests: "./test",
cache: "./cache",
artifacts: "./artifacts",
},
// typechain配置
typechain: {
outDir: "typechain-types",
target: "ethers-v6",
},
};
export default config;