EigenLayer StrategyManager 介绍

  • Layr-Labs
  • 发布于 2025-07-08 13:51
  • 阅读 38

本文档介绍了 EigenLayer 协议中的 StrategyManager 合约及其相关合约,包括 StrategyFactory、StrategyBase 以及一些具体策略的实现。StrategyManager 负责处理用户存款和取款的份额计算,并与 DelegationManager 协同完成提款流程。此外,还介绍了策略的部署、管理以及系统配置。

文件 备注
StrategyManager.sol 连接到核心的单例份额管理器
StrategyManagerStorage.sol 状态变量
IStrategyManager.sol 接口

StrategyFactory:

文件 备注
StrategyFactory.sol 允许为 ERC20 代币部署 StrategyBase
StrategyBase.sol 作为信标代理通过 StrategyFactory 部署

单个策略:

文件 备注
StrategyBaseTVLLimits.sol StrategyFactory 之前的版本,为某些 LST 部署。每个实例使用透明代理模式
EigenStrategy.sol 部署的一次性策略,用于支持 EIGEN/bEIGEN

概述

StrategyManager 的主要功能是处理各个质押者在将其支持的代币存入和提取到其相应的策略时的 存款份额 会计。请注意,StrategyManager 仅处理 存款份额。当在本文档中使用“份额”一词时,它特指 存款份额。有关其他份额类型的说明,请参见 份额会计 - 术语

StrategyManager 负责 (i) 允许质押者将代币存入相应的策略,(ii) 允许 DelegationManager 在质押者排队进行提款时移除存款份额,以及 (iii) 允许 DelegationManager 通过将存款份额添加回质押者或通过相应的策略将存款份额作为代币提取来完成提款。

任何兼容 ERC20 的代币都可以通过从 StrategyFactory 部署 StrategyBase 实例来支持。在底层,StrategyFactory 使用信标代理模式,并且仅允许每个代币部署一次策略。已部署的策略会自动列入 StrategyManager 中存款的白名单。有关详细信息,请参见下面的 策略

注意:对于 EIGEN/bEIGEN 代币,使用 EigenStrategy 合约而不是 StrategyBase。此外,EIGEN/bEIGEN 代币在 StrategyFactory 中被列入黑名单,以防止为这些代币部署重复的策略。

注意:对于某些 LST 代币,使用 StrategyBaseTVLLimits 合约而不是 StrategyBase。这些策略是在 StrategyFactory 允许任意 ERC20 策略之前部署的。与通过 StrategyFactory 部署的策略不同,这些 StrategyBaseTVLLimits 合约使用透明代理模式。对于所有意图和目的,这些实例的行为与从 StrategyFactory 部署的 StrategyBase 实例相同。这些实例的“TVL 限制”功能从未被使用。任何使用这些实例之一的代币都会在 StrategyFactory 中列入黑名单,以防止为这些代币部署重复的策略。

StrategyManager 的职责可以分为以下概念:

参数化

  • MAX_TOTAL_SHARES = 1e38 - 1
    • 单个策略可以处理的最大总份额。此最大值可防止链下服务中的溢出。超出此值的增加策略总份额的存款将恢复。
  • MAX_STAKER_STRATEGY_LIST_LENGTH = 32
    • 质押者可以存入的唯一 StrategyManager 策略的最大数量。导致超出此数量的任何存款都将恢复。
  • DEFAULT_BURN_ADDRESS = 0x00000000000000000000000000000000000E16E4
    • 当削减的份额被燃烧时,它们会被转换为代币并转移到此地址,这些代币将无法恢复。

存入策略

以下方法由质押者调用,因为他们 (i) 将 ERC20 代币存入策略以接收存款份额:

提款通过 DelegationManager 执行(请参阅 DelegationManager.md)。

depositIntoStrategy

/**
 * @notice 将 `amount` 的 `token` 存入指定的 `strategy`,并将份额记入调用者的帐户
 * @param strategy 处理 `token` 的策略
 * @param token 要从中转移 `amount` 的代币
 * @param amount 要存入的代币数量
 * @return depositShares 记入调用者的存款份额数量
 * @dev 调用者必须事先批准此合约代表他们转移至少 `amount` 的 `token`。
 *
 * 警告:在存入不严格遵守 ERC20 标准的代币时,请格外小心。
 * 与 ERC20 规范有显著差异的代币可能会导致该策略中的代币余额出现意外行为,
 * 例如允许跨合约重入的 ERC-777 代币。
 */
function depositIntoStrategy(
    IStrategy strategy,
    IERC20 token,
    uint256 amount
)
    external
    onlyWhenNotPaused(PAUSED_DEPOSITS)
    nonReentrant
    returns (uint256 depositShares)

允许质押者将一定 amounttoken 存入指定的 strategy,以换取该策略中的存款份额。底层的 strategy 必须列入存款白名单,这意味着它已通过 StrategyFactory 部署,或者是一个现有的 StrategyBaseTVLLimits/EigenStrategy 实例。token 参数应与策略支持的代币相对应。

收到的份额数量由 strategy 使用内部汇率计算,该汇率取决于先前存入的代币数量。

处理存款后,StrategyManager 将存款信息转发到 DelegationManager,后者会更新质押者的存款比例因子,并将份额委托给质押者的 operator(如果适用)。有关详细信息,请参见 DelegationManager.increaseDelegatedShares

影响

要求

  • 暂停状态 不得 设置:PAUSED_DEPOSITS
  • 调用者必须允许 StrategyManager 将至少 amounttoken 转移到策略
  • 所讨论的 strategy 必须列入存款白名单。
  • 有关更多信息,请参见 StrategyBaseTVLLimits.deposit

depositIntoStrategyWithSignature

/**
 * @notice 将 `amount` 的 `token` 存入指定的 `strategy`,并将份额记入 `staker` 的帐户
 * 注意:代币是从 `msg.sender` 转移的,而不是从 `staker` 转移的。此方法允许调用者使用
 * 签名将其代币存入另一个质押者的余额。
 * @param strategy 处理 `token` 的策略
 * @param token 要从中转移 `amount` 的代币
 * @param amount 要从调用者转移到策略的代币数量
 * @param staker 存入的资产将记入的质押者
 * @param expiry 签名过期的截止时间戳
 * @param signature 来自 `staker` 的有效 ECDSA 或 EIP-1271 签名
 * @return depositShares 分配给 `staker` 的存款份额数量
 * @dev 调用者必须事先批准此合约代表他们转移至少 `amount` 的 `token`。
 *
 * 警告:在存入不严格遵守 ERC20 标准的代币时,请格外小心。
 * 与 ERC20 规范有显著差异的代币可能会导致该策略中的代币余额出现意外行为,
 * 例如允许跨合约重入的 ERC-777 代币。
 */
function depositIntoStrategyWithSignature(
    IStrategy strategy,
    IERC20 token,
    uint256 amount,
    address staker,
    uint256 expiry,
    bytes memory signature
)
    external
    onlyWhenNotPaused(PAUSED_DEPOSITS)
    nonReentrant
    returns (uint256 depositShares)

此方法的工作方式类似于 depositIntoStrategy(),即将代币 从调用者 转移到 strategy 合约。与 depositIntoStrategy 不同,生成的存款份额将记入传入的 staker 地址,该地址必须签署此意图。

影响:请参见上面的 depositIntoStrategy。此外:

  • staker 的 nonce 会递增

要求:请参见上面的 depositIntoStrategy。此外:

  • 调用者必须提供针对正确字段的有效且未过期的签名

提款处理

这些方法只能由 DelegationManager 调用,并且在处理取消委托和提款时使用:

有关如何使用这些方法的更多信息,请参见 DelegationManager.md

removeDepositShares

/// @notice DelegationManager 使用此方法,在进入提款队列时,从特定策略中移除 Staker 的份额
/// @dev 在与 EigenPodManager 通信时,strategy 必须是 beaconChainETH
function removeDepositShares(
    address staker,
    IStrategy strategy,
    uint256 depositSharesToRemove
)
    external
    onlyDelegationManager

当质押者将提款排队(或取消委托,这也会将提款排队)时,DelegationManager 会调用此方法。在提款进入队列后,质押者的存款份额会被移除,并且在提款完成后,质押者可以选择重新获得份额,或者转换并将其作为代币接收(分别为 addShareswithdrawSharesAsTokens)。

质押者的 strategy 的存款份额余额会减少移除的 depositSharesToRemove。如果这导致质押者的份额余额为零,则该 strategy 会从质押者的策略列表中移除。

请注意,在提款队列中移除的存款份额数量可能不等于提款完成时记入的份额数量。如果发生削减,质押者可能会收到更少的份额。有关更多信息,请参见 DelegationManager.md

影响

  • 将给定 strategy 的质押者的存款份额余额减少给定的 depositSharesToRemove
    • 如果这导致余额为零,则该 strategy 会从质押者的策略列表中移除

要求

  • 调用者必须是 DelegationManager
  • depositSharesToRemove 参数不得为零
  • 对于给定的 strategystaker 必须至少有 depositSharesToRemove 的余额

addShares

/// @notice DelegationManager 使用此方法,将一些已通过提款队列的份额授予 Staker
/// @dev 在与 EigenPodManager 通信时,strategy 必须是 beaconChainETH
/// @return existingDepositShares 质押者在添加任何份额之前拥有的份额
/// @return addedShares 添加到质押者余额的新份额
function addShares(
    address staker,
    IStrategy strategy,
    uint256 shares
)
    external
    onlyDelegationManager
    returns (uint256, uint256)

当排队的提款完成并且提款人指定他们希望将提款“作为份额”接收(而不是作为底层代币)时,DelegationManager 会调用此方法。

此方法将输入的存款份额记入质押者的帐户。在大多数情况下,输入的 shares 等于最初排队提款时移除的相同份额。但是,如果质押者的 operator 被削减,他们可能会收到更少的份额。有关更多信息,请参见 DelegationManager.md

注意,如果质押者在 MAX_STAKER_STRATEGY_LIST_LENGTH 个唯一策略中存有存款(并且输入的 strategy 不在其中),则此方法将恢复。质押者仍然可以选择“作为代币”完成提款(请参见 DelegationManager.completeQueuedWithdrawal)。

影响

  • 将给定 strategystaker's 存款份额余额增加 shares
    • 如果先前的余额为零,则该 strategy 会添加到 staker's 策略列表中
  • 发出 Deposit 事件

要求

  • 调用者必须是 DelegationManager
  • staker 参数不得为零
  • shares 参数不得为零
  • stakerstakerStrategyList 的长度不得超过 MAX_STAKER_STRATEGY_LIST_LENGTH

withdrawSharesAsTokens

/// @notice DelegationManager 使用此方法将存款份额转换为代币并将其发送给质押者
/// @dev 在与 EigenPodManager 通信时,strategy 必须是 beaconChainETH
/// @dev 在与 EigenPodManager 通信时,不会验证代币
function withdrawSharesAsTokens(
    address staker,
    IStrategy strategy,
    IERC20 token,
    uint256 shares
)
    external
    onlyDelegationManager

当排队的提款完成并且提款人指定他们希望将提款作为份额的底层代币接收时,DelegationManager 会调用此方法。

此方法指示 strategy 将输入的存款份额转换为代币并将其发送给 staker。在大多数情况下,输入的 shares 等于最初排队提款时移除的相同份额。但是,如果质押者的 operator 被削减,他们可能会收到更少的份额。有关更多信息,请参见 DelegationManager.md

影响

要求


增加/清除被削减的份额

被削减的份额被标记为可燃烧或可重新分配。任何人都可以调用 clearBurnOrRedistributableShares 以将代币发送到 slash 的 SlashEscrow 合约。要清除的份额存储在 _burnOrRedistributableShares 中,这是一个嵌套的 EnumerableMap。operatorSet 和 slashId 用于索引到策略到份额的可枚举映射中。以下方法处理清除可燃烧或可重新分配的份额:

increaseBurnOrRedistributableShares

/**
 * @notice 增加给定策略的可燃烧/可重新分配份额的数量。当 operator 在 EigenLayer 中被削减时,DelegationManager 会调用此方法。
 * @param operatorSet 要燃烧份额的 operator set。
 * @param slashId 要燃烧份额的 slash id。
 * @param strategy 要燃烧份额的策略。
 * @param addedSharesToBurn 要燃烧的增加份额的数量。
 * @dev 此函数仅在 operator 被削减时由 DelegationManager 调用。
 */
function increaseBurnOrRedistributableShares(
    OperatorSet calldata operatorSet,
    uint256 slashId,
    IStrategy strategy,
    uint256 addedSharesToBurn
) external onlyDelegationManager;

当 operator 被削减时,DelegationManager 会调用此方法,计算可削减的份额数量并将它们标记为可燃烧或可重新分配。

然后,任何人都可以将份额转换为代币,并通过 burnShares 触发燃烧。添加此异步方法是为了缓解削减时潜在的 DoS 攻击向量。

影响

要求

  • 只能由 DelegationManager 调用
  • 给定 operatorSetslashIdburnOrRedistributableShares 必须不包含 strategy

clearBurnOrRedistributableShares

/**
 * @notice 从存储中移除燃烧的份额,并将 slashId 的底层代币转账到 slash escrow。
 * @param operatorSet 要燃烧份额的 operator set。
 * @param slashId 要燃烧份额的 slash ID。
 * @return 转移到每个策略的 slash escrow 的代币数量
 */
function clearBurnOrRedistributableShares(
    OperatorSet calldata operatorSet,
    uint256 slashId)
external returns (uint256[] memory);

/**
 * @notice 从存储中移除单个策略的份额,并将 slashId 的底层代币转账到 slash escrow。
 * @param operatorSet 要燃烧份额的 operator set。
 * @param slashId 要燃烧份额的 slash ID。
 * @param strategy 要燃烧份额的策略。
 * @return 燃烧的份额数量。
 */
function clearBurnOrRedistributableSharesByStrategy(
    OperatorSet calldata operatorSet,
    uint256 slashId,
    IStrategy strategy
) external returns (uint256);

任何人都可以调用此方法,将削减的份额转移到 slash 的 SlashEscrow 合约。此方法将给定 slashIdoperatorSetburnOrRedistributableShares 设置为 0。为了适应可以添加到 operatorSet 的无限数量的策略,用户还可以传入一个策略,以通过 clearBurnOrRedistributableSharesByStrategy 进行清除。可以通过调用 getBurnOrRedistributableShares(operatorSet, slashId) 检索尚未清除的策略。

影响

  • 将 operatorSet 和 slashId 的策略的可燃烧或可重新分配份额重置为 0
  • 如果要移除的份额为非零:
    • strategy 上调用 withdraw,提取份额并将相应数量的代币发送到 slash 的 slashEscrow 合约
    • 发出 BurnOrRedistributableSharesDecreased

burnShares

注意:这是用于在再分配之前燃烧份额的遗留函数。它将在再分配升级后的某个时候被弃用。

/**
 * @notice 通过调用策略以转移到默认的燃烧地址,来燃烧给定策略的遗留策略份额。
 * @param strategy 要燃烧份额的策略。
 * @dev 此函数将在再分配后的版本中被弃用
 */
function burnShares(
    IStrategy strategy
) external;

任何人都可以调用此方法来燃烧先前由 DelegationManager 通过现已弃用的 increaseBurnableShares 添加的削减份额。此方法将策略的可燃烧份额重置为 0,并指示相应的 strategy 将份额转换为代币并将其转移到 DEFAULT_BURN_ADDRESS,从而使其无法恢复。

如果该策略没有可燃烧的份额,则不会调用该 strategy

影响

  • 将策略的可燃烧份额重置为 0
  • strategy 上调用 withdraw,提取份额并将相应数量的代币发送到 DEFAULT_BURN_ADDRESS

策略

概念

方法

StrategyBaseStrategyBaseTVLLimits

在引入 StrategyFactory 之前,策略是手动部署并在 StrategyManager 中列入白名单的。这些策略使用 StrategyBaseTVLLimits.sol,并使用透明代理模式部署。随着 StrategyFactory 的引入,任何人都可以为任何 ERC20 创建可存款的策略(前提是它尚未部署策略)。StrategyFactory 部署信标代理,每个代理都指向 StrategyBase.sol 的单个实现。

虽然这是两个不同的合约,但 StrategyBaseTVLLimitsStrategyBase 继承了其所有基本功能,并且仅在它们之上实现了 "TVL 限制" 功能。简而言之,此附加功能在每次存款之前检查:

  1. 存款金额是否超过配置的 maxPerDeposit
  2. 存款后的总代币余额是否超过配置的 maxTotalDeposits

但是,到目前为止,这些 "TVL 限制" 功能 从未 被使用过。自部署以来,上述两个变量的值都已设置为 type(uint).max,并且没有计划更改这些值。实际上,StrategyBaseTVLLimits 的所有实例的行为都与 StrategyBase 的实例相同 - 唯一的例外是前者使用透明代理,后者使用信标代理。

StrategyBase.deposit

/**
 * @notice 用于将代币存入此策略
 * @param token 是要存入的 ERC20 代币
 * @param amount 是要存入的代币数量
 * @dev 此函数只能由 strategyManager 合约调用。它在 strategyManager 的 `depositIntoStrategy` 函数中调用,并且单个份额余额也记录在 strategyManager 中。
 * @dev 请注意,假设已经将 `amount` 的 `token` 直接转移到此合约(如 StrategyManager 的存款函数中所执行的)。特别是,将此合约的 `underlyingToken` 设置为
 * 基于手续费的转移代币将打破此合约 *接收* 的代币数量等于执行转移时输入的数量的假设(即,从存款人的余额转移的“输出”数量)。
 * @dev 请注意,对 `token` 的任何验证都在 `_beforeDeposit` 中完成。如果需要,可以覆盖此设置。
 * @return newShares 是按当前汇率发行的新份额数量。
 */
function deposit(
    IERC20 token,
    uint256 amount
)
    external
    onlyWhenNotPaused(PAUSED_DEPOSITS)
    onlyStrategyManager
    returns (uint256 newShares)

当质押者将 ERC20 代币存入策略时,StrategyManager 会调用此方法。在调用此方法时,代币已被转移到该策略。此方法的作用是 (i) 根据汇率计算代币代表的存款份额数量,以及 (ii) 将新的存款份额添加到策略记录的总份额中。

创建的新份额数量将返回给 StrategyManager,以添加到质押者的策略份额余额中。

影响

  • 增加 StrategyBaseTVLLimits.totalShares 以说明存款创建的新份额

要求

  • 调用者必须是 StrategyManager
  • 暂停状态不得设置:PAUSED_DEPOSITS
  • 传入的 token 必须与策略的 underlyingToken 匹配
  • 正在存入的代币数量不得超过每次存款的上限
  • 通过策略的汇率转换为份额时:
    • 存入的 tokenamount 必须代表至少 1 个存款人的新份额
    • 策略授予的新总份额不得超过 MAX_TOTAL_SHARES

StrategyBase.withdraw

/**
 * @notice 用于将代币从此策略中提取到 `recipient` 的地址
 * @param recipient 是接收提取资金的地址
 * @param token 是要转移出去的 ERC20 代币
 * @param amountShares 是要提取的份额数量
 * @dev 此函数只能由 strategyManager 合约调用。它在 strategyManager 的其他函数中调用,并且单个份额余额也记录在 strategyManager 中。
 * @dev 请注意,对 `token` 的任何验证都在 `_beforeWithdrawal` 中完成。如果需要,可以覆盖此设置。
 * @return amountOut 是要转移出去的代币数量。
 */
function withdraw(
    address recipient,
    IERC20 token,
    uint256 amountShares
)
    external
    onlyWhenNotPaused(PAUSED_WITHDRAWALS)
    onlyStrategyManager
    returns (uint256)

StrategyManager 调用此方法将一定数量的存款份额转换为代币,并将它们转移到 recipient。通常,此方法作为提款完成流程的一部分调用(请参见 DelegationManager.completeQueuedWithdrawal)。但是,此方法也可能在份额燃烧流程中调用(请参见 StrategyManager.burnShares)。

此方法使用策略的汇率将存款份额转换回代币。降低策略的总份额以反映提款,然后再将代币转账到 recipient

影响

  • 减少 StrategyBaseTVLLimits.totalShares 以说明正在提取的份额
  • 调用 underlyingToken.safeTransfer 以将代币转账到 recipient
  • 返回 recipient 将收到的代币数量

要求

  • 调用者必须是 StrategyManager
  • 暂停状态不得设置:PAUSED_WITHDRAWALS
  • 传入的 token 必须与策略的 underlyingToken 匹配
  • 正在提取的 amountShares 不得超过策略中的 totalShares
  • amountShares 代表的代币不得超过策略的代币余额

StrategyFactory.deployNewStrategy

/**
 * @notice 使用信标代理为 ERC20 代币部署新的 StrategyBase 合约
 * @dev 代币的策略合约必须尚不存在。
 * @dev 对于非标准 ERC20 代币,特别是那些符合 ERC777 的“可重入”代币,需要极其谨慎。
 */
function deployNewStrategy(IERC20 token)
    external
    onlyWhenNotPaused(PAUSED_NEW_STRATEGIES)
    returns (IStrategy newStrategy)

允许任何人部署新的 StrategyBase 实例,该实例支持使用提供的 token 进行存款/取款。在调用此方法时,StrategyFactory 会自动将新策略列入白名单,以便通过 StrategyManager 进行存款。

请注意,StrategyFactory 仅允许每个 token 部署 ONE 策略。一旦 token 具有通过此方法部署的关联策略,则不能再次使用 deployNewStrategytoken 部署策略。此外,deployNewStrategy 将拒绝任何放置在 StrategyFactory 黑名单上的 token。添加此功能是为了防止部署在创建 StrategyFactory 之前 存在的策略。有关详细信息,请参见 StrategyFactory.blacklistTokens

注意:在为不严格符合 ERC20 标准的代币部署策略时要小心。应该支持类似于已经列入白名单的 LST 的重新抵押代币,但如果你的代币不符合 ERC20 规范,请 DYOR。 需要注意的具体事项包括(但不限于):奇异的重新抵押代币、支持可重入行为的代币(如 ERC-777)和其他非标准 ERC20 衍生品。 作用:

  • token 部署一个新的 BeaconProxy,它引用当前的 StrategyBase 实现
  • 更新 tokentokenStrategy 映射,防止为同一个 token 第二次部署 strategy
  • 参见 StrategyManager.addStrategiesToDepositWhitelist

要求:

  • 暂停状态必须未设置:PAUSED_NEW_STRATEGIES
  • token 必须不在 StrategyFactory 中被列入黑名单
  • StrategyFactory 必须没有被用于为 token 部署过 strategy
  • 参见 StrategyManager.addStrategiesToDepositWhitelist

StrategyFactory.blacklistTokens

/**
 * @notice 仅限所有者的函数,用于阻止为给定的 tokens 创建 strategies。
 * @param tokens 要列入黑名单的 token 地址数组。
 */
function blacklistTokens(IERC20[] calldata tokens) 
    external 
    onlyOwner

允许所有者阻止通过 StrategyFactory.deployNewStrategy 为某些 tokens 部署 strategies。添加此方法是为了防止为已经通过其他方式部署/列入白名单的 tokens 部署 strategies。

请注意,一旦所有者将 tokens 添加到黑名单,它们就无法被删除。这是 StrategyFactory 的一个已知限制,如果需要,可以通过升级工厂来解决。

作用:

  • tokens 中的每个 token 添加到 isBlacklisted 映射

要求:

  • 调用者必须是所有者
  • 传入的每个 token 必须尚未被列入黑名单

StrategyFactory.whitelistStrategies

/**
 * @notice 仅限所有者的函数,用于传递对 `StrategyManager.addStrategiesToDepositWhitelist` 的调用
 */
function whitelistStrategies(
    IStrategy[] calldata strategiesToWhitelist
)
    external
    onlyOwner

允许所有者在 StrategyManager 中显式地将 strategies 列入白名单。此方法用作 StrategyManager.addStrategiesToDepositWhitelist 的传递,以防所有者需要将未通过 StrategyFactory 部署的 strategies 列入白名单。

作用:

  • 参见 StrategyManager.addStrategiesToDepositWhitelist

要求:

  • 调用者必须是所有者
  • 参见 StrategyManager.addStrategiesToDepositWhitelist

StrategyFactory.removeStrategiesFromWhitelist

/**
 * @notice 仅限所有者的函数,用于传递对 `StrategyManager.removeStrategiesFromDepositWhitelist` 的调用
 */
function removeStrategiesFromWhitelist(
    IStrategy[] calldata strategiesToRemoveFromWhitelist
) 
    external
    onlyOwner

允许所有者从 StrategyManager strategy 白名单中删除 strategies。此方法用作 StrategyManager.removeStrategiesFromDepositWhitelist 的传递,以防所有者需要访问此方法。

作用:

  • 参见 StrategyManager.removeStrategiesFromDepositWhitelist

要求:

  • 调用者必须是所有者
  • 参见 StrategyManager.removeStrategiesFromDepositWhitelist

系统配置

Strategy Whitelister 角色有权允许/删除通过 StrategyManager 存入的 strategies。此角色由 StrategyFactory 担任(已在 Strategies 中完整记录)。以下方法涉及 Strategy Whitelister 角色及其在 StrategyManager 中的能力:

setStrategyWhitelister

/**
 * @notice 仅限所有者的函数,用于更改 `strategyWhitelister` 地址。
 * @param newStrategyWhitelister `strategyWhitelister` 的新地址。
 */
function setStrategyWhitelister(address newStrategyWhitelister) external onlyOwner

允许 owner 更新 Strategy Whitelister 地址。目前,Strategy Whitelister 角色由 StrategyFactory 担任。有关更多详细信息,请参见 Strategies

作用:

  • 更新 StrategyManager.strategyWhitelister

要求:

  • 调用者必须owner

addStrategiesToDepositWhitelist

/**
 * @notice 仅限所有者的函数,用于将提供的 Strategies 添加到 stakers 可以存入的 strategies“白名单”中
 * @param strategiesToWhitelist 将被添加到 `strategyIsWhitelistedForDeposit` 映射中的 Strategies(如果它们尚未在其中)
 */
function addStrategiesToDepositWhitelist(
    IStrategy[] calldata strategiesToWhitelist
)
    external
    onlyStrategyWhitelister

允许 Strategy Whitelister 将任意数量的 strategies 添加到 StrategyManager 白名单,并配置是否为每个 strategy 启用或禁用第三方转账。白名单上的 Strategies 有资格通过 depositIntoStrategy 进行存款。

作用:

  • 将条目添加到 StrategyManager.strategyIsWhitelistedForDeposit

要求:

  • 调用者必须strategyWhitelister

removeStrategiesFromDepositWhitelist

/**
 * @notice 仅限所有者的函数,用于从 stakers 可以存入的 strategies“白名单”中删除提供的 Strategies
 * @param strategiesToRemoveFromWhitelist 将从 `strategyIsWhitelistedForDeposit` 映射中删除的 Strategies(如果它们在其中)
 */
function removeStrategiesFromDepositWhitelist(
    IStrategy[] calldata strategiesToRemoveFromWhitelist
)
    external
    onlyStrategyWhitelister

允许 Strategy Whitelister 从 StrategyManager 白名单中删除任意数量的 strategies。删除的 strategies 将不再有资格通过 depositIntoStrategy 进行存款。但是,只要 staker 有 shares 可以提取,仍然可以发起和完成先前列入白名单的 strategies 的提款。

作用:

  • StrategyManager.strategyIsWhitelistedForDeposit 中删除条目

要求:

  • 调用者必须strategyWhitelister
  • 原文链接: github.com/Layr-Labs/eig...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Layr-Labs
Layr-Labs
江湖只有他的大名,没有他的介绍。