LM_PC_RecurringPayments_v1.sol

Git Source

Inherits: ILM_PC_RecurringPayments_v1, ERC20PaymentClientBase_v1

Author: Inverter Network

Facilitates the creation, management, and execution of scheduled recurring payments within the Inverter Network, allowing for systematic and timed financial commitments or subscriptions.

Uses epochs to define the period of recurring payments and supports operations such as adding, removing, and triggering payments based on time cycles. Integrates with {ERC20PaymentClientBase_v1} for handling actual payment transactions. Note that it will use the token type stored in the FundingManager for the payments.

State Variables

_SENTINEL

Marks the beginning of the list.

uint internal constant _SENTINEL = type(uint).max;

_nextId

Value for what the next id will be.

uint private _nextId;

epochLength

length of an epoch.

uint private epochLength;

_paymentRegistry

Registry mapping ids to RecurringPayment structs id => RecurringPayment.

mapping(uint => RecurringPayment) private _paymentRegistry;

_paymentList

List of RecurringPayment id's.

LinkedIdList.List _paymentList;

__gap

Storage gap for future upgrades.

uint[50] private __gap;

Functions

supportsInterface

See {IERC165-supportsInterface}.

function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(ERC20PaymentClientBase_v1)
    returns (bool);

validId

Checks if the given id is valid.

modifier validId(uint recurringPaymentId);

Parameters

Name
Type
Description

recurringPaymentId

uint256

The id of the RecurringPayment to check.

validStartEpoch

Checks if the given startEpoch is valid.

modifier validStartEpoch(uint startEpoch);

Parameters

Name
Type
Description

startEpoch

uint256

The startEpoch of the RecurringPayment to check.

startIdBeforeEndId

Checks if the startId is before the endId.

modifier startIdBeforeEndId(uint startId, uint endId);

Parameters

Name
Type
Description

startId

uint256

The startId of the RecurringPayment to check.

endId

uint256

The endId of the RecurringPayment to check.

init

function init(
    IOrchestrator_v1 orchestrator_,
    Metadata memory metadata,
    bytes memory configData
) external override(Module_v1) initializer;

getEpochLength

Returns the length of an epoch.

function getEpochLength() external view returns (uint);

Returns

Name
Type
Description

<none>

uint256

epochLength Length of an epoch in a uint timestamp.

getRecurringPaymentInformation

Returns the RecurringPayment instance with id id.

function getRecurringPaymentInformation(uint id)
    external
    view
    validId(id)
    returns (RecurringPayment memory);

Parameters

Name
Type
Description

id

uint256

The id of the RecurringPayment to return.

Returns

Name
Type
Description

<none>

RecurringPayment

RecurringPayment with id id.

listRecurringPaymentIds

Returns total list of RecurringPayment ids.

List is in ascending order.

function listRecurringPaymentIds() external view returns (uint[] memory);

Returns

Name
Type
Description

<none>

uint256[]

List of RecurringPayment ids.

getPreviousPaymentId

Returns the id of previous RecurringPayment.

function getPreviousPaymentId(uint id) external view returns (uint);

Parameters

Name
Type
Description

id

uint256

The id of the RecurringPayment to return.

Returns

Name
Type
Description

<none>

uint256

prevId The id of previous RecurringPayment.

isExistingRecurringPaymentId

Returns whether RecurringPayment with id id exists.

function isExistingRecurringPaymentId(uint id) public view returns (bool);

Parameters

Name
Type
Description

id

uint256

The id of the RecurringPayment to test.

Returns

Name
Type
Description

<none>

bool

True if RecurringPayment with id id exists, false otherwise.

getEpochFromTimestamp

Calculates the epoch from a given uint timestamp.

Calculation is: timestamp divided by epochLength.

function getEpochFromTimestamp(uint timestamp)
    external
    view
    returns (uint epoch);

Parameters

Name
Type
Description

timestamp

uint256

A timestamp in a uint format.

Returns

Name
Type
Description

epoch

uint256

Epoch in which timestamp belongs to.

getCurrentEpoch

Calculates the current epoch.

Calculation is: block.timestamp divided by epochLength.

function getCurrentEpoch() public view returns (uint epoch);

Returns

Name
Type
Description

epoch

uint256

Epoch in which current timestamp (block.timestamp) belongs to.

getFutureEpoch

Calculates a future epoch x epochs from now.

Calculation is: current epoch + X epochs in the future = futureEpoch.

function getFutureEpoch(uint xEpochsInTheFuture)
    external
    view
    returns (uint futureEpoch);

Parameters

Name
Type
Description

xEpochsInTheFuture

uint256

How many epochs from the current epoch.

Returns

Name
Type
Description

futureEpoch

uint256

Epoch in the future.

addRecurringPayment

Adds a recurring payment to the manager.

a new id is created for each Payment.

function addRecurringPayment(uint amount, uint startEpoch, address recipient)
    external
    onlyOrchestratorAdmin
    validAmount(amount)
    validStartEpoch(startEpoch)
    validRecipient(recipient)
    returns (uint id);

Parameters

Name
Type
Description

amount

uint256

Amount of tokens send to the recipient address.

startEpoch

uint256

Epoch in which the payment starts. Use getEpochFromTimestamp() or getCurrentEpoch() to get the appropriate epoch.

recipient

address

Recipient address that should receive tokens.

Returns

Name
Type
Description

id

uint256

Id of the newly created recurring payment.

removeRecurringPayment

Removes a recurring Payment.

function removeRecurringPayment(uint prevId, uint id)
    external
    onlyOrchestratorAdmin;

Parameters

Name
Type
Description

prevId

uint256

Id of the previous recurring payment in the payment list.

id

uint256

Id of the recurring payment that is to be removed.

trigger

Triggers the start of the due payments for all recurring payment orders.

function trigger() external;

triggerFor

See trigger() but enables you to determine which ids you want to trigger payment ordes for.

this is to being able to bypass the unlikely event of having a runOutOfGas error for the normal trigger function.

function triggerFor(uint startId, uint endId)
    external
    validId(startId)
    validId(endId)
    startIdBeforeEndId(startId, endId);

Parameters

Name
Type
Description

startId

uint256

: id of start position of the recurring payments that should be triggered.

endId

uint256

: id of end position of the recurring payments that should be triggered.

_triggerFor

Triggers the given RecurringPayment.

function _triggerFor(uint startId, uint endId) private;

Parameters

Name
Type
Description

startId

uint256

The id of the first RecurringPayment to trigger.

endId

uint256

The id of the last RecurringPayment to trigger.

Last updated