LM_PC_RecurringPayments_v1.sol
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
recurringPaymentId
uint256
The id of the RecurringPayment to check.
validStartEpoch
Checks if the given startEpoch is valid.
modifier validStartEpoch(uint startEpoch);
Parameters
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
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
<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
id
uint256
The id of the RecurringPayment to return.
Returns
<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
<none>
uint256[]
List of RecurringPayment ids.
getPreviousPaymentId
Returns the id of previous RecurringPayment.
function getPreviousPaymentId(uint id) external view returns (uint);
Parameters
id
uint256
The id of the RecurringPayment to return.
Returns
<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
id
uint256
The id of the RecurringPayment to test.
Returns
<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
timestamp
uint256
A timestamp in a uint format.
Returns
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
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
xEpochsInTheFuture
uint256
How many epochs from the current epoch.
Returns
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
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
id
uint256
Id of the newly created recurring payment.
removeRecurringPayment
Removes a recurring Payment.
function removeRecurringPayment(uint prevId, uint id)
external
onlyOrchestratorAdmin;
Parameters
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
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
startId
uint256
The id of the first RecurringPayment to trigger.
endId
uint256
The id of the last RecurringPayment to trigger.
Last updated