Comment on page
Flow NFTs
NFTs that are held by the sender and receiver of an active stream
You can think of Flow NFTs as on-chain labels of the sender and receiver of a certain stream. They enhance the visibility of streams on-chain.
Flow NFTs are non-transferrable ERC721 tokens that are minted when a stream is opened and burned when closed.
- 1.Provide a visual representation of streams for display - akin to how Uniswap v3 NFTs allow you to view your LP positions on NFT market place galleries.
- 2.Allow for easy viewing of sender and receiver pertaining to stream creation/deletion transactions via block explorer and through minting/burning events - for example.

When a stream is started between two accounts, the Superfluid Protocol mints both the sender and receiver an NFT. The sender gets an Outflow NFT and the receiver gets an Inflow NFT.
When a stream is cancelled, both the sender and receiver's Flow NFTs are burned.
Flow NFTs are non-transferrable.
Each Super Token has its own distinct Inflow and Outflow NFT contracts.
See the minting of Flow NFTs in action in this create-flow transaction.
Stream Sender:
0xbbf19110bf3c536b608877f1e02fdbd3cfac65a6
Stream Receiver:
0xc41876dab61de145093b6aa87417326b24ae4ecd
As you can see, through minting of the Flow NFTs, you can view on-chain who is sending and receiving the streams involved in a transaction.
The Flow NFT visuals will always show:
- 1.Monthly Flow Rate
- 2.Super Token being streamed
- 3.Sender (for Inflow NFTs) or Receiver (for Outflow NFTs)
- 4.Network, indicated by a small flag on the top right
- 5.Start day of stream, shown in small font on left edge
Example Inflow NFT for an account being streamed TDLx
Example Outflow NFT for an account streaming TDLx
Generate Flow NFT SVGs and metadata using our Superfluid NFT API
Super Tokens hold two public immutable variables containing the Inflow and Outflow NFT addresses
address outflowNFT = superToken.CONSTANT_OUTFLOW_NFT();
address inflowNFT = superToken.CONSTANT_INFLOW_NFT();
Flow NFTs are ERC721s. On top of the ERC721 interface, these read functions they provide allow you to work with the stream data pertaining to the Flow NFTs.
struct FlowNFTData {
address superToken;
address flowSender;
address flowReceiver;
uint32 flowStartDate;
}
// Get stream data from a Flow NFT token ID
function flowDataByTokenId(
uint256 tokenId
) external view returns (FlowNFTData memory flowData);
// Get Flow NFT token ID given some stream data
function getTokenId(
address superToken,
address flowSender,
address flowReceiver
) external view returns (uint256);
Last modified 6mo ago