DeFi中的预言机风险:无人关注的隐形威胁

本文深入探讨了去中心化金融(DeFi)中预言机风险这一关键问题。预言机作为连接链上智能合约与链下数据的桥梁,其数据准确性直接影响DeFi系统的稳定性和安全性。文章分析了预言机风险的来源、潜在危害以及缓解策略,并为开发者提供了一份快速检查清单,旨在提高DeFi协议的安全性。

DeFi 的承诺以及潜藏的问题

去中心化金融,或 DeFi,一直是我们在思考资金方面最令人兴奋的转变之一。它从等式中移除了银行和中间人,让人们可以直接从他们的钱包进行交易、借贷和赚取收益。没有文书工作,没有机构,只有代码。

但这里有个问题:DeFi 可能看起来是自动化的和无需信任的,但它仍然依赖于来自外部世界的数据才能运作。而这正是事情变得复杂的地方。

智能合约,那些运行 DeFi 应用的代码片段,存在于区块链上。但他们不知道区块链之外发生了什么。除非有人告诉他们,否则他们看不到资产价格、利率或任何现实世界的事件。这项工作落在了被称为 预言机(oracle) 的东西身上。

预言机充当信使,将链下数据馈送到链上智能合约中。虽然它们对于使 DeFi 工作至关重要,但它们也代表了它最薄弱的环节之一。当预言机出错时,造成的损害可能是快速、巨大且不可逆转的。

这就是所谓的 预言机风险(oracle risk),一种安静但非常真实的威胁,每个 DeFi 开发者、投资者和用户都应该了解。

那么,什么是预言机风险?

预言机风险是指当智能合约基于 错误数据 做出决策时发生的情况,因为预言机给出了错误的输入。

智能合约旨在在满足某些条件时自动执行。如果一个合约被告知 ETH 的价格已跌破某个阈值,它可能会自动清算用户的贷款。但如果那个价格不是真的呢?如果它被操纵或延迟了呢?

这就是危险。智能合约信任它们被提供的任何数据。如果该数据不准确,即使只有几秒钟,也可能触发不应该发生的操作:交易、清算、铸造、赎回。而一旦发生,就无法回头了。

让我们把它归结为:

  • 智能合约依赖于预言机来提供真实世界的数据。
  • 预言机容易受到操纵、延迟和错误的影响。
  • 错误的预言机输入可能导致智能合约以意想不到的,通常是灾难性的方式运行。

这不是理论上的。预言机风险已经在实际的 DeFi 系统中被利用,导致数百万美元的损失。

为什么预言机风险比看起来更重要

区块链没有内置的暂停按钮。

在传统金融中,存在制衡机制。人类监督交易,系统监控异常情况,如果出现问题,通常可以撤销交易。

DeFi 中并非如此。

智能合约没有判断力。它们不会暂停进行二次检查。如果它们接收到的数据符合它们的标准,它们会立即、自动且毫无感情地执行。而这正是预言机风险变得危险的地方。

想象一下:一个预言机错误地报告说某个 token 的价格已经下跌了 50%。一个 DeFi 借贷平台看到这个并开始清算头寸。用户损失了他们的资产——实际上仍然远高于抵押阈值的资产。这一切都因为一个错误的数据点。

而且等到有人注意到的时候,已经太晚了。智能合约已经做了它被编码要做的事情。

预言机操纵实际上是如何发生的(一个现实的场景)

让我们来看一个简化的版本,了解攻击者如何在 DeFi 中利用预言机漏洞。

  1. 一个借贷协议使用来自去中心化交易所(DEX)的价格 feed 作为其预言机。
  2. 攻击者借入闪电贷,一种必须在同一笔交易中偿还的大额短期贷款。
  3. 通过这笔贷款,他们通过交易大量的目标资产来暂时扭曲 DEX 的价格。
  4. 预言机获取这个被操纵的价格并将其输入到协议中。
  5. 借贷平台信任这个价格,允许攻击者借入超过他们应该借入的金额,或者错误地清算合法的用户。
  6. 攻击者偿还闪电贷,将利润装入自己的口袋,造成的损害已经完成。

没有代码被黑客入侵。合约完全按照设计的方式工作。唯一的缺陷是它对被操纵的数据的信任。

代码聚光灯:一个有漏洞的预言机设置

这是一个基本的 Solidity 示例,展示了这种风险如何潜入智能合约代码:

pragma solidity ^0.8.0;
interface IPriceOracle {
    function getLatestPrice() external view returns (uint256);
}
contract VulnerableLending {
    IPriceOracle public priceOracle;
    constructor(address _oracle) {
        priceOracle = IPriceOracle(_oracle);
    }
    function calculateCollateralValue(uint256 collateralAmount) public view returns (uint256) {
        uint256 price = priceOracle.getLatestPrice();
        return collateralAmount * price;
    }
}

这段代码有什么问题?

  • 它依赖于一个 单一预言机,没有任何保障措施。
  • 没有检查数据是否是最新的或者来自可靠的来源。
  • 如果那个预言机被操纵,整个合约会盲目地信任并使用它的输出。

这种简单、单来源且未经审计的设置正是攻击者所寻找的。

预言机风险的来源:常见的弱点

预言机风险并不总是来自恶意行为者。有时这只是糟糕的设计。但无论是意外还是漏洞利用,结果可能都是一样的。

以下是预言机漏洞最常见的来源:

1. 中心化或单来源预言机

如果你的协议依赖于一个数据 feed,那么你就将过多的信任放在了一个单点故障上。如果该 feed 出现故障或受到攻击,你的整个系统都将面临风险。

2. 低流动性数据源

从稀薄市场获取数据的预言机可以用非常少的资本进行操纵。对于不太知名的 token 或小型 DEX 池来说尤其如此。

3. 缓慢的更新时间

滞后于实际市场的数据可能导致错误的决策。在一个以秒为单位波动的市场中,每 10 分钟更新一次的价格 feed 几乎毫无用处。

4. 激励措施不一致

一些预言机没有得到适当的激励来保持诚实。如果欺骗系统比公平竞争更有利可图,你可以猜到会发生什么。

如何缓解预言机风险(并构建更安全的 DeFi 协议)

没有办法完全消除预言机风险。但是有一些聪明的方法可以减少它,有时是大幅度地减少。

以下是开发人员——以及一般的 DeFi 团队——如何保护他们的用户和协议:

使用去中心化的预言机网络

不要信任一个预言机,而是使用像 Chainlink、Band 或 UMA 这样的网络,它们从多个来源获取数据。它们聚合数据,应用共识机制,并帮助避免单点故障。

应用时间加权平均价格(TWAP)

不要使用最新的价格,而是取一段时间内的平均值。这样,突然的价格峰值——通常是由操纵引起的——不会立即反映出来。

选择中位数而不是平均数

使用来自多个价格来源的中位数,而不是直接平均。这有助于过滤掉可能扭曲结果的极端异常值。

添加回退机制

设计你的合约来检测异常的价格行为。如果价格波动太快或者 feed 数据消失,合约可以暂停,使用备份预言机,或者恢复到安全状态。

优先进行安全审查和漏洞赏金

每个 DeFi 项目都应该进行彻底的审计——尤其是在预言机逻辑方面。一个运行良好的漏洞赏金计划也是一种从道德黑客那里众包漏洞检测的好方法。

开发人员的快速检查清单

在集成任何预言机之前,DeFi 团队应该问:

  • 数据是否来自多个独立来源?
  • feed 的更新频率如何?
  • 如果主预言机发生故障,是否有备份系统?
  • 有哪些激励措施来确保诚实的报告?
  • 该系统是否在真实条件下进行了测试——并经过了审计?

如果对任何一个问题的回答是“不确定”,那么就该重新审视你的架构了。

最后的想法:DeFi 的安全程度取决于其预言机的安全程度

预言机可能看起来像一个技术细节,但它们在 DeFi 协议的运作方式中起着至关重要的作用。它们是将代码连接到现实世界的生命线。当这条生命线被切断或损坏时,即使是写得最好的智能合约也会崩溃。

好消息是预言机风险是可以管理的。通过正确的工具、可靠的设计和周到的工程,开发人员可以构建不仅能工作,而且能承受操纵、停机和市场波动的系统。

DeFi 的未来不仅仅取决于创新。它取决于韧性——这意味着从第一天起就认真对待预言机设计。

有问题或想讨论实施细节吗?

你可以通过以下方式联系我们:hello@ancilar.com

访问我们的网站:www.ancilar.com

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

0 条评论

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