风险提示:请理性看待区块链,树立正确的货币观念和投资理念,不要盲目跟风投资,本站内容不构成投资建议,请谨慎对待。 免责声明:本站所发布文章仅代表个人观点,与CoinVoice官方立场无关

观点丨价格预言机为什么对 DeFi 如此重要?

加密谷Live
2020年11月19日

观点丨价格预言机为什么对 DeFi 如此重要?

作者 | Samczsun

观点丨价格预言机为什么对 DeFi 如此重要?

2019 年年底,我发表了一篇题为 《Taking undercollateralized loans for fun and for profit》的文章。在其中,我描述了对以太坊 DApp 的经济攻击,这些攻击依赖于一个或多个 Token 的准确价格数据。目前已经到了 2020 年末,不幸的是,此后众多项目都犯了非常类似的错误,最近的例子是 Harvest Finance 黑客事件,导致协议用户集体损失 2400 万美元。

虽然开发者对重入等漏洞很熟悉,但预言机操纵价格显然不是人们经常考虑的问题。相反,基于重入性的漏洞这些年有所下降,而基于价格预言机操纵的漏洞现在却在上升。因此,我决定是时候有人发表一篇关于价格预言机操纵的权威资源了。

这篇文章分为三个部分。对于不熟悉这个问题的人,有一个关于预言机和预言机操纵的介绍。想要测试自己知识的人可以跳到案例研究,我们在这里回顾了过去与预言机相关的漏洞和利用。最后,我们总结了一些开发人员可以用来保护他们的项目不受预言机操纵的技术。

在现实生活中预言机操纵

2015 年 12 月 1 日,星期三。你的名字叫大卫-斯帕戈,你正在澳大利亚墨尔本的北京公爵演唱会上。你想亲自见见乐队,但你和后台通道之间站着两个保安,他们不可能让一些普通人直接走进去。

你想知道,如果你表现得像个普通人,保安们会有什么反应。乐队的家人们肯定会被允许到乐队后台参观,所以你要做的就是让保安们相信你是他们的家人。你思考了一会儿,想出了一个只能用天才或疯子来形容的计划。

迅速安排好一切后,你自信地走到保安面前。你自我介绍说是大卫-斯帕戈,Peking Duk 的家人。当保安要求你提供证据时,你向他们展示了无可辩驳的证据--维基百科。

观点丨价格预言机为什么对 DeFi 如此重要?

保安向你招手,让你稍作等待。五分钟过后,你在想是否应该在执法人员出现之前逃走。当你准备离开时,鲁本-斯泰尔斯走了过来并做自我介绍。你和他一起走到一个绿色房间,乐队对你的聪明才智印象深刻,最后你们一起喝了几瓶啤酒。后来,他们在自己的 Facebook 页面上分享了发生的事情。

观点丨价格预言机为什么对 DeFi 如此重要?

什么是价格预言机?

价格预言机,大抵是指任何你可以咨询价格信息的东西。当 Pam 向 Dwight 询问 Schrute Buck 的现金价值时,Dwight 就像一个价格预言机。

观点丨价格预言机为什么对 DeFi 如此重要?

在以太坊上,一切都是智能合约,价格预言机也是如此。因此,了解价格预言机如何获取价格信息的方式更有用。一种方法是,你可以简单地从价格 API 或交易所获取现有的链外价格数据,并将其带到链上。另一种方式,你可以通过咨询链上去中心化交易所来计算即时价格。

观点丨价格预言机为什么对 DeFi 如此重要?

这两种选择都有各自的优势和劣势。链外数据对波动的反应一般较慢,这一特点是好是坏取决于使用它的目的。不过它通常需要少数特权用户来推送链上数据,所以你必须相信他们不会变坏,不能被胁迫推送不良更新。链上数据不需要任何特权访问,并且总是最新的,但这意味着它很容易被攻击者操纵,这可能导致灾难性的后果。

什么可能会出问题呢?

让我们来看看几个案例,在这些案例中,一个集成度不高的价格预言机导致了 DeFi 项目的重大经济损失。

Synthetix sKRW Oracle 故障

Synthetix 是一个衍生品平台,它允许用户接触其他货币等资产。为了实现这一目标,Synthetix (当时)依靠定制的链外价格推送实现,其中从一组秘密的价格推送计算出的总价格以固定的时间间隔发布在链上。然后,这些价格允许用户针对支持的资产进行多头或空头交易。

2019 年 6 月 25 日,Synthetix 所依赖的其中一个价格推送错误地报告了韩元的价格,比真实汇率高出 1000 倍。由于价格预言机系统的其他地方出现了其他的错误,这个价格被系统接受并发布在链上,在链上一个交易机器人迅速在 sKRW 市场上进行了买入和卖出。

观点丨价格预言机为什么对 DeFi 如此重要?

理论上讲,该机器人总共能够赚取超过 10 亿美元的利润,虽然 Synthetix 团队能够与交易员谈判,以换取漏洞奖金来返还资金。

Synthetix 正确地执行了预言机合约,并从多个来源提取价格,以防止交易者在链上发布价格变化之前预测价格变化。然而,一个上游价格源发生故障的孤立案例导致了毁灭性的攻击。这说明了使用链外数据的价格预言机的风险:你不知道价格是如何计算出来的,所以你的系统必须精心设计,使所有潜在的故障模式都能得到妥善处理。

抵押贷款

如前所述,我在 2019 年 9 月发表了一篇文章,概述了使用依赖链上数据的价格预言机的相关风险。虽然我强烈建议阅读原帖,但它相当长,技术细节也很多,可能会让人难以消化。因此,我将在这里提供一个简化的解释。

想象一下,你想把去中心化的借贷带到区块链上。允许用户存入资产作为抵押品,并借入其他资产,最高金额由他们存入的资产价值决定。假设用户想用 ETH 作为抵押品借入美元,ETH 当前价格为 400 美元,抵押率为 150%。

如果用户存入 375 个 ETH,相当于存入 150000 美元的抵押品。每 1.5 美元的抵押品可以借到 1 美元,所以他们最多可以从系统中借到 10 万美元。

观点丨价格预言机为什么对 DeFi 如此重要?

但当然,在区块链上,并不是简单地宣布 1 个 ETH 值 400 美元那么简单,因为一个恶意用户可以简单地宣布 1 个 ETH 值 1000 美元,然后从系统中拿走所有的钱。因此,对于开发者来说,想要获得预言机所读取的最近价格是很有诱惑力的,比如 Uniswap、Kyber 或其他去中心化交易所的当前现货价格。

观点丨价格预言机为什么对 DeFi 如此重要?

乍一看,这似乎是正确的做法。毕竟,只要你想买入或卖出 ETH,Uniswap 的价格总是大致正确的,因为任何偏差都会被套利者迅速纠正。然而,事实证明,在交易过程中,去中心化交易所的现货价格可能会出现较大的错误,如下例所示。

考虑一下 Uniswap 的储备金是如何运作的。价格是根据储备持有的资产数量计算的,但随着用户在 ETH 和美元之间进行交易,储备持有的资产会发生变化。如果一个恶意用户在从你的平台贷款前后进行交易怎么办?

在用户贷款之前,他们用 2000000 美元购买了 5000 个 ETH。Uniswap 交易所现在计算出的价格是 1 ETH=1,733.33 美元。现在,他们的 375 个 ETH 可以作为价值 433,333.33 美元资产的抵押品,他们借到了这些资产。最后,他们用 5,000 ETH 换回他们原来的 2,000,000 美元,从而重置价格。最终的结果是,你的贷款平台只是让用户在没有投入任何抵押物的情况下,多借了 333,333.33 美元。

观点丨价格预言机为什么对 DeFi 如此重要?

这个案例研究说明了使用去中心化交易所作为价格预言机时最常见的错误--攻击者在交易过程中几乎完全控制了价格,而试图准确地读出这个价格就像在秤上读出它完成结算前的重量一样。你很可能会得到错误的数字,根据情况,可能会让你损失很多钱。

Synthetix MKR 操纵

2019 年 12 月,Synthetix 又遭遇攻击,原因是价格预言机操纵。这次值得注意的是,它跨越了链上价格数据和链下价格数据之间的障碍。

Reddit 用户 u/MusaTheRedGuard 观察到,一名攻击者针对 sMKR 和 iMKR (反向 MKR)进行了一些非常可疑的交易。攻击者首先通过买入 sMKR 购买了 MKR 的多头头寸,然后从 Uniswap ETH/MKR 交易对中购买了大量的 MKR。等待一段时间后,攻击者将他们的 sMKR 卖出换成 iMKR,并将他们的 MKR 卖回 Uniswap。然后,他们重复这个过程。

在幕后,攻击者通过 Uniswap 进行的交易让他们可以随意改变 Synthetix 上 MKR 的价格。这很可能是因为 Synthetix 所依赖的链外价格推送实际上是依赖于 MKR 的链上价格,没有足够的流动性让套利者将市场重新设置回最佳状态。

观点丨价格预言机为什么对 DeFi 如此重要?

这个事件说明,即使你认为自己使用的是链下价格数据,但实际上你可能仍然在使用链上价格数据,你仍然可能暴露在使用这些数据的复杂性之中。

bZx 黑客

2020 年 2 月,bZx 在几天内被黑了两次,损失约 1 百万美元。你可以在这里找到 palkeo 写的关于两次黑客的优秀技术分析,但我们只看黑客的第二次攻击。

在第二个黑客攻击中,攻击者首先用 ETH 购买了 Kyber 上几乎所有的 sUSD。然后,攻击者自己从 Synthetix 购买了第二批 sUSD,并将其存放在 bZx 上。攻击者用 sUSD 作为抵押,借到了他们允许的最大数额的 ETH。然后他们将 sUSD 卖回给 Kyber。

如果你一直在关注,你会认识到这本质上是相同的抵押贷款攻击,但使用不同的抵押品和不同的去中心化交易所。

yVault Bug

2020 年 7 月 25 日,我向 yEarn 报告了一个关于他们新的 yVault 合约推出的 bug。我将在下面简单总结一下。

yVault 系统允许用户存入 Token 并在上面赚取收益率,而不需要自己管理。在内部,金库会跟踪 yVault Token 的总发行量以及存入的基础 Token 总量。单个 yVault Token 的价值由铸造的 Token 与存入的 Token 的比例给出。金库赚取的任何收益都会分摊到所有已发行的 yVault Token (因此,也就分摊到所有 yVault Token 持有人身上)。

第一个 yVault 允许用户通过向 Balancer MUSD/USDC 池提供流动性来赚取 USDC 的收益率。当用户向 Balancer 池子提供流动性时,他们会收到 BPT 作为回报,BPT 可以兑换池子的一部分。因此,yVault 根据可以用其 BPT 赎回的 MUSD/USDC 的数量来计算其持有的价值。

这似乎是正确的实现方式,但不幸的是,与之前给出的原理相同--交易过程中 Balancer 池的状态并不稳定,不能被信任。在这种情况下,由于 Balancer 选择的价格曲线,用户从 USDC 换成 MUSD 时,不会得到 1:1 的汇率,但事实上会在池子里留下一些 MUSD。这意味着 BPT 的价值可以暂时被放大,这使得攻击者可以随意操纵价格,随后将金库耗尽。

观点丨价格预言机为什么对 DeFi 如此重要?

这一事件表明,价格预言机并不总是清晰的反映价格数据,开发者需要警惕他们摄取的是什么样的数据,并考虑这些数据是否能被无权用户轻易操纵。

对于收益率耕作的黑客攻击

2020 年 10 月 26 日,一个不知名的用户入侵了流动性挖矿的池子,使用的技术你现在可能已经猜到了。你可以在这里阅读官方的事后报告,但我再一次为你总结一下:攻击者通过执行交易将曲线池中 USDC 的价格虚化,以降低的价格进入耕作池,通过逆转之前的交易恢复价格,并以更高的价格退出耕作池。这导致了超过 3300 万美元的损失。

我该如何保护自己?

现在,我希望你已经学会了认识到共同点--你使用价格预言机并不总是安全的,如果你不遵循适当的预防措施,攻击者可能会攻击你的协议,将你的钱全部发送给他们。虽然没有一个万能的修复方法可以参考,但这里有一些过去对其他项目有效的解决方案。也许其中一个也会适用于你。

寻找有流动性充足的池子

就像跳入游泳池的浅滩一样,跳入流动性不足市场是痛苦的,可能会导致重大的开支,这将永远改变你的生活。在你考虑你打算使用的具体价格预言机的复杂性之前,请考虑该代币的流动性是否足以保证与你的平台整合。

一鸟在手,胜过两鸟在林

在 Uniswap 上看到潜在的汇率可能会令人着迷,但在你真正点击交易和代币放在你的钱包里之前,并不意味着那是最终价格。同样,确定两种资产之间汇率的最好方法是直接交换资产。这种方法很好,因为没有回扣,也没有万一。但是,对于借贷平台等协议来说,可能就不适用了,因为这些协议是需要持有原始资产的。

去中心化的预言机

有一种方法可以总结出依赖链上数据的预言机的问题,那就是它们有点太新潮了。既然如此,为什么不引入一点人为的延迟呢?写一个合约,它可以用 Uniswap 这样的去中心化交易所的最新价格来更新自己,但只有当一小部分特权用户提出请求时才会更新。现在即使攻击者可以操纵价格,他们也无法让你的协议真正使用它。

这种方法实现起来真的很简单,而且是速战速决,但也有一些缺点--在链路拥堵的时候,你可能无法像你希望的那样快速更新价格,而且你仍然容易受到三明治攻击。另外,现在你的用户需要相信你真的会保持价格更新。

延迟防御

操纵价格预言机是一个时间敏感的操作,因为套利者总是在观察,并希望有机会优化任何次优市场。如果攻击者想把风险降到最低,他们会希望在一次交易中完成操纵价格预言机所需的两次交易,这样就不会有套利者在中间跳跃的机会。作为协议开发者,如果你的系统支持的话,可能只需要实现用户进入和退出系统之间短至 1 个 block 的延迟就可以了。

当然,这可能会影响到可组合性,矿工与交易员的合作正在上升。在未来,不良行为者可能会在多个交易中进行价格预言机操纵,因为他们知道与他们合作的矿工会保证没有人可以跳到中间,从他们的收益中分一杯羹。

时间加权平均价格 (TWAP)

Uniswap V2 引入了一个 TWAP 预言机,供链上开发者使用。文档中更详细地介绍了该预言机提供的具体安全保障,但一般来说,对于长期没有链上拥堵的大池子来说,TWAP 预言机对预言机操纵攻击有很强的抵抗力。不过,由于其实现的性质,在市场波动较大的时刻,它的响应速度可能不够快,而且只适用于链上已经有流动性代币的资产。

M-of-N 喂价

有时候人们会说,如果你想把一件事做好,你就自己去做。如果你召集 N 个值得信赖的朋友,让他们提交他们认为合适的链上价格,最好的 M 个答案就成了当前的价格,会怎么样?

如今很多大型项目都在使用这种方法。Maker 运行了一组由可信实体运营的价格源,Compound 创建了 Open 预言机,并拥有 Coinbase 等报告器,Chainlink 聚合了 Chainlink 运营商的价格数据,并在链上公开。只要记住,如果你选择使用这些解决方案之一,你现在已经将信任委托给第三方,你的用户也必须这样做。要求报告人手动在链上发布更新也意味着,在市场波动大、链上拥堵的时候,价格更新可能无法及时完成。

结论

价格预言机是 DeFi 安全性的一个重要组成部分,但往往被忽视。安全地使用价格预言机是很难的,而且有很多方法可以让您和您的用户都吃亏。在这篇文章中,我们介绍了过去操纵价格预言机的例子,并确定了在交易中间读取价格信息可能是不安全的,可能会导致灾难性的财务损失。我们还讨论了一些其他项目过去用来打击价格预言机操纵的技术。不过最后,每一种情况都是独特的,你可能会发现自己不确定自己是否正确使用了价格预言机。如果是这种情况,请随时联系我们寻求建议 !

观点丨价格预言机为什么对 DeFi 如此重要?

Samczsun 作者

Olivia 翻译

Olivia 编辑

内容仅供参考 不作为投资建议 风险自担

版权所有 未经允许 严禁转载

观点丨价格预言机为什么对 DeFi 如此重要?

观点丨价格预言机为什么对 DeFi 如此重要?

☟☟☟


声明:本内容为作者独立观点,不代表 CoinVoice 立场,且不构成投资建议,请谨慎对待,如需报道或加入交流群,请联系微信:VOICE-V。

评论0条

加密谷Live

简介:分享区块链领域专业、前沿、有趣的内容

专栏

更多>>