View Source Ethers.Contracts.ERC165 behaviour (Ethers v0.5.4)
ERC-165 Standard Interface Detection
More info: https://eips.ethereum.org/EIPS/eip-165
Modules as Interface IDs
Contract modules can opt to implement EIP-165 behaviour so that their name can be used
directly with the supports_interface/1
function in this module. See below example:
defmodule MyEIP165CompatibleContract do
use Ethers.Contract, abi: ...
@behaviour Ethers.Contracts.ERC165
@impl true
def erc165_interface_id, do: Ethers.Utils.hex_decode("[interface_id]")
end
Now module name can be used instead of interface_id and will have the same result.
iex> Ethers.Contracts.ERC165.supports_interface("[interface_id]") ==
Ethers.Contracts.ERC165.supports_interface(MyEIP165CompatibleContract)
true
Summary
Functions
Default address of the contract. Returns nil
if not specified.
Prepares supportsInterface(bytes4 interfaceId)
call parameters on the contract.
Callbacks
@callback erc165_interface_id() :: <<_::32>>
Functions
@spec __default_address__() :: nil
Default address of the contract. Returns nil
if not specified.
To specify a default address see Ethers.Contract
@spec supports_interface(<<_::32>> | atom()) :: Ethers.TxData.t()
Prepares supportsInterface(bytes4 interfaceId)
call parameters on the contract.
This function also accepts a module that implements the ERC165 behaviour as input. Example:
iex> Ethers.Contracts.ERC165.supports_interface(Ethers.Contracts.ERC721)
#Ethers.TxData<function supportsInterface(...)>
This function should only be called for result and never in a transaction on its own. (Use Ethers.call/2)
State mutability: view
Function Parameter Types
- interfaceId:
{:bytes, 4}
Return Types (when called with Ethers.call/2
)
- :bool