Layr-Labs/eigenlayer-middleware
GitHub: Layr-Labs/eigenlayer-middleware
EigenLayer 中间件为 AVS 开发者和 Operator 提供了一套可部署的智能合约框架,用于构建和管理基于再质押经济的主动验证服务。
Stars: 116 | Forks: 120
# EigenLayer 中间件
EigenLayer 是一组部署在 Ethereum 上的智能合约,支持对资产进行 restaking,以保护称为 AVS(actively validated services)的新服务。实现这些功能的核心合约可以在 [`eigenlayer-contracts` 仓库][core-repo] 中找到。
## 快速入门
* [分支](#branching)
* [文档](#documentation)
* [构建和运行测试](#building-and-running-tests)
* [部署](#deployments)
## 分支
我们使用的主要分支有:
* [`dev (默认)`](https://github.com/Layr-Labs/eigenlayer-middleware/tree/dev):最新的分支,包含即将发布版本的正在开发中的代码
* [`testnet-holesky`](https://github.com/Layr-Labs/eigenlayer-middleware/tree/testnet-holesky):我们当前的 testnet 部署
* [`mainnet`](https://github.com/Layr-Labs/eigenlayer-middleware/tree/mainnet):我们当前的 mainnet 部署
## 文档
### 基础知识
要对 EigenLayer 有一个基本的了解,请查看 [You Could've Invented EigenLayer](https://www.blog.eigenlayer.xyz/ycie/)。请注意,该文档的部分内容描述了尚不存在的特性(例如 Slasher)。要进一步了解 restaker 和 operator 如何与 EigenLayer 进行交互,请查看以下指南:
* [Restaking 用户指南](https://docs.eigenlayer.xyz/restaking-guides/restaking-user-guide)
* [Operator 指南](https://docs.eigenlayer.xyz/operator-guides/operator-introduction)
这些内容大部分属于入门级,描述了用户与 EigenLayer 核心合约的交互,但这应该能为您提供一个很好的切入点。
### 深入了解
面向隐秘的超级程序员:
* 最新的技术文档可以在 [/docs](/docs) 中找到。
* 要了解用户如何与这些合约进行交互,请查看集成测试:[/test/integration](./test/integration)
* 要探索 EigenLayer 核心合约,请查看核心仓库的技术文档[这里][core-docs-dev]。
### 关于 Slashing 的说明
middleware 合约可用于 testnet 集成和实验。与 testnet 的其他代码一样,这些合约尚未经过全面审计。内部安全审查正在进行中,我们也正准备聘请外部审计人员。我们现在提供这些代码,是为了让 AVS 可以开始测试 slashing 条件、Operator Sets 和相关功能,同时也让 Operator 可以模拟 slashing 并测试分配。有关更多详细信息,请参阅 [ELIP-002](https://github.com/eigenfoundation/ELIPs/blob/main/ELIPs/ELIP-002.md)。
对于 Operator:
我们在[这些脚本](https://github.com/Layr-Labs/eigenlayer-middleware/pull/335)中提供了部署 mock service manager 并将一些 stake 分配给 mock Operator Set 的脚本。
我们缩短了 testnet 上的各种安全延迟,以更好地模拟操作流程。有关这些延迟的更多信息,请参见 [ELIP-002](https://github.com/eigenfoundation/ELIPs/blob/main/ELIPs/ELIP-002.md)。
对于 AVS:
我们为现有的 M2 环境提供了迁移路径 (LINK)。虽然这需要理解所提供的脚本,但在 Mainnet 发布之前,开发者体验将得到改善。请注意,这是一个向新 Operator Sets 的渐进式迁移过程,而不是对现有 Operator Sets 的直接升级。
我们还提供了从头启动新 service manager 的脚本。
在所有情况下,您都需要注册现有的 Operator 或启动新的 Operator 并向其分配资金。随着我们完善脚本和合约,这些测试流程将会得到改进。请继续关注更新,如有任何问题,请随时联系我们。
## 构建和运行测试
本仓库使用 Foundry。有关安装和使用的更多信息,请参见 [Foundry 文档](https://book.getfoundry.sh/)。如果您已经安装了 foundry,可以使用以下命令构建本项目并运行测试:
```
foundryup
forge build
forge test
```
## 部署
本仓库中的合约旨在由每个想要使用它们的 AVS 进行部署。下面列出的地址是指 EigenDA 的部署,作为示例提供。
### 当前 MiddlewareV2 Mainnet 部署
以下是我们的 MiddlewareV2/Multichain 版本,部署在 Mainnet 上。下表中的计算器用于计算 operatorSet 的可 slash stake,并且对所有 strategy 进行同等估值。例如,如果一个 operator 分配了 100 stETH、100 wETH 和 100 DAI,计算器将为该 operator 的 stake 权重返回 300。有关更多信息,请参阅我们的[文档](./docs/middlewareV2/README.md)。
| 名称 | Proxy | Implementation | 备注 |
| -------- | -------- | -------- | -------- |
[`BN254TableCalculator`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/v1.5.0/src/middlewareV2/tableCalculator/BN254TableCalculator.sol)| N/A | [`0x55F4b21681977F412B318eCB204cB933bD1dF57c`](https://etherscan.io/address/0x55F4b21681977F412B318eCB204cB933bD1dF57c) | Singleton non-upgradeable |
[`ECDSATableCalculator`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/v1.5.0/src/middlewareV2/tableCalculator/ECDSATableCalculator.sol)| N/A | [`0xA933CB4cbD0C4C208305917f56e0C3f51ad713Fa`](https://etherscan.io/address/0xA933CB4cbD0C4C208305917f56e0C3f51ad713Fa) | Singleton non-upgradeable |
### 当前 MiddlewareV2 Testnet 部署
以下 testnet 部署是我们的 MiddlewareV2 版本,部署在 Sepolia 上。下表中的计算器用于计算 operatorSet 的可 slash stake,并且对所有 strategy 进行同等估值。例如,如果一个 operator 分配了 100 stETH、100 wETH 和 100 DAI,计算器将为该 operator 的 stake 权重返回 300。有关更多信息,请参阅我们的[文档](./docs/middlewareV2/README.md)。
| 名称 | Proxy | Implementation | 备注 |
| -------- | -------- | -------- | -------- |
[`BN254TableCalculator`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/v1.5.0/src/middlewareV2/tableCalculator/BN254TableCalculator.sol)| N/A | [`0x797d076aB96a5d4104062C15c727447fD8b71eB0`](https://sepolia.etherscan.io/address/0x797d076aB96a5d4104062C15c727447fD8b71eB0#code) | Singleton non-upgradeable |
[`ECDSATableCalculator`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/v1.5.0/src/middlewareV2/tableCalculator/ECDSATableCalculator.sol)| N/A | [`0xbcff2Cb40eD4A80e3A9EB095840986F9c8395a38`](https://sepolia.etherscan.io/address/0xbcff2Cb40eD4A80e3A9EB095840986F9c8395a38#code) | Singleton non-upgradeable |
### 当前 AVS Mainnet 部署
当前的 mainnet 部署来自我们的 M2 mainnet 版本。您可以在下面查看已部署的合约地址,或者在 [`mainnet`](https://github.com/Layr-Labs/eigenlayer-middleware/tree/mainnet) 分支上查看代码本身。
| 名称 | Proxy | Implementation | 备注 |
| -------- | -------- | -------- | -------- |
[`RegistryCoordinator`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/mainnet/src/RegistryCoordinator.sol) | [`0x0baac79acd45a023e19345c352d8a7a83c4e5656`](https://etherscan.io/address/0x0baac79acd45a023e19345c352d8a7a83c4e5656#readProxyContract) | [`0xd3e0...EECF`](https://etherscan.io/address/0xd3e09a0c2a9a6fdf5e92ae65d3cc090a4df8eecf#code) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) |
[`StakeRegistry`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/mainnet/src/StakeRegistry.sol) | [`0x006124ae7976137266feebfb3f4d2be4c073139d`](https://etherscan.io/address/0x006124ae7976137266feebfb3f4d2be4c073139d#readProxyContract) | [`0x1C46...dd96`](https://etherscan.io/address/0x1c468cf7089d263c2f53e2579b329b16abc4dd96#code) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) |
[`IndexRegistry`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/mainnet/src/IndexRegistry.sol) | [`0xbd35a7a1cdef403a6a99e4e8ba0974d198455030`](https://etherscan.io/address/0xbd35a7a1cdef403a6a99e4e8ba0974d198455030#readProxyContract) | [`0x1ae0...a14c`](https://etherscan.io/address/0x1ae0b73118906f39d5ed30ae4a484ce2f479a14c#code) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) |
[`BLSApkRegistry`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/mainnet/src/BLSApkRegistry.sol) | [`0x00a5fd09f6cee6ae9c8b0e5e33287f7c82880505`](https://etherscan.io/address/0x00a5fd09f6cee6ae9c8b0e5e33287f7c82880505#readProxyContract) | [`0x5d0B...eD2b`](https://etherscan.io/address/0x5d0b9ce2e277daf508528e9f6bf6314e79e4ed2b#code) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) |
[`OperatorStateRetriever`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/mainnet/src/OperatorStateRetriever.sol) | - | [`0xD5D7...8C31`](https://etherscan.io/address/0xd5d7fb4647ce79740e6e83819efdf43fa74f8c31#code) | |
[`ServiceManagerRouter`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/mainnet/src/ServiceManagerRouter.sol) | - | [`0x518D...09eA`](https://etherscan.io/address/0x518d5140b5c935fe094f00f2dd64f2f95c4f09ea#code) | |
[`ProxyAdmin`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/ProxyAdmin.sol) | - | [`0x8247...2E99`](https://etherscan.io/address/0x8247ef5705d3345516286b72bfe6d690197c2e99#code) | |
[`eigenda/EigenDAServiceManager`](https://github.com/Layr-Labs/eigenda/blob/08d8781a2165c159ac9bb502dd61ed6ed340601c/contracts/src/core/EigenDAServiceManager.sol) | [`0x870679e138bcdf293b7ff14dd44b70fc97e12fc0`](https://etherscan.io/address/0x870679e138bcdf293b7ff14dd44b70fc97e12fc0#readProxyContract) | [`0xF5fD...899e`](https://etherscan.io/address/0xf5fd25a90902c27068cf5ebe53be8da693ac899e#code) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) |
### 当前 AVS Testnet 部署
当前的 testnet 部署在 holesky 上,来自我们的 M2 beta 版本。您可以在下面查看已部署的合约地址,或者在 [`testnet-holesky`](https://github.com/Layr-Labs/eigenlayer-middleware/tree/testnet-holesky) 分支上查看代码本身。
| 名称 | Proxy | Implementation | 备注 |
| -------- | -------- | -------- | -------- |
[`RegistryCoordinator`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/testnet-holesky/src/RegistryCoordinator.sol) | [`0x53012C69A189cfA2D9d29eb6F19B32e0A2EA3490`](https://holesky.etherscan.io/address/0x53012C69A189cfA2D9d29eb6F19B32e0A2EA3490) | [`0xC908...bfa0`](https://holesky.etherscan.io/address/0xC908fAFAE29B5C9F0b5E0Da1d3025b8d6D42bfa0) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) |
[`StakeRegistry`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/testnet-holesky/src/StakeRegistry.sol) | [`0xBDACD5998989Eec814ac7A0f0f6596088AA2a270`](https://holesky.etherscan.io/address/0xBDACD5998989Eec814ac7A0f0f6596088AA2a270) | [`0xa8d2...98E5`](https://holesky.etherscan.io/address/0xa8d25410c3e3347d93647f10FB6961069BEc98E5) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) |
[`IndexRegistry`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/testnet-holesky/src/IndexRegistry.sol) | [`0x2E3D6c0744b10eb0A4e6F679F71554a39Ec47a5D`](https://holesky.etherscan.io/address/0x2E3D6c0744b10eb0A4e6F679F71554a39Ec47a5D) | [`0x889B...420d`](https://holesky.etherscan.io/address/0x889B040116f453D89e9d6d692Ad70Edd7357420d) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) |
[`BLSApkRegistry`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/testnet-holesky/src/BLSApkRegistry.sol) | [`0x066cF95c1bf0927124DFB8B02B401bc23A79730D`](https://holesky.etherscan.io/address/0x066cF95c1bf0927124DFB8B02B401bc23A79730D) | [`0x885C...e064`](https://holesky.etherscan.io/address/0x885C0CC8118E428a2C04de58A93eB15Ed4F0e064) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) |
[`OperatorStateRetriever`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/testnet-holesky/src/OperatorStateRetriever.sol) | - | [`0xB4ba...6C67`](https://holesky.etherscan.io/address/0xB4baAfee917fb4449f5ec64804217bccE9f46C67) | |
[`ServiceManagerRouter`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/testnet-holesky/src/ServiceManagerRouter.sol) | - | [`0x4463...5a37`](https://holesky.etherscan.io/address/0x44632dfBdCb6D3E21EF613B0ca8A6A0c618F5a37#code) | |
[`ProxyAdmin`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/ProxyAdmin.sol) | - | [`0xB043...5c15`](https://holesky.etherscan.io/address/0xB043055dd967A382577c2f5261fA6428f2905c15) | |
[`eigenda/EigenDAServiceManager`](https://github.com/Layr-Labs/eigenda/blob/a33b41561cc3fb4cd6d50a8738e4c5dca43ec0a5/contracts/src/core/EigenDAServiceManager.sol) | [`0xD4A7E1Bd8015057293f0D0A557088c286942e84b`](https://holesky.etherscan.io/address/0xD4A7E1Bd8015057293f0D0A557088c286942e84b) | [`0xa722...67f3`](https://holesky.etherscan.io/address/0xa7227485e6C693AC4566fe168C5E3647c5c267f3) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) |
标签:Web3, 中间件, 以太坊, 再质押, 区块链, 智能合约