[Solved] Error: Transaction reverted: function call to a non-contract account

Colin Steidtmann Asks: Error: Transaction reverted: function call to a non-contract account
I’ve been trying to debug this for the past 2 days, it has driven me insane. I’m getting this error when testing my contract: Error: Transaction reverted: function call to a non-contract account. It’s the simplest contract and simplest function call. It of course works on remix.

Here’s the error for npx hardhat.test:

Code:
  Factory
    1) Should not throw error


  0 passing (2s)
  1 failing

  1) Factory
       Should not throw error:
     Error: Transaction reverted: function call to a non-contract account
      at Factory.newToken (contracts/Factory.sol:13)
      at processTicksAndRejections (internal/process/task_queues.js:97:5)
      at HardhatNode._mineBlockWithPendingTxs (node_modules/hardhat/src/internal/hardhat-network/provider/node.ts:1070:23)
      at HardhatNode.mineBlock (node_modules/hardhat/src/internal/hardhat-network/provider/node.ts:369:16)
      at EthModule._sendTransactionAndReturnHash (node_modules/hardhat/src/internal/hardhat-network/provider/modules/eth.ts:1373:18)
      at HardhatNetworkProvider.request (node_modules/hardhat/src/internal/hardhat-network/provider/provider.ts:99:18)
      at EthersProviderWrapper.send (node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)

Please somebody help.

Here’s my setup: Factory.sol:

Code:
// @unsupported: ovm
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "hardhat/console.sol";

contract Factory  {

    function newToken() public {
        uint x = IERC20(0x4F96Fe3b7A6Cf9725f59d353F723c1bDb64CA6Aa).balanceOf(address(this));
        console.log(x);

    }


}

Deploy_Factory.js

Code:
const fs = require('fs');

module.exports = async ({
  getNamedAccounts,
  deployments,
}) => {
  const { deploy, log, get } = deployments
  const { deployer } = await getNamedAccounts()
  const chainId = await getChainId()
  const factory = await deploy('Factory', {
    from: deployer,
    args: [],
    log: true
  })

}

module.exports.tags = ['all', 'factory']

Factory_test.js

Code:
const { expect } = require('chai')

describe('Factory', async function () {
  let factory

  beforeEach(async () => {
    await deployments.fixture(['mocks', 'factory'])
    const Factory = await deployments.get('Factory')
    factory = await ethers.getContractAt('Factory', Factory.address)

  })

  it("Should not throw error", async function () {
    await factory.newToken();
  })




})

hardhat.config

Code:
/**
 * @type import('hardhat/config').HardhatUserConfig
 */
require("@nomiclabs/hardhat-waffle")
require("@nomiclabs/hardhat-ethers")
require("@nomiclabs/hardhat-web3")
require("@nomiclabs/hardhat-truffle5")
require("@nomiclabs/hardhat-etherscan")
require("hardhat-deploy")
require('@openzeppelin/hardhat-upgrades');
require("./tasks/accounts")
require("./tasks/balance")
require("./tasks/fund-link")
require("./tasks/block-number")
require("./tasks/block-number")
require("./tasks/random-number-consumer")
require("./tasks/price-consumer")
require("./tasks/api-consumer")


require('dotenv').config()

const MAINNET_RPC_URL = process.env.MAINNET_RPC_URL || process.env.ALCHEMY_MAINNET_RPC_URL || "https://eth-mainnet.alchemyapi.io/v2/your-api-key"
const RINKEBY_RPC_URL = process.env.RINKEBY_RPC_URL || "https://eth-rinkeby.alchemyapi.io/v2/your-api-key"
const KOVAN_RPC_URL = process.env.KOVAN_RPC_URL 
const MNEMONIC = process.env.MNEMONIC 
const ETHERSCAN_API_KEY = process.env.ETHERSCAN_API_KEY || "Your etherscan API key"
// optional
const PRIVATE_KEY = process.env.PRIVATE_KEY || "your private key"

module.exports = {
    defaultNetwork: "hardhat",
    networks: {
        hardhat: {
            // // If you want to do some forking, uncomment this
            // forking: {
            //   url: MAINNET_RPC_URL
            // }
        },
        localhost: {
        },
        kovan: {
            url: KOVAN_RPC_URL,
            // accounts: [PRIVATE_KEY],
            accounts: {
                mnemonic: MNEMONIC,
            },
            saveDeployments: true,
        },
        rinkeby: {
            url: RINKEBY_RPC_URL,
            // accounts: [PRIVATE_KEY],
            accounts: {
                mnemonic: MNEMONIC,
            },
            saveDeployments: true,
        },
        ganache: {
            url: 'http://localhost:8545',
            accounts: {
                mnemonic: MNEMONIC,
            }
        }
    },
    etherscan: {
        // Your API key for Etherscan
        // Obtain one at https://etherscan.io/
        apiKey: ETHERSCAN_API_KEY
    },
    namedAccounts: {
        deployer: {
            default: 0, // here this will by default take the first account as deployer
            1: 0 // similarly on mainnet it will take the first account as deployer. Note though that depending on how hardhat network are configured, the account 0 on one network can be different than on another
        },
        feeCollector: {
            default: 1
        }
    },
    paths: {
        deploy: 'deploy',
        deployments: 'client/packages/contracts/src/deployments',
        artifacts: 'client/packages/contracts/src/deployments/artifacts',
        imports: 'imports'
    },
    solidity: {
        compilers: [
            {
                version: "0.6.6"
            },
            {
                version: "0.6.12",
                settings: {
                  optimizer: {
                    enabled: true,
                    runs: 200
                  }
                }
            },
            {
                version: "0.4.24"
            }
        ],

    },
    mocha: {
        timeout: 100000
    }
}

package.json

Code:
{
  "name": "chainlink-hardhat-box",
  "version": "1.0.0",
  "description": "",
  "scripts": {
    "test": "hardhat test",
    "lint": "eslint .",
    "lint:fix": "eslint . --fix"
  },
  "license": "MIT",
  "devDependencies": {
    "@nomiclabs/hardhat-ethers": "^2.0.1",
    "@nomiclabs/hardhat-etherscan": "^2.1.1",
    "@nomiclabs/hardhat-waffle": "^2.0.1",
    "@nomiclabs/hardhat-web3": "^2.0.0",
    "chai": "^4.2.0",
    "ethereum-waffle": "^3.2.1",
    "ethers": "^5.0.24",
    "hardhat": "^2.0.6",
    "hardhat-deploy": "^0.7.0-beta.39"
  },
  "dependencies": {
    "@chainlink/contracts": "0.1.6",
    "@chainlink/test-helpers": "0.0.5",
    "@chainlink/token": "^1.1.0",
    "@nomiclabs/hardhat-truffle5": "^2.0.0",
    "@openzeppelin/contracts": "3.4.0",
    "@openzeppelin/contracts-upgradeable": "3.4.0",
    "@openzeppelin/hardhat-upgrades": "^1.6.0",
    "@uniswap/v2-periphery": "1.1.0-beta.0",
    "dotenv": "6.2.0",
    "eslint": "^6.0.0"
  },
  "mocha": {
    "timeout": 10000000
  }
}

Ten-tools.com may not be responsible for the answers or solutions given to any question asked by the users. All Answers or responses are user generated answers and we do not have proof of its validity or correctness. Please vote for the answer that helped you in order to help others find out which is the most helpful answer. Questions labeled as solved may be solved or may not be solved depending on the type of question and the date posted for some posts may be scheduled to be deleted periodically. Do not hesitate to share your response here to help other visitors like you. Thank you, Ten-tools.