Расширение VScode Solidity - не удается найти импорт openzepplin

Я пытаюсь начать с того, что должно быть очень простым контрактом на Solidity, но VSCode доставляет мне трудности. Я использую плагин надежности Juan Blancos, но VSCode не может найти импорт openzepplin

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

Ошибка:

Источник «@openzeppelin / contract / token / ERC20 / ERC20.sol» не найден: обратный вызов для импорта файла не поддерживается

Несмотря на то, что vscode показывает красные волнистые линии, я могу успешно компилировать с помощью компиляции hardhat .

Если я изменю путь на

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

VScode перестает жаловаться, но тогда я не могу скомпилировать через hardhard, ошибка:

Источник "node_modules/@openzeppelin/contracts/security/Pausable.sol" не найден: файл за пределами разрешенных каталогов.

Мои настройки VSCode для расширения Solidity как для пользователя, так и для рабочего пространства:

      "solidity.packageDefaultDependenciesContractsDirectory": "contracts",
"solidity.packageDefaultDependenciesDirectory": "node_modules"

Что соответствует структуре моего проекта

      root 
 |_ contracts
    |_ MyToken.sol
 |_ node_modules
    |_ @openzepplin

Я следовал приведенным здесь инструкциям и провел обширное исследование, но, к сожалению, не могу заставить его работать.

4 ответа

Я столкнулся с теми же проблемами. Перейдите в настройки VSCode (рабочая область) и введите packageDefaultDependities в строке поиска.

Затем нажмите кнопкуEdit in settings.jsonвнизу.

Добавьте эту строку вsettings.jsonфайл

      "solidity.packageDefaultDependenciesDirectory": "node_modules",

Тогда красные линии исчезнут.

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

У меня была такая же проблема. Я добавил несколько папок в unnamedРабочее пространство. После удаления всех других папок и сохранения только одной папки проекта проблема для меня решена.

Проблемы с линтингом Если вы видите что-то вроде:

      ParserError: Source "OpenZeppelin/openzeppelin-contracts@3.4.0/contracts/access/Ownable.sol" not found: File not found.
import "@openzeppelin/contracts/access/Ownable.sol";

В вашем vscode их можно смело игнорировать. Однако вы также можете добавить в свои настройки, чтобы игнорировать их.

  1. Создайте папку .vscode в корне вашего проекта.
  2. Создайте файл с именем settings.json Добавьте следующий код:
      {
  "solidity.remappings": [
    "@chainlink/=/Users/patrick/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@0.2.2",
    "@openzeppelin/=/Users/patrick/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.3.2"
  ]
}

Или любую другую версию, которая нужна вашим контрактам @chainlink и @openzeppelin. Например:

Для получения дополнительной информации см. здесь

Используйте одинарные кавычки вместо двойных.

Вместо:

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

использовать это:

import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

Другие вопросы по тегам