Skip to content
Lattice

TimelockLib

Git Source

Title: TimelockLib

Author: Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/governance/TimelockController.sol)

Scheduling primitives for time-locked operations. Two storage shapes:

  • SingleSchedule: at most one pending operation of this kind
  • MultiSchedule: many concurrent pending operations keyed by bytes32

Stateless utility library — no own ERC-7201 slot. The consumer holds SingleSchedule / MultiSchedule instances inside its own storage.

Functions

schedule

function schedule(SingleSchedule storage s, uint48 delay) internal returns (uint48 readyAt);

Parameters

NameTypeDescription
sSingleSchedule
delayuint48

Returns

NameTypeDescription
readyAtuint48

reschedule

function reschedule(SingleSchedule storage s, uint48 newReadyAt) internal;

Parameters

NameTypeDescription
sSingleSchedule
newReadyAtuint48

consume

function consume(SingleSchedule storage s) internal;

Parameters

NameTypeDescription
sSingleSchedule

cancel

function cancel(SingleSchedule storage s) internal;

Parameters

NameTypeDescription
sSingleSchedule

readyAt

function readyAt(SingleSchedule storage s) internal view returns (uint48);

Parameters

NameTypeDescription
sSingleSchedule

Returns

NameTypeDescription
<none>uint48

isPending

function isPending(SingleSchedule storage s) internal view returns (bool);

Parameters

NameTypeDescription
sSingleSchedule

Returns

NameTypeDescription
<none>bool

isReady

function isReady(SingleSchedule storage s) internal view returns (bool);

Parameters

NameTypeDescription
sSingleSchedule

Returns

NameTypeDescription
<none>bool

schedule

function schedule(MultiSchedule storage s, bytes32 operationId, uint48 delay) internal returns (uint48 readyAt_);

Parameters

NameTypeDescription
sMultiSchedule
operationIdbytes32
delayuint48

Returns

NameTypeDescription
readyAt_uint48

reschedule

function reschedule(MultiSchedule storage s, bytes32 operationId, uint48 newReadyAt) internal;

Parameters

NameTypeDescription
sMultiSchedule
operationIdbytes32
newReadyAtuint48

consume

function consume(MultiSchedule storage s, bytes32 operationId) internal;

Parameters

NameTypeDescription
sMultiSchedule
operationIdbytes32

cancel

function cancel(MultiSchedule storage s, bytes32 operationId) internal;

Parameters

NameTypeDescription
sMultiSchedule
operationIdbytes32

readyAt

function readyAt(MultiSchedule storage s, bytes32 operationId) internal view returns (uint48);

Parameters

NameTypeDescription
sMultiSchedule
operationIdbytes32

Returns

NameTypeDescription
<none>uint48

isPending

function isPending(MultiSchedule storage s, bytes32 operationId) internal view returns (bool);

Parameters

NameTypeDescription
sMultiSchedule
operationIdbytes32

Returns

NameTypeDescription
<none>bool

isReady

function isReady(MultiSchedule storage s, bytes32 operationId) internal view returns (bool);

Parameters

NameTypeDescription
sMultiSchedule
operationIdbytes32

Returns

NameTypeDescription
<none>bool

Errors

TimelockNotPending

The schedule is empty (no operation pending).

error TimelockNotPending();

TimelockNotReady

now < readyAt; the operation cannot be consumed yet.

error TimelockNotReady(uint48 readyAt, uint48 nowTs);

Parameters

NameTypeDescription
readyAtuint48
nowTsuint48

TimelockAlreadyPending

The schedule already has a pending operation that hasn't been consumed/canceled.

error TimelockAlreadyPending(uint48 readyAt);

Parameters

NameTypeDescription
readyAtuint48

Structs

SingleSchedule

struct SingleSchedule {
        uint48 _readyAt;
    }

Properties

NameTypeDescription
_readyAtuint48

MultiSchedule

struct MultiSchedule {
        mapping(bytes32 operationId => uint48 readyAt) _readyAt;
    }

Properties

NameTypeDescription
_readyAtmapping(bytes32 operationId => uint48 readyAt)