У меня есть следующий оператор импорта в контракте Solidity (это работает).
import "@openzeppelin/contracts/token/ERC20/IERC20.sol"
Интерфейс, который я импортирую, находится в следующем репозитории: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol.
Мой вопрос: каков синтаксис или правила, которым я должен следовать при импорте из репозитория github в Solidity? что означает знак @ в операторе импорта?
Ваш фрагмент показывает прямой импорт, который ищет файл в ваших локальных каталогах на основе конфигурации компилятора.
Одним из источников по умолчанию является каталог node_modules
, в котором установлены пакеты НПМ.
Символ @
— это просто префикс NPM пакеты с ограниченной областью действия, позволяющий сгруппировать больше пакетов в одно и то же пространство имен (в данном случае @openzeppelin/<package_name>
).
Чтобы импортировать контракт из GitHub, вы можете просто передать его полный URL:
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol";
Опять же, из-за конфигурации по умолчанию компилятор загружает удаленный файл с GitHub в локальный временный каталог и импортирует его содержимое перед компиляцией.