Hardhat

使用帶有安全帽的 OpenZeppeling 合約的問題 - 未找到:不支持文件導入回調

  • February 4, 2022

我在 Remix 中編寫和測試我的智能合約,我從 OpenZeppelin 導入了一些合約,現在我想將它移動到我在 VSC 中的項目中。但現在我的 VSC 因錯誤而尖叫:

Source "@openzeppelin/contracts/token/ERC20/ERC20.sol" not found: File import callback not supported

我查看了文件,發現我必須安裝一些軟體包才能將 OZ 與 Hard Hat 一起使用,例如:

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

但它仍然無法正常工作,即使我可以看到它安裝在node_modules.

這是我的package.json依賴項:

{
 "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": {}
}

這裡是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']
   }
 }
}

我對安全帽很陌生,這是我的第一個項目。

這是我遇到的錯誤: 在此處輸入圖像描述


編輯


我通過將import路徑更改為:

import "../node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol";

但是當我執行一些測試時,npx hardhat test我編譯失敗了:

在此處輸入圖像描述

所以我恢復正常import "@openzeppelin/.../ERC20.sol";,它編譯成功,但我的 VSC 仍然為此尖叫。

所以 HardHat 可以正確讀取這些合約,只是 VSC 存在一些問題,它無法正確讀取這些路徑。有人知道如何解決這個問題嗎?

我通過將導入路徑更改為:

import "../node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol";

但是當我使用 npx hardhat test 執行一些測試時,我編譯失敗了:

在此處輸入圖像描述

所以我回到了正常的import “@openzeppelin/…/ERC20.sol”; 它編譯成功,但我的 VSC 仍然為此尖叫。

所以 HardHat 可以正確讀取這些合約,只是 VSC 存在一些問題,它無法正確讀取這些路徑。

引用自:https://ethereum.stackexchange.com/questions/120279