Brownie
‘Brownie compile’ 使用不同於配置文件中指定的編譯器版本
為什麼即使我在配置文件中設置了特定的舊版本,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 版本。您要麼必須:
- 不再需要在您的 brownie 配置中使用特定的可靠版本
- 更新到使用 v0.8 of solidity 的 openzeppelin 包(我可以建議他們的 4.x 版本嗎?)
此外:
Brownie 可以處理多個導入,但solidity 不能。
如果我與 v0.6 簽訂契約並且它導入 v0.8 -solidity 會嚇壞
如果我與 v0.6 簽訂了契約,而與 v0.8 簽訂了不同的契約,solidity 不在乎,因為它們是不同的,並且 brownie 足夠聰明,可以使用自己的編譯器編譯它們。