Timelocks

Overview

Timelocks are a mechanism to delay an action that may have significant effects. This allows any stakeholders that foresee the transaction impacting them negatively the appropriate time to react accordingly.

Affected Actions

The following actions require a timelocked execution:

  • PoolManager.upgrade()

  • LoanManager.upgrade()

  • WithdrawalManager.upgrade()

Scheduling

To perform a timelocked action Pool Delegates need to perform the following actions:

  1. Call scheduleCall() on the MapleGlobals contract.

  2. Wait for the predetermined time to pass.

  3. Call the target contract with the same parameters.

Example:

Pool Delegate wants to upgrade the poolManager to v2.

1. Call `globals.scheduleCall()`, passing the PoolManager address and the "upgrade" calldata properly encoded.
2. Wait for 2 weeks.
3. Call `upgrade` directly on the PoolManager.

The PoolManager contract will perform a check against Globals to ensure the call has been properly upgraded.

Configuration

Timelocks parameters are set by the Governor and can be changed at any time, having a retroactive effect.

Example:

1. Current timelock is 2 weeks
2. Actor A schedules a call to a contract.
3. After 1 week, the Governor changes the time to be 1 week.
3. A can immediately call execute the contract, since it's been 1 week since the call was scheduled.

Last updated