Solidity

在你的合約中導入不同的solidity版本

  • July 19, 2022

我正在嘗試導入 uniswap v3 合約,該合約在我使用 0.8.1 的合約中使用版本 0.7.6。用於獲取 TWAP 價格。我正在導入這兩個:

import "@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol";
import "@uniswap/v3-periphery/contracts/libraries/OracleLibrary.sol";

我收到這些錯誤

Error HH606: The project cannot be compiled, see reasons below.

These files import other files that use a different and incompatible version of Solidity:

我努力了 -

  • 在安全帽配置中添加了編譯器版本。

我找到了這個安全帽常見問題解答

其中指出

you might have a contract with pragma version ^0.7.0 that imports a contract with ^0.6.0. This can never be compiled. Pragma versions indicate which subset of the compiler versions can be used, and if two pragma versions don’t intersect (like in this example), then the files cannot be compiled. Period. 

無論如何,我是否可以在不降級我的自定義契約的情況下完成這項工作,因為現在這不是一個選擇。

使用 Uniswap ^0.8.0 合約。您可以在這裡輕鬆找到它們:https ://github.com/Uniswap/v3-core/tree/0.8

hardhat.config.js您可以通過在文件中設置來編譯具有多個版本的 Solidity 的合約。這是範例:

module.exports = {
   solidity: {
       compilers: [
           {
               version: "0.7.6",
           },
           {
               version: "0.8.1",
           },
      ],
  },
};

您可以在此處閱讀有關在 Hardhat 中編譯多個版本的更多資訊。

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