价格预言机为什么对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美元 。