Как устранить ошибку в объявлении из-за повторного импорта?

#solidity

Вопрос:

Допустим, у меня есть контракт Parent.sol , в котором есть два импорта:

 import "./interfaces/IPair.sol";
import "./interfaces/IMasterChef.sol";
 

И оба интерфейса импортируются по отдельности IERC20.sol .

Ну , когда я скомпилирую Parent.sol , я получу ошибку объявления из-за повторного импорта IERC20.sol :

 contracts/Parent.sol:7:1: DeclarationError: Identifier already declared.
import "./interfaces/IMasterChef.sol";
^------------------------------------^
contracts/interfaces/IERC20.sol:4:1: The previous declaration is here:
interface IERC20 {
^ (Relevant source part starts here and spans across multiple lines).

Error HH600: Compilation failed
 

Есть ли какой-нибудь способ решить эту проблему, не разглаживая файл?

Ответ №1:

В настоящее время нет пространства имен или import X as Y , что позволило бы использовать оба интерфейса с одинаковым именем.


Если вы не хотите объединять файлы, вы можете сохранить оба, но вам нужно изменить фактическое имя интерфейса хотя бы одного из них.

Пример:

  • ./interfaces/IPair.sol импорт ./Pair/IERC20.sol , который определяет interface IERC20 {}
    • измените определение на interface IPairERC20 {} и все вхождения, которые его создают ( new IERC20() на new IPairERC20() )
  • ./interfaces/IMasterChef.sol импорт ./MasterChef/IERC20.sol , который определяет interface IERC20 {}
    • измените определение на interface IMasterChefERC20 {} и все вхождения, которые его создают ( new IERC20() на new IMasterChefERC20() )

Комментарии:

1. Спасибо за это — жаль, что для этого еще нет пространства имен!