Simon Cosmos
Simon Cosmos

Reputation: 61

Hardhat compile error with API_URL and Private Key import

Tying to follow a basic NFT tutorial, and I have to say, that I am kind of a noob in Programming. The problem that I am facing is that my hardhat.config.js file needs an API_KEY and a Private Key, which it should import from the process.env file:

API_URL = "https://ethropsten.alchemyapi.io/v2/UkW3oySI7WxvFwDwopQHPOHajHaWFZFv"
PRIVATE_KEY = "8d33c2613cb63d0dc6305e57..."

the hardhad config file looks like this:

* @type import('hardhat/config').HardhatUserConfig
*/
require('dotenv').config();
require("@nomiclabs/hardhat-ethers");
const { API_URL, PRIVATE_KEY } = process.env;
module.exports = {
  solidity: "0.8.0",
  defaultNetwork: "ropsten",
  networks: {
    hardhat: {},
    ropsten: {
      url: API_URL,
      accounts: [`0x${PRIVATE_KEY}`]
    }
  },
} 

But whenever I try to compile it and run it tru my deploy.js file I get an error message that essentially tells me, that the import was not possible, and looks like this:


  * Invalid value undefined for HardhatConfig.networks.ropsten.url - Expected a value of type string.
  * Invalid value {"accounts":["0xundefined"]} for HardhatConfig.networks.ropsten - Expected a value of type HttpNetworkConfig.
  
To learn more about Hardhat's configuration, please go to https://hardhat.org/config/

For more info go to https://hardhat.org/HH8 or run Hardhat with --show-stack-traces
simon@MacBook-Pro-von-Simon test_fractals % npx hardhat run scripts/deploy.js --network ropsten
An unexpected error occurred:

simon@MacBook-Pro-von-Simon test_fractals % npx hardhat run scripts/deploy.js --network ropsten
An unexpected error occurred:

simon@MacBook-Pro-von-Simon test_fractals % npx hardhat run scripts/deploy.js --network ropsten
An unexpected error occurred:

ReferenceError: API_KEY is not defined
    at Object.<anonymous> (/Users/simon/test_fractals/hardhat.config.js:37:12)
    at Module._compile (internal/modules/cjs/loader.js:1072:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
    at Module.load (internal/modules/cjs/loader.js:937:32)
    at Function.Module._load (internal/modules/cjs/loader.js:778:12)
    at Module.require (internal/modules/cjs/loader.js:961:19)
    at require (internal/modules/cjs/helpers.js:92:18)
    at importCsjOrEsModule (/Users/simon/test_fractals/node_modules/hardhat/src/internal/core/config/config-loading.ts:23:20)
    at Object.loadConfigAndTasks (/Users/simon/test_fractals/node_modules/hardhat/src/internal/core/config/config-loading.ts:66:18)
    at main (/Users/simon/test_fractals/node_modules/hardhat/src/internal/cli/cli.ts:129:20)
simon@MacBook-Pro-von-Simon test_fractals % npx hardhat run scripts/deploy.js --network ropsten
An unexpected error occurred:

ReferenceError: API_KEY is not defined
    at Object.<anonymous> (/Users/simon/test_fractals/hardhat.config.js:37:12)
    at Module._compile (internal/modules/cjs/loader.js:1072:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
    at Module.load (internal/modules/cjs/loader.js:937:32)
    at Function.Module._load (internal/modules/cjs/loader.js:778:12)
    at Module.require (internal/modules/cjs/loader.js:961:19)
    at require (internal/modules/cjs/helpers.js:92:18)
    at importCsjOrEsModule (/Users/simon/test_fractals/node_modules/hardhat/src/internal/core/config/config-loading.ts:23:20)
    at Object.loadConfigAndTasks (/Users/simon/test_fractals/node_modules/hardhat/src/internal/core/config/config-loading.ts:66:1 

I first thought, that my .env file was not at the right place or that the syntax was not right, but after trying everything I could think of, I still get the same error message. Any help is appreciated.

Upvotes: 6

Views: 8144

Answers (6)

Marcos Camargo
Marcos Camargo

Reputation: 1

To solve these problem I install dotenv extencion

npm install dotenv --save

And in hardtat.config I use process.env.YOUR_CONST

 /**
* @type import('hardhat/config').HardhatUserConfig
*/

require('dotenv').config();
require("@nomiclabs/hardhat-ethers");
/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
  solidity: "0.8.17",
  defaultNetwork: "goerli",
  networks: {
     hardhat: {},
     goerli: {
        url:process.env.API_URL,
        accounts: [`0x${process.env.PRIVATE_KEY}`]
     }
  },
};

Upvotes: 0

Yohann Atticot
Yohann Atticot

Reputation: 21

> npm i dotenv


require('dotenv').config()
...
module.exports = {
  solidity: "0.8.17",
  networks: {
    hardhat: {
      chainId: 80001
    },
    mumbai: {
      url: `https://polygon-mumbai.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY}`,
      accounts: [process.env.PRIVATE_KEY_WALLET]
    }
  }
};

Upvotes: 0

Fidel Mordzinu
Fidel Mordzinu

Reputation: 83

This worked for me

    /**
     * @type import('hardhat/config').HardhatUserConfig
     */

     require('dotenv').config({path:__dirname+'/.env'})
     require("@nomiclabs/hardhat-ethers")
     
     const { API_URL, PRIVATE_KEY } = process.env

     module.exports = {
      solidity: "0.7.3",
      defaultNetwork: "ropsten",
      networks: {
        hardhat: {
        },
        ropsten: {
          url: "https://eth-ropsten.alchemyapi.io/v2/your-api-key", 
// Replace your-api-key with your API key
// Your API_URL also stored in .env file but for simplity I have directly a string here
          accounts: ["klaouoq84qoir983n2nc3234xn98349nx4u2394u23998x3n3"], // This is YOUR_PRIVATE_KEY from Metamask which you can store in env file but for simplity I have directly a string here
        },
      },
    }

Upvotes: 1

NashGC
NashGC

Reputation: 691

I ran in the same issue and I've solved it in a next way. The things back to normal when I firstly require the dotenv and only then set config params.

So, the final code looks like that:

const dotenv = require("dotenv");
dotenv.config({path: __dirname + '/.env'});
const { API_URL, PRIVATE_KEY } = process.env;

hope this save some time for someone =)

Upvotes: 2

skimah
skimah

Reputation: 111

I had this issue because I added 'export' in front of my environment variables. Once I removed "export" I was able to access them from hardhat config

Upvotes: 0

Nehal Ahmed
Nehal Ahmed

Reputation: 141

I solved the same problem by using this in the hardhat.config.js file:

require('dotenv').config({path:__dirname+'/.env'})

Instead of:

require('dotenv').config()

For more information, you can visit dotenv file is not loading environment variables

Upvotes: 14

Related Questions