Проблема импорта 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 жалуется на импорт.
Дополнительная информация: я использую версию компилятора 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";