123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- // SPDX-License-Identifier: MIT
- // OpenZeppelin Contracts (last updated v5.0.0-rc.0) (interfaces/IERC1820Registry.sol)
- pragma solidity ^0.8.20;
- /**
- * @dev Interface of the global ERC1820 Registry, as defined in the
- * https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register
- * implementers for interfaces in this registry, as well as query support.
- *
- * Implementers may be shared by multiple accounts, and can also implement more
- * than a single interface for each account. Contracts can implement interfaces
- * for themselves, but externally-owned accounts (EOA) must delegate this to a
- * contract.
- *
- * {IERC165} interfaces can also be queried via the registry.
- *
- * For an in-depth explanation and source code analysis, see the EIP text.
- */
- interface IERC1820Registry {
- event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer);
- event ManagerChanged(address indexed account, address indexed newManager);
- /**
- * @dev Sets `newManager` as the manager for `account`. A manager of an
- * account is able to set interface implementers for it.
- *
- * By default, each account is its own manager. Passing a value of `0x0` in
- * `newManager` will reset the manager to this initial state.
- *
- * Emits a {ManagerChanged} event.
- *
- * Requirements:
- *
- * - the caller must be the current manager for `account`.
- */
- function setManager(address account, address newManager) external;
- /**
- * @dev Returns the manager for `account`.
- *
- * See {setManager}.
- */
- function getManager(address account) external view returns (address);
- /**
- * @dev Sets the `implementer` contract as ``account``'s implementer for
- * `interfaceHash`.
- *
- * `account` being the zero address is an alias for the caller's address.
- * The zero address can also be used in `implementer` to remove an old one.
- *
- * See {interfaceHash} to learn how these are created.
- *
- * Emits an {InterfaceImplementerSet} event.
- *
- * Requirements:
- *
- * - the caller must be the current manager for `account`.
- * - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not
- * end in 28 zeroes).
- * - `implementer` must implement {IERC1820Implementer} and return true when
- * queried for support, unless `implementer` is the caller. See
- * {IERC1820Implementer-canImplementInterfaceForAddress}.
- */
- function setInterfaceImplementer(address account, bytes32 _interfaceHash, address implementer) external;
- /**
- * @dev Returns the implementer of `interfaceHash` for `account`. If no such
- * implementer is registered, returns the zero address.
- *
- * If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28
- * zeroes), `account` will be queried for support of it.
- *
- * `account` being the zero address is an alias for the caller's address.
- */
- function getInterfaceImplementer(address account, bytes32 _interfaceHash) external view returns (address);
- /**
- * @dev Returns the interface hash for an `interfaceName`, as defined in the
- * corresponding
- * https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP].
- */
- function interfaceHash(string calldata interfaceName) external pure returns (bytes32);
- /**
- * @notice Updates the cache with whether the contract implements an ERC165 interface or not.
- * @param account Address of the contract for which to update the cache.
- * @param interfaceId ERC165 interface for which to update the cache.
- */
- function updateERC165Cache(address account, bytes4 interfaceId) external;
- /**
- * @notice Checks whether a contract implements an ERC165 interface or not.
- * If the result is not cached a direct lookup on the contract address is performed.
- * If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling
- * {updateERC165Cache} with the contract address.
- * @param account Address of the contract to check.
- * @param interfaceId ERC165 interface to check.
- * @return True if `account` implements `interfaceId`, false otherwise.
- */
- function implementsERC165Interface(address account, bytes4 interfaceId) external view returns (bool);
- /**
- * @notice Checks whether a contract implements an ERC165 interface or not without using or updating the cache.
- * @param account Address of the contract to check.
- * @param interfaceId ERC165 interface to check.
- * @return True if `account` implements `interfaceId`, false otherwise.
- */
- function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view returns (bool);
- }
|