According to EIP4906-specification, the smart contracts that are implementing it must have a supportsInferface(bytes4) function that returns true when called with 0x49064906. But supportsInterface(bytes4) doesn't return true when its called with 0x49064906
The contract inherits from SablierFlowBase that inherits from ERC721 that inherits fromERC165
But, supportsInterface() in ERC721 is overridden to return true with type(IERC721).interfaceId && type(IERC721Metadata).interfaceId in addition to the default implementation
When integrating with external protocols like NFT marketplaces or an UI wallet, they check for supportsInterface() function with 0x49064906 interface id to make sure that our NFTs supports metadata and batch metadata update. But in our case, supportsInterface() function is not returning true while it MUST. Thus, the NFT markets or wallets will not update the FLOW state.
Unlike other NFTs, FLOW NFTs are different. They contain various attributes like balance, snapshotTime, ratePerSecond and snapshotDebtScaled of the stream. Not updating these attributes for NFTs can lead to both recipients and sender inconvenience.
I see this as medium severity since the whole idea of the protocol is to track the FLOW Stream data and there is a trust assumptions between involved parties, so a stale data is impacting a core functionality of the protocol
Manual Analysis
make the supportsInterface() function in the ERC721 contract like the reference implementation suggested by EIP4906 specification.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.