Skip to main content

Flow

Git Source

Structs

Stream

Struct representing Flow streams.

The fields are arranged like this to save gas via tight variable packing.

struct Stream {
uint128 balance;
UD21x18 ratePerSecond;
address sender;
uint40 snapshotTime;
bool isStream;
bool isTransferable;
bool isVoided;
IERC20 token;
uint8 tokenDecimals;
uint256 snapshotDebtScaled;
}

Properties

NameTypeDescription
balanceuint128The amount of tokens that are currently available in the stream, denoted in token's decimals. This is the sum of deposited amounts minus the sum of withdrawn amounts.
ratePerSecondUD21x18The payment rate per second, denoted as a fixed-point number where 1e18 is 1 token per second. For example, to stream 1000 tokens per week, this parameter would have the value (10001018)/(7daysinseconds)(1000 * 10^18) / (7 days in seconds).
senderaddressThe address streaming the tokens, with the ability to pause the stream.
snapshotTimeuint40The Unix timestamp used for the ongoing debt calculation.
isStreamboolBoolean indicating if the struct entity exists.
isTransferableboolBoolean indicating if the stream NFT is transferable.
isVoidedboolBoolean indicating if the stream is voided. Voiding any stream is non-reversible and it cannot be restarted. Voiding an insolvent stream sets its uncovered debt to zero.
tokenIERC20The contract address of the ERC-20 token to stream.
tokenDecimalsuint8The decimals of the ERC-20 token to stream.
snapshotDebtScaleduint256The amount of tokens that the sender owed to the recipient at snapshot time, denoted as a 18-decimals fixed-point number. This, along with the ongoing debt, can be used to calculate the total debt at any given point in time.

Enums

Status

Enum representing the different statuses of a stream.

Explanations for the two types of streams:

  1. Streaming: when the total debt is increasing.
  2. Paused: when the total debt is not increasing.

Notes:

  • STREAMING_SOLVENT Streaming stream when there is no uncovered debt.

  • STREAMING_INSOLVENT Streaming stream when there is uncovered debt.

  • PAUSED_SOLVENT Paused stream when there is no uncovered debt.

  • PAUSED_INSOLVENT Paused stream when there is uncovered debt.

  • VOIDED Paused stream with no uncovered debt and it cannot be restarted.

enum Status {
STREAMING_SOLVENT,
STREAMING_INSOLVENT,
PAUSED_SOLVENT,
PAUSED_INSOLVENT,
VOIDED
}