Lido“自带验证器”替代设计方案

本文分析了Lido V3的“自带验证器”设计方案,旨在提供可扩展、灵活和去中心化的流动性质押方法。通过引入可定制的金库,机构质押者、再质押者和节点运营商可以更好地控制其风险回报结构,确保资本的有效分配而不会损害协议的完整性。同时,优先保持stETH作为流动性质押代币 (LST),而不是转变为纯粹的合成资产,保护赎回保证并维护DeFi生态系统内的信任。

作者:Dmitry Zakharov, Pavel Morozov, Tim Savon, Eugene Pshenichnyy, Max Merkulov, Alexey Potapkin

简介

Lido 是一个流动性质押代币 (LST)。我们相信 stETH 为 DeFi 领域带来了许多新的机会,并能够在其之上创建更高效的协议。此外,除了作为整个 DeFi 生态系统的主要基础资产外,stETH 还通过增加网络上通过质押的验证者数量来增强以太坊的安全性。然而,我们观察到 LST 的份额已稳定在一定水平,并且没有经历显着增长。我们的假设是,所有对使用 LST 进行质押感兴趣的人都已经这样做了。为了释放新的增长动力,我们需要关注那些不想直接与 LST 交互的用户。本研究旨在确定潜在的新增长动力,并探索如何调整当前的 Lido 实施以吸引新的质押者加入 Lido 并铸造 stETH 代币。

重要的是要注意,本研究是在 2024 年初进行的。虽然以太坊中许多与质押相关的常量和概念仍然有效,但它们很快将通过 Pectra 硬分叉进行修改(例如,初始削减值或每个验证者的最大活跃质押量)。除了这些即将到来的变化之外,本研究的结果仍然适用。

我们还要强调的是,本研究是与 Lido 贡献者合作进行的,包括 Eugene Pshenichnyy、Max Merkulov 和 Alexey Potapkin,他们在研究和最终报告的准备过程中发挥了积极作用。我们非常感谢他们有机会参与这项研究,我们相信这项研究将为 DeFi 生态系统的下一个发展阶段做出贡献。

问题陈述

LST 最大的缺点是缺乏灵活性(例如,无法选择具有特定节点运营者的任意风险/回报设置)。有三类用户对在不失去访问 stETH 流动性的情况下拥有更大的灵活性感兴趣:

  1. 机构质押者(合规性、无混合、与 NO 有法律协议);
  2. Restaker(更多的奖励和风险,能够重新质押,独特的 NO 设置);
  3. 节点运营者(通过 Lido 与其客户进行质押)。

如果允许用户选择节点运营商,不可避免地会出现一个或多个占主导地位的节点运营商,它们将非常庞大,以至于在发生大规模削减的灾难性情况下,用户在与它们进行质押时选择的风险会蔓延到所有其他流动性质押代币的持有者。这里的可能解决方案是引入一个 LTV 参数,该参数考虑所有可能的风险,并减少削减对协议的可能影响。

简而言之,如果用户可以选择节点运营商并被迫承担风险,他们会希望其头寸的 APR 与节点运营商的 APR 保持一致。考虑到复杂的奖励结构(例如 MEV),实现这一点并不简单。从理论上讲,可以使用用户锁定的资金来补偿节点运营商低于平均水平的表现。相反,如果节点运营商表现优异,可以将奖励添加到锁定的资金中,这些资金可以在退出头寸时提取。实施这样的框架并不简单,需要遍历所有节点运营商,但这是可行的。

所提出的框架可以构建,但即使它还不够灵活。具体来说,它未能解决:

  1. 混合;
  2. 法律协议涵盖的隔离头寸;
  3. 在单个节点运营商中,无法调整风险/回报偏好(例如,一个用户可能想要重新质押,而另一个用户可能不想)。

为了解决这些问题,让我们再向前迈一步,让我们允许用户使用具有可定制设置的特定节点运营商构建自己的头寸。为此,我们需要深入研究类似的协议,即借贷协议,这些协议允许借用某些代币(在本例中为 stETH)以换取某些抵押品(在本例中为验证者上的股份)。

概述

“概述”部分分析了三种协议,这些协议实施了构建 Lido v3 所必需的一个或多个核心机制。

超额抵押借贷协议——本节检查了 Morpho Blue 和 Instadapp 的 Fluid 等协议,它们的机制对于正确实施针对 ETH(在验证器上)借用 stETH 至关重要。然后,借来的 ETH 将被发送到特定 Volt 的验证器。

合成代币抵押——本部分探讨了支持创建由超额抵押头寸支持的合成资产的协议,包括 Maker DAO、crvUSD 和 Stakewise v3。它提供了有关清算机制以及帮助这些协议维持合成资产价格稳定的关键功能的详细分解。此外,它还讨论了由每个协议的独特设计引起的特定实施细微差别。

重新质押——本节检查 EigenLayer 以确定 Volt 中可能需要哪些额外的机制来支持重新质押。

非托管质押 - 本部分概述了必须实施的机制,以确保 Lido v3 中去中心化和透明的质押。

超额抵押借贷协议

通用协议

超额抵押借贷协议的定义

超额抵押的借贷协议要求借款人首先提供抵押品。LTV(贷款价值比)比率控制着对于提供的抵押品数量可以提取多少资产作为贷款(例如,如果 LTV = 90%,这意味着对于抵押品价值 = 1000 ETH,用户最多可以借用 900 ETH)。超额抵押意味着借款人应始终提供比他们愿意借的价值更多的价值作为抵押品。这种方法确保,在抵押品价值大幅下跌的情况下,贷款人仍然可以赎回他们的资产。

LTV 比率可能因不同的抵押品而异。抵押品的风险越高,LTV 比率越低。这意味着,如果用户将大量风险资产带入市场,他们仍然无法获得大量贷款。

Morpho Blue 是一种无需许可的,超额抵押的借贷协议,用户可以使用所选的代币对创建自己的市场 - 一种将用作抵押品,另一种将被借用。协议所有者仅定义允许的 LLTV(清算贷款价值比)和 IRM(利率模型)参数,用户可以在市场创建期间选择这些参数。用户还提供他们的预言机,以在借贷或清算过程中确定抵押品价格。

Instadapp 的 Fluid 是一种超额抵押的借贷协议,允许用户将抵押品提供(并获得贷款)给协议所有者创建和配置的金库。用户头寸被分配了刻度线 (tick),代表它们当前时刻的供应/借贷比率。在任何头寸修改之后,如果偿还或借用的代币更多,或者抵押品价格发生变化,则其刻度线会发生变化。

与抵押品交互的机制

在 Morpho Blue 案例中,通过调用 supplyCollateral() 函数来存入抵押品。当用户将抵押品代币带入协议时,有关带入金额的信息将存储为头寸信息。当用户提取其抵押品时,相同数量的计数器会减少,并且会检查头寸的健康状况 - 用户的借入价值只能小于提供的抵押品。

在 Morpho Blue 协议中,用户始终可以提取其抵押品,因为提供的抵押品不会借给任何人。尽管事实上整个协议流动性都存储在所有市场的一个合约中,但借款人始终可以提取其抵押品。在 borrow() 函数的末尾有一个检查,以确保用户没有试图借入比供应给该特定市场的代币更多的代币。因此,每个市场都变得孤立,并且一个市场中的任何操作都不会影响其他市场。如果将恶意预言机添加到某个特定市场,该预言机可以抬高抵押品价格,那么它只会影响该市场中的头寸 - 借款人可能会被稀释,因为可能会以更高的价格进行一些借款,但是他们仍然可以提取其供应的代币,因为他们将在市场供应流动性中拥有相同的份额。

在所有情况下,如果用户的头寸健康,他们应该能够提取其抵押品。如果用户关闭一个头寸,那么他们在总借入资产中的份额会减少,这不会影响其他头寸的健康状况。头寸的健康状况仅取决于 LLTV 参数、个人借入份额和当前的抵押品价格。

在 Fluid 协议中,用户可以通过调用 operate() 函数来存入抵押品。存入的金额存储在用户的头寸信息中,并且资产被转移到一个特殊的流动性合约中。只有当用户创建债务时,才会创建头寸并为其分配一个刻度线;计算出他们的贷款价值比 (LTV),并且流动性数据被添加到适当的分支和全局金库状态中。用户还可以通过调用相同的 operate() 函数来提取其抵押品,但是需要使用负的抵押品金额值。在每次调用 operate() 函数时,都会检查用户的头寸是否健康。如果抵押品与债务的价值比率发生变化,则会为该头寸分配一个新的刻度线。

由于抵押品信息存储在用户的头寸数据中,因此该值只能在清算或提款由用户自己发起后才能更改。如果用户的头寸健康并且有足够的空间可以提取抵押品(无论是小额贷款还是根本没有借入的代币),则用户应该能够提取抵押品。

但是,由于流动性层是所有金库共享的,因此可能会出现潜在的问题。如果当前金库中的抵押品代币在另一个金库中被借出,并且其价格出现显着波动,则可能会借出太多的抵押品代币。当价格恢复正常时,可能没有足够的流动性用于提款。虽然这不会是金库合约的问题,因为所有头寸数据都正确存储,但它将与流动性层相关。每次修改头寸时都会计算个人头寸的健康状况,并且提取抵押品不应影响其他头寸的健康状况。

如何创建贷款

Morpho Blue 协议允许用户在提供足够的抵押品并且愿意借入一定数量的代币以保持其头寸健康的情况下,获得贷款。贷款代币可以通过调用 supply() 函数由任何人存入。

贷款代币提供者可以在供应的代币上赚取利息,但是他们在协议中没有任何抵押。贷款代币在将来用作借款人的流动性。如果用户打算获得贷款,他们必须首先通过调用 supplyCollateral() 函数提供抵押品。在 Morpho Blue 协议中,一个市场只有两种代币 - 借款人提供的抵押品代币和贷款(借入)代币,贷款(借入)代币由流动性提供者提供并由借款人借入。

如果没有足够的已存入的贷款代币可供借用,调用 borrow() 函数将恢复,这是由一项检查触发的,该检查确保借入的总资产少于该特定市场供应的总资产。LLTV、抵押品价格和存入的抵押品金额都在获得贷款时被考虑在内,从而防止创建最初不健康的头寸。

如果用户试图赎回他们提供的代币,尽管协议中没有足够的贷款代币(几乎所有供应的代币都被借出),由于一项检查确保借入的总资产少于贷款的总资产,因此该交易将失败。重要的是要注意,当市场利用率上升到极高的值时,为市场配置的利率模型应返回增加的借贷利率,从而使借款更加昂贵。在 Morpho Blue 协议中,有一个称为 AdaptiveCurveIRM 的基本模型。它有助于将利用率维持在接近 90% 的水平,同时避免其增长到极高的值,使用曲线进行利率调整。随着利用率接近 100% 的水平,利率会成倍增长。此模型会增加借款成本,并且由于用户的头寸会更快地变得不健康,因此会导致更多的清算。

在 Fluid 协议中,流动性层充当借款的资产来源,并且在其之上构建了一个借贷协议以激励用户提供流动性。然后,Vault 协议中的借款人会利用提供的流动性。Vault 协议中的用户可以通过调用 operate() 函数并使用正的债务价值金额来借入代币。该函数检查用户是否具有健康的头寸,这意味着他们提供了足够的抵押品并且抵押品的价格允许进行贷款。仅当发生借款时,才会为用户的头寸分配一个刻度线并将其放置在特定的分支上。此分支配置有一个清算刻度线,在该刻度线下,用户的头寸开始被认为是不健康的。

重要的是要提到,流动性层没有任何限制,可以控制使用一个市场中的抵押品代币作为另一个市场中的借款代币。如果用户尝试在完全借出该抵押品代币的情况下这样做,则可能会没有足够的抵押品代币可以提取。此外,可能存在坏账情况,即没有足够的抵押品代币可以发送给清算人,因为他们将借入的代币带回协议。所有这些问题都可以通过手动将完全借出的抵押品代币存入流动性层或提供更有利可图的激励措施来吸引缺少代币的存款来解决。

如果流动性层上没有足够的代币可供借用,那么在尝试将借入的代币转账给用户时,对 operate() 函数的调用将失败。重要的是要注意,Vault 协议在执行与用户头寸的所有操作之前,不会检查是否有足够的流动性。

借款利息

在 Morpho Blue 协议中,每个创建的市场都配置了 IRM(利率模型)参数。此参数表示外部合约的地址,该合约返回已创建的贷款市场的借贷费率。此借贷费率用于计算贷款代币存款人应计的利息。因此,借款人在偿还债务时需要返回更多的代币,并且流动性提供者有机会提取更多的贷款代币。

此外,该协议允许配置市场费用。此费用旨在将一部分借款费用分配给 Morpho Blue 协议所有者指定的费用接收者。通过这种方式,该协议引入了在管理利率和费用方面的灵活性,从而有助于将收益分配给系统中的不同参与者。

在 Fluid 协议中,利率由 Fluid 依赖的底层流动性协议确定。为流动性协议支持的每个代币配置了奖励率模型。奖励率用于增加底层代币到 iToken(在流动性层上铸造)的汇率。Fluid 协议中的 Vault 利用这些汇率并根据金库中的流动性来计算供应和借入的兑换价格。在修改头寸期间,这些兑换价格用于更新用户的新抵押品和债务金额。

借款利息以借款代币支付。借款利率是在流动性协议中为每个代币配置的,并从那里获取。借款利率在借款兑换价格计算期间应用,然后会影响用户的债务金额。由借款人(或清算人在清算事件中)支付的利息在修改头寸时会发送到流动性层。

健康因子

在 Morpho Blue 中,有一个针对用户头寸的专门检查,其中涉及预言机返回的抵押品价格、从市场配置中获得的 LLTV(贷款价值比)参数以及用户借入的资产总额。如果用户尝试借入超过 LLTV 允许的数量,则此检查将失败。此外,如果抵押品价格下跌,则该头寸也被认为是不健康的,并会受到清算。

重要的是要注意,可以为不同的市场设置不同的 LLTV 参数,每个参数对应于不同的抵押品和贷款代币对。这允许针对 Morpho Blue 协议中每个市场的特定特征进行灵活的配置。

Fluid 协议允许为特定金库配置清算阈值参数。该值用于检查用户的头寸健康状况。此外,Fluid 协议利用预言机来获取抵押品价格数据。当用户的头寸被放置在分支上时,会计算一个清算刻度线,该刻度线有助于确定何时应将该头寸视为不健康。抵押品价格和供应/借贷比率会影响头寸状态,并在每次调用 operate() 函数时进行计算。如果用户头寸的一部分受到清算,那么它将移动到另一个清算刻度线较低的分支,并被标记为受部分清算。

清算

在 Morpho Blue 中,只有在头寸被认为不健康时才有可能进行清算。用户可以调用 liquidate() 函数,并提供借款人的地址和扣押的资产金额作为参数。清算发生在借款人创建的特定头寸上。

有一个检查可以确定该头寸是否健康,该检查利用预言机价格和 LLTV 市场参数作为抵押品。然后计算要偿还的债务代币金额。一个特殊的参数,即清算激励因子,通过减少要偿还的资产金额或增加扣押的抵押品代币数量(取决于计算方法)来使清算有利可图。

如果用户的整个头寸变得不健康,则可以清算整个用户头寸。在清算过程之后,借款人的头寸抵押品和债务价值会降低。如果借款人的抵押品代币数量降至零,则会检查坏账 - 如果适用,则会减少市场供应和借入资产的全局计数器。

在清算过程结束时,扣押的抵押品将从清算人转移到清算人,并且偿还的债务代币将从清算人转移到 Morpho Blue 协议。

不可能出现这种情况,即抵押品无法转移到清算人。Morpho Blue 协议利用 ERC-4626 标准,该标准确保从借入资产到供应资产(以及往返)的所有转换都是成比例的。用户无法清算比最初存入的更多的抵押品。如果清算人试图扣押比用户头寸控制的更多的资产,那么他们的交易将会恢复。

在 Fluid 协议中,对所有不健康的头寸同时进行清算。清算人应指定他们愿意清算的债务金额。将当前金库的最高刻度线(表示最新用户开设的头寸)与使用预言机返回的当前抵押品价格、在全局金库设置中设置的清算阈值以及供应/借贷汇率计算出的刻度线进行比较。如果当前金库的最高刻度线高于清算刻度线,则开始清算过程。在这种情况下,将启动一个特殊的循环,遍历所有可访问的分支(表示不同刻度线的范围和相应债务的金额),直到没有可清算的债务或达到清算人请求的金额为止。

出售抵押品的价格为预言机返回的当前价格加上为每个金库设置的清算罚款。有一种特殊的功能可以帮助吸收坏账。如果没有人愿意带回债务代币,或者抵押品价格大幅下跌,那么可清算的抵押品和债务金额将从存储尽可能多流动性的特殊全局变量中扣除,以便将其引入协议以弥补坏账。

如果没有足够的抵押品代币可以转移到清算人,这是一个与借贷协议或流动性合约相关的问题。在正常情况下,不应该发生这种情况,但是如果试图清算比可用抵押品更多的抵押品,那么对清算函数的调用将在尝试转移抵押品代币时恢复。没有特殊的检查可以确保在清算过程开始之前有足够的流动性。

抵押合成代币

具有合成代币的协议的通用定义

有一种借贷协议的子类,其中借入的代币由协议本身铸造。协议中所有 CDP 的总抵押品充当该合成代币的抵押品,该代币的总供应量代表协议的债务。协议的整体抵押率(这些值的比率)直接影响市场汇率,从而使清算机制特别重要。由于发行由协议控制,因此可以实施更复杂的清算方案(包括软清算)。此外,此类别的协议通常具有一些用于额外控制合成代币市场价值(Hook机制)的机制,但其中大多数超出了本研究的范围。

稳定币通常建立在使用合成代币的借贷协议的基础上。稳定币是一种代币,其市场价格旨在由协议与某个外部资产(最常见的是美元)Hook。此类别有一些用于额外控制速率的机制。大多数Hook机制都超出了本研究的范围。但是,其中一些(如 Stakewise 中的赎回)也用于流动性质押借贷协议中。

借款利率

由于市场波动,很可能出现大量 CDP 抵押不足的情况。这种抵押不足的 CDP 构成了协议的坏账。借款利率(向用户的债务收取的费用)是支付协议债务的主要工具之一。因此,为了取回抵押品,用户必须偿还比最初借入的更多的合成代币。

在 Maker DAO 中,借款利率称为“稳定费”。债务的利息由两部分组成:整个协议的基本利率和给定类型的抵押品的特定利率。前者由 DAO 设置以鼓励 CDP 的开启或关闭(这取决于当前的市场情况),而后者用作不同类型抵押品的风险参数之一。从所有 CDP 收取的总利息会增加协议的盈余,该盈余可用于偿还由于清算抵押不足的 CDP 而累积的协议坏账。

清算

借贷协议中通常有三组参与者:贷款人、借款人和清算人。贷款人将流动性引入协议,以便借款人可以将该流动性作为贷款并向贷款人支付特殊的借款费用,以激励他们继续提供流动性。贷款人应有一些保证,即他们的资金将得到偿还,因此要求借款人提供资产作为抵押品,贷款偿还后将返还抵押品。

借款人可能无法偿还其债务(或故意不这样做)。在这种情况下,清算过程开始 - 借款人的抵押品以折扣价出售给清算人,以换取偿还的债务。

清算过程可以通过不同的方式组织:可以是硬清算、软清算和抵押品赎回。

硬清算

硬清算是经典的清算机制,其中清算过程是不可逆转的。在 Maker DAO 中,只存在硬清算。任何用户都可以使用名为 Dog 的合约报告不健康的 CDP。名为 Clipper 的合约负责进行抵押品拍卖(每个抵押品类型一个 Clipper 合约)。CDP 的债务将添加到协议的坏账中,抵押品将转移到相应 Clipper 的余额中。

拍卖以荷兰式进行。最初,为抵押品设置了以 DAI 计价的价格,该价格超过了 CDP 的原始债务。随着时间的推移,价格会降低,直到找到抵押品的买家。购买者可以购买部分抵押品或全部抵押品。

价格降低的曲线由 Abacus 合约确定(每个 Clipper 合约一个 Abacus)。减少可以是线性的或指数的。荷兰式拍卖允许参与者避免冻结其资金。因此,清算人可以在一笔交易中进行快速贷款,购买部分抵押品,并通过在市场上出售抵押品来结束快速贷款。

如果自拍卖开始以来经过了一定的时间,或者如果抵押品的价格相对于起始价格跌破某个阈值,则可以重新开始拍卖。

软清算

软清算是 Curve 团队在 crvUSD 协议中引入的一种全新的清算机制。crvUSD 协议是 Curve 团队开发的稳定币协议。软清算是此稳定币的独特功能,使用户的抵押品更能抵抗价格波动。

用户存入协议的抵押品放置在协议的内部 AMM 中。内部 AMM 具有累积用户抵押品的频段(或刻度线)。用户可以将他们的抵押品放置在特定数量的频段上。频段的数量越多,用户的位置就越安全,并且他们可以针对抵押品铸造的 crvUSD 就越少。

当抵押品在市场上价格下跌时,内部 AMM 总是会激励套利者购买 crvUSD 的抵押品。此外,当抵押品的价格开始在市场上上涨时,它会激励购买 crvUSD 的抵押品。这些机制允许清算变得柔和,这意味着当部分用户抵押品因价格下跌而被清算时,抵押品可以通过市场参与者买回,并且用户将能够以少量费用退还所有先前存入的抵押品,这些费用用于激励市场参与者。

软清算机制是一个非常强大的工具,可以保证如果抵押品的价格恢复,用户的抵押品可以由市场参与者退还给协议。此机制的要求之一是它要求抵押品始终具有流动性,以便可以轻松地来回兑换借入的代币。不幸的是,流动性质押协议无法满足此要求,因为所有抵押品都存储在共识层中,并且流动性不足。此外,软清算机制更适合于价格不相关的资产(例如,ETH 和任何稳定币)。

赎回

赎回是协议买回其合成代币的机制。重要的是要注意,赎回与偿还债务不同。进行赎回的用户甚至可能没有自己的 CDP;相反,代币可能是通过市场获得的。

在 StakeWise 协议中,赎回机制允许以协议中的当前汇率将 osETH 兑换为 ETH。

LTV 比率超过赎回阈值(当前为 91.5%)的 CDP 用于赎回。任何 osETH 持有者都可以使用此类 CDP 进入金库,并以汇率烧毁部分 osETH。烧毁的 osETH 从 CDP 的债务中扣除,ETH 从其抵押品中取出。与清算不同,赎回没有奖励。此外,赎回只能对非健康 CDP 债务的那部分进行,这将使 CDP 再次健康。

该机制用于对 osETH 的市场汇率施加压力。如果在任何交易所的价格下跌,套利者都可以购买廉价的 osETH,将其带到协议,并以公平的价格将其兑换为 ETH。这有助于市场汇率恢复正常。此外,它略微改善了执行赎回的头寸的健康状况,从而提高了 osETH 的整体抵押率。

仅适用于金库中的 ETH 才能进行赎回(协议的大部分 ETH 都在验证者上)。如果 osETH 的市场汇率显着低于汇率(这意味着金库中没有足够的 ETH 用于赎回),则预言机必须启动从验证者中提取 ETH。

Maker DAO 功能

在此类协议中还使用了其他机制,以使其在市场波动期间更加灵活并提高合成代币的可靠性。该协议可以使用二级流动代币来吸收过多的债务。

在 Maker DAO 中,治理代币 MKR 用于此目的。如果系统的抵押不足的债务超过某个阈值,则会向用户提供以 DAI 结算超额债务以换取一定数量的 MKR。随着稳定费的收取,系统的盈余会增加,并最终可能会超过另一个阈值。此时,可以进行反向拍卖,协议可以回购 MKR 以换取 DAI。该协议的回购机制和 MKR 的治理功能使其具有流动性。出售 MKR 的机制和回购 MKR 的机制都是通过拍卖实施的,以最公平的方式反映当前的市场状况,从而支付债务或出售盈余。

MKR 出售拍卖由 Flopper 合约以荷兰式拍卖的形式进行。要结算的 DAI 债务金额是固定的,用户竞争他们愿意接受的用于结算的最少 MKR 数量。如果拍卖期间没有人出价,则会以更高的初始 MKR 价格重新开始拍卖。因此,如果 MKR 的任何价值大于零,则拍卖最终应成功结束。

MKR 回购拍卖由 Flapper 合约以经典英式拍卖的形式进行。要出售的 DAI 金额(来自系统的盈余)是固定的,用户竞争他们愿意为之支付的 MKR 数量。

StakeWise 功能

除了上述机制外,StakeWise 协议还具有使用合成代币的流动质押协议所需的其他功能。需要这些功能是因为流动质押协议没有来自验证器的相等奖励,并且需要在所有验证器之间近似这些奖励,以计算平均奖励率以增加流动代币的价格/余额。在具有由 DAO 控制的验证器集的通用流动质押协议的情况下,这不是一项非常艰巨的任务。协议可以简单地选择所有验证器的平均奖励作为流动代币奖励率。但是在协议中不同子集的验证器(StakeWise 案例)的情况下,这是一项更复杂的任务。流动代币的奖励率计算为 StakeWise 协议中每个金库的加权 APY。此方法不是很复杂,并导致对 APY 低于平均水平的金库失去激励。这意味着由于市场和协议机制,用户的股份将从效率较低的金库转移到效率较高的金库。这种方法提高了协议的效率,但可能对协议的去中心化有害。

StakeWise 作为一种流动质押协议,还具有此类项目典型的附加功能。此功能是可能在从金库初始化的验证器上发生的削减。它为金库抵押率带来了额外的风险,使其容易受到可能的降低。它在 StakeWise 协议中通过将贷款价值比系数设置为 90% 来考虑,这意味着不超过质押金额 10% 的削减将不会导致金库挤兑事件。实际上,削减的幅度可能超过 10%,这意味着除了通过 LTV 比率进行保护外,流动代币还应该能够进行负的重新调整或降低价格。在 StakeWise 协议中,这也是可能的,但前提是所有金库都报告其验证器的削减。这意味着任意一个管理不善其验证器的金库都可能导致金库挤兑事件,原因是该金库的抵押率可能低于 100%,并且协议资金库应承担该费用。

信任假设

像一般的超额抵押借贷协议一样,使用合成代币的协议依赖于信任假设来按规范工作。此类信任假设的一个示例是 Maker DAO 协议中软Hook的机制。该机制依赖于从协议中借用 DAI 的用户将在 DAI 价格跌破与Hook相关的价格时在市场上购买它来支付他们在协议中的债务(协议始终假定 DAI 价格为 1 美元)。这种机制不在本文的讨论范围之内(代币的价格Hook不是流动质押协议的必要功能),但是有必要了解该协议通常依赖于此类机制来按规范工作。

与 Stakewise 协议拥有的流动质押协议相关的一个此类信任假设是,清算人将等待长达 36 天(在削减的情况下)清算金库中不健康的头寸。如果在金库拥有的验证器上进行削减,则用户的头寸可能会变得不健康。金库中可能也没有可以用来支付清算的 ETH。在这种情况下,清算人将需要等待一段时间(直到验证器提款完成)才能清算头寸。

除此之外,Stakewise 协议假定金库中的削减不会超过 10%。超过 10% 的削减事件发生的可能性很小,但仍然存在。对于这种情况,协议应有一个备用方案;否则,可能会发生金库挤兑的情况。所有信任假设应依赖于激励市场参与者按照规范与协议交互的市场机制(例如,清算始终受到协议的额外激励)。如果信任假设没有额外的激励 - 紧急措施应由 DAO 记录和实施,以应对这种情况。

重新质押

主动验证服务(AVS)是区块链应用程序,需要确定网络上的某个操作是否有效。AVS 包括Layer2解决方案、预言机、Keeper 网络等。当然,新网络可能依赖于权威证明,这意味着所有操作都由协议控制的节点执行。但是,这样的协议不能被认为是真正去中心化的。一种解决方案是依赖于协议参与者的权益,作为所有参与者诚实行为的保证。如果参与者从事恶意行为,他们将失去其权益。此外,用户可以提供一些权益,以保证某个受信任的行为者(运营商)诚实地执行其工作。在新网络中组织质押可能非常具有挑战性。网络的代币通常最初缺乏流动性,因此可以依赖于 ETH 作为权益。一种通过经济手段吸引 AVS 权益者的方法是重新质押。重新质押是一种机制,其中相同的以太坊同时用于原生质押和在某些 AVS 中进行质押。因此,这样的权益者可以赚取更多。但是,风险也增加了:权益可能会受到共识层和第三方协议中的削减。重新质押可以是本地的,在这种情况下,以太坊直接被引入到重新质押协议中,或者基于流动质押代币(LST),其中使用来自诸如 Lido 之的流动质押协议的代币。

EigenLayer 是利用重新质押机制的一个示例协议。该协议支持本地重新质押和 LST 重新质押,但是在本研究的上下文中,前者更有趣。它是如何工作的?用户的入口点是 EigenPodManager 合约。对于每个用户,通过 EigenPodManager 部署一个新的 EigenPod 合约。EigenPod 负责与特定用户的验证器的所有交互。用户存入 32 ETH 和验证器凭据到 EigenPod。然后,EigenPod 通过 Beacon Deposit Contract 将资金发送到相应的验证器,将自己的地址指定为提款地址。这是一个关键点,因为提款地址只能设置一次,从而确保 EigenLayer 控制用户的权益。在用户提供了存款已到达验证器的 Merkle 证明之后,EigenPodManager 中的份额会被记入到用户的账户。

如前所述,权益者可以将其权益委派给受信任的运营商。如果运营商执行恶意操作,则权益者将赔钱。EigenLayer 中的每个运营商都与一个或多个 AVS 一起工作。从权益者到运营商的权益委派是通过 DelegationManager 合约进行的。权益者在余额中的所有份额会立即委派给运营商。如果运营商执行不正确的操作,则所有已将其份额委派给该运营商的权益者将面临削减。想要提取资金的用户会取消将份额委派给运营商并排队等待提取。需要延迟以防在提取之前发生削减。当前,EigenLayer 中的削减机制仍在开发中,奖励分配机制也是如此。

非托管质押

概述

非托管质押允许用户以完全透明和非托管的方式存入他们的 ETH。完全透明意味着 ETH 流可以在链上检查,从用户钱包开始,到激活的验证器结束。验证器存款数据存储在链上,允许用户在存款之前检查其有效性。非托管意味着保证用户在质押期间保留对其资金的完全托管权。简而言之,这意味着用户可以随时提取他们先前质押的所有 ETH + 奖励。

当前,以太坊网络中的质押不允许以透明的方式转移执行层奖励,这意味着非托管质押协议必须监视验证器收到的所有 MEV 和提示,并检查验证器是否将它们发送到专用地址。除此之外,提款请求也无法透明地触发(EIP-7002 将会改变这一点)。有几种方法可以以半透明的方式实现它。一种选择是允许用户调用合约,该合约将发出事件。运营商应监视此事件,并在收到此事件后,运营商应将验证器放入提款队列中。此处的另一种选择是将验证器退出消息分成几部分,并将它们发送到受信任的服务,例如,协议的预言机服务。这将允许用户通过从预言机服务请求它来随时构建和发送提款请求。拆分过程可以最大程度地降低其中一个预言机私钥泄漏的风险。 例如,在 Kiln 协议中,用户可以透明地质押他们的 ETH。所有与用户 ETH 相关的操作都将是透明的,这要归功于链上的合约系统。验证者存款数据在用户的存款之前提交到链上,并且可以在使用前进行验证。质押奖励,包括执行层和共识层奖励,都会累积到为每个用户部署的特殊合约中。只有合约的所有者才能领取这些奖励。此外,只有所有者可以通过调用一个特殊函数来触发验证者退出,从而触发一个操作员将处理的事件。

分布式验证器技术(Distributed Validator Technology,DVT)可以通过在分片之间拆分验证器的私钥,从而显著提高非托管质押的安全性。这将允许验证器保持 100% 的正常运行时间(这意味着不会因为验证器离线而被罚没)。此外,它将有助于以非托管方式存储验证器的私钥,允许用户随时发送提款请求,而无需依赖操作员的事件提交-接收服务。

防抢跑漏洞安全措施

抢跑漏洞允许恶意节点运营商预先初始化一个验证器,其中包含少量权益和恶意的提款地址。根据以太坊共识层规范,提款地址只能在首次存款时初始化一次。这意味着,如果节点运营商使用其地址而不是用户选择的提款地址来预先初始化验证器,则该节点运营商可以窃取用户的资金。有关该漏洞的详细描述,请参见此处:https://learnblockchain.cn/article/14858

允许任何节点运营商提供验证器存款数据的 Trustless 协议应保护自己免受此类攻击。例如,Stakewise 协议具有一个特殊的预言机服务,该服务通过 Vault 运营商的请求来签署验证器存款数据。在签名时,预言机应检查当前存款根验证器是否尚未初始化。如果一切正常,他们会签署消息,该消息在将 32 ETH 存入验证器之前经过检查。

Kiln 协议受到此类攻击的法律保护。之所以能够实现这一点,是因为该协议与节点运营商签署了一项特殊协议。此外,还有一个链下监控服务,用于检查 Kiln 验证器是否未在任何地方使用。

EIP-7002

EIP-7002 将引入执行层可触发的退出。EIP 将允许提款地址直接从执行层发送验证器退出消息。这意味着当前用于非托管质押的某些机制将变得无关紧要。这将提高流动性质押协议的透明度和可信度。

目前,协议使用不同的工具和服务来允许 Trustless 退出消息构造并将其发送到 Beacon 链。但是,所有这些解决方法都需要用户信任服务或提供商。EIP-7002 将使流动性和非托管质押更加 Trustless,并减少链下服务的数量。

存款数据存储

有几种存储验证器存款数据的方法。一种选择是将所有必要的数据存储在链上。在这种情况下,所有的数据都可以被所有的质押者轻松验证,这为协议提供了更高的透明度。非托管质押协议应尽可能透明,从而使此选项更适合此类项目。

另一种选择是以最大程度地减少链上存储使用量的方式存储存款数据。例如,可以使用此讨论中的方法。以这种方式存储存款数据将可以显著降低交易成本。

可以完全不将存款数据存储在链上。这可以通过一种特殊的服务来实现,该服务将检查并在链下签署存款数据,并将签名的数据发送给协议运营商,该运营商可用于初始化以太坊网络中的验证器。

设计目标与约束

下面描述的设计的主要目标是利用 stETH 的流动性,而不参与经典质押(通过 Lido v2 质押)的社交机制,方法是通过提供在验证器上质押的 ETH 作为抵押品,并具有内置的经济模型。

设计的约束:

  • 正常情况下,用户不应影响 stETH 的 APR;
  • 铸造的 stETH 应该由抵押品支持:在验证器上质押的 ETH 被视为抵押品;
  • 在合理的范围内,验证器(作为抵押品提供)性能的风险已降低到极端条件;
  • 验证器(作为抵押品提供)所有权的风险已通过协议下的提款凭证控制来降低。

设计

本节概述了必须在 Lido v3 中实施的核心机制,以确保无缝的质押操作,同时遵守先前建立的约束。

Lido v3 架构背后的关键思想是创建独立的、可定制的 Vault,这些 Vault 可以接受用户的 ETH,并使用验证器上的 ETH 作为抵押品来铸造 stETH。

设计 Lido v3 的主要约束之一是 Lido v2 必须继续以其当前形式运行(有关此的更详细说明,请参见相关部分)。

本节介绍了实现 Lido v3 核心概念所需的机制。由于每种机制都可以通过多种方式实现,因此我们提供了详尽的理由来解释为什么所选方法是最有效的。

Vault 基础机制

一般流程

用户将 ETH 存入 Vault,并从该 Vault 收到 ERC20 代币。ERC20 代币的数量代表用户在 Vault 中的份额。对于用户在 Vault 中的头寸的表示方式,有几种选择。它可以是 ERC20 代币,该特定 Vault 的 NFT 代币,或者只是 Vault 中的内部信息。考虑到 Vault 份额具有可替代性,并且应该允许在不同参与者之间转移价值,因此最好使用 ERC20 代币来代表 Vault 中的头寸。此选项还将使 Vault 管理者能够另外激励在特定 Vault 中进行质押。他们可以轻松地创建一个 farming 池。此外,ERC20 代币的选项将使集成商更容易与协议集成。

在向 Vault 存款后,用户将成为 Vault 份额的持有人,并且他们可以随时请求从 Vault 中提取 ETH。用户可以请求的 ETH 可能数量应考虑到 Vault 控制的总 ETH、用户在该 Vault 中的份额数量以及用户可能的债务来计算。(我们稍后将更多地讨论用户的债务以及如何创建债务。)为了满足用户提出的提款请求,Vault 应该使用 Vault 产生的执行层奖励、向 Vault 存入的新存款以及从验证器中提取的 ETH 之间的最佳比例。应该选择该比例,以优化 Vault 的 APR。考虑到退出旧验证器并初始化新验证器会显著降低奖励,因为就激活队列和退出队列的长度而言,始终可以通过使用新存款来支付提款来使 Vault 获利更多。Lido v2 中实现的提款队列是如何为每个 Vault 实现提款过程的一个非常好的例子。提款队列还将解决用户提款请求可能存在的罚没会计问题。

从 Vault 中铸造 stETH 是用户从 Vault 中借用 stETH 的过程。在这种情况下,用户的抵押品是用户在该 Vault 中拥有的虚拟 ETH 数量(因为大多数 ETH 将分配给验证器)。该数量可以计算为(users_shares / total_Vault_shares)* virtual_Vault_ETH。每个 Vault 的贷款价值比(Loan-To-Value,LTV)的计算方式在风险管理部分中进行了详细描述。重要的是要注意,Lido v2 正在使用活动的验证器作为抵押品将 stETH“借给”Vault,因此 Vault 的 LTV 将为 0%,直到它激活至少一个验证器。由于 stETH 是一个可重新定价的代币,因此借用 stETH 意味着用户将需要偿还最初借用的金额加上借用期间的 stETH 重新定价。如果 Vault 的 APR 小于 Lido v2 的 APR,则用户的债务增长速度将快于他们的抵押品,反之亦然。Vault 份额的转移应该触发用户的健康因子计算,因为它会影响用户的抵押品。

Vault 管理

Vault 管理应涵盖新验证器的选择和初始化、将旧验证器放入退出队列、更新 Vault 奖励和损失以及更新提款队列的状态。“存储验证器 DD”部分详细描述了存款数据存储过程。在这里,重要的是要考虑这样一种情况:没有新的验证器可以从有足够可用 ETH 来初始化多个验证器的 Vault 中初始化。这种情况可能会对 Vault APR 产生负面影响,并且可能会被想要清算 Vault 中头寸的恶意行为者触发。将过多的 ETH 存入 Lido v2 或其他 Vault 可以部分地解决 APR 较低的问题。但是,从长远来看,这不可避免地会触发 Lido v2 或 Vault 中的验证器退出,因此此选项对协议而言不是很好。另一种选择是将 ETH 存款限制为可以从 Vault 中初始化的可用验证器的数量。Vault 没有新的验证器要初始化的可能性很小,因此在正常情况下不应触发存款限制。

新验证器的选择和初始化应由 Vault 运营商控制。在验证器初始化期间,存款数据应通过 Lido DAO 的多项检查获得批准。这至关重要,因为如果验证器开始恶意行为,Lido 应该能够在任何时候从验证器中提款。为此,应检查提款地址,并应检查存款合约根哈希,以确保验证器之前未使用不同的提款地址进行初始化。存款数据的选择应由 Vault 运营商通过在数据上传期间设置 DD 的特定顺序来控制。此外,应由 Vault 运营商控制将活动的验证器放入退出队列的顺序,以便他们能够将需要更新 EL 或 CL 客户端的验证器放入退出队列。“将现有验证器放入提款队列”部分详细描述了将活动的验证器放入退出队列的过程。

Vault 应该有一个非常重要的状态变量,该变量将核算由 Vault 控制的所有 ETH。此变量应核算所有新存款、验证器上的当前 ETH 数量(活动的验证器、在激活队列中的验证器、在退出队列中的验证器)、执行层奖励等。考虑到可能的 Vault 数量巨大,并且无法从执行层访问验证器余额的事实,验证器的共识层余额应由外部预言机更新。为每个 Vault 更新状态变量会太昂贵,因此最好使用 Merkle 树技术来最大程度地减少存储空间消耗。每个 epoch 只能更新一次 Merkle 树的根哈希,之后 Vault 运营商可以使用该 Merkle 树的证明来更新 Vault 状态。

Merkle 树根哈希应在特定的合约中更新,该合约可以从所有 Vault 访问。根哈希不能仅由一个参与者控制,因为操纵此值很容易被用来耗尽所有 Vault 中的所有资金。Lido DAO 应该维护一个特殊的链下无需许可的预言机网络来更新此值。

应每隔一个 epoch 更新一次提款队列;可以根据更新 Gas 成本来选择 epoch 的持续时间(例如,epoch 持续时间可以是一天或 8 个小时)。在 epoch 更新之前,所有新存入的 ETH 都不能用于满足提款请求。

非托管质押

存储验证器存款数据

验证器存款数据(DD)可以通过三种方式存储:完全链上、链下或链上逻辑与链下服务的组合。让我们检查每种方法,并根据协议的需求确定最合适的方法,以实现高效且值得信赖的解决方案。

  • 完全链上
  • 将验证器存款数据完全存储在链上将提供最大的透明度,使任何人都可以验证存储的数据。这种方法可以防止存入未经批准的密钥,并防止重复使用验证器的密钥。所有逻辑都可以在智能合约级别实现。但是,这种方法会引入复杂性并增加 Gas 使用量。写入合约的存款数据仍应经过验证 - 可以是 DAO 的批准或内置检查,以确保数据的正确性。仍然可以通过受信任的当事方将不正确的数据写入合约,并且应该有特殊的函数来帮助重写它。所有这些要求将导致额外实施的逻辑。Vault 运营商将需要将验证器存款数据写入智能合约存储,从而导致更高的运营成本。用户可以将 Ether 存入合约,从而触发对 Beacon 链存款合约的调用,其参数从存储中读取。
  • 链下
  • 使用链下服务来管理所有数据可以显著降低 Vault 运营商的成本,但会使数据无法验证。这会产生潜在的操纵和妥协漏洞。链下服务可以监视用户存款,并且当有足够的 Ether 来初始化验证器时,可以直接使用从本地数据库读取并在运行时签名的参数来调用 Beacon 链存款合约。在这种方案中,用户无法控制初始化期间使用的验证器存款数据,因此需要盲目信任链下服务。
  • 混合链下和链上
  • 混合方法涉及同时使用链下和链上方法。链上存储可以限制为所有可用验证器 DD 的 Merkle 树根。链下服务维护 Merkle 树结构,添加新的验证器数据(已预先验证),并将树根推送到智能合约。Vault 运营商只需要提供证明,证明其验证器存款数据已包含在 Merkle 树中,该树的根当前存储在合约中。这种方法允许用户在进行存款之前验证存款数据,并降低运营商的 Gas 成本,因为他们不需要将所有验证器数据存储在链上。

选择最合适的方法将取决于透明度、成本效益和信任之间的权衡。考虑到用户验证的需求和降低 Vault 运营商的运营成本,混合链下和链上方法似乎通过提供透明度同时最大限度地减少链上存储需求来取得平衡。

验证器退出消息可以通过多种方式实现,其中一种方法是让节点运营商控制验证器退出,从而可能允许他们停止提款,这超出了用户的控制范围。目前,有一种使用预签名退出消息的方法,但它需要 Vault 运营商和协议预言机之间进行额外的通信。

在这种方法中,用户需要在存款后向节点运营商发送特殊请求。节点运营商通过将签名的退出消息发送回用户来做出响应。此过程确保用户将来可以随时使用预签名退出消息触发验证器退出。但是,它也假定用户在存款和从节点运营商收到预签名退出消息之间的期间内无法控制其资金。该幼稚的方法在EIP-7002 解释器文章中有详细描述。

重要的是要注意,这种通信方案降低了用户资金的安全性,因为用户有责任将收到的预签名退出消息存储在安全的位置。此外,用户在此期间缺乏控制权使人怀疑该过程的整体安全性和可信度。

执行层可触发的退出(EIP-7002)与预签名退出消息相比,引入了一些改进。首先,用户可以完全控制提款过程,而不是依赖链下服务(例如,StakeWise 预言机系统,该系统有助于重建预签名退出消息)。其次,用户和节点运营商之间的通信显著减少 - EIP-7002 只是引入了新的共识层功能,而不是用户向节点运营商发出的用于启动预签名退出消息创建的额外请求。最后,EIP-7002 加强了用户资金的安全性,因为他们不必担心预签名退出消息的安全存储,只需在需要时发送提款请求即可。

EIP-7002 中描述的方法引入了一个特殊的预编译,该预编译处理由持有验证器提款凭证的实体在执行层上启动的退出消息。该方案为质押者提供了对退出过程的完全控制,而没有任何质押者无法触发验证器提款的时间段。

EIP-7002 被认为是一个强大的解决方案,尤其是在非托管质押场景中,用户有权自主决定何时启动退出。

新验证器初始化

根据所选择的方法,新的验证器初始化应分多个步骤进行,包括链下和链上流程。最初,需要正确打包新的验证器数据,并将其作为叶添加到 Merkle 树,该树存储在链下。此操作会触发 Merkle 树根的更新,需要将其推送到链上,以推送到负责处理用户存款的智能合约。然后,可以使用更新后的根初始化验证器的数据。

将新的树根推送到合约后,进行存款的运营商应能够提供验证器 DD 以及 Merkle 证明。此证明用于证明所提供数据的包含和有效性。如果链下服务不仅存储树根,还存储一些后续节点,则还可以缩短证明长度。如果根据特定节点运营商的验证器总数来选择树大小,则这些节点将不是树叶。

此外,应为每个使用的验证器存款数据实施一个链上计数器。此计数器将阻止运营商选择已初始化的验证器,从而确保验证器初始化过程是唯一的。

将现有验证器放入提款队列

根据 EIP-7002 的文本,建议引入一个特殊的预编译。此预编译将允许将基本的以太坊交易发送到特定的预编译地址。该交易应包含退出验证器的公钥,并且源自该特定验证器指定的提款地址。此预编译的目的是处理退出消息队列,并将验证器退出消息转发到 Beacon 链。在 Ethereum 执行层上提交验证器退出消息的过程有一个详细概述。它描述了消息提交期间发生的所有必要检查和状态更新。

发送到此预编译的退出消息将由共识层以类似于常规自愿退出的方式处理。这种机制允许质押者更直接和受控地启动验证器退出过程,从而为用户提供了一种方便和安全的方式来管理其质押资产并在需要时退出验证器。

完成提款请求

EIP-7002 在 Beacon 链区块头中引入了一个特殊值 - exits_root。该字段将用于存储存储在区块主体中的退出消息的 Merkle 树根。这些值可以由链下服务监视和验证,然后该服务将获取愿意退出的验证器的公钥并持续监视其状态。

一旦提款完成,链下服务会将该数据推送到 Vault 合约,并更新有关可用资金的信息(验证器不再收到奖励并且已退出)。务必检查验证器的状态,并且仅在验证器退出并在 256 个 epoch 后变为可提款时才更新合约状态。这种方法将消除在退出阶段验证器被罚没且其提款被延迟的可能情况。

充当预言机的链下服务可以向 Beacon 链 RPC 节点发送请求,以查询有关最近完成的区块及其退出消息树根的数据。然后,可以使用区块主体来获取退出验证器列表,以对其状态执行请求。一旦验证器的状态更改为完全退出,预言机就可以更新有关验证器状态的链上数据。

风险管理

一般注意事项

带有 Vault 的 Lido 设计应允许任意验证器的选择和管理。此功能带来了一个额外的风险,即验证器将无法正确或恶意地维护。在这两种情况下,Lido 都面临着验证器上的 ETH 不足以支付从 Vault 铸造的 stETH 的风险。为了缓解此风险,以下概念已嵌入到设计中:

  1. 过度抵押(LTV < 1);
  2. 参与 Vault 的 NO 债券(可选)。

着重于 (1) 以确定验证器余额减少的可能幅度,应将潜在的罚没风险分解为关键组成部分:

  1. 初始罚没惩罚(有效余额的 1/32,每个验证器 1 ETH);
  2. 相关惩罚(有效余额的 3S/32,四舍五入到最接近的整数,其中 S 是同时被罚没的验证器的份额);
  • 退出期间的不活动惩罚,由以下因素决定:CL 上的 APR(基本奖励);
  • 退出期限(退出队列);
  1. 在退出期间进一步重新定价 stETH(与 (3) + EL 上的 APR 相同)。

因此,基于风险的 LTV 应基于所提供的 LTV 可以覆盖的场景来确定,更极端的版本由外部资源(协议覆盖基金、NO 债券等)覆盖,或在 stETH 持有者之间进行社交。

在 CL 和 EL APR 的假设范围内,可以基于各种风险偏好确定不同的曲线(持续罚没的百分比、流失限制和退出队列大小)。计算的另一个风险因素是整个 Lido 协议中 NO 的 ETH 数量。过度抵押可以被视为 NO 参与不同模块(精选集模块)的风险缓解措施。

stETH APR

流动性质押协议中用户持有的液体或合成代币的价值通常会随着时间的推移而通过 APR 增加。从技术上讲,这可以通过可重新定价的代币(如 stETH)或通过具有汇率的代币(如 osETH 或 rETH)来实现。虽然似乎在不同的流动性质押协议中,此代币扮演着大致相同的角色,但实际上业务逻辑存在严重差异。

在 StakeWise 中,用户存入 ETH 并收到 Vault 份额作为回报。用户通过这些份额价值的增加来赚钱。铸造 osETH 的能力是额外激励的一种方式。用户可以选择不铸造 osETH,而仅将协议用于质押目的。他们还可以铸造代币并持有它们(例如,作为针对 Vault 中验证器突然大规模罚没的保险)。因此,在 StakeWise 案例中,APR 可以在一定范围内进行调整。如果设置得太高,随着债务增长快于 Vault 验证器的 APR,很大一部分 CDP 将随着时间的推移变得不健康。协议的创建者选择协议的 APR 作为 Vault 中加权平均 APR。可能目的是确保在平均或高于平均水平执行的 Vault 中,CDP 的健康因子不会随着时间的推移而降低。因此,系统在平均水平上保持健康。此外,如果没有清算机制,太高的 APR 将导致 osETH 的总价值增长快于协议上的 ETH 总量。这意味着该协议将变得抵押不足。但是,即使 APR 为零,也无法赎回任何数量的 osETH,因为只有健康因子较低的 CDP 才能用于赎回。此外,很大一部分 ETH 在验证器上,需要大量时间才能提取,因此不能称其为完全流动。

在具有完全合成代币(如在 Stakewise 中)的流动性质押协议中,选择 APR(= 借款利率)的策略可能是什么?所有基于 APR 的 Vault 都可以分为两部分。金库的 APR 低于总体借款利率的部分,以及金库的 APR 高于或等于总体借款利率的部分。第一种类型的金库将承受两种压力。首先,通常流动性将倾向于流向具有相似风险但 APR 较高的金库。其次,第一种类型的金库中的 CDP 会随着时间的推移失去其健康因子,这意味着此类金库中的头寸更容易受到清算和赎回的影响(如果实施了此类机制)。因此,流动性将从第一种类型的金库流向第二种类型。如果所有金库都按 APR 排序,则借款利率将确定划分这两种类型的线在哪里绘制。换句话说,有多少比例的金库必须要么提高盈利能力(这并非总是可行),要么面临资金外流的风险。分割线可以在几个地方绘制,每个选项都有其优点和缺点。

让我们选择一部分 APR 最高的金库,拥有四分之一的协议流动性(我们将其称为上四分之一)。上四分之一的平均 APR 设置为合成代币的借款利率。这种方法的优点:金库被迫竞争验证器的效率和可靠性,任何错误都会降低整体盈利能力,从而降低生存机会。金库需要引入其他机制,例如重新抵押,将外部协议纳入当前协议中,从而提高流动性质押协议在整体 DeFi 市场中的作用。高 APR 对合成代币的持有者也具有吸引力,从而提高了投资吸引力。缺点是它降低了去中心化;超过四分之三的金库变得效率低下,并且很可能会迅速损失流动性,这些流动性将流向上四分之一。在资金重新分配后,新的上四分之一将包含更少的金库,这将再次拉动所有流动性。随着时间的推移,这可能会导致所有流动性都位于一个巨大的金库中。此外,当流动性质押的基础是经典的保守质押时,情况会更好。但是,它不会有如此高的 APR,并且最有效的金库将使用实验性机制,例如重新抵押。如果出现问题(例如,在使用重新抵押的外部协议中出现问题),流动性质押协议也将面临问题。

如果在协议总流动性的中间绘制该线,则一半将在不良金库中,另一半在良好金库中。类似的选项在 Stakewise 中使用,乍一看似乎是一种折衷方案。金库需要生存的 APR 较低,因此这种方法更民主。同时,借款利率定义为加权平均 APR,因此具有高流动性的大型金库具有更大的影响力。而且,很大一部分采用经典策略的普通金库将再次变得不够有利可图,这将继续导致大型风险金库的更大增强和随着时间的推移的中心化。

最后,如果我们选择下四分之一 - 拥有所有流动性的四分之一的 APR 最低的金库,并将借款利率定义为其平均 APR,该怎么办?在这种情况下,大多数流动性将位于盈利能力超过借款利率的金库中,因此用户可以投资更保守的策略,而没有被清算的风险。同时,低效率会降低资产的吸引力。因此,持有者可能更喜欢其他具有大致相同风险的流动性质押代币,但 APR 较高。此外,合成代币的收益应该用作保护,以防发生坏账。例如,由于大规模罚没,特定头寸的 LTV 上升到 100% 以上,从而使其无法清算,这可能会发生。此 CDP 中的借用代币不会获得抵押。此类头寸也由总债务的利息覆盖。因此,低借款利率会增加对不良 CDP 的敏感性,并可能需要较低的 LTV。

在经典的 Lido V2 中,情况有所不同。Lido 中的主要合约是 stETH。用户将 ETH 带到协议,并收到流动代币的份额。stETH。用户对 Lido V2 的总 ETH 的 balanceOF() 表示用户的数量,其中大部分用于质押。因此,对于 Lido V2,无法选择 APR - 它只是反映了协议总资金由于质押奖励/处罚而发生的变化。

在新系统中,stETH 将同时由经典版本的 Lido V2 与一组精选的验证器以及由 Lido Vaults 铸造。因此,存在一个问题:在新系统中 stETH 的 APR 应该是什么?一种选择是使 stETH 完全合成,从 Lido V2 和 Lido Vaults 的 APR 构建其 APR(创建类似于 StakeWise 的架构)。但是,这引发了一些问题。Lido V2 以其当前形式必须停止存在 - 如上一段所述,stETH 中的 APR 现在无法从外部设置,它只是反映了股份与 Lido V2 流动性的当前比率。为了使此工作正常,应该在 Lido V2 周围创建一个额外的代币包装器。从投资者的角度来看,代币反映系统的某种状态而不是成为流动性份额的合成变体似乎不太有利。因此,过渡到组合变体将导致 stETH 失去其优势之一。

一种至少在 Lido V2 的当前架构中进行较少更改的选项如下。stETH 继续代表用户对 Lido V2 总流动性的数量。当用户在 Lido Vaults 中铸造 stETH 时,他们实际上正在以某种借款利率从 Lido V2 借款。用户从 Lido Vaults 中借用的 stETH 的余额会随着时间的推移而重新定价,同时用户的债务会以借款利率增加。在此类架构中,Lido V2 流动性的总量将包括 Lido V2 上验证器的 ETH 和 Lido Vaults 借用的 ETH。

在这种情况下,借款利率应该是多少?它必须不低于 Lido V2 验证器的 APR,否则,stETH 的增长速度将快于其抵押品,从而导致抵押不足。因此,借款利率可以分为两个组成部分:基本借款利率(等于 Lido V2 验证器的 APR)和额外借款利率。额外借款利率的大小决定了给定金库中验证器的 APR 必须超过 Lido V2 验证器的 APR 的多少。否则,该金库中用户的 CDP 会随着时间的推移而失去健康。

新版本的协议不仅设置了 Lido V2 中的 APR,而且还充当 Lido Vaults 中的基本借款利率。以下假设性攻击基于操纵基本借款利率。NO 是管理来自 Lido V2 精选集的验证器的某个节点运营商。此节点运营商在 Lido V2 中不持有股份,但通过质押费赚钱。此外,Lido Vaults 中有一个金库,其标准 APR 与 Lido V2 验证器的 APR 匹配。然后,NO 可能会执行以下操作:

  1. 将 ETH 存入 Vault。
  2. 使用该 ETH 作为抵押品铸造 stETH。
  3. 将 stETH 兑换为 ETH。
  4. 将获得的 ETH 存回 Vault。
  5. 人为地降低 Lido V2 中受其控制的验证器的效率。

步骤 5 将导致 Lido V2 验证器的 APR 降低,从而降低 NO 债务的基本借款利率。在此之后,Vault 的收益变得高于基本借款利率。因此,从步骤 4 引入的份额的价值增长速度快于步骤 2 中的债务。计算表明,即使考虑到运行 Lido V2 验证器的减少奖励和 Vault 的佣金,NO 仍然有利可图。此外,为了最大化利润,NO 可以在步驟 2-4 之后重复步骤 2-4,从而有效地利用其 stETH 头寸。

缓解此漏洞可能性的一个办法是引入额外的借款费用,除了基本借款费用之外,还需要在 Lido Vaults 中收取。在这种情况下,Vault 需要比 Lido Vaults 的精选集更有效地运行,才能使攻击合理。

stETH - 合成 ETH 还是 LST?

带有 Vault 的 Lido 将具有复杂的架构,该架构允许两种铸造 stETH 代币的选项:通过将 ETH 存入 Lido 合约从 Lido v2 以及通过 Vaults 通过将 ETH 存入特定金库并使用此抵押来借用 stETH。有可能在某个时间点,Vault 选项将变得更有效,并且对具有不同风险概况的用户更具吸引力。即使 Lido v2 选项的效率足够高,Vaults 存款人也有可能决定使用从 Lido v2 提款 stETH 来提高他们在 Vaults 中的杠杆率(例如,对于用户而言,从带有 Vaults 的 Lido 铸造 stETH,通过 Lido v2 取消质押,并将更多质押到 APR 高于 Lido v2 的 Vault 比 Aave 中的杠杆选项更有利可图)。在这两种情况下,都有可能将所有来自 Lido v2 的 ETH 存入 Vaults,从而使没有在 Vaults 中开设头寸的用户无法进行提款过程。第二种情况更为严重,因为它将使 OG 质押者(将 ETH 存入 Lido v2 甚至 Lido v1)无法提款 stETH 并取回 ETH。这意味着,对于任何用户而言,不从 Vaults 提款 stETH 的选项将使协议无法偿还。在这种情况下,无法偿还会意味着持有 stETH 的 OG 质押者将无法从 Lido v2 提取 stETH。他们将能够在市场上将 stETH 换成 ETH,但会有额外的价格风险。在这种情况下,stETH 将失去 LST 功能并将成为合成 ETH。让我们考虑一下发生在市场上之前的案例,以比较这两个选项。

比较点 LST 选项 合成选项
流动性(哪个代币数量可以兑换成基础代币) 无限大。任何代币数量都可以兑换成基础代币,没有价格风险(因为可能会发生罚没,所以存在很小的价格风险) 取决于市场状况,用户只能通过交易所将合成代币兑换回基础代币
市场恐慌(当资产以不公平的价格交易时,例如 SVB 破产的 DAI 案例) 不会影响用户,他们仍然可以随时以公平的价格兑换资产 风险很大会给代币持有者带来很多风险。他们可以选择以当前价格出售代币(由于恐慌而不好),或者等到恐慌结束,但很有可能恐慌是真实的,并且无法出售合成代币
随时以面值提取基础代币的能力 是的。用户始终可以通过协议以公平的价格提取资金,即使市场价格较低 否。用户只有一个选择,即以市场价格在市场上出售代币
价格预言机(如何构建公平可靠的价格预言机) 非常容易,可以在协议部署后立即构建,因为它只能依赖协议中的汇率 协议部署后无法构建,交易所应有足够的流动性。预言机应累积尽可能多的交易所来构建公平价格
价格变动(什么会影响市场价格恢复) 仅取决于市场参与者的效果。所有与任何协议算法的价格波动都会激励市场参与者恢复该价格 取决于市场参与者的效率以及协议算法,该算法会激励Hook。效率不高的奖励算法会影响Hook的恢复,而构建有效的奖励算法是一项艰巨的任务,因为它们始终具有一些假设

比较点;LST 选项;合成选项

流动性(哪个代币数量可以兑换成基础代币);无限大。任何代币数量都可以兑换成基础代币,没有价格风险(因为可能会发生罚没,所以存在很小的价格风险);取决于市场状况,用户只能通过交易所将合成代币兑换回基础代币 市场恐慌(当资产以不公平的价格交易时,例如 SVB 破产的 DAI 案例);不会影响用户,他们仍然可以随时以公平的价格兑换资产;风险很大会给代币持有者带来很多风险。他们可以选择以当前价格出售代币(由于恐慌而不好),或者等到恐慌结束,但很有可能恐慌是真实的,并且无法出售合成代币 随时以面值提取基础代币的能力;是的。用户始终可以通过协议以公平的价格提取资金,即使市场价格较低;否。用户只有一个选择,即以市场价格在市场上出售代币 价格预言机(如何构建公平可靠的价格预言机);非常容易,可以在协议部署后立即构建,因为它只能依赖协议中的汇率;协议部署后无法构建,交易所应有足够的流动性。预言机应累积尽可能多的交易所来构建公平价格 价格变动(什么会影响市场价格恢复);仅取决于市场参与者的效果。所有与任何协议算法的价格波动都会激励市场参与者恢复该价格;取决于市场参与者的效率以及协议算法,该算法会激励Hook。效率不高的奖励算法会影响Hook的恢复,而构建有效的奖励算法是一项艰巨的任务,因为它们始终具有一些假设 考虑到这种对比,以及 stETH 是市场上第一个 LST 代币这一事实(stETH 目前是一种 LST,失去这一特性将对当前的质押者产生负面影响),Lido with vaults 架构不可避免地应该支持 stETH 的 LST 特性。这意味着 stETH 应该可以由 Vault 的存款人从 Lido v2 提取,Lido v2 的质押者可以从 Vaults 提取,或者 Lido 应该激励用户将 Lido v2 的 TVL 保持在某个安全的水平,以便任何 stETH 质押者都可以提取他们的资金。

值得注意的是,允许任何用户从任何 Vault 提取 stETH 也是不安全的,因为它将允许恶意的 Vault 运营商耗尽小型 Vault。这之所以成为可能,是因为大型 Vault 的运营商可以简单地从他们的 Vault 借入 stETH,从任何 Vault 提取,并在提款过程结束后将 ETH 存入他们的 Vault。

考虑到上述所有情况,我们有两个选择:Lido with Vaults 架构应该能够从 Vaults 提取 ETH(而不是允许任何用户从任何 Vault 提取),或者应该激励用户将 Lido v2 的 ETH 供应量保持在某个安全的水平。Lido with Vaults 将使 Lido v2 能够作为杠杆质押的缓冲区,因为它将允许更安全和高效的杠杆质押。通过 AAVE 进行的 stETH 杠杆质押表明,用户很可能借入尽可能多的 ETH 来再次质押,以增加他们从质押中获得的奖励。这意味着,如果没有额外的机制来激励通过 Lido v2 质押的 ETH 达到某个安全的水平,Lido v2 的 TVL 很可能会萎缩。

StakeWise v3 协议没有允许提取 osETH 以从 v2 接收 ETH 的遗留部分,这使得这个问题不那么严重。StakeWise 的 osETH 代币不能从任何 vault 中提取。要将其提取回 ETH,用户必须在某个 vault 中持有未平仓头寸。这意味着在市场上购买 osETH 的用户并没有购买可以随时兑换为 ETH 的 LST 代币。实际上,用户购买了一种合成 ETH,其价格依赖于协议的行为和管理。这是一个合理的选择,因为众所周知的 DAI 代币的工作方式类似。DAI 不是可以随时按票面价值兑换的美元。DAI 可以在 DeFi 中用作美元,但它只是一种合成表示。这种方法不适用于 Lido 协议,因为它具有依赖于 stETH 代币是 LST 而不是合成 ETH 这一事实的遗留部分。

可以单独或一起使用多种选项,为在 Lido v2 上持有安全的 TVL 水平提供可靠的激励措施,以确保 stETH 代币具有 LST 特性。第一个选项是为从 Vaults 借款的 stETH 借款人收取额外的借款费用。此费用随着 borrowed_stETH_from_vaults / Lido_v2_TVL 的比例增加而增加,并且此额外费用会转移到 Lido v2 的 APR(增加 APR)。如下所述,此方法会抑制去中心化。考虑到借用 stETH 的借款利率将等于 Lido v2 中的 stETH APR,因此很可能会有 APR 不低于 Lido v2 的 Vault(APR 低于 Lido v2 的 Vault 将被清算并重新分配给更有利可图的 Vault 和 Lido v2)。因此,让我们考虑一下,我们只有 APR 等于或高于 Lido v2 的 vault。具有额外费用的情况将逐渐抑制质押者向 APR 等于 Lido v2 APR 的 Vault 进行质押(因为 Lido v2 APR 将随着更可能将 ETH 重新质押到 APR 最高的 Vault 以累积更多奖励的杠杆质押者导致 Lido v2 中的 ETH 减少,这将触发借款利率的增加以及 Lido v2 APR 的增加)。此选项将仅留下非常高效的 Vault。质押者将通过 Lido v2 重新质押所有可能的 ETH,这些 ETH 可以在没有清算的情况下重新质押。

额外的费用机制将逐渐导致 APR 等于 Lido v2 APR 的 Vault 发生清算。清算将需要清算人将 stETH 带到 Vault。考虑到 Vault 的 LTV 将小于 100%,清算人将被阻止从 Vault 借入 stETH 以清算不健康的头寸。对于清算人来说,更有效的方法是将 ETH 存入 Lido v2,从中获取 stETH,并以利润清算不健康的头寸(这里我们假设清算人持有 ETH 并且想要进行清算以获得相同的代币并获得利润)。这意味着额外的费用机制应该会增加 Lido v2 的 TVL。

值得注意的是,Lido v2 可以具有用于清算 Vaults 中不健康头寸的额外机制。这里的主要思想是铸造虚拟 stETH 以清算不健康的头寸。简而言之,通过 Lido v2 清算不健康头寸的过程会将用户在 Vault 中创建头寸的已质押 ETH 转移到使用 Lido v2 质押 ETH。清算折扣将用作 stETH 质押者的奖励,他们需要等待 Vault 中的验证者退出质押并将 ETH 转移到 Lido v2 并初始化来自 Lido v2 的新验证者。

第二个选择是在从 Lido v2 提款时增加额外费用,从而抑制通过 v2 上的 ETH 进行杠杆操作。此选项不能解决 Lido v2 中流动性不足的问题,并且还会阻止质押者使用 Lido 进行质押。考虑到额外费用情况下的假设,即不会有 APR 低于 Lido v2 APR 的 Vault,撤回抑制不会阻止 ETH 从 Lido v2 迁移到 APR 最高的 Vault 的过程。额外的提款费用只会降低其盈利能力。提款费用会降低 Vault 的 LTV,但即使有 10%的提款费用(这将对 Lido v2 TVL 的增加产生负面影响),Vault 的 LTV 仍将高于 AAVE 中 stETH 的 LTV。此外,提款费用将阻止质押者使用 Lido v2 质押 ETH,考虑到 Lido v2 将用作杠杆质押的缓冲区,这也是不利的。

第三个选择是添加一个提款控制器,该控制器将在 Lido v2 和 LTV 比率最高的 Vault 的头寸之间分配提款。简而言之,此选项仅创建可变 LTV。例如,如果用户的 LTV 等于 95%(让我们假设该用户在所有 Vault 中具有最高的 LTV),并且提款控制器合约确定应从 Vault 中支付一部分提款,则该用户将被部分或全部清算,而不会失去清 算红利。启用可变 LTV 将阻止用户通过 vault 利用 stETH,因为它会带来额外的清算风险。可变 LTV 功能更适合作为对风险最高头寸的一种抑制手段。这意味着将使用 Lido with Vaults 参与流动性质押的普通 staker 不太可能尝试以最大的 LTV 借入 stETH。如果他们正在寻找 stETH 的最大利用率(这意味着他们需要 100%的 LTV),他们可能会选择使用 Lido v2 进行质押。我们可以区分新的 Lido with Vaults 架构中的 3 种类型的 staker:1)寻求在其他 DeFi 协议中探索 stETH 作为抵押品的普通 staker(他们更可能通过 Lido v2 进行质押),2)想要保持流动性并正在寻找最高 APR 的 Staker(他们更可能通过 APR 最高的 Vault 进行质押,而根本不借入 stETH 或以较低的 LTV 借入),3)寻求杠杆质押的 Staker(他们更可能通过 APR 最高的 Vault 进行质押,并以最大的 LTV 借入 stETH 进行重新质押)。第三组 staker 可能会由于重新质押而减少 Lido v2 的 TVL。应该抑制来自该组的用户,以减少 Lido v2 的 TVL 过多,因此可变 LTV 机制应该会有所帮助。

让我们仔细看看将被平仓的且具有最高 LTV 的用户,以及决定使用该用户头寸来满足提款请求的提款控制器会发生什么情况。在开始时,我们拥有 collateral = 1000 ETH 且借入了 950 stETH 的用户,其 LTV 等于 95%。让我们假设存在大量的提款请求,并且提款控制器计算出应从风险最高的头寸中提取 500 ETH。提款后,用户将拥有 collateral = 500 ETH,总借款 = 450 stETH,使其 LTV 等于 90%(重要的是要注意,现在该用户拥有 500 stETH,不需要退还给协议,但是它们可以很容易地通过 Lido v2 兑换)。正如我们最终看到的那样,该用户具有相同的价值(开始时为 1000 ETH 作为抵押品,最终为 500 ETH 作为抵押品和 500 stETH)。

清算

在继续选择清算架构之前,重要的是要注意 Lido Vault 的几个关键功能:

  1. 只有 ETH 可以用作抵押品。所有 ETH 都可以由 Lido V2 用于产生利润。
  2. stETH 的发行由系统(Lido V2 和 Lido Vault)控制。在任何时候,系统都可以确定债务代币与抵押品(stETH 汇率)的价值比率。
  3. 大部分抵押品都在验证者那里。从验证者那里提取抵押品是一个可预测且受控制的过程。但是,提取 ETH 需要几天时间(最多可能需要 36 天)。因此,这种抵押品不能被视为流动性抵押品。这施加了严重的限制,因为清算通常涉及套利者。他们买断抵押品并立即将其出售到其他地方以获取利润。

由于第 3 点,实现软清算似乎是不可能的。将 CDP 过渡到不健康状态必须触发从验证者那里提取 ETH。要使 CDP 恢复到健康状态,需要将资金发送回验证者。所有这些都需要时间和运营成本。

Stakewise 如何解决第 3 点?Oracle 监视 vault 上抵押不足的 CDP 的数量。如果 vault 上不良债务的数量超过某个阈值,则开始从 vault 的验证者那里提取 ETH。在 ETH 到来之前,清算是不可能的(任何尝试都会导致还原)。此后,可以以常见的方式清算该头寸。套利者支付所需的 osETH 金额,获得与当前协议利率 + 1% 奖金相对应的 ETH 金额(取自不健康的 CDP 所有者的剩余 ETH)。此解决方案的缺点是资金从验证者转移需要很长时间的延迟。因此,不健康的 CDP 将在系统中挂起数天,从而使协议的整体抵押恶化。

另一种可能性是卖出不是 ETH 而是 vault 的份额。因此,在清算人支付了不良 CDP 的债务之后,vault 份额将从不良 CDP 的所有者转移到清算人。优点是 CDP 可以在头寸变得不健康后立即清算。缺点是 shares 的流动性有限。很难确定 share 的价格。一方面,每一定数量的 shares 对应于固定数量的 ETH。另一方面,不同 vault 的份额由不同的验证者集支持。在发生大规模 slashing 后,特定 vault 的份额可能会大幅贬值。同样,从验证者退出需要相当长的时间。因此,参与此类清算的兴趣可能低于普通清算。对于某些有问题的 vault,可能根本找不到清算人。因此,抵押不足的债务将降低整体系统抵押。

为了找到清算人,可以使用拍卖机制。这里的情况与 Maker DAO 中的清算略有不同。需要支付一部分系统的债务才能换取 Maker DAO 中 CDP 所有者的抵押品。如果某些债务仍然未偿还,则认为是正常的。以后会通过其他机制消除:收取稳定费、出售 MKR 代币等。Lido 中没有不良债务的概念。作为一种选择,可以引入“死亡 shares”。它们不属于任何人且无法销毁。它们会稀释每个用户在总协议流动性中的比例。在这种情况下,可以采用反向荷兰式拍卖的形式进行拍卖。出售的 vault 份额数量是固定的。获得 shares 需要支付的 stETH 债务数量会随着时间的推移而减少。换句话说,vault 的每 share 价格都会下降。需要支付的 stETH 的初始金额(如 Maker DAO 的情况一样)可以设置为高于债务。这可以防止用户触发 CDP 的清算以折扣价回购抵押品。同意当前价格的清算人将 stETH 带到协议并获得 vault 的 shares。未兑换的 stETH 会变成死亡 shares。死亡 shares 会导致负 rebase 或减少正 rebase,因为验证者的收入很可能会超过不良债务的增长。死亡 shares 的主要问题是其数量只会随着时间的推移而增加。如果 Lido 的整体流动性正在增长,那么这很好。死亡 shares 的相对数量甚至可能会减少。但是,如果停滞开始或 Lido 的流动性减少,死亡 shares 的比例将会上升。这将导致整体 APR 下降。

作为替代方案,可以使用经典的英式拍卖。参与者提交所需 vault shares 的绝对值和要支付的债务(stETH 在出价时转移)。在偿还部分债务后,CDP 必须恢复到健康状态。中标是每个偿还的 stETH 需要的 vault shares 数量最少的出价。此选项的优点包括能够清算对 CDP 所有者更有利的部分头寸。缺点是这是英式拍卖,当前拍卖领导者的 stETH 会被锁定,直到下一个出价或拍卖结束。此外,如前所述,vault shares 的流动性有限。因此,清算人将包含很大的折扣在其出价中。这意味着即使偿还债务以换取 vault 的所有 shares 也可能看起来无利可图,并且拍卖可能会以失败告终。为了尽量减少这种情况,有必要限制 LTV。

还有另一种方法可以解决抵押品流动性差的问题。清算人可以是 Lido V2 本身。此过程可以称为内部清算。如第 1 点所述,ETH 是抵押品(即使提款延迟)。与常规借贷协议不同,它可以直接用于产生利润。在大多数情况下,抵押品的价值超过借入的 stETH 的价值。验证者的提款地址由 Lido 控制。在从验证者提款期间 ETH 市场价格的波动与 Lido 的运营无关,因为所有内部计算均以 ETH 进行。因此,Lido V2 不会面临由于第 3 点而导致典型清算人所面临的风险,并且绝大多数内部清算应该是盈利的。这种机制可以为资金流入 Lido V2 提供额外的支持。

让我们详细了解一下内部清算的工作方式。一个 oracle(或一个收取少量报酬的 keeper)监视 CDP 的健康状况。最有可能的是,无论如何都需要这种机制进行提款,以确定首先使用哪些 CDP。如果 CDP 的健康状况超过 LLTV(清算贷款价值比)阈值,则会触发清算机制。计算需要与抵押品一对一偿还的债务金额。结果,头寸的 LTV 必须达到 LLTV - 一个阈值,以防止此后不久再次清算 CDP 的一部分。计算出的债务从 CDP 的债务中扣除,并且债务金额加上一些清算罚金从抵押品中扣除。从 vault 中必要数量的验证者那里开始提取 ETH。一旦资金被提取,清算的 ETH 量将转移到 Lido V2 的余额。由于内部清算,stETH 抵押品从 Lido Vault 的债务转移到 Lido V2 中的 ETH。

通过内部清算过程收到的资金也可以用于 stETH 提款。如果提款队列中有用户,Lido 应首先将 ETH 转移给他们。如果在那之后还有任何剩余,则应将提醒发送给 Lido V2 验证者。当然,用户在此类提款期间不会收到清算红利;它会转移到 Lido V2。

来自 Stakewise 的赎回机制是提款的替代方案,它提供了一个有时可能(有时不可能)的功能,即以官方汇率将 osETH 兑换为 ETH。由于 Lido 的新架构保留了真正的 1:1 提款机制,因此赎回变得不必要的复杂。

值得注意的是,在清算期间,用户有可能进行 griefing。攻击者可以在 vault 中开设尽可能小的头寸,等待 ETH 发送到验证者,然后借用最大金额的 stETH。对验证者的任何惩罚都会使头寸处于不健康状态(即使 vault 总体上抵押过度),从而触发从验证者提取资金。如果 vault 的验证者数量很少,这种情况可能会导致 vault 的 APR 突然下降,并可能导致一系列清算。为了减少这种情况的可能性,可以实施从验证者延迟提款。如果出现不健康的头寸,则 vault 会获得一些时间来增加其当前的 ETH 余额,例如,通过向某些 CDP 添加抵押品。这些 ETH 将用于清算,并且验证者将保持不变。

内部清算角落案例之一应该审查发生在 vault 上的大规模 slashing 事件。结果,单个 CDP 的 LTV 将升至 100% 以上。在内部清算期间,此类 CDP 将被完全清算。由 Lido V2 发行的债务将被移除,抵押品的 ETH 将添加到 Lido V2 验证者的余额中。因此,由于这种清算,Lido V2 的抵押将略有下降。事实上,抵押甚至在清算之前就已经减少了,在大幅削减之后。在这种情况下,清算只是记录发生了什么并允许通过减少 APR 增长来反映它。在其他一些清算场景中,此类 CDP 将继续挂起,根本不会在系统中显示。

用例

本节探讨了先前“设计”部分中介绍的概念如何在实际场景中应用和发挥作用。目标是测试这些概念在 Lido v3 的已知和有针对性的用例中的实际适用性。

机构质押

机构质押可以实现为由 Node Operator 创建的对存款进行硬性限制的许可 vault。Node Operator 将能够决定允许质押的股份。此功能可以通过出售代表特定 vault 中质押许可的 SBT 来实现。除了对存款进行硬性限制外,每个 vault 都对 ETH 存款有限制,这是由验证者初始化的存款数据 (DD) 配置引起的(用户不能存入超过 vault 可以用于质押的 ETH,否则,这将对 vault 的 APR 产生负面影响)。由 Node Operator 管理的 vault 配置了 LTV 参数,该参数会因每个 vault 而降低。

为 vault 选择不同的 LTV 基于 Node Operator 维护的验证者的累积数量。由于可能大量的已质押 ETH,因此考虑质押惩罚风险非常重要。对于特定的 NO,质押的 ETH 越多,对于未来设置 vault,应该配置的 LTV 参数就越少。这种方法将支持协议偿付能力,并消除可能的不良债务案例。此外,按 LTV 分隔 vault 并将它们限制为最大存款金额将有助于保护质押者免受大量存款的稀释,这可能导致 LTV 降低并使以前创建的头寸可清算。

有一种提出的方法,可以按 LTV 为每个特定的 Node Operator 分隔 vault - 可以在 96% LTV 水平创建基本 vault,这相当于有效验证者余额的 1/32 的初始 slashing。所有其他 vault 都应该使用较低的 LTV 创建。后续 vault 的 LTV 可以基于质押需求和质押者的风险偏好来选择。“风险管理”部分中提供了有关已质押 ETH 金额的合适 LTV 的研究。因此,由特定 Node Operator 创建的 vault 可以想象为具有特定 LTV 的单独排序的有限盒子。在特定 vault 进行质押的权限可以使用 SBT 进行代币化并出售给愿意参与的质押者。

  • DD 存储

可以使用在 vault 合约中发布的 Merkle 树根来实现存款数据存储。正如上面各节中所述,这将降低 Node Operator 的运营成本,并使质押者更容易验证验证者的凭据。此外,Node Operator 将能够在需要时无缝地使用新验证者数据更新 Merkle 根。质押者可以在进行存款时提供验证者存款数据包含在 Merkle 树中的证明,或者可以在调用 Beacon Chain 存款合约时由 NO 完成。

  • SBT 铸造和 vault 初始化

只要将存款数据添加到 vault 合约中,就应该使用对存款进行硬性限制和用于铸造 stETH 的 LTV 来配置它。由于更大的 slashing 的风险增加,随着 Node Operator 在所有受控 vault 中的总质押量增长,新创建的 vault 应该比以前的 vault 具有更小的 LTV。存款限额越大,在 NO 表现不佳的情况下发生更大的 slashing 的风险就越大。Node Operator 应该能够估计对特定 vault 中质押的需求,并设置质押者进入它的权限。可以通过铸造/出售 SBT 来授予此类权限,这授予其所有者访问权限以在具有配置的硬上限和 LTV 的特定 vault 中进行质押。SBT 代表 Node Operator 和质押者之间的协议,以便质押者事先知道他们的存款上限和 LTV。

  • 进行存款

当用户进行存款时,应该计算是否有足够的资金用于验证者初始化。假设一次会有大量的已存款 ETH,则应该将其与可访问的存款数据匹配。如果有尝试存入超过要初始化的验证者数量乘以 32 ETH 的 ETH,则存款交易应该还原。

  • 取出和返还贷款以及清算流程

当质押者将其存款发送到 vault 时,他们将拥有由铸造到其地址的 ERC20 代币表示的 vault 份额。份额金额计算为用户的存款和 vault 控制的总 ETH 之间的比率乘以总现有份额金额。可以使用 vault LTV 和用户在该 vault 中的份额来计算可以铸造的 stETH 金额。

当用户的存款发送到 Beacon Chain 质押合约时,可以允许 stETH 铸造。可以确保这一点,因为由 Node Operator 调用了 deposit() 函数,或者如果拥有足够的资金来初始化新的验证者,则由用户存款触发。它将允许 vault 根据为该 vault 配置的 LTV 确定要铸造的最大 stETH 金额。铸造的 stETH 金额应该写入头寸信息以确定将来的头寸健康状况。

用户还应该能够提取 stETH 以赎回先前存入的 ETH。可以使用 oracle 报告的执行层和共识层余额的总和来计算可赎回的 ETH 金额。使用 Merkle 树根发布这些值的过程在上面的章节中进行了描述。

如果一个头寸变得不健康,可以启动一个针对它的清算流程,如果一个 oracle 报告了 EL + CL 的余额减少,并且用户必须拥有一个 LTV 高于在 vault 中设置的头寸,则可能会发生这种情况。这意味着可以偿还用户未偿还的 stETH 贷款,以使其头寸再次健康。应该为变得不健康但尚未清算的头寸设置一个特殊的时间段。这将为质押者提供足够的时间来将 stETH 带回 vault 或存入更多的 ETH,以在 oracle 报告的 CL + EL 余额减少的情况下使其头寸健康。这种方法将使用户的头寸更安全,并减少由头寸清算触发的潜在验证者退出的运营成本。

  • 使用进入 vault 的奖励来减少(或增加)LTV

在用户通过将 ETH 作为抵押品并铸造 stETH 来创建头寸后,他们的头寸 LTV 会随着每次 oracle 报告而变化。只要基础 ETH 金额增加,用户的 LTV 就会下降,从而使他们的头寸更健康。万一发生任何 slashing 或余额减少,单个用户的 LTV 将上升到使他们的头寸更接近 vaults LTV,并可能受到清算。

  • 验证者退出

当需要提取底层 ETH 并支付给清算人时,可以在清算事件后发送给验证者的退出消息,当他们偿还了不健康的 stETH 债务时。可以使用提出的 EIP-7002 来实现它,因此不需要 Node Operator 采取行动。在验证者凭据中设置的作为退出目标的 vault 合约能够在清算事件结束时触发验证者退出。应该检查是否应该触发该退出,或者 vault 合约中是否有足够的 ETH 支付给清算人。应该在 stETH 销毁时实施相同的过程 - 存入验证者的底层 ETH 可以使用发送到共识层的推出消息来提取。此外,仍然存在 Node Operator 手动触发验证者的权利,这也将导致验证者质押被提取到 vault 合约。

杠杆质押

新协议版本中的 CDP 所有者可以使用杠杆质押通过增加风险来最大化利润。为了手动创建杠杆头寸,质押者将借入的 stETH 兑换为 ETH,将它们重新投资到 vault 中,借入更多的 stETH,依此类推。可以使用借贷协议(例如 AAVE)或 Lido 中的内置提款机制将 stETH 兑换为 ETH。也可以通过 DEX 将 stETH 兑换为 ETH 来完成杠杆操作,但由于每次兑换期间的掉期费用导致资金损失,因此不考虑这种方法。

如果使用 AAVE v3,质押者在 Lido Vaults 中借用 stETH,并将代币包装成 wstETH(AAVE v3 使用了包装版本)。wstETH 作为抵押品存入到 AAVE 中以借入更多的 ETH。由于 wstETH 和 ETH 是类似的资产,AAVE 提供了很高的 LLTV(目前为 93%)。借入 ETH 的利率大约等于目前 wstETH 汇率的增长,因此它对杠杆 APR 有额外的负面影响(因为它会减少,因为部分杠杆奖励将因支付借入 ETH 的利息而损失)但是,如果 AAVE 被广泛用于 Lido Vaults 中的杠杆质押,则 ETH 的动态借款利率可能会增加。这种方法的优点是立即创建杠杆。缺点是借入 ETH 的利率上升的风险,导致 AAVE 中的清算和资金损失。因此,使用这种方法的质押者必须监控他们在两个协议中的 CDP。AAVE 中的 LLTV 不是 100%,因此杠杆规模受限。

新协议中的推出机制也可以用于杠杆头寸。通过 Lido Vaults 借入的 100% 的 stETH 以 1:1 的比例转换为 ETH,然后添加到用户的 CDP 抵押品中。将 stETH 转换为 ETH 需要时间,因为它可能需要从验证者中提取(大约 4-5 天)。要创建杠杆头寸,必须重复此操作多次。虽然 stETH 在推出队列中,但用户的余额在 rebase 期间不会增长。但借款利率继续应计,影响实际 APR。

让我们计算一下使用 AAVE 进行杠杆质押时,用户的收入如何变化,假设将 stETH 重新投资到 vault 中 5 次。为简单起见,我们假设 AAVE 中 wstETH/ETH 对的 LLTV 为 90%,Lido V2 的 APR 为 5%,AAVE 中 ETH 的借款利率为 5%,AAVE 中 wstETH 的供应利率为 0%,并且 vault 的 LLTV 为 70%。

Vault APR 6% 4%
用户初始存款(单位:ETH) 10_000 10_000
初始 vault 债务(单位:stETH) 7_000 7_000
来自 AAVE 的 ETH(在第一次 stETH 再投资期间) 6_300 6_300
额外的 vault 债务(单位:stETH)(在第一次 stETH 再投资期间) 4_410 4_410
来自 AAVE 的 ETH(在第二次 stETH 再投资期间) 3_969 3_969
额外的 vault 债务(单位:stETH)(在第二次 stETH 再投资期间) 2_778 2_778
来自 AAVE 的 ETH(在第三次 stETH 再投资期间) 2_500 2_500
额外的 vault 债务(单位:stETH)(在第三次 stETH 再投资期间) 1_750 1_750
来自 AAVE 的 ETH(在第四次 stETH 再投资期间) 1_575 1_575
额外的 vault 债务(单位:stETH)(在第四次 stETH 再投资期间) 1_102 1_102
来自 AAVE 的 ETH(在第五次 stETH 再投资期间) 992 992
来自 AAVE 的 ETH 总额 15_337 15_337
vault 中的杠杆 ETH 25_337 25_337
vault 中的杠杆 stETH 负债 17_041 17_041
杠杆后的 LTV 67% 67%
AAVE 中,wstETH 作为供应的 ETH 价格,在杠杆作用后 17_041 17_041
vault 中的以太币总额,1 年后 26_857 26_350
AAVE 中,wstETH 作为供应的 ETH 价格,1 年后 17_893 17_893
AAVE 中,作为债务的 ETH,1 年后 16_104 16_104
vault 中的杠杆 stETH 义务,1 年后 17_893 17_893
ETH 的净利润,1 年后 753 246
LTV,1 年后 66% 68%
杠杆实际年利率 7.5% 2.5%

Vault APR;6%;4%

用户初始存款(单位:ETH);10_000;10_000 初始 vault 债务(单位:stETH);7_000;7_000 来自 AAVE 的 ETH(在第一次 stETH 再投资期间);6_300;6_300 额外的 vault 债务(单位:stETH)(在第一次 stETH 再投资期间);4_410;4_410 来自 AAVE 的 ETH(在第二次 stETH 再投资期间);3_969;3_969 额外的 vault 债务(单位:stETH)(在第二次 stETH 再投资期间);2_778;2_778 来自 AAVE 的 ETH(在第三次 stETH 再投资期间);2_500;2_500 额外的 vault 债务(单位:stETH)(在第三次 stETH 再投资期间);1_750;1_750 来自 AAVE 的 ETH(在第四次 stETH 再投资期间);1_575;1_575 额外的 vault 债务(单位:stETH)(在第四次 stETH 再投资期间);1_102;1_102 来自 AAVE 的 ETH(在第五次 stETH 再投资期间);992;992 来自 AAVE 的 ETH 总额;15_337;15_337 vault 中的杠杆 ETH;25_337;25_337 vault 中的杠杆 stETH 负债;17_041;17_041 杠杆后的 LTV;67%;67% AAVE 中,wstETH 作为供应的 ETH 价格,在杠杆作用后;17_041;17_041 以太币 在vault 中的总额,1 年后;26_857;26_350 AAVE 中,wstETH 作为供应的 ETH 价格,1 年后;17_893;17_893 AAVE 中,作为债务的 ETH,1 年后;16_104;16_104 vault 中的杠杆 stETH 义务,1 年后;17_893;17_893 ETH 的净利润,1 年后;753;246 LTV,1 年后;66%;68% 杠杆实际年利率;7.5%;2.5%

该表显示了杠杆头寸的实际 APR 如何变化。如果 Lido V2 的 APR 超过 1%,则实际 APR 会增加 1.25 倍。如果比 Lido V2 的 APR 低 1%,则实际 APR 会下降 1.6 倍。此外,在第二种情况下,头寸的 LTV 逐渐接近 LLTV。因此,风险和潜在利润都会增加。

头寸的杠杆作用可能会积极地使用提款机制。如果提款仅依赖于 Lido V2,则协议中的流动性将流向具有高风险的高收益 vault。如其他部分所述,Lido V2 是新协议的基础:所有 Lido Vault 的 stETH 实际上都是从 Lido V2 借来的。因此,至关重要的是,提款不仅要使用 Lido V2,还要使用 Lido Vault 的 CDP。此外,重要的是要注意,对于 Lido Vault 来说,正常头寸和杠杆头寸看起来是一样的。如果推出机制采用具有最高 LTV 的 CDP,则可以在创建杠杆时为推出选择相同的头寸。解决此问题的方法之一是给用户时间来改善头寸的 LTV,方法是在实际将 CDP 用于推出之前存入更多的 ETH。

目前很难预测杠杆的积极使用将如何影响新版本的 Lido。使用外部协议(例如 AAVE)将导致额外的 ETH 发送到协议的验证者,这无疑是一种好处。但是,如果这些协议被大量用于杠杆作用,则热门借贷协议中 ETH 的动态借款利率可能会增加。虽然费用可能会超过潜在利润。杠杆的缺点更为明显。如果使用用于选择推出来源的动态机制,则部分推出资金将来自 Lido V2,部分来自 Lido Vaults。杠杆质押仅对 Lido Vaults 中的质押者有意义。因此,一些资金将从 Lido V2 流向 Lido Vaults。因此,Lido V2 始终会拥有整个协议流动性中最小的可接受部分。此外,杠杆质押在收益最高、风险最高的 vault 中最为有利。因此,流动性将从小型的低收益 vault 转移到大型的高收益 vault,从而导致中心化。无论如何,杠杆质押都会使 CDP 对 APR 的波动更加敏感。在高风险 vault 中,这些波动更大,这可能会影响协议的整体可靠性。 如果 stETH 仍然是一种可赎回的 LST,那么禁止杠杆质押是不可能的。因此,必须在协议架构的各个方面考虑杠杆质押的存在。

如果通过提款进行杠杆质押是新协议版本不可避免的机制,或许应该使其更方便?由于资金在协议内部重新分配,因此可以添加一项功能,允许在多个交易中组合 stETH 借贷、提款和增加 vault 头寸。这将涉及计算要借入的 stETH 总量和用户在 ETH 中的总头寸。由于杠杆**头寸的资金将从 Lido V2/其他 vault 转移到当前 vault 中,因此需要启动总头寸**金额的提款操作。

由于通过杠杆存入 vault 的 ETH 只会在一段时间后(几天或更长时间)到达,因此为这些 CDP 维护一个单独的待处理队列是有意义的。一旦 ETH 到达提款地址,用户就可以完成操作,收到份额和增加的 stETH 借款(无需实际铸造它们)。这种方法有很多细微之处。首先,需要扩展提款功能以支持此类操作。其次,需要冻结这些 ETH 一段时间,以防止它们被发送回验证者或用于其他提款。此外,如果用户发起杠杆**头寸创建,但在资金到达时,vault 中的 LTV 已经下降,并且该头寸在完成后将不健康怎么办?在这种情况下,可能有必要回滚头寸**创建并将资金返回给验证者(或将其用于其他提款)。

另一个重要的方面是提款时的隐性佣金。如果手动创建杠杆**头寸,则用户会在该过程中的每次提款操作中损失一些奖励。在自动创建的情况下,用户可以避免此佣金。一种选择是在发起杠杆**头寸创建时记录 stETH 的全部债务。但是,这会发行抵押不足的 stETH(因为它们的支持尚未从 Lido V2/其他 vault 中提取,并且仍然用作其他 stETH 的支持)。一个更合理的策略似乎是在完成 CDP 创建时向用户的 stETH 债务添加佣金(可能比手动创建时总损失的费用略低)。如上所述,杠杆**头寸**会给协议增加额外的风险,但为用户提供了大幅增加收入的机会。因此,这样的佣金似乎是公平的。

结论

Lido v3 的 “自带验证器”(BYOV)替代设计为流动**质押提供了一种可扩展、灵活和去中心化的方法,解决了当前 LST 模型的局限性,同时保持了 Ethereum 网络的安全性和验证器的去中心化。通过引入可定制的 vault,机构质押者、再质押**者和节点运营商可以更好地控制其风险回报结构,确保高效的资本配置,而不会损害协议的完整性。

一个关键的优先事项仍然是将 stETH 维护为流动**质押代币(LST),而不是转变为纯粹的合成资产,从而保障赎回保证并维护 DeFi 生态系统中的信任。模块化的 vault 结构增强了质押的可访问性,同时确保 Lido v2 继续作为流动性**缓冲器运行,从而平衡了收益优化和协议安全性。

随着 Ethereum 质押需求的不断发展,Lido v3 及其基于 vault 的架构为机构和零售质押者提供了一个面向未来的解决方案。通过协调激励机制、降低中心化风险和促进资本效率,这种设计巩固了 Lido 作为领先流动**质押协议的地位,为 DeFi 中可持续和去中心化质押**设定了新标准。

  • MixBytes 是谁?

MixBytes 是一支由专业的区块链审计师和安全研究人员组成的团队,专门为兼容 EVM 和基于 Substrate 的项目提供全面的智能合约审计和技术咨询服务。在 X 上关注我们,及时了解最新的行业趋势和见解。

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

0 条评论

请先 登录 后评论
mixbytes
mixbytes
Empowering Web3 businesses to build hack-resistant projects.