Skip to main content

ISablierV2LockupDynamic

Git Source

Inherits: ISablierV2Lockup

Creates and manages Lockup streams with a dynamic distribution function.

Functions

getSegments

Retrieves the segments used to compose the dynamic distribution function.

Reverts if streamId references a null stream.

function getSegments(uint256 streamId) external view returns (LockupDynamic.Segment[] memory segments);

Parameters

NameTypeDescription
streamIduint256The stream ID for the query.

getStream

Retrieves the full stream details.

Reverts if streamId references a null stream.

function getStream(uint256 streamId) external view returns (LockupDynamic.StreamLD memory stream);

Parameters

NameTypeDescription
streamIduint256The stream ID for the query.

Returns

NameTypeDescription
streamLockupDynamic.StreamLDSee the documentation in {DataTypes}.

getTimestamps

Retrieves the stream's start and end timestamps.

Reverts if streamId references a null stream.

function getTimestamps(uint256 streamId) external view returns (LockupDynamic.Timestamps memory timestamps);

Parameters

NameTypeDescription
streamIduint256The stream ID for the query.

Returns

NameTypeDescription
timestampsLockupDynamic.TimestampsSee the documentation in {DataTypes}.

MAX_SEGMENT_COUNT

The maximum number of segments allowed in a stream.

This is initialized at construction time and cannot be changed later.

function MAX_SEGMENT_COUNT() external view returns (uint256);

createWithDurations

Creates a stream by setting the start time to block.timestamp, and the end time to the sum of block.timestamp and all specified time durations. The segment timestamps are derived from these durations. The stream is funded by msg.sender and is wrapped in an ERC-721 NFT.

Emits a {Transfer} and {CreateLockupDynamicStream} event. Requirements:

  • All requirements in {createWithTimestamps} must be met for the calculated parameters.
function createWithDurations(LockupDynamic.CreateWithDurations calldata params) external returns (uint256 streamId);

Parameters

NameTypeDescription
paramsLockupDynamic.CreateWithDurationsStruct encapsulating the function parameters, which are documented in {DataTypes}.

Returns

NameTypeDescription
streamIduint256The ID of the newly created stream.

createWithTimestamps

Creates a stream with the provided segment timestamps, implying the end time from the last timestamp. The stream is funded by msg.sender and is wrapped in an ERC-721 NFT.

Emits a {Transfer} and {CreateLockupDynamicStream} event. Notes:

  • As long as the segment timestamps are arranged in ascending order, it is not an error for some of them to be in the past. Requirements:
  • Must not be delegate called.
  • params.totalAmount must be greater than zero.
  • If set, params.broker.fee must not be greater than MAX_BROKER_FEE.
  • params.startTime must be greater than zero and less than the first segment's timestamp.
  • params.segments must have at least one segment, but not more than MAX_SEGMENT_COUNT.
  • The segment timestamps must be arranged in ascending order.
  • The last segment timestamp (i.e. the stream's end time) must be in the future.
  • The sum of the segment amounts must equal the deposit amount.
  • params.recipient must not be the zero address.
  • msg.sender must have allowed this contract to spend at least params.totalAmount assets.
function createWithTimestamps(LockupDynamic.CreateWithTimestamps calldata params) external returns (uint256 streamId);

Parameters

NameTypeDescription
paramsLockupDynamic.CreateWithTimestampsStruct encapsulating the function parameters, which are documented in {DataTypes}.

Returns

NameTypeDescription
streamIduint256The ID of the newly created stream.

Events

CreateLockupDynamicStream

Emitted when a stream is created.

event CreateLockupDynamicStream(
uint256 streamId,
address funder,
address indexed sender,
address indexed recipient,
Lockup.CreateAmounts amounts,
IERC20 indexed asset,
bool cancelable,
bool transferable,
LockupDynamic.Segment[] segments,
LockupDynamic.Timestamps timestamps,
address broker
);

Parameters

NameTypeDescription
streamIduint256The ID of the newly created stream.
funderaddressThe address which has funded the stream.
senderaddressThe address distributing the assets, which will have the ability to cancel the stream.
recipientaddressThe address toward which to stream the assets.
amountsLockup.CreateAmountsStruct containing (i) the deposit amount, and (ii) the broker fee amount, both denoted in units of the asset's decimals.
assetIERC20The contract address of the ERC-20 asset to be distributed.
cancelableboolBoolean indicating whether the stream will be cancelable or not.
transferableboolBoolean indicating whether the stream NFT is transferable or not.
segmentsLockupDynamic.Segment[]The segments the protocol uses to compose the dynamic distribution function.
timestampsLockupDynamic.TimestampsStruct containing (i) the stream's start time and (ii) end time, both as Unix timestamps.
brokeraddressThe address of the broker who has helped create the stream, e.g. a front-end website.