Compound贷款风险分析
高天 2019-09-05 18:24:14发布
134904
摘要:3种你该知道的风险。  

编者按,本文编译自Medium,作者为Ameen SoleimaniAmeen SoleimaniSpankChain的首席执行官,同时也是MolochDAO的召集人。

 

 Soleimani最近想为公司的50DAI寻找一个好的管理方式,为此他关注了DeFi中的诸多借贷平台。本文主要是对Compound的风险解析。

 

————

 

你可能听说过Compound。他们Ethereum上创建金融,允许你ETHDAIUSDC和其他几个erc20代币贷款并赚取利息。

 

如今,DAI贷款利率为10%,足以让ETH的持有者侧目。

 

作为SpankChainCEO,管理公司的储备是我的工作,其中也包括近50DAI。按10%的年利率计算,每月大约4000美元,如果我不把DAI放进Compound里,就等于放弃了这笔利息,这就是机会成本。但投资时要记住,天下没有免费的午餐。所有的投资都有风险,Compound贷款也不例外。

 

上个月,我花了一些时间来评估Compound贷款的几种风险:

 

1、合约安全风险

 

2集中故障点

 

3银行挤兑风险

 

我把我的调查分为以下几类,但最重要的是要知道:

 

1、智能合约安全似乎是合法的。

 

2、Compound是一个托管系统,如果他们的管理私钥被泄露,所有的贷款池都可以被轻松地抽干。

 

3、当你Compound贷款时,并不能保证你可以随时提取。如果你试图提取你的资金,而所有的钱都被锁定在未偿还的贷款中,你的提取交易将会失败。

 

图片daidaidai.png

我希望这些贷款机构能理解其中的风险……来源:https://pulse.com/compound

 

 

合约的安全

 

Compound的智能合约已被多家著名的智能合约安全公司审计。

 

OpenZeppelin Audit Report

https://blog.openzeppelin.com/compound-audit/

 

Trail of Bits Audit Report

https://github.com/trailofbits/publications/blob/master/reviews/compound-3.pdf

 

Certora Audit Report

https://compound.finance/documents/Certora.pdf

 

此外,该公司还为关键漏洞提供高达25万美元的私人漏洞赏金(定义为被盗资金的1%或冻结资金的10%),据我所知,没有任何独立的安全研究人员能够获得这笔赏金。

 

这些合约在6个多月里持有2000万美元以上,在2个多月里持有5000万美元以上,目前持有1亿美元以上。就我个人而言,合安全最重要的衡量标准是合中所持有的总资金*合约中所持有的时间,到目前为止,Compound保险已经获得了相当大的公共收益。

 

基于以上因素,我认为Compound智能合约是安全的。

 

集中故障点

 

我自己并不是一个智能合约安全专家,所以我向samczsun寻求帮助。samczsun0x合同中发现了一个关键的bug,并因此获得了10万美元的报酬。关于Compound(我的重点)的集中故障点,他的报告如下:

 

每个cToken都有一个管理员。目前,将它们都设置为

0x8B8592E9570E96166336603a1b4bd1E8Db20fa20

 

每个cToken还有一个审计,它当前都被设置为

0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B

 

这个Unitroller还有一个管理员,它被设置为

0x8B8592E9570E96166336603a1b4bd1E8Db20fa20

 

当前的price oracle既有一个锚管理员,也有一个poster,分别设置为

0xF06e41aDD8A7E7A8aD81a07C0ACA291E4573ca50

0x3c6809319201b978D821190Ba03fA19A3523BD96

 

通过对cToken的管理访问,攻击者可以替换comptroller实现,这将允许他们执行以下一个或多个操作:

 

通过从transferAllowed返回false来防止传输现有的ctoken

 

通过从transferAllowed返回true来转移作为抵押品的ctoken

 

通过从mintal返回false,防止生成新的ctoken

 

通过从redeemAllowed返回false,防止赎回现有的ctoken

 

防止偿还现有的借款,从允许的还款借款中返回false

 

通过从允许的liquidateborrow中返回false来防止清算借款

 

通过从invaleallowed返回true来窃取用户的ctoken

 

通过从允许的借款中返回false来防止借入基础资产

 

通过从允许的借款中返回true,耗尽所有基础资产

 

 

通过对cToken的管理访问,攻击者还可以替换利率模型,从而实现以下操作:

 

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

 

 

通过对当前Unitroller代理的管理访问,攻击者可以:

 

替换Unitroller的实现,如果可以替换cTokencomptrollerUnitroller则允许它们执行相同的攻击,是对于所有使用UnitrollercToken(100%)

 

改变清算激励机制,这将允许攻击者在清算时获得不成比例的代币

 

更改price oracle,这将允许攻击者以较低的价格提供现有ctoken(ETHWBTC),并以较低的价格借款

 

更改cToken的抵押品因子,当它与添加新cToken的能力和更改oracle价格的能力相结合时,将允许攻击者以他们创建的令牌为抵押借款,从而耗尽所有资产

 

 

通过对price oracle的锚管理访问,攻击者可以:

 

使一项资产的价格偏离其真实价值10%

 

 

通过poster访问price oracle,攻击者可以:

 

每小时将一项资产的价格与其存储价值偏离10%

 

 

通过对price oracle的锚管理和poster访问,攻击者可以:

 

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

 

 

总结samczsun的报告:

 

Compound协议被设计成能够由中央管理员进行适当的升级。重要的合约是代理proxies,它简单地指向一个单独的合约地址,合约地址包含它们的实现逻辑,管理员有权随意更改这些地址指标。因为所有的ctoken都使用相同的管理员,如果管理员密钥被破坏,那么Compound存储的所有资产都可以被轻松地耗尽。

 

sam还提到了其他一些更狡猾的攻击,但是如果有这样的选择,攻击者可能会更快地带着所有的资金逃跑,而不是进行更复杂的攻击。

 

OpenZeppelin在他们的Compound审计摘要中很好地涵盖了这一点

 

然而,在恶意或受到危害的管理员手中,这些特权包含了冻结市场、审查交易或从系统窃取所有资产的能力。类似地,可以使用对price feed的控制从系统中窃取大部分(如果不是全部)资产。目前,相同的外部拥有帐户是所有实时市场的管理员。

 

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

 

协议开发者complex Labs, Inc.目前控制着Ethereum地址0x8b8592e9570e96166336603a1b4bd1e8db20fa20,即协议管理员。管理员地址有权支持附加资产、升级price feed oracle、升级利率模型和升级协议的风险模型。

 

另一件需要注意的事情是,Compound当前的托管设置本身并不会使系统不安全。他们非常积极地维护管理密钥的安全,而且很可能(希望如此)他们正在与最好的托管提供商合作,他们可以购买到820万美元的a16z led种子基金。不过,当我决定存50万元傣族币时,我一定会牢记这一点。

 

银行挤兑风险

 

达摩(Dharma)首席运营官的这条推文让我陷入了一个兔子洞,让我弄明白了银行经营风险的综合情况。达摩曾是一个相互竞争的贷款平台。

 

图片1长度兔子洞.png
 

 

这条推文的使用率为98.62%,这意味着在当时,贷款者存入DAI的资金只有98.62%了贷款者。只有1.38%的代币可以提取,所以只有一小部分贷款者可以收回代币。

 

如果同时有足够多的DAI债权人(cDAI持有人)想要回他们的DAI,他们的取款可能会耗尽可用的DAI,将利用率提高到100%,并防止任何进一步的取款。试图收回贷款的银行只会看到他们的交易失败,并将被迫等到更多的借款人偿还贷款后才能收回贷款。

 

因为cDAI存在被卡住的可能性,人们会担心它。也就是说,在银行挤兑的情况下,一群cDAI持有者试图同时索要他们的DAI,因为有足够多的cDAI持有者担心这种情况的发生,这一切可能会同时发生。

 

陷入cDAI银行挤兑贷款人可以选择等待他们的DAI或者出售他们的cDAI这样就会产生外汇费用,如果其他贷款机构cDAI卖给,价格可能会更低。如果贷款机构选择等待危机结束,并向cDAI提供贷款,它们仍将在此期间产生兴趣。

 

Compound如何解决这个问题?

 

Compound团队对这种流动性风险的态度很直接,并在他们的白皮书中进行了描述:

 

该协议并不保证流动性;相反,它依赖于利率模型来激励它。在资产需求极度旺盛的时期,协议的流动性(可收回或借入的令牌)将下降;当这种情况发生时,利率上升,刺激供给,抑制借贷。

 

Compound利率根据特定于cToken利率合约为每个cToken确定借款人的利率。该合同目前为cDAI实现利率模型。这个公式是:

 

借款人年利率=基准利率+(乘数*利用率)

 

对于cDAI,基本利率= 5%,乘数= 15%(这些硬编码到契约中)。在100%的利用率下,借款人支付的利息是20%。这意味着DAI得到最大限度利用时,借款人只会被激励以20%的利率偿还贷款——如果他们相信ETH(贷款的抵押品)在一年内的涨幅将超过20%,他们就没有动力偿还贷款。这可能会让许多cDAI持有者……长期持有cDAI

 

他们唯一能处理这个问题的工具就是使用中央管理员来升级他们的利率模型,这正是他们6周前所做的,当时的利用率提高到99%左右(与上面引用的tweet相同)


 图片1comcomcom.png


所以,如果利用率达到最大,出现流动性危机和迫在眉睫的银行挤兑,所有贷款人所能做的就是希望Compound使用他们的权力来更新和增加借款人的利率,以激励他们偿还贷款并为并为想要退出的贷款人提供流动性。

 

结论

 

Compound这样的协议在集中化和分散化之间跳着微妙的舞蹈,在快速升级的能力和它们必须引入的集中化故障点之间进行权衡。

 

我不觉得Compound选择以集中化的放式引导他们的产品有什么错(它显然已经成功了,否则我也不会写这篇文章),但我确实希望,我们能按照最高标准,在智能合同中包含1000亿美元以上的项目,特别是在向用户传达风险和提供警告方面。

 

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

 

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

 

就目前来看,我还没决定把我的DAI放在Compound里。

 

作者:Ameen Soleimani

 

编译:共享财经Neo

点击进入招聘详情>
微信扫一扫
关注区块链新金融
扫一扫
下载数链APP
内容合作/商务合作:
gxcj@gongxiangcj.com
联系电话:
021-31128751