2

我正在使用在 Windows 10 主机上的 WSL2 Ubuntu 20.04 上运行的 Brownie 框架使用 Solidity。

而且我必须将chainlink依赖项导入我的项目,所以我有以下进口商

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 compile,编译器工作得很好,但是 Visual Studio 代码抱怨导入

VScode 错误

附加信息:我正在使用 romote 编译器版本,如果我将其更改为“localNodeModule”,Vscode 将停止抱怨导入,但它开始抱怨solidity 版本:

可靠性错误

而且我无法再编译该项目了。

我读了其他类似的帖子:VScode Solidity extension - not found openzepplin imports with similar questions, but unfornatelly the questions still unresolve.

4

3 回答 3

4

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 后,警告/错误应该会消失!

查看Ethereum VS Code 扩展的自述文件以获取更多信息。

于 2021-12-09T01:34:35.313 回答
0

在我的情况下,即使重新映射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";
于 2022-01-22T18:15:18.523 回答
0

我通过这样做解决了它: npm install @chainlink/contracts --save

并在 yaml 文件中执行:在此处输入图像描述

于 2022-02-10T19:45:29.980 回答