I was writing and testing my smart contracts in Remix where I was importing some contracts from OpenZeppelin, and now I want to move it to my project in VSC. But now my VSC is screaming with an error:
Source "@openzeppelin/contracts/token/ERC20/ERC20.sol" not found: File import callback not supported
I went to documentation, I found that I have to install some of the packages to use OZ with Hard Hat like:
npm install --save-dev @openzeppelin/contracts
npm install --save-dev @openzeppelin/hardhat-upgrades
npm install --save-dev @nomiclabs/hardhat-ethers ethers # peer dependencies
https://docs.openzeppelin.com/upgrades-plugins/1.x/hardhat-upgrades
But it still not working it cannot find this contract even if I can see it installed in node_modules
.
Here is my package.json
dependencies:
{
"devDependencies": {
"@nomiclabs/hardhat-ethers": "^2.0.4",
"@nomiclabs/hardhat-waffle": "^2.0.1",
"@openzeppelin/contracts": "^4.4.2",
"@openzeppelin/hardhat-upgrades": "^1.13.0",
"chai": "^4.3.4",
"ethereum-waffle": "^3.4.0",
"ethers": "^5.5.3",
"hardhat": "^2.8.0"
},
"dependencies": {}
}
Here is hardhat.config.js
:
require('@nomiclabs/hardhat-waffle');
require("@nomiclabs/hardhat-ethers");
require('@openzeppelin/hardhat-upgrades');
module.exports = {
solidity: '0.8.0',
networks: {
ropsten: {
url: 'https://eth-ropsten.alchemyapi.io/v2/cds................Fa',
accounts: ['private key']
}
}
}
I'm pretty new to Hard Hat, this is my first project.
EDIT
I fixed this issue by just change the import
path to:
import "../node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol";
But then when I was running some tests with npx hardhat test
I had compilation fail:
So I moved back to the normalimport "@openzeppelin/.../ERC20.sol";
and it compiled successfully, yet my VSC still screaming about that.
So HardHat can read those contract properly, there's just some problem with VSC that it cannot read those paths correctly. Someone know how to fix this?