EigenLayer Strategy

This section explains how the curators of EigenLayer vaults can choose and adjust their underlying restaking strategy (i.e the portfolio of AVSs and Operator Sets the vault is exposed to).

Only the holders of the role DELEGATION_MANAGER_ROLE are allowed to delegate, undelegate and redelegate the vault's assets to any Eigen Operators.

Prerequisites

Before continuing, make sure you understood the concept of Operator Sets and Unique Stake on Eigen Layer.

Overview

  • Currently on Eigen Layer, the restaking strategy is mastered by the operators. This is the address managing the operator who can allocate an operator delegated stake to different operator sets. This is done by calling the function modifyAllocations on the Allocation Manager contract.

  • The Eigen Byz vaults curators can only choose (or change) the operator their vault's stake will be delegated to.

  • To learn more about node operator onboarding steps on Eigen Layer and allocation of their unique stake among operator sets, refer to this section.

  • The relevant curator roles mentioned in this section is delegationSetRoleHolder (cf. here)

Eigen Byz Vault's stake delegation

Operator Delegation Management

Delegation

The DELEGATION_MANAGER_ROLE holder can delegate byz vault's assets to an eigen layer operators by calling the function (from either an EigenERC20ByzVault or an EigenNativeByzVault):

function delegateTo(
  address operator,
  SignatureWithExpiry approverSignatureAndExpiry,
  bytes32 approverSalt
) external;

Note that:

  1. You can only delegate to one operator at a time

  2. Some operators are not permissionless and must approve stakers' delegation. Therefore the delegator / curator must provide an approver signature signed and given by the operator's approver address. Learn how to approve stakers' delegation.

  3. Do not provide any signature or salt if the operator doesn't need any.

Undelegation

The DELEGATION_MANAGER_ROLE holder can undelegate all the delegated vault's assets from the eigen operator by calling the function (from either an EigenERC20ByzVault or an EigenNativeByzVault):

function undelegate() external returns (bytes32);
  • This function queues a withdrawal of all the vault's delegated stake on Eigen Layer to remove the assets from the current delegated operator. As all Eigen withdrawals, the queued assets are still subject to slashing until the withdrawal is completable (after MIN_WITHDRAWAL_DELAY_BLOCKS blocks which is approximatively 14 days).

  • The id of the withdrawal request is returned by the function.

  • To fully undelegate, a call to the function completeUndelegation is required after the withdrawal delay period elapsed.

Redelegation to a new operator

The DELEGATION_MANAGER_ROLE holder can also redelegate the vault's assets to a new operator (for example if the current operator changes the restaking strategy that does't meet anymore the curator's need). Just call the below function (from either an EigenERC20ByzVault or an EigenNativeByzVault):

function redelegate(
  address newOperator,
  SignatureWithExpiry newOperatorApproverSig,
  bytes32 approverSalt
) external returns (bytes32);
  • A call to this function acts as a call to undelegate and then delegateTo.

  • An operator's approver signature and salt might be required if new delegations to the operator are permissioned (more details here)

  • For the stake to be fully delegated to the new operator, a call to completeUndelegation will be required at the end of the withdrawal period.

Complete Undelegation

As all undelegations act as withdrawals on Eigen Layer, it must be completed after the withdrawal period (14 days). Anyone can call this function to complete an undelegation process:

function completeUndelegation() external;

Effect:

  • If called after a call to undelegate, the byzantine vault simply get back its assets and do not do nothing it (no active restaking, so stake not slashable, no rewards generation)

  • If called after a call to redelegate, the assets are pulled from the previous operator and deposited / delegated to the new operator, specified at redelegation. The stake is still slashable and the vault will continue earning restaking rewards.

Useful Information For Strategy Management

It is possible to monitor or read data about the Eigen restaking strategy by interacting with the following functions:

Purposes
Contract to interact with
Functions to call

Get the operator address the vault's stake is currently delegated to

EigenERC20ByzVault or EigenNativeByzVault

delegatedTo()

Returns the current/pending stake allocation an operator has from a strategy (token) to an operator set

AllocationManager

getAllocation()

Given a strategy (a token), returns a list of operator sets and corresponding stake allocations an operator is exposed to. Note that this returns a list of ALL operator sets the operator has allocations in. This means some of the returned allocations may be zero.

AllocationManager

getStrategyAllocations()

Last updated