Closed
Description
Abstract
For example ERC721 contains:
/*
* bytes4(keccak256('balanceOf(address)')) == 0x70a08231
* bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e
* bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3
* bytes4(keccak256('getApproved(uint256)')) == 0x081812fc
* bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465
* bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5
* bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd
* bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e
* bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde
*
* => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^
* 0xa22cb465 ^ 0xe985e9c ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd
*/
bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;
But could contain:
bytes4 private constant _INTERFACE_ID_ERC721 = 0
^ balanceOf(address).selector
^ ownerOf(uint256).selector
^ approve(address,uint256).selector
^ getApproved(uint256).selector
^ setApprovalForAll(address,bool).selector
^ isApprovedForAll(address,address).selector
^ transferFrom(address,address,uint256).selector
^ safeTransferFrom(address,address,uint256).selector
^ safeTransferFrom(address,address,uint256,bytes).selector;
Motivation
Avoiding off-code computations.
Metadata
Metadata
Assignees
Labels
No labels