I am working on a crawler that indexes ERC721 contracts on the blockchain. The method that I found to find the ERC721 contracts is something like this:

  1. For every transaction on the blockchain:
    1. For every contract in the transaction:
      1. Try to call supportsInterface method of the contract with Erc721 interface ID (0x80ac58cd).

My problem is there are some contracts that are not responding "true" to the "Are you ERC721?" question but they are marked as ERC721 on the snowtrace.io. Also when I check it I find that they are ERC721. Here is one example:


My questions are these:

  1. Is snowtrace.io using another method to determine if a contract is ERC721?
  2. Why the given contract is not responding to supportsInterface('0x80ac58cd') method? Because of poor implementation? Because of proxy contract?
  3. Are there any other methods or suggestions to find if a contract is ERC721 or not.

Thanks for your response.

1 Answer 1


If it does not respond to the ERC-721 interface ID then it is not ERC-721.

Some people are using heuristics (easiest is the setApprovalForAll event) and then they are labeling the things it finds as ERC-721. If you do this, please label them as ("almost ERC-721" or "ERC-721ish" or something) with a full explanation to avoid further confusion.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.