ISablierFlow
Inherits: ISablierFlowBase
Creates and manages Flow streams with linear streaming functions.
Functions
coveredDebtOf
Returns the amount of debt covered by the stream balance, denoted in token's decimals.
Reverts if streamId
references a null stream.
function coveredDebtOf(uint256 streamId) external view returns (uint128 coveredDebt);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The stream ID for the query. |
depletionTimeOf
Returns the time at which the stream will deplete its balance and start to accumulate uncovered debt. If there already is uncovered debt, it returns zero.
Reverts if streamId
references a paused or a null stream.
function depletionTimeOf(uint256 streamId) external view returns (uint256 depletionTime);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The stream ID for the query. |
ongoingDebtOf
Returns the amount of debt accrued since the snapshot time until now, denoted in token's decimals.
Reverts if streamId
references a null stream.
function ongoingDebtOf(uint256 streamId) external view returns (uint256 ongoingDebt);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The stream ID for the query. |
refundableAmountOf
Returns the amount that the sender can be refunded from the stream, denoted in token's decimals.
Reverts if streamId
references a null stream.
function refundableAmountOf(uint256 streamId) external view returns (uint128 refundableAmount);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The stream ID for the query. |
statusOf
Returns the stream's status.
Reverts if streamId
references a null stream.
function statusOf(uint256 streamId) external view returns (Flow.Status status);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The stream ID for the query. |
totalDebtOf
Returns the total amount owed by the sender to the recipient, denoted in token's decimals.
Reverts if streamId
references a null stream.
function totalDebtOf(uint256 streamId) external view returns (uint256 totalDebt);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The stream ID for the query. |
uncoveredDebtOf
Returns the amount of debt not covered by the stream balance, denoted in token's decimals.
Reverts if streamId
references a null stream.
function uncoveredDebtOf(uint256 streamId) external view returns (uint256 uncoveredDebt);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The stream ID for the query. |
withdrawableAmountOf
Calculates the amount that the recipient can withdraw from the stream, denoted in token decimals. This is an alias for
coveredDebtOf
.
Reverts if streamId
references a null stream.
function withdrawableAmountOf(uint256 streamId) external view returns (uint128 withdrawableAmount);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The stream ID for the query. |
Returns
Name | Type | Description |
---|---|---|
withdrawableAmount | uint128 | The amount that the recipient can withdraw. |
adjustRatePerSecond
Changes the stream's rate per second.
Emits an AdjustFlowStream and {MetadataUpdate} event. Notes:
- Performs a debt snapshot. Requirements:
- Must not be delegate called.
streamId
must not reference a null or a paused stream.msg.sender
must be the stream's sender.newRatePerSecond
must not equal to the current rate per second.
function adjustRatePerSecond(uint256 streamId, UD21x18 newRatePerSecond) external;
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream to adjust. |
newRatePerSecond | UD21x18 | The new rate per second, denoted as a fixed-point number where 1e18 is 1 token per second. |
create
Creates a new Flow stream by setting the snapshot time to block.timestamp
and leaving the balance to zero. The stream
is wrapped in an ERC-721 NFT.
Emits a CreateFlowStream event. Requirements:
- Must not be delegate called.
sender
must not be the zero address.recipient
must not be the zero address.- The
token
's decimals must be less than or equal to 18.
function create(
address sender,
address recipient,
UD21x18 ratePerSecond,
IERC20 token,
bool transferable
)
external
returns (uint256 streamId);
Parameters
Name | Type | Description |
---|---|---|
sender | address | The address streaming the tokens, which is able to adjust and pause the stream. It doesn't have to be the same as msg.sender . |
recipient | address | The address receiving the tokens. |
ratePerSecond | UD21x18 | The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second. |
token | IERC20 | The contract address of the ERC-20 token to be streamed. |
transferable | bool | Boolean indicating if the stream NFT is transferable. |
Returns
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the newly created stream. |
createAndDeposit
Creates a new Flow stream by setting the snapshot time to block.timestamp
and the balance to amount
. The stream is
wrapped in an ERC-721 NFT.
Emits a {Transfer}, {CreateFlowStream}, and {DepositFlowStream} event. Notes:
- Refer to the notes in {deposit}. Requirements:
- Refer to the requirements in {create} and {deposit}.
function createAndDeposit(
address sender,
address recipient,
UD21x18 ratePerSecond,
IERC20 token,
bool transferable,
uint128 amount
)
external
returns (uint256 streamId);
Parameters
Name | Type | Description |
---|---|---|
sender | address | The address streaming the tokens. It doesn't have to be the same as msg.sender . |
recipient | address | The address receiving the tokens. |
ratePerSecond | UD21x18 | The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second. |
token | IERC20 | The contract address of the ERC-20 token to be streamed. |
transferable | bool | Boolean indicating if the stream NFT is transferable. |
amount | uint128 | The deposit amount, denoted in token's decimals. |
Returns
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the newly created stream. |
deposit
Makes a deposit in a stream.
Emits a {Transfer} and {DepositFlowStream} event. Requirements:
- Must not be delegate called.
streamId
must not reference a null or a voided stream.amount
must be greater than zero.
function deposit(uint256 streamId, uint128 amount) external;
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream to deposit to. |
amount | uint128 | The deposit amount, denoted in token's decimals. |
depositAndPause
Deposits tokens in a stream and pauses it.
Emits a {Transfer}, {DepositFlowStream} and {PauseFlowStream} event. Notes:
- Refer to the notes in {deposit} and {pause}. Requirements:
- Refer to the requirements in {deposit} and {pause}.
function depositAndPause(uint256 streamId, uint128 amount) external;
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream to deposit to, and then pause. |
amount | uint128 | The deposit amount, denoted in token's decimals. |
depositViaBroker
Deposits tokens in a stream.
Emits a {Transfer} and {DepositFlowStream} event. Notes:
- Refer to the notes in {deposit}. Requirements:
- Must not be delegate called.
streamId
must not reference a null stream.totalAmount
must be greater than zero. Otherwise it will revert inside {deposit}.broker.account
must not be 0 address.broker.fee
must not be greater thanMAX_FEE
. It can be zero.
function depositViaBroker(uint256 streamId, uint128 totalAmount, Broker calldata broker) external;
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream to deposit on. |
totalAmount | uint128 | The total amount, including the deposit and any broker fee, denoted in token's decimals. |
broker | Broker | Struct encapsulating (i) the address of the broker assisting in creating the stream, and (ii) the percentage fee paid to the broker from totalAmount , denoted as a fixed-point percentage. |
pause
Pauses the stream.
Emits a PauseFlowStream event. Notes:
- It does not set the snapshot time to the current block timestamp.
- It updates the snapshot debt by adding up ongoing debt.
- It sets the rate per second to zero. Requirements:
- Must not be delegate called.
streamId
must not reference a null or an already paused stream.msg.sender
must be the stream's sender.
function pause(uint256 streamId) external;
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream to pause. |
refund
Refunds the provided amount of tokens from the stream to the sender's address.
Emits a {Transfer} and {RefundFromFlowStream} event. Requirements:
- Must not be delegate called.
streamId
must not reference a null stream.msg.sender
must be the sender.amount
must be greater than zero and must not exceed the refundable amount.
function refund(uint256 streamId, uint128 amount) external;
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream to refund from. |
amount | uint128 | The amount to refund, denoted in token's decimals. |
refundAndPause
Refunds the provided amount of tokens from the stream to the sender's address.
Emits a {Transfer}, {RefundFromFlowStream} and {PauseFlowStream} event. Notes:
- Refer to the notes in {pause}. Requirements:
- Refer to the requirements in {refund} and {pause}.
function refundAndPause(uint256 streamId, uint128 amount) external;
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream to refund from and then pause. |
amount | uint128 | The amount to refund, denoted in token's decimals. |
restart
Restarts the stream with the provided rate per second.
Emits a RestartFlowStream event.
- This function updates stream's
snapshotTime
to the current block timestamp. Notes: - It sets the snapshot time to the current block timestamp. Requirements:
- Must not be delegate called.
streamId
must not reference a null, or a voided stream.msg.sender
must be the stream's sender.ratePerSecond
must be greater than zero.
function restart(uint256 streamId, UD21x18 ratePerSecond) external;
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream to restart. |
ratePerSecond | UD21x18 | The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second. |
restartAndDeposit
Restarts the stream with the provided rate per second, and makes a deposit.
Emits a RestartFlowStream, {Transfer}, and {DepositFlowStream} event. Notes:
- Refer to the notes in {restart} and {deposit}. Requirements:
amount
must be greater than zero.- Refer to the requirements in {restart}.
function restartAndDeposit(uint256 streamId, UD21x18 ratePerSecond, uint128 amount) external;
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream to restart. |
ratePerSecond | UD21x18 | The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second. |
amount | uint128 | The deposit amount, denoted in token's decimals. |
void
Voids a stream.
Emits a VoidFlowStream event. Notes:
- It sets snapshot time to the
block.timestamp
- Voiding an insolvent stream sets the snapshot debt to the stream's balance making the uncovered debt to become zero.
- Voiding a solvent stream updates the snapshot debt by adding up ongoing debt.
- It sets the rate per second to zero.
- A voided stream cannot be restarted. Requirements:
- Must not be delegate called.
streamId
must not reference a null or a voided stream.msg.sender
must either be the stream's sender, recipient or an approved third party.
function void(uint256 streamId) external;
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream to void. |
withdraw
Withdraws the provided amount
minus the protocol fee to the provided to
address.
Emits a {Transfer} and {WithdrawFromFlowStream} event. Notes:
- It sets the snapshot time to the
block.timestamp
ifamount
is greater than snapshot debt. - A protocol fee may be charged on the withdrawn amount if the protocol fee is enabled for the streaming token. Requirements:
- Must not be delegate called.
streamId
must not reference a null stream.to
must not be the zero address.to
must be the recipient ifmsg.sender
is not the stream's recipient.amount
must be greater than zero and must not exceed the withdrawable amount.
function withdraw(
uint256 streamId,
address to,
uint128 amount
)
external
returns (uint128 withdrawnAmount, uint128 protocolFeeAmount);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream to withdraw from. |
to | address | The address receiving the withdrawn tokens. |
amount | uint128 | The amount to withdraw, denoted in token's decimals. |
Returns
Name | Type | Description |
---|---|---|
withdrawnAmount | uint128 | The amount withdrawn to the recipient, denoted in token's decimals. This is input amount minus the protocol fee. |
protocolFeeAmount | uint128 | The protocol fee amount, denoted in the token's decimals. |
withdrawMax
Withdraws the entire withdrawable amount minus the protocol fee to the provided to
address.
Emits a {Transfer} and {WithdrawFromFlowStream} event. Notes:
- Refer to the notes in {withdraw}. Requirements:
- Refer to the requirements in {withdraw}.
function withdrawMax(
uint256 streamId,
address to
)
external
returns (uint128 withdrawnAmount, uint128 protocolFeeAmount);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream to withdraw from. |
to | address | The address receiving the withdrawn tokens. |
Returns
Name | Type | Description |
---|---|---|
withdrawnAmount | uint128 | The amount withdrawn to the recipient, denoted in token's decimals. |
protocolFeeAmount | uint128 | The protocol fee amount, denoted in the token's decimals. |
Events
AdjustFlowStream
Emitted when the rate per second is updated by the sender.
event AdjustFlowStream(uint256 indexed streamId, uint256 totalDebt, UD21x18 oldRatePerSecond, UD21x18 newRatePerSecond);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream. |
totalDebt | uint256 | The total debt at the time of the update, denoted in token's decimals. |
oldRatePerSecond | UD21x18 | The old rate per second, denoted as a fixed-point number where 1e18 is 1 token per second. |
newRatePerSecond | UD21x18 | The new rate per second, denoted as a fixed-point number where 1e18 is 1 token per second. |
CreateFlowStream
Emitted when a Flow stream is created.
event CreateFlowStream(
uint256 streamId,
address indexed sender,
address indexed recipient,
UD21x18 ratePerSecond,
IERC20 indexed token,
bool transferable
);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the newly created stream. |
sender | address | The address streaming the tokens, which is able to adjust and pause the stream. |
recipient | address | The address receiving the tokens, as well as the NFT owner. |
ratePerSecond | UD21x18 | The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second. |
token | IERC20 | The contract address of the ERC-20 token to be streamed. |
transferable | bool | Boolean indicating whether the stream NFT is transferable or not. |
DepositFlowStream
Emitted when a stream is funded.
event DepositFlowStream(uint256 indexed streamId, address indexed funder, uint128 amount);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream. |
funder | address | The address that made the deposit. |
amount | uint128 | The amount of tokens deposited into the stream, denoted in token's decimals. |
PauseFlowStream
Emitted when a stream is paused by the sender.
event PauseFlowStream(uint256 indexed streamId, address indexed sender, address indexed recipient, uint256 totalDebt);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream. |
sender | address | The address of the stream's sender. |
recipient | address | The address of the stream's recipient. |
totalDebt | uint256 | The amount of tokens owed by the sender to the recipient, denoted in token's decimals. |
RefundFromFlowStream
Emitted when a sender is refunded from a stream.
event RefundFromFlowStream(uint256 indexed streamId, address indexed sender, uint128 amount);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream. |
sender | address | The address of the stream's sender. |
amount | uint128 | The amount of tokens refunded to the sender, denoted in token's decimals. |
RestartFlowStream
Emitted when a stream is restarted by the sender.
event RestartFlowStream(uint256 indexed streamId, address indexed sender, UD21x18 ratePerSecond);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream. |
sender | address | The address of the stream's sender. |
ratePerSecond | UD21x18 | The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second. |
VoidFlowStream
Emitted when a stream is voided by the sender, recipient or an approved operator.
event VoidFlowStream(
uint256 indexed streamId,
address indexed sender,
address indexed recipient,
address caller,
uint256 newTotalDebt,
uint256 writtenOffDebt
);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream. |
sender | address | The address of the stream's sender. |
recipient | address | The address of the stream's recipient. |
caller | address | The address that performed the void, which can be the sender, recipient or an approved operator. |
newTotalDebt | uint256 | The new total debt, denoted in token's decimals. |
writtenOffDebt | uint256 | The amount of debt written off by the caller, denoted in token's decimals. |
WithdrawFromFlowStream
Emitted when tokens are withdrawn from a stream by a recipient or an approved operator.
event WithdrawFromFlowStream(
uint256 indexed streamId,
address indexed to,
IERC20 indexed token,
address caller,
uint128 withdrawAmount,
uint128 protocolFeeAmount
);
Parameters
Name | Type | Description |
---|---|---|
streamId | uint256 | The ID of the stream. |
to | address | The address that received the withdrawn tokens. |
token | IERC20 | The contract address of the ERC-20 token that was withdrawn. |
caller | address | The address that performed the withdrawal, which can be the recipient or an approved operator. |
withdrawAmount | uint128 | The amount withdrawn to the recipient after subtracting the protocol fee, denoted in token's decimals. |
protocolFeeAmount | uint128 | The amount of protocol fee deducted from the withdrawn amount, denoted in token's decimals. |