Невозможность скомпилировать несколько версий Solidity

Я пытаюсь скомпилировать (через Hardhat) контракт, который импортирует несколько интерфейсов с разными версиями Solidity, но получаю следующую ошибку:

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

These files and its dependencies cannot be compiled with your config. This can happen because they have incompatible Solidity pragmas, or don't match any of your configured Solidity compilers.

  * contracts/FlashLoaner.sol

Flashloaner.sol:

      pragma solidity >=0.5.0 <=0.8.0;

import '@uniswap/v2-periphery/contracts/interfaces/IWETH.sol';
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import '@aave/protocol-v2/contracts/interfaces/ILendingPool.sol'; //---> Issue
import "hardhat/console.sol";


contract FlashLoaner {
    struct MyCustomData {
        address token;
        uint256 repayAmount;
    }

    address public logicContract;
    
    function execute(address _weth, address _contract) external view {
        console.log(_weth);
    }
}

Проблема с @aave/protocol-v2/contracts/interfaces/ILendingPool.sol. Если я это прокомментирую, мой контракт будет хорошо составлен.

IlendingPool.sol: pragma solidity 0.6.12;

IERC20.sol: pragma solidity ^0.5.0;

IWETH.sol: pragma solidity >=0.5.0;

Hardhat.config:

      module.exports = {
  solidity: {
    compilers: [
      {
        version: "0.5.7"
      },
      {
        version: "0.8.0"
      },
      {
        version: "0.6.12"
      }
    ]
  }
   ...

5 ответов

Решение:

Возьмите подписи от интересующих меня функций из каждого интерфейса и поместите их в свой собственный интерфейс с помощью pragma solidity ^0.8.0.

У меня была похожая проблема.

В моем случае в моих контрактах использовалась версия pragma solidity ^0.8.0.

Чтобы решить эту проблему, я добавил эти строки в свой hardhat.config.js (в большинстве случаев внутри существующего module.exports).

      module.exports = {
  solidity: "0.8.0",
}

Я просто удалил "^" перед версией. Я надеюсь, что это может помочь кому-то.

Просто попробуйте установить на hardhat.config.js

          module.exports = {   solidity: {
        compilers: [
          {
            version: "0.5.5",
          },
          {
            version: "0.6.7",
            settings: {},
          },
        ],   
}, 

};

узнать больше!!!!

Я нашел информацию из часто задаваемых вопросов о каске полезной:

В некоторых сценариях у вас может быть контракт с прагмой версии ^0.7.0, который импортирует контракт с ^0.6.0. Это никогда не может быть скомпилировано.

Если файл ^0.6.0 исходит из зависимости, одним из возможных исправлений является обновление этой зависимости (при условии, что в более новых версиях используется более новая версия Solidity). В качестве альтернативы вам может потребоваться понизить версии прагмы контрактов в вашем проекте.

Одним из решений этой проблемы является «Lock.sol» в папке «Контракты». Версия солидности прагмы имеет тенденцию отличаться от других файлов, поэтому вы должны сделать их одинаковыми.

Другие вопросы по тегам