Skip to content

Latest commit

 

History

History
484 lines (407 loc) · 15.5 KB

IERC1820Registry.md

File metadata and controls

484 lines (407 loc) · 15.5 KB

IERC1820Registry.sol

View Source: contracts/testhelpers/interfaces/IERC1820Registry.sol

IERC1820Registry contract

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.

Events

event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer);
event ManagerChanged(address indexed account, address indexed newManager);

Functions


setManager

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 nonpayable

Arguments

Name Type Description
account address
newManager address
Source Code
function setManager(address account, address newManager) external;

getManager

Returns the manager for account. * See {setManager}.

function getManager(address account) external view
returns(address)

Arguments

Name Type Description
account address
Source Code
function getManager(address account) external view returns (address);

setInterfaceImplementer

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 nonpayable

Arguments

Name Type Description
account address
interfaceHash bytes32
implementer address
Source Code
function setInterfaceImplementer(
        address account,
        bytes32 interfaceHash,
        address implementer
    ) external;

getInterfaceImplementer

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)

Arguments

Name Type Description
account address
interfaceHash bytes32
Source Code
function getInterfaceImplementer(address account, bytes32 interfaceHash)
        external
        view
        returns (address);

interfaceHash

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 interfaceName) external pure
returns(bytes32)

Arguments

Name Type Description
interfaceName string
Source Code
function interfaceHash(string calldata interfaceName) external pure returns (bytes32);

updateERC165Cache

Updates the cache with whether the contract implements an ERC165 interface or not.

function updateERC165Cache(address account, bytes4 interfaceId) external nonpayable

Arguments

Name Type Description
account address Address of the contract for which to update the cache.
interfaceId bytes4 ERC165 interface for which to update the cache.
Source Code
function updateERC165Cache(address account, bytes4 interfaceId) external;

implementsERC165Interface

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.

function implementsERC165Interface(address account, bytes4 interfaceId) external view
returns(bool)

Arguments

Name Type Description
account address Address of the contract to check.
interfaceId bytes4 ERC165 interface to check.

Returns

True if account implements interfaceId, false otherwise.

Source Code
function implementsERC165Interface(address account, bytes4 interfaceId)
        external
        view
        returns (bool);

implementsERC165InterfaceNoCache

Checks whether a contract implements an ERC165 interface or not without using nor updating the cache.

function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view
returns(bool)

Arguments

Name Type Description
account address Address of the contract to check.
interfaceId bytes4 ERC165 interface to check.

Returns

True if account implements interfaceId, false otherwise.

Source Code
function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId)
        external
        view
        returns (bool);

Contracts