Răsfoiți Sursa

convert env variables to configuration variables

Christopher Dedominici 1 an în urmă
părinte
comite
3163459b3b
6 a modificat fișierele cu 46 adăugiri și 47 ștergeri
  1. 0 10
      .env.example
  2. 11 1
      .github/workflows/ci.yml
  3. 0 3
      .solcover.js
  4. 20 7
      README.md
  5. 13 23
      hardhat.config.ts
  6. 2 3
      package.json

+ 0 - 10
.env.example

@@ -1,10 +0,0 @@
-export INFURA_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
-export MNEMONIC="here is where your twelve words mnemonic should be put my friend"
-
-# Block explorer API keys
-export ARBISCAN_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
-export BSCSCAN_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
-export ETHERSCAN_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
-export OPTIMISM_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
-export POLYGONSCAN_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
-export SNOWTRACE_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"

+ 11 - 1
.github/workflows/ci.yml

@@ -1,7 +1,17 @@
 name: "CI"
 
+# For more information on how to set up GitHub secrets, check the following link:
+# https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions
+
 env:
-  DOTENV_CONFIG_PATH: "./.env.example"
+  HARDHAT_VAR_INFURA_API_KEY: ${{ secrets.InfuraApiKey }}
+  HARDHAT_VAR_MNEMONIC: ${{ secrets.Mnemonic }}
+  HARDHAT_VAR_ARBISCAN_API_KEY: ${{ secrets.ArbiscanApiKey }}
+  HARDHAT_VAR_BSCSCAN_API_KEY: ${{ secrets.BscscanApiKey }}
+  HARDHAT_VAR_ETHERSCAN_API_KEY: ${{ secrets.EtherscanApiKey }}
+  HARDHAT_VAR_OPTIMISM_API_KEY: ${{ secrets.OptimismApiKey }}
+  HARDHAT_VAR_POLYGONSCAN_API_KEY: ${{ secrets.PolygonscanApiKey }}
+  HARDHAT_VAR_SNOWTRACE_API_KEY: ${{ secrets.SnowtraceApiKey }}
 
 on:
   workflow_dispatch:

+ 0 - 3
.solcover.js

@@ -1,7 +1,4 @@
 module.exports = {
   istanbulReporter: ["html", "lcov"],
-  providerOptions: {
-    mnemonic: process.env.MNEMONIC,
-  },
   skipFiles: ["test"],
 };

+ 20 - 7
README.md

@@ -66,16 +66,26 @@ You can edit the CI script in [.github/workflows/ci.yml](./.github/workflows/ci.
 
 ### Pre Requisites
 
-Before being able to run any command, you need to create a `.env` file and set a BIP-39 compatible mnemonic as an
-environment variable. You can follow the example in `.env.example`. If you don't already have a mnemonic, you can use
-this [website](https://iancoleman.io/bip39/) to generate one.
-
-Then, proceed with installing dependencies:
+First, you need to install the dependencies:
 
 ```sh
 $ pnpm install
 ```
 
+Then, you need to set up all the required configuration variables and, if necessary, the optional ones. To assist with
+the setup process, run `npx hardhat vars setup`. For example, to set a BIP-39 compatible mnemonic variable, execute
+`npx hardhat vars set MNEMONIC`. If you do not already have a mnemonic, you can generate one using this
+[website](https://iancoleman.io/bip39/).
+
+Example:
+
+```sh
+npx hardhat vars set MNEMONIC "here is where your twelve words mnemonic should be put my friend"
+```
+
+For more info on how to set the `Hardhat Configuration Variables` visit the docs
+[here](https://hardhat.org/hardhat-runner/docs/guides/configuration-variables).
+
 ### Compile
 
 Compile the smart contracts with Hardhat:
@@ -126,12 +136,15 @@ $ pnpm coverage
 
 ### Report Gas
 
-See the gas usage per unit test and average gas per method call:
+See the gas usage per unit test and average gas per method call by providing the optional configuration variable
+`REPORT_GAS`:
 
 ```sh
-$ REPORT_GAS=true pnpm test
+$ HARDHAT_VAR_REPORT_GAS=true pnpm test
 ```
 
+The prefix `HARDHAT_VAR_` is needed to temporarily set a Hardhat Configuration Variable via ENV variables.
+
 ### Clean
 
 Delete the smart contract artifacts, the coverage reports and the Hardhat cache:

+ 13 - 23
hardhat.config.ts

@@ -1,27 +1,17 @@
 import "@nomicfoundation/hardhat-toolbox";
-import { config as dotenvConfig } from "dotenv";
 import "hardhat-deploy";
 import type { HardhatUserConfig } from "hardhat/config";
+import { vars } from "hardhat/config";
 import type { NetworkUserConfig } from "hardhat/types";
-import { resolve } from "path";
 
 import "./tasks/accounts";
 import "./tasks/greet";
 import "./tasks/taskDeploy";
 
-const dotenvConfigPath: string = process.env.DOTENV_CONFIG_PATH || "./.env";
-dotenvConfig({ path: resolve(__dirname, dotenvConfigPath) });
+// Run 'npx hardhat vars setup' to see the list of variables that need to be set
 
-// Ensure that we have all the environment variables we need.
-const mnemonic: string | undefined = process.env.MNEMONIC;
-if (!mnemonic) {
-  throw new Error("Please set your MNEMONIC in a .env file");
-}
-
-const infuraApiKey: string | undefined = process.env.INFURA_API_KEY;
-if (!infuraApiKey) {
-  throw new Error("Please set your INFURA_API_KEY in a .env file");
-}
+const mnemonic: string = vars.get("MNEMONIC");
+const infuraApiKey: string = vars.get("INFURA_API_KEY");
 
 const chainIds = {
   "arbitrum-mainnet": 42161,
@@ -66,19 +56,19 @@ const config: HardhatUserConfig = {
   },
   etherscan: {
     apiKey: {
-      arbitrumOne: process.env.ARBISCAN_API_KEY || "",
-      avalanche: process.env.SNOWTRACE_API_KEY || "",
-      bsc: process.env.BSCSCAN_API_KEY || "",
-      mainnet: process.env.ETHERSCAN_API_KEY || "",
-      optimisticEthereum: process.env.OPTIMISM_API_KEY || "",
-      polygon: process.env.POLYGONSCAN_API_KEY || "",
-      polygonMumbai: process.env.POLYGONSCAN_API_KEY || "",
-      sepolia: process.env.ETHERSCAN_API_KEY || "",
+      arbitrumOne: vars.get("ARBISCAN_API_KEY", ""),
+      avalanche: vars.get("SNOWTRACE_API_KEY", ""),
+      bsc: vars.get("BSCSCAN_API_KEY", ""),
+      mainnet: vars.get("ETHERSCAN_API_KEY", ""),
+      optimisticEthereum: vars.get("OPTIMISM_API_KEY", ""),
+      polygon: vars.get("POLYGONSCAN_API_KEY", ""),
+      polygonMumbai: vars.get("POLYGONSCAN_API_KEY", ""),
+      sepolia: vars.get("ETHERSCAN_API_KEY", ""),
     },
   },
   gasReporter: {
     currency: "USD",
-    enabled: process.env.REPORT_GAS ? true : false,
+    enabled: vars.has("REPORT_GAS"),
     excludeContracts: [],
     src: "./contracts",
   },

+ 2 - 3
package.json

@@ -23,12 +23,11 @@
     "@typescript-eslint/parser": "^5.44.0",
     "chai": "^4.3.7",
     "cross-env": "^7.0.3",
-    "dotenv": "^16.0.3",
     "eslint": "^8.28.0",
     "eslint-config-prettier": "^8.5.0",
     "ethers": "^6.4.0",
     "fs-extra": "^10.1.0",
-    "hardhat": "^2.12.2",
+    "hardhat": "^2.19.0",
     "hardhat-deploy": "^0.11.29",
     "hardhat-gas-reporter": "^1.0.9",
     "lodash": "^4.17.21",
@@ -69,7 +68,7 @@
     "lint": "pnpm lint:sol && pnpm lint:ts && pnpm prettier:check",
     "lint:sol": "solhint --max-warnings 0 \"contracts/**/*.sol\"",
     "lint:ts": "eslint --ignore-path ./.eslintignore --ext .js,.ts .",
-    "postinstall": "DOTENV_CONFIG_PATH=./.env.example pnpm typechain",
+    "postinstall": "pnpm typechain",
     "prettier:check": "prettier --check \"**/*.{js,json,md,sol,ts,yml}\"",
     "prettier:write": "prettier --write \"**/*.{js,json,md,sol,ts,yml}\"",
     "task:deployGreeter": "hardhat task:deployGreeter",