add 165 to 721 (#972)
* make _tokenId indexed in Transfer and Approval events via: https://github.com/ethereum/EIPs/pull/1124/files * fix: make name() and symbol() external instead of public * feat: implement ERC721's ERC165 * feat: erc165 tests * fix: don't use chai-as-promised in direct await * fix: reorganize to /introspection * feat: abstract all erc165 tests to a behavior * feat: disallow registering 0xffffffff
This commit is contained in:
committed by
Francisco Giordano
parent
5326e7c36e
commit
259b9da3e6
53
contracts/introspection/SupportsInterfaceWithLookup.sol
Normal file
53
contracts/introspection/SupportsInterfaceWithLookup.sol
Normal file
@ -0,0 +1,53 @@
|
||||
pragma solidity ^0.4.23;
|
||||
|
||||
import "./ERC165.sol";
|
||||
|
||||
|
||||
/**
|
||||
* @title SupportsInterfaceWithLookup
|
||||
* @author Matt Condon (@shrugs)
|
||||
* @dev Implements ERC165 using a lookup table.
|
||||
*/
|
||||
contract SupportsInterfaceWithLookup is ERC165 {
|
||||
bytes4 public constant InterfaceId_ERC165 = 0x01ffc9a7;
|
||||
/**
|
||||
* 0x01ffc9a7 ===
|
||||
* bytes4(keccak256('supportsInterface(bytes4)'))
|
||||
*/
|
||||
|
||||
/**
|
||||
* @dev a mapping of interface id to whether or not it's supported
|
||||
*/
|
||||
mapping(bytes4 => bool) internal supportedInterfaces;
|
||||
|
||||
/**
|
||||
* @dev A contract implementing SupportsInterfaceWithLookup
|
||||
* @dev implement ERC165 itself
|
||||
*/
|
||||
constructor()
|
||||
public
|
||||
{
|
||||
_registerInterface(InterfaceId_ERC165);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev implement supportsInterface(bytes4) using a lookup table
|
||||
*/
|
||||
function supportsInterface(bytes4 _interfaceId)
|
||||
external
|
||||
view
|
||||
returns (bool)
|
||||
{
|
||||
return supportedInterfaces[_interfaceId];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev private method for registering an interface
|
||||
*/
|
||||
function _registerInterface(bytes4 _interfaceId)
|
||||
internal
|
||||
{
|
||||
require(_interfaceId != 0xffffffff);
|
||||
supportedInterfaces[_interfaceId] = true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user