// SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.8.0; import {IStrategy} from "./IStrategy.sol"; /** * @title DelegationManager * @author Layr Labs, Inc. * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service * @notice This is the contract for delegation in EigenLayer. The main functionalities of this contract are * - enabling anyone to register as an operator in EigenLayer * - allowing operators to specify parameters related to stakers who delegate to them * - enabling any staker to delegate its stake to the operator of its choice (a given staker can only delegate to a single operator at a time) * - enabling a staker to undelegate its assets from the operator it is delegated to (performed as part of the withdrawal process, initiated through the StrategyManager) */ interface IDelegationManager { struct OperatorDetails { address earningsReceiver; address delegationApprover; uint32 stakerOptOutWindowBlocks; } event OperatorMetadataURIUpdated( address indexed operator, string metadataURI ); function registerAsOperator( OperatorDetails calldata registeringOperatorDetails, string calldata metadataURI ) external; function getOperatorShares( address operator, IStrategy[] memory strategies ) external view returns (uint256[] memory); }