EigenLayer 提出的 再质押(Restaking)协议最近越来越受到重视,它在许多问题上提供了新解法,也是流动性质押衍生品赛道很重要的叙事,下文简单聊聊「再质押」,以及一些相关的底层实现和安全风险。

质押与流动性质押

以太坊的 质押(Staking)是指用户将他们的 ETH 锁定在以太坊网络中,以支持网络的运行和安全性。在以太坊2.0 中,这种质押机制是权益证明(Proof of Stake, PoS)共识算法的一部分,它取代了之前的工作量证明(PoW)机制。用户通过质押 ETH,成为验证者(Validators),参与到区块的创建和确认过程中,作为回报,他们可以获得质押奖励。

为什么"再质押"占领了社交媒体?

以太坊质押和验证者趋势

这种原生质押方式存在很多问题,比如需要的资金量不小(32 ETH 或它的倍数)、需要提供一些硬件作为验证节点且保证可用性、质押的 ETH 被锁定不灵活等等。

于是 流动性质押衍生品(Liquid Staking Derivatives,LSD)应运而生,它旨在解决传统质押中的流动性问题,允许用户在质押代币的同时,获得代表他们质押份额的流动性代币(如 Lido 的 stETH 或 Rocket Pool 的 rETH);这些流动性代币可以在其他平台上交易、借贷或用于其他金融活动,这样,用户既能参与到质押中获得奖励,又能保持资金的灵活性。

流动性质押通证一般会由项目方发行,并保持与原始质押资产固定的兑换比例,比如 Lido 发行的 stETH 与 ETH 的兑换关系为 1:1。

为什么"再质押"占领了社交媒体?

热门流动性质押项目

流动性是质押的唯一问题吗?

显然不是,目前越来越多的中间件、DA、跨链桥、预言机项目都采用节点+质押的方式运行,它们的做法在不断的分散共识,通过空投和更高的质押收益,吸引用户离开大的共识圈而进入它们的小圈子;

另外对于大部分初始项目来说,创建一个 PoS 的共识网络是很难的,说服用户放弃其他收益和流动性而参与进来并不容易;

EigenLayer 解决的问题

再质押不是指收益滚存,这是完全不同的两件事情。

以太坊共识协议中,约束验证节点的核心是它的 罚没机制(Slashing),而 EigenLayer 提出的再质押协议核心就是通过某种方式拓展了罚没逻辑,让许多 主动验证服务(Actively Validated Services,AVS)也能够编写逻辑,向作恶的玩家做出惩罚,约束行为并达到共识。

EigenLayer 是以太坊上的一个创新协议,它引入了 Restaking 机制,允许在共识层重新使用以太坊和流动质押代币(LST)。截止 2024.02,EigenLayer 协议上的锁仓价值已经达到了 45 亿美元,其中 LST 占比 40% 左右;同时著名投资机构 a16z 也刚刚宣布了 1 亿美元的投资,其生态项目 Renzo、Puffer 等都先后拿到了 Binance、OKX 等投资。这些也标志着它在完善以太坊定标基础设施和提高加密经济安全性方面取得了重大进展。

为什么"再质押"占领了社交媒体?

锁仓价格超过 45 亿美元

EigenLayer 的核心功能是使以太坊的安全性多样化,在下图示例(来自白皮书)中,三个 AVS 借助再质押协议更容易的获得了更大资金量带来的共识安全性,同时也没有造成 ETH Layer1 的削弱。

为什么"再质押"占领了社交媒体?

EigenLayer 让共识更集中

EigenLayer 包含三个核心组件,也分别对应再质押协议的三类用户:

TokenManager:处理质押者(staker)的质押和提款。DelegationManager:注册运营商(operator)并跟踪管理运营商份额。SlasherManager:管理罚没逻辑,为 AVS 开发者提供惩罚能力接口。

为什么"再质押"占领了社交媒体?

EigenLayer 简化架构图

从图中可以清晰的看到各个角色之间的协同关系:

质押者通过 TokenManager 质押他们的 LST 并获得额外收益,同时质押者也信任对应的运营商(这一点和你在 Lido、Binance 质押没有区别,运营商运行的基础就是获得信任)。运营商通过 DelegationManager 注册后获得 LST 资产,为需要 AVS 服务的项目方提供节点服务,从项目方提供的节点奖励和手续费中抽取收益。AVS 开发者实现一些通用或特殊的 Slasher 运行在节点上,提供给项目方(AVS 需求方)使用,这些项目方(比如跨链桥、DA、预言机等)通过 EigenLayer 购买这类服务,直接获得共识安全。

各个角色都能在 EigenLayer 协议中获得收益,整体来看是一个「三赢零亏」的局面。

如何实现再质押

这里为了更简单的说明实现逻辑,隐藏了 Operator 和 DelegationManager,与上文架构图略有区别。

首先,我们以流动性质押代币的再质押举例,最简单的 TokenPool 实现只需要满足三个功能:质押、提款、罚没,通过 Solidity 实现出来的效果如下:

contract TokenPool { // 质押余额 mapping(address => uint256) public balance;

function stake(uint256 amount) public; // 质押 function withdraw() public; // 提款

// 运行罚没逻辑 function slash(address staker, ??? proof) public;}

为了横向拓展 slash 逻辑,给 AVS 开发者提供统一的接口,可以做出如下改造,注册的多个 slasher 会根据需求依次执行并传递,在某些环节作恶时适当对质押款做削减(类似原生质押):

contract Slasher { mapping(address => bool) public isSlashed; // 实现罚没逻辑 function slash(address staker, ??? proof) public;}

contract TokenPool { mapping(address => uint256) public balance; // 管理已经注册的 slasher mapping(address => address[]) public slasher;

function stake(uint256 amount) public; function withdraw() public; // 注册 slasher function enroll(address slasher) onlyOwner;}

注册slasher实际是一个比较严格的过程,只有经过审查的 shash 逻辑才能够被 EigenLayer 和用户所接受,如何分配质押代币也是另一个比较核心问题。

目前 EigenLayer 支持了 9 种不同的流动性质押代币(LSTs),它通过在 TokenPool 上封装了一层更高阶的 TokenManager 实现:

contract TokenManager { mapping(address => address) tokenPoolRegistry; mapping(address => mapping(address => uint256)) stakerPoolShares;

// 质押 stETH 到 stETHTokenPool function stakeToPool(address pool, uint256 amount); // 从 stETHTokenPool 提款 stETH function withdrawFromPool(address pool); // ...}

至此,我们已经可以实现一个简单的 LSD 再质押合约;思考一个小问题