All pages
Powered by GitBook
1 of 1

Loading...

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:

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

Return data:

Type
Description

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

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

Return data:

Type
Name
Description

checkDelegationDisabled()

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

Contract: CentralRegistry

Function signature:

Type
Name
Description

Return data:

Type
Description

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

Return data:

Type
Description

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

Return data:

Type
Description

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

Events:

address

user

The address to check whether delegate has delegation permissions for.

address

delegate

The address to check delegation permissions of user.

bool

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

address

delegate

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

bool

isApproved

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

address

user

The user to check delegated approval index for.

address

user

The user to check delegated approval index for.

address

user

The user to check delegation status for.

bool

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

address

user

The user to check delegated approval index for.

uint256

Current approval index for the specified user.

address

user

The user to check delegation status for.

bool

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

bool

delegationDisabled

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

List of Delegable Actions
function isDelegate(address user, address delegate) public view returns (bool)
function setDelegateApproval(address delegate, bool isApproved) external
event DelegateApproval(
    address indexed owner,
    address indexed delegate,
    uint256 approvalIndex,
    bool isApproved
);
function getUserApprovalIndex(address user) public view returns (uint256)
function checkDelegationDisabled(address user) public view returns (bool)
function getUserApprovalIndex(address user) external view returns (uint256)
function incrementApprovalIndex() external
event ApprovalIndexIncremented(address indexed user, uint256 newIndex);
function checkDelegationDisabled(address user) external view returns (bool)
function setDelegable(bool delegationDisabled) external
event DelegableStatusChanged(
    address indexed user,
    bool delegable,
    uint256 delegationEnabledTimestamp
);