A convenient way to describe what a contract could be doing (especially if it's unverified) is by summarizing which interfaces it complies with.
We can do this either by using ERC-165 and looking for hardcoded interface IDs, or by comparing against known hashes of selectors in interfaces (https://github.com/shazow/eip-sighashes could be helpful for this).
Some common interfaces/functionality we want to look for:
ERC20
ERC721 (plus extensions like Enumerable, Receiver, Metadata)
A convenient way to describe what a contract could be doing (especially if it's unverified) is by summarizing which interfaces it complies with.
We can do this either by using ERC-165 and looking for hardcoded interface IDs, or by comparing against known hashes of selectors in interfaces (https://github.com/shazow/eip-sighashes could be helpful for this).
Some common interfaces/functionality we want to look for: