本文档介绍了ServiceManagerBase
合约,该合约是AVS将要部署的ServiceManager
合约的最小实现。
文件 | 类型 | 代理 |
---|---|---|
ServiceManagerBase.sol |
Singleton(单例) | 透明代理 |
库和 Mixin:
文件 | 注释 |
---|---|
BitmapUtils.sol |
bitmap(位图)操作 |
LibMergeSort.sol |
sorting(排序)实用程序 |
ServiceManagerBase
合约是一个抽象合约,它充当 AVS 将部署的 ServiceManager
合约的最小实现。本文档将通过 ServiceManagerBase
的实现的视角来查看此合约。鼓励 AVS 扩展此合约以满足他们自己的功能,例如为运营商集合实现白名单。
ServiceManager
是 AVS 在 EigenLayer 中的身份,负责:
SlashingRegsitryCoordinator
的回调,用于AVS和运营商集合的运营商注册。调用将被转发到 AVSDirectory
RewardsCoordinator
提交的奖励PermissionController
管理访问权限ServiceManagerBase
实现了用户访问管理(UAM),如 ELIP-003 中定义的那样,允许对哪些地址可以代表 AVS 执行各种操作进行细粒度控制。UAM 函数主要由合约所有者用于委派权限。有关建议的 UAM 模式的更多信息,请参阅 AVS 快速入门 指南。
方法:
addPendingAdmin
function addPendingAdmin(
address admin
) external onlyOwner
此函数允许合约所有者为 AVS 添加 pending admin(待定管理员)。新的管理员必须通过 PermissionController
合约接受管理员身份才能激活。
影响:
PermissionController
合约上的 addPendingAdmin
以将 admin
设置为此 AVS 的 pending admin要求:
removePendingAdmin
function removePendingAdmin(
address pendingAdmin
) external onlyOwner
此函数允许合约所有者从 pending admin 列表中删除地址。
影响:
PermissionController
合约上的 removePendingAdmin
以从 pending admin 列表中删除 pendingAdmin
要求:
removeAdmin
function removeAdmin(
address admin
) external onlyOwner
此函数允许合约所有者从 AVS 中删除管理员。
影响:
PermissionController
合约上的 removeAdmin
以从管理员列表中删除 admin
要求:
setAppointee
function setAppointee(
address appointee,
address target,`
bytes4 selector
) external onlyOwner
此函数允许合约所有者将特定函数权限委派给 appointee(被任命者)。
影响:
PermissionController
合约上的 setAppointee
以授予 appointee
调用由 target
和 selector
标识的函数的权限要求:
removeAppointee
function removeAppointee(
address appointee,
address target,
bytes4 selector
) external onlyOwner
此函数允许合约所有者撤销从 appointee 委派的权限。
影响:
PermissionController
合约上的 removeAppointee
以撤销 appointee
调用由 target
和 selector
标识的函数的权限要求:
ServiceManagerBase
将状态更新传播到 AVSDirectory
(用于向后兼容)。
方法:
registerOperatorToAVS
function registerOperatorToAVS(
address operator,
ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature
)
public
virtual
onlyRegistryCoordinator
当运营商为 AVS 注册时,SlashingRegistryCoordinator
会调用此函数。它将调用转发到 EigenLayer 核心 AVSDirectory
。
影响:
AVSDirectory.registerOperatorToAVS
要求:
SlashingRegistryCoordinator
deregisterOperatorFromAVS
function deregisterOperatorFromAVS(
address operator
)
public
virtual
onlyRegistryCoordinator
当运营商从 AVS 取消注册时,SlashingRegistryCoordinator
会调用此函数。它将调用转发到 EigenLayer 核心 AVSDirectory
合约,以保持向后兼容性。
影响:
AVSDirectory.deregisterOperatorFromAVS
要求:
SlashingRegistryCoordinator
deregisterOperatorFromOperatorSets
function deregisterOperatorFromOperatorSets(
address operator,
uint32[] memory operatorSetIds
)
public
virtual
onlyRegistryCoordinator
SlashingRegistryCoordinator
调用此函数以从特定运营商集合中注销运营商。
影响:
DeregisterParams
struct(结构体)AllocationManager.deregisterFromOperatorSets
要求:
SlashingRegistryCoordinator
ServiceManagerBase
允许 AVS 向 EigenLayer 的 RewardsCoordinator
合约提交奖励。
方法:
createAVSRewardsSubmission
createOperatorDirectedAVSRewardsSubmission
setClaimerFor
setRewardsInitiator
createAVSRewardsSubmission
function createAVSRewardsSubmission(
IRewardsCoordinator.RewardsSubmission[] calldata rewardsSubmissions
)
public
virtual
onlyRewardsInitiator
此函数允许 rewards initiator(奖励发起人)为 AVS 创建 rewards submission(奖励提交)。此提交将根据 stake weight(权益权重)将奖励发送给所有符合条件的运营商。
影响:
RewardsSubmission
:
RewardsCoordinator
花费这些代币RewardsCoordinator.createAVSRewardsSubmission
要求:
createOperatorDirectedAVSRewardsSubmission
function createOperatorDirectedAVSRewardsSubmission(
IRewardsCoordinator.OperatorDirectedRewardsSubmission[] calldata
operatorDirectedRewardsSubmissions
)
public
virtual
onlyRewardsInitiator
此函数允许 rewards initiator 创建 operator-directed rewards submission(运营商定向奖励提交),该 submission 可以更好地控制如何将奖励分配给特定运营商。
影响:
OperatorDirectedRewardsSubmission
:
RewardsCoordinator
花费这些代币RewardsCoordinator.createOperatorDirectedAVSRewardsSubmission
要求:
setClaimerFor
function setClaimerFor(
address claimer
)
public
virtual
onlyOwner
此函数允许所有者设置一个可以代表 AVS 申领奖励的地址。
影响:
RewardsCoordinator.setClaimerFor
以设置申领者地址要求:
setRewardsInitiator
function setRewardsInitiator(
address newRewardsInitiator
)
external
onlyOwner
此函数允许所有者更新允许代表 AVS 提交 rewards submission 的地址。
影响:
rewardsInitiator
存储变量RewardsInitiatorUpdated
事件要求:
方法:
updateAVSMetadataURI
function updateAVSMetadataURI(
string memory _metadataURI
)
public
virtual
onlyOwner
此函数允许所有者更新与 AVS 关联的 metadata URI(元数据 URI)。
影响:
AVSDirectory.updateAVSMetadataURI
要求:
方法:
getRestakeableStrategies
function getRestakeableStrategies()
external
view
virtual
returns (address[] memory)
此函数返回 AVS 支持用于 restaking(重新质押)的 strategy(策略)地址列表。 这旨在由奖励计算系统离线调用。
返回:
getOperatorRestakedStrategies
function getOperatorRestakedStrategies(
address operator
)
external
view
virtual
returns (address[] memory)
此函数返回特定运营商可能已使用 AVS 重新质押的 strategy 地址列表。 这旨在由奖励计算系统离线调用。
返回:
avsDirectory
function avsDirectory()
external
view
override
returns (address)
此函数返回 EigenLayer AVSDirectory 合约的地址。
返回:
- 原文链接: github.com/Layr-Labs/eig...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!