The FlowNFTDescriptor
contract generates static and identical metadata for all Sablier stream NFTs, regardless of the underlying stream's parameters. This renders the NFTs ineffective at representing unique streams.
Expected Behavior: The tokenURI function should generate unique metadata for each NFT, reflecting the specific properties of the corresponding Sablier stream (e.g., recipient, amount, duration).
Actual Behavior: The tokenURI function returns the same hardcoded metadata for every NFT, including a fixed SVG image and description.
Steps to Reproduce:
Deploy the FlowNFTDescriptor contract.
Call the tokenURI function with any ERC721 contract address and any streamId.
Call the tokenURI function again with different ERC721 contract address and a different streamId.
Observe that both calls return the identical token URI.
This bug significantly diminishes the value and utility of the stream NFTs. Users cannot distinguish between different streams based on their NFT metadata.
Manual Review
To demonstrate the issue, the following PoC code can be run against Foundry. This will showcase the unexpected behavior:
Refactor the tokenURI
function to dynamically generate metadata based on the provided sablierFlow contract and streamId. The metadata should reflect the unique properties of each stream.
Implement dynamic or customizable SVG generation to visually differentiate between NFTs.
Consider decentralized metadata solutions for enhanced scalability and flexibility.
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.