在将50万DAI投入Compound之前你应该知道什么

  • ameensol
  • 发布于 2020-07-03 20:20
  • 阅读 11

文章讨论了在Compound平台上投资DAI的风险,包括智能合约安全、中心化失败点以及银行挤兑风险。文章还提到Compound的治理机制已转移到COMP代币持有者手中,并详细分析了每种风险的潜在影响。

在将五十万美元 DAI 存入 Compound 之前你应该知道的事情

[编辑 6/30/20] — 本文已不再相关。 在这篇文章发布后不久,Compound 更新了他们的管理权限,改为具有时间延迟的多重签名,这是我建议的。最近,他们已将整个治理权完全转交给 COMP 代币持有者,在接受任何协议更改实施之前,最低有 2 天的宽限期。行政权力现在牢牢掌握在 COMP 代币持有者社群手中,已经不再代表 Compound 协议的单点故障。

你可能听说过 Compound。他们在以太坊上构建的 compound.finance 允许你借出并赚取 ETH、DAI、USDC 以及其他几个 ERC20 的利息。

今天,DAI 贷款人的利率为 10%,这足以吸引 EthHeads 的注意(见封面照片)。

作为 SpankChain 的首席执行官,我的工作是管理公司的储备金,这也包括近五十万美元的 DAI。按年利率 10% 来计算,我们不把 DAI 转移到 Compound,将每月损失大约 4,000 美元。这是相当大的机会成本。但是投资时要记住的是,没有免费的午餐。所有投资都有风险,而在 Compound 上借贷也不例外。

在过去一个月中,我花了一些时间评估在 Compound 借贷时的几类风险:

  1. 合同安全风险
  2. 中心化故障点
  3. 银行挤兑风险

我将在下面按类别对我的调查进行分类,但重要的事情是:

  1. 智能合约的安全性似乎是合法的。
  2. Compound 是一个 CUSTODIAL 系统,如果他们的管理员私钥被破坏,所有借贷池都可以被轻易抽空。
  3. 当你在 Compound 上借贷时,你没有保证可以随时提取资金。 如果你尝试提取资金,而所有钱都被锁定在未偿还贷款中,那么你的提取交易将失败。

我希望这些贷款人理解风险… 来源: https://defipulse.com/compound

合同安全

Compound 已通过多家声誉良好的智能合约安全公司进行审计。

  1. OpenZeppelin 审计报告
  2. Trail of Bits 审计报告
  3. Certora 审计报告

此外,Compound 为关键漏洞(定义为盗取资金的 1% 或冻结 10%)提供高达 250,000 美元的私人漏洞奖励, 根据我所知,没有任何独立安全研究人员能够领取该奖金。

这些合同在过去 6 个月中也一直持有超过 2000 万美元,超过 2 个月持有超过 5000 万美元,目前持有超过 1 亿美元。对我而言,合同安全性的最重要指标是 合同中资产总数 \* 持有时间,而 Compound 迄今为止保持安全,且拥有相当大的公共奖金。

根据上述因素,我目前相信 Compound 的智能合约是安全的。

中心化故障点

我自己并不是智能合约安全专家,因此我请求了唯一的 samczsun 的帮助,他著名地发现了 0x 合约中的关键漏洞(尽管有多次来自顶级公司的审计),并获得了 10 万美元的奖励。他对 Compound 中的中心化故障点的报告如下(强调部分为我):

Compound v2 具有四个不同的管理职位,设定为三个不同的地址:

如果攻击者获得对 cToken 的管理权限,他们可以 替换 comptroller 实现,这将使他们能够执行以下一项或多项操作:

  • 通过从 transferAllowed 返回 false,阻止现有 cToken 的转移
  • 通过从 transferAllowed 返回 true,转移作为抵押的 cTokens
  • 通过从 mintAllowed 返回 false,阻止铸造新的 cToken
  • 通过从 redeemAllowed 返回 false,阻止赎回现有 cTokens
  • 通过从 repayBorrowAllowed 返回 false,阻止偿还现有借款
  • 通过从 liquidateBorrowAllowed 返回 false,阻止清算借款
  • 通过从 seizeAllowed 返回 true,盗取用户的 cTokens
  • 通过从 borrowAllowed 返回 false,阻止借入基础资产
  • 通过从 borrowAllowed 返回 true,抽空所有基础资产

获得对 cToken 的管理权限后,攻击者还可以替换利率模型,这将允许他们执行以下操作:

  • 将借款利率提高到 0.0005% / 块(即每块的利率)

获得当前 Unitroller 代理的管理权限后,攻击者可以:

  • 替换 Unitroller 的实现,这将使他们能够执行相同的攻击(如果他们可以替换 cToken 的 comptroller),但适用于所有使用 Unitroller 的 cTokens(占 100%)
  • 更改清算激励,这将使攻击者在清算时获取不成比例的代币
  • 更改价格预言机,这将使攻击者能够以低于实际价格的判断清算现有 cTokens(例如 ETH、WBTC 等)并基于这个低价格进行借贷
  • 更改 cToken 的抵押因子,结合能够添加新的 cToken 和更改价格预言机的能力,将允许攻击者通过借入他们创建的代币来抽空所有资产

如果攻击者获得对价格预言机的 anchor admin 访问权限,攻击者可以:

  • 使资产价格偏离其真实值 10%

如果攻击者获得对价格预言机的 poster 访问权限,攻击者可以:

  • 每小时使资产价格偏离其存储值 10%

如果攻击者同时获得对价格预言机的 anchor admin 和 poster 的访问权限,攻击者可以:

  • 将资产价格设置为任意值

总结 samczsun 的报告:Compound 协议被设计为能够由中央管理员进行现场升级。重要的合同是代理,它们只指向包含其实现逻辑的单独合约地址,管理员有权随意更改这些地址指针。因为所有 cToken 使用相同的管理员,如果管理员密钥被破坏,则存入 Compound 的所有资产都可以轻易抽空。

上面提到的 sam 还有其他一些更隐秘的攻击,但攻击者获得选择时,更有可能是直接带走所有资金,而不是进行更复杂的攻击。

OpenZeppelin 在他们的 Compound 审计总结 中有很好的涵盖。

然而,在恶意或受损的管理员手中,这些特权包含轻易冻结市场、审查交易或从系统中盗取所有资产的能力。同样,控制价格馈送可以用于盗取系统中大部分资产,甚至是所有资产。目前,同一外部拥有的帐户是所有实时市场的管理员。

有趣的是,Trail of Bits 团队制作的材料中没有提到这一点。此外,Compound 常见问题 也随意低估了管理员的特权,并没有提供其抽空所有资金能力的警告:

协议的开发者 Compound Labs, Inc. 当前控制以太坊地址 0x8b8592e9570e96166336603a1b4bd1e8db20fa20,这是协议管理员。管理员地址有权支持额外资产、升级价格馈送预言机、升级利率模型和升级协议的风险模型。

另一个需要注意的事情是,Compound 当前的保管设置并不本身使他们的系统不安全。他们有很强的动机保证管理员密钥的安全,可能(希望)与他们的 $8.2M a16z 带来的种子轮 合作。但是,在决定存入五十万美元 DAI 时,这确实是我会考虑的事情。

银行挤兑风险

Dharma 的首席运营官的这条推文,一个以前的 竞争借贷平台,为我指明了方向,让我得以探究在 Compound 中的银行挤兑风险。

Twitter Widget Iframe

在引用的推文中,利用率 为 98.62%,这意味着当时 98.62% 存入的 DAI 被借出给借款人。只有 1.38% 的 DAI 可用于提取,因此只有一小部分贷款人能够收回他们的 DAI。

如果有足够数量的 DAI 贷款人(cDAI 持有者)同时希望取回他们的 DAI,他们的提取可能会耗尽可用的 DAI,将利用率提高到 100%,并阻止后续的提取。试图提取的贷方只会发现他们的交易失败,并被迫等待更多借款人还款后才可以提取。

因为存在被困在 cDAI 中的可能性,人们会对此感到担忧,而他们的担忧可能会体现为自我成真的预言。也就是说,银行挤兑 情景中,许多 cDAI 持有者同时试图提取他们的 DAI,可能会仅仅因为有足够的 cDAI 持有者担心它而发生。

被困在 cDAI 银行挤兑中的贷款人可以选择等待收到他们的 DAI,或者将他们的 cDAI 卖掉换取 DAI,同时可能面临兑换费用,并在许多其他贷款人也在将 cDAI 卖掉换取 DAI 的情况下,得到更糟的价格。 如果贷款人选择坚持等待并持有 cDAI,他们在此期间仍将产生利息。

Compound 如何应对?

Compound 团队直截了当地讲到了这一流动性风险,并在他们的 白皮书 中进行了描述:

协议不保证流动性;相反,它依赖于利率模型来激励流动性。在资产需求极大的时期,协议的流动性(可提取或借出的代币)将会下降;当这种情况发生时,利率上升,从而激励供给并阻止借贷。

Compound 根据每个 cToken 的 cToken 特有“利率合约”来确定借款人的利率。该合同 当前实现 cDAI 的利率模型。公式为:

借款人年利率 = 基础利率 + (倍数 * 利用率)

对于 cDAI,基础利率 = 5%,倍数 = 15%(值已硬编码到合同中)。在 100% 的利用率下,借款人支付的利息将为 20%。这意味着当 DAI 最大利用时,借款人只被激励按 20% 的利率偿还借款——如果他们相信 ETH(用于借贷的抵押物)在一年内会上涨超过 20%,那么他们没有激励偿还贷款。 这可能会导致大量 cDAI 持有者…长时间持有 cDAI。

Compound 唯一能够解决这一问题的工具是使用中心化管理员来升级他们的利率模型,这正是他们在利用率提高至 ~99%(与上述引用推文相同时)进行的操作。

Twitter Embed

当 Compound v2 发布时,$DAI 的初始利率模型借贷利率范围为 5-17%,这取决于利用率。@MakerDAO 则一直在提高他们的稳定费,现在已达到 22.5%。

为了确保流动性和稳定性,Compound 的模型将在 24 小时内进行更新。

5:21 PM · Jul 19, 2019

X 广告信息和隐私

因此,总结与总结,如果利用率达到最大,且出现流动性危机和即将发生的银行挤兑,所有贷款人能做的就是希望 Compound 利用他们的权力更新并提高借款人的利率,以激励他们偿还贷款,为想要撤出资金的贷款人提供流动性。

总结

像 Compound 这样的协议在中心化和去中心化之间进行微妙的平衡,在快速升级的能力和为实现此目标不可避免地引入的中心化故障点之间取舍。

我不责怪 Compound 选择以中心化的方式启动他们的产品(显然它有效,否则我就不会写这篇文章),但我确实希望我们对在其智能合约中拥有 1000 万到 1 亿美元以上的项目,能够保持最高标准,尤其是在向用户沟通风险和提供警告时。

基本上,我们应该鼓励项目去做与 Robert Leshner(Compound 的首席执行官)在这里做的相反的事情:

这在*技术上*可能是正确的,但我们都知道管理员可以以其他方式滥用它……

我对将我的 DAI 存入 Compound 仍然没有决定。也许我就从 100,000 DAI 开始?那会有什么问题呢…… 在 Compound 我们相信!

感谢 Eva Beylin 的反馈与修改。

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

0 条评论

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