Brownie

‘Brownie compile’ 使用不同於配置文件中指定的編譯器版本

  • June 29, 2021

為什麼即使我在配置文件中設置了特定的舊版本,brownie 仍會嘗試使用最新的本地可用版本 solc 進行編譯?

例子:

bernat:uniswap-v3-playground bernat$ brownie compile
Brownie v1.14.5 - Python development framework for Ethereum

Compiling contracts...
 Solc version: 0.7.5
 Optimizer: Enabled  Runs: 200
 EVM Version: Istanbul
Generating build data...
[... removed for conciseness ...]

Generating interface ABIs...
CompilerError: solc returned the following errors:

ParserError: Source file requires different compiler version (current compiler is 0.8.1+commit.df193b15.Darwin.appleclang) - note that nightly builds are considered to be strictly less than the released version
--> /Users/bernat/.brownie/packages/OpenZeppelin/openzeppelin-contracts@3.4.1-solc-0.7/contracts/token/ERC721/IERC721Enumerable.sol:3:1:
 |
3 | pragma solidity ^0.7.0;
 | ^^^^^^^^^^^^^^^^^^^^^^^

在這個例子中,它看起來像是在嘗試使用 0.8.1,儘管一開始它承認版本 0.7.5,這讓我很困惑。我能找到的唯一解決方法是刪除 0.7.5 之後的所有版本。

在您的brownie-config.yaml文件中,您將能夠設置特定版本的solidity。但是,如果契約指定了不同的版本,您將遇到錯誤。

看起來您正在使用3.4.1他們的契約的 openzeppelin 版本。如果您查看該軟體包,您會發現它們都使用0.7了solidity 版本。您要麼必須:

  1. 不再需要在您的 brownie 配置中使用特定的可靠版本
  2. 更新到使用 v0.8 of solidity 的 openzeppelin 包(我可以建議他們的 4.x 版本嗎?)

此外:

Brownie 可以處理多個導入,但solidity 不能。

如果我與 v0.6 簽訂契約並且它導入 v0.8 -solidity 會嚇壞

如果我與 v0.6 簽訂了契約,而與 v0.8 簽訂了不同的契約,solidity 不在乎,因為它們是不同的,並且 brownie 足夠聰明,可以使用自己的編譯器編譯它們。

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