Проблема импорта Solidity на VSCode (WSL2) и Brownie

Я работаю с Solidity, используя Brownie Framework, работающий на WSL2 Ubuntu 20.04 на хост-машине Windows 10.

И мне нужно импортировать зависимости звеньев цепи в свой проект, поэтому у меня есть следующие импортеры

      import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";
import "@chainlink/contracts/src/v0.6/vendor/SafeMathChainlink.sol"; 

Чтобы они работали правильно, я добавил следующий код в brownie-config.yaml.

      dependencies:
  # - <organization/repo>@<version>
  - smartcontractkit/chainlink-brownie-contracts@1.1.1
compiler:
  solc:
    remappings:
      - "@chainlink=smartcontractkit/chainlink-brownie-contracts@1.1.1"

Таким образом, при запуске компиляции Brownie компилятор работает нормально, однако код Visual Studio жалуется на импорт.

Ошибка Vscode

Дополнительная информация: я использую версию компилятора romote, и если я изменю ее на "localNodeModule", Vscode перестанет жаловаться на импорт, но начнет жаловаться на версию надежности:

Ошибка твердости

И я больше не могу компилировать проект.

Я прочитал еще один пост, вроде этого: Расширение VScode Solidity - не нашел импорта openzepplin с аналогичными проблемами, но, несомненно, проблемы все еще не решены.

3 ответа

Brownie хранит данные контракта библиотеки (Chainlink, OpenZeppelin, другие зависимости) внутри Users/$yourUsername/.brownie/packages. По крайней мере, это на Mac. Если вы используете Windows, найдите .brownieкаталог.

Чтобы указать расширение Ethereum VS Code на эти файлы, вы можете добавить переназначение Solidity. Это можно сделать, добавив следующее:

      "solidity.remappings": [
    "@openzeppelin/=/Users/rafi/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.4.0"
  ]

на ваш settings.jsonфайл в VS Code. После перезапуска VS Code предупреждение/ошибка должно исчезнуть!

Ознакомьтесь с файлом readme для расширения Ethereum VS Code для получения дополнительной информации.

В моем случае даже переназначение в brownie-config.yamlне сработало, но указание локального пути непосредственно в импорте сработало. Не знаю, почему (было бы интересно выяснить это).

Не работает:

      // in contract
import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";
      // in brownie-config.yaml
dependencies:
  - smartcontractkit/chainlink-brownie-contracts@1.1.1
compiler:
  solc:
    remappings:
      - '@chainlink=/Users/<your-user>/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@1.1.1'

Работающий:

      // in contract
import "/Users/filippomassarelli/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@1.1.1/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";

Я решил это, выполнив: npm install @chainlink/contracts --save

и в файле yaml делаем:

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