Delegable Actions

Overview

Delegable Actions allow third-party contracts (plugins) to perform specific operations on behalf of users within the Curvance ecosystem. This delegation system offers a more flexible and powerful alternative to standard ERC20 approvals, enabling opportunities for automation, complex strategies, and improved user experiences.

Any Curvance contract that inherits from PluginDelegable can support delegate-triggered operations through functions that typically end with a for postfix (e.g., borrowFor, withdrawFor, leverageFor). This pattern ensures consistent delegate authorization checks across the protocol.

For a full list of delegable actions, please check out our plugin guide here: List of Delegable Actions

The delegation system provides several security advantages over traditional approaches:

  • Granular control: Users can grant and revoke specific action permissions to different addresses

  • Emergency revocation: Users can revoke all delegations at once by incrementing their approval index

  • Time-lock protection: Optional delegation lockdown with a cooldown period

Delegations exist across all Curvance contracts simultaneously, using the Central Registry to track and validate delegation permissions throughout the protocol.


User Interaction Functions

Delegation in PluginDelegable.sol

isDelegate()

Description: Determines whether a delegate address has permission to act on behalf of a specified user.

Contract: CentralRegistry

Function signature:

Type
Name
Description

address

user

The address to check whether delegate has delegation permissions for.

address

delegate

The address to check delegation permissions of user.

Return data:

Type
Description

bool

Returns true if delegate is authorized to act on behalf of user.


setDelegateApproval()

Description: Approves or restricts a delegate's authority to operate on the caller's behalf. This is the primary method for users to control their delegation permissions.

Contract: CentralRegistry

Function signature:

Type
Name
Description

address

delegate

The address that will be approved or restricted from delegated actions.

bool

isApproved

Whether delegate is being approved (true) or restricted (false).

Events:


getUserApprovalIndex()

Description: Retrieves a user's current approval index from the Central Registry. This index is incremented when a user wants to revoke all delegations.

Contract: CentralRegistry

Function signature:

Type
Name
Description

address

user

The user to check delegated approval index for.

Return data:

Type
Name
Description

address

user

The user to check delegated approval index for.


checkDelegationDisabled()

Description: Checks whether delegation is temporarily or permanently disabled for a specified user.

Contract: CentralRegistry

Function signature:

Type
Name
Description

address

user

The user to check delegation status for.

Return data:

Type
Description

bool

Returns true if user has delegation disabled or if their cooldown period has not expired.


Delegable Actions in ActionRegistry.sol

getUserApprovalIndex()

Description: Returns a user's approval index, which is used to authorize delegates across the entire protocol.

Contract: CentralRegistry

Function signature:

Type
Name
Description

address

user

The user to check delegated approval index for.

Return data:

Type
Description

uint256

Current approval index for the specified user.


incrementApprovalIndex()

Description: Increments a caller's approval index, immediately revoking all delegate permissions across all Curvance contracts.

Contract: CentralRegistry

Function signature:

Events:


checkDelegationDisabled()

Description: Determines whether a user has delegation disabled, either intentionally or due to a cooldown period.

Function signature:

Type
Name
Description

address

user

The user to check delegation status for.

Return data:

Type
Description

bool

Returns true if user has delegation disabled or if their cooldown period has not expired.


setDelegable()

Description: Sets a caller's status for whether to allow new delegations or not. When re-enabling delegation, the user's configured cooldown period applies.

Function signature:

Parameters:

Type
Name
Description

bool

delegationDisabled

true to disable delegation, false to enable delegation (after cooldown).

Events:

Last updated