#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. Спасибо за это — жаль, что для этого еще нет пространства имен!