mirror of
				https://github.com/Instadapp/dsa-connectors.git
				synced 2024-07-29 22:37:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			139 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import "@nomiclabs/hardhat-waffle";
 | 
						|
import "@nomiclabs/hardhat-ethers";
 | 
						|
import "@tenderly/hardhat-tenderly";
 | 
						|
import "@nomiclabs/hardhat-etherscan";
 | 
						|
import "@nomiclabs/hardhat-web3";
 | 
						|
import "hardhat-deploy";
 | 
						|
import "hardhat-deploy-ethers";
 | 
						|
import "@typechain/hardhat";
 | 
						|
import { resolve } from "path";
 | 
						|
import { config as dotenvConfig } from "dotenv";
 | 
						|
import { HardhatUserConfig } from "hardhat/config";
 | 
						|
import { NetworkUserConfig } from "hardhat/types";
 | 
						|
import { utils } from "ethers";
 | 
						|
import Web3 from "web3";
 | 
						|
import { network } from "hardhat";
 | 
						|
import bigNumber from "bignumber.js";
 | 
						|
import "./scripts/tests/run_test_through_cmd";
 | 
						|
 | 
						|
dotenvConfig({ path: resolve(__dirname, "./.env") });
 | 
						|
 | 
						|
const chainIds = {
 | 
						|
  ganache: 1337,
 | 
						|
  hardhat: 31337,
 | 
						|
  mainnet: 1,
 | 
						|
  avalanche: 43114,
 | 
						|
  polygon: 137,
 | 
						|
  arbitrum: 42161,
 | 
						|
  optimism: 10,
 | 
						|
  fantom: 250
 | 
						|
};
 | 
						|
 | 
						|
const alchemyApiKey = process.env.ALCHEMY_API_KEY;
 | 
						|
if (!alchemyApiKey) {
 | 
						|
  throw new Error("Please set your ALCHEMY_API_KEY in a .env file");
 | 
						|
}
 | 
						|
 | 
						|
const PRIVATE_KEY = process.env.PRIVATE_KEY;
 | 
						|
const mnemonic = process.env.MNEMONIC ?? "test test test test test test test test test test test junk";
 | 
						|
 | 
						|
const networkGasPriceConfig: Record<string, number> = {
 | 
						|
  mainnet: 100,
 | 
						|
  polygon: 50,
 | 
						|
  avalanche: 40,
 | 
						|
  arbitrum: 1,
 | 
						|
  optimism: 0.001,
 | 
						|
  fantom: 300
 | 
						|
};
 | 
						|
 | 
						|
function createConfig(network: string) {
 | 
						|
  return {
 | 
						|
    url: getNetworkUrl(network),
 | 
						|
    accounts: !!PRIVATE_KEY ? [`0x${PRIVATE_KEY}`] : { mnemonic },
 | 
						|
    gasPrice: new bigNumber(networkGasPriceConfig[network]).multipliedBy(1e9).toNumber() // Update the mapping above
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
function getNetworkUrl(networkType: string) {
 | 
						|
  if (networkType === "avalanche") return "https://api.avax.network/ext/bc/C/rpc";
 | 
						|
  else if (networkType === "polygon") return `https://polygon-mainnet.g.alchemy.com/v2/${alchemyApiKey}`;
 | 
						|
  else if (networkType === "arbitrum") return `https://arb-mainnet.g.alchemy.com/v2/${alchemyApiKey}`;
 | 
						|
  else if (networkType === "optimism") return `https://opt-mainnet.g.alchemy.com/v2/${alchemyApiKey}`;
 | 
						|
  else if (networkType === "fantom") return `https://rpc.ftm.tools/`;
 | 
						|
  else return `https://eth-mainnet.alchemyapi.io/v2/${alchemyApiKey}`;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * @type import('hardhat/config').HardhatUserConfig
 | 
						|
 */
 | 
						|
const config: HardhatUserConfig = {
 | 
						|
  solidity: {
 | 
						|
    compilers: [
 | 
						|
      {
 | 
						|
        version: "0.7.6",
 | 
						|
        settings: {
 | 
						|
          optimizer: {
 | 
						|
            enabled: true,
 | 
						|
            runs: 200
 | 
						|
          }
 | 
						|
        }
 | 
						|
      },
 | 
						|
      {
 | 
						|
        version: "0.6.0"
 | 
						|
      },
 | 
						|
      {
 | 
						|
        version: "0.6.2"
 | 
						|
      },
 | 
						|
      {
 | 
						|
        version: "0.6.5"
 | 
						|
      }
 | 
						|
    ]
 | 
						|
  },
 | 
						|
  networks: {
 | 
						|
    hardhat: {
 | 
						|
      accounts: {
 | 
						|
        mnemonic
 | 
						|
      },
 | 
						|
      chainId: chainIds.hardhat,
 | 
						|
      forking: {
 | 
						|
        url: String(getNetworkUrl(String(process.env.networkType)))
 | 
						|
      }
 | 
						|
    },
 | 
						|
    mainnet: createConfig("mainnet"),
 | 
						|
    polygon: createConfig("polygon"),
 | 
						|
    avalanche: createConfig("avalanche"),
 | 
						|
    arbitrum: createConfig("arbitrum"),
 | 
						|
    optimism: createConfig("optimism"),
 | 
						|
    fantom: createConfig("fantom")
 | 
						|
  },
 | 
						|
  paths: {
 | 
						|
    artifacts: "./artifacts",
 | 
						|
    cache: "./cache",
 | 
						|
    sources: "./contracts",
 | 
						|
    tests: "./test"
 | 
						|
  },
 | 
						|
  etherscan: {
 | 
						|
    apiKey: {
 | 
						|
      mainnet: String(process.env.MAIN_ETHSCAN_KEY),
 | 
						|
      optimisticEthereum: String(process.env.OPT_ETHSCAN_KEY),
 | 
						|
      polygon: String(process.env.POLY_ETHSCAN_KEY),
 | 
						|
      arbitrumOne: String(process.env.ARB_ETHSCAN_KEY),
 | 
						|
      avalanche: String(process.env.AVAX_ETHSCAN_KEY),
 | 
						|
      opera: String(process.env.FTM_ETHSCAN_KEY)
 | 
						|
    }
 | 
						|
  },
 | 
						|
  typechain: {
 | 
						|
    outDir: "typechain",
 | 
						|
    target: "ethers-v5"
 | 
						|
  },
 | 
						|
  mocha: {
 | 
						|
    timeout: 10000 * 1000 // 10,000 seconds
 | 
						|
  }
 | 
						|
  // tenderly: {
 | 
						|
  //   project: process.env.TENDERLY_PROJECT,
 | 
						|
  //   username: process.env.TENDERLY_USERNAME,
 | 
						|
  // },
 | 
						|
};
 | 
						|
 | 
						|
export default config;
 |