Files
DLE/backend/hardhat.config.js
2025-10-15 21:43:18 +03:00

178 lines
5.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Copyright (c) 2024-2025 Тарабанов Александр Викторович
* All rights reserved.
*
* This software is proprietary and confidential.
* Unauthorized copying, modification, or distribution is prohibited.
*
* For licensing inquiries: info@hb3-accelerator.com
* Website: https://hb3-accelerator.com
* GitHub: https://github.com/HB3-ACCELERATOR
*/
require('@nomicfoundation/hardhat-toolbox');
require('@nomicfoundation/hardhat-verify');
require('hardhat-contract-sizer');
require('dotenv').config();
function getNetworks() {
// Синхронная загрузка сетей из переменных окружения
// Hardhat не поддерживает асинхронную инициализацию конфигурации
// Получаем supported_chain_ids из переменных окружения
const supportedChainIdsEnv = process.env.SUPPORTED_CHAIN_IDS;
const supportedChainIds = supportedChainIdsEnv ? JSON.parse(supportedChainIdsEnv) : [];
// Получаем RPC URLs из переменных окружения
const rpcUrlsEnv = process.env.RPC_URLS;
const rpcUrls = rpcUrlsEnv ? JSON.parse(rpcUrlsEnv) : {};
// console.log удален - может мешать flatten
// Базовые сети - УБРАНО, используем только базу данных
const baseNetworks = {}; // Пустой объект - никаких хардкод цепочек
// Если есть supported_chain_ids, фильтруем только нужные сети
if (supportedChainIds.length > 0) {
const networks = {};
const supportedChainIdsNumbers = supportedChainIds.map(id => Number(id));
for (const [networkName, networkConfig] of Object.entries(baseNetworks)) {
if (supportedChainIdsNumbers.includes(networkConfig.chainId)) {
// Используем RPC URL из переменных окружения если есть
const customRpcUrl = rpcUrls[networkConfig.chainId] || rpcUrls[networkConfig.chainId.toString()];
if (customRpcUrl) {
networkConfig.url = customRpcUrl;
// console.log удален - может мешать flatten
}
networks[networkName] = networkConfig;
}
}
// console.log удален - может мешать flatten
return networks;
} else {
// Если нет supported_chain_ids, используем все базовые сети
// console.log удален - может мешать flatten
return baseNetworks;
}
}
// Функция для получения базовых сетей (fallback) - УБРАНО, используем только базу данных
function getBaseNetworks() {
return {}; // Пустой объект - никаких хардкод цепочек
}
module.exports = {
solidity: {
version: "0.8.20",
settings: {
optimizer: {
enabled: true,
runs: 0 // Максимальная оптимизация размера
},
viaIR: true,
evmVersion: "paris"
}
},
contractSizer: {
alphaSort: true,
runOnCompile: true,
disambiguatePaths: false,
},
// Автокомпиляция при изменениях
watch: {
compilation: {
tasks: ["compile"],
files: ["./contracts/**/*.sol"],
verbose: true
}
},
networks: getNetworks(),
etherscan: {
// Единый API ключ для всех сетей (V2 API)
apiKey: process.env.ETHERSCAN_API_KEY || '',
customChains: [
{
network: "sepolia",
chainId: 11155111,
urls: {
apiURL: "https://api-sepolia.etherscan.io/api",
browserURL: "https://sepolia.etherscan.io"
}
},
{
network: "holesky",
chainId: 17000,
urls: {
apiURL: "https://api.etherscan.io/v2/api",
browserURL: "https://holesky.etherscan.io"
}
},
{
network: "polygon",
chainId: 137,
urls: {
apiURL: "https://api.etherscan.io/v2/api",
browserURL: "https://polygonscan.com"
}
},
{
network: "arbitrumOne",
chainId: 42161,
urls: {
apiURL: "https://api.etherscan.io/v2/api",
browserURL: "https://arbiscan.io"
}
},
{
network: "arbitrumSepolia",
chainId: 421614,
urls: {
apiURL: "https://api.etherscan.io/v2/api?chainid=421614",
browserURL: "https://sepolia.arbiscan.io"
}
},
{
network: "bsc",
chainId: 56,
urls: {
apiURL: "https://api.etherscan.io/v2/api?chainid=56",
browserURL: "https://bscscan.com"
}
},
{
network: "base",
chainId: 8453,
urls: {
apiURL: "https://api.etherscan.io/v2/api?chainid=8453",
browserURL: "https://basescan.org"
}
},
{
network: "baseSepolia",
chainId: 84532,
urls: {
apiURL: "https://api.etherscan.io/v2/api?chainid=84532",
browserURL: "https://sepolia.basescan.org"
}
}
]
},
sourcify: {
enabled: true // Включаем Sourcify для децентрализованной верификации
},
solidityCoverage: {
excludeContracts: [],
skipFiles: [],
// Исключаем строки с revert функциями из покрытия
excludeLines: [
'// coverage:ignore-line',
'revert ErrTransfersDisabled();',
'revert ErrApprovalsDisabled();'
]
}
};