您的位置:首页 >新闻 >

Samczsun:请勿用现货价格作为预言机 这有替代方案供参考

2021-07-28 18:47:03来源:金色财经

我该用现货价格作为预言机吗?

不!

因为,你可以试试下面几个预言机。

Uniswap TWAP

概述

Uniswap TWAP 预言机适用于任何在 Uniswap V2 或 V3 上有交易对的代币,帮助用户在一定条件下计算相关数字资产特定时间段内的平均价格。

何时使用

如果您的代币已经在 Uniswap V2 或 V3 上线,并且具有足够的交易者活动和流动性,那么请使用 Uniswap TWAP 预言机。换句话说,正常情况下,如果有套利机会,交易者会快速捕获价格信息以重新平衡流动性资金池。如果情况并非如此,可能是「攻击者」在扭曲价格,你也只能耐心等待 TWAP 更新喂价信息。

潜在风险

使用 Uniswap TWAP 必须选择使用时间间隔,这可能是个很棘手的问题。因为:

如果将时间间隔设置更短,意味着您可以更快看到喂价数据更新,但也降低了操纵预言机的攻击成本(the cost of attack)。

如果将时间间隔设置更长,意味着操纵平均价格变得更加困难,但也意味着您将无法对市场的波动及时做出反应。

示例实现

对于 Uniswap V2,可以参阅 GitHub 以获取 24 小时 TWAP 预言机的示例实现。

对于 Uniswap V3,可以参阅 GitHub 以获取可以集成到项目中的代码库。

Curve Virtual Price

概述

Curve 流动性池提供了一种功能,能够用「抵御」闪电贷的方式计算出单个 LP 代币的价格。

何时使用

如果您需要计算 Curve LP 代币的价格,可以使用 get_virtual_price 函数。

潜在风险

除了 Curve 流动性池支持的每个代币存在依赖风险(dependency risk)之外,没有其他风险。

示例实现

如果你想了解更多相关信息,请参阅 Curve 文档。

Maker Price Feed

概述

Maker 运营着自己的喂价网络,他们会将数据公开给链上白名单合约(whitelisted contracts on-chain),其他项目可以通过治理流程向 Maker 申请访问价格数据。

何时使用

如果您认为可以通过治理流程,并且希望将你的预言机风险转移给 Maker 预言机团队,那么可以使用 Maker 的 Price Feed。

潜在风险

您需要信任 Maker 团队和匿名喂价数据才能正确运行、使用 Price Feed,然而,鉴于 Maker 本身依赖于这些预言机,因此在实践中的风险其实很低。此外,由于喂价数据运营商需要手动提交链上价格,因此在链上拥堵非常严重的时期,价格数据更新可能会出现延迟。

示例实现

向 Maker Governance 提交 MIP10c9 子提案

Chainlink

概述

Chainlink 在以太坊主网上支持超过 100 个代币的喂价,主要用于 ETH 交易对和美元交易对,开发人员只需在需要时查询智能合约,即可免费访问这些数据。

何时使用

对于 Maker 或 Uniswap 不支持的加密资产而言,如果您需要了解这些资产的定价数据,或者你的项目无法接受 TWAP 预言机延迟,那么可以使用 Chainlink。

潜在风险

与 Maker 类似,您需要信任 Chainlink 团队和节点运营商才能正确运行、使用 Chainlink。 Chainlink 还要求节点运营者在链上操作,因此在链上拥堵比较严重的时期也可能会出现延迟。

示例实现

如果你想了解如何从 Chainlink 聚合器智能合约获取价格的示例,请参阅 Chainlink 文档。

关于该话题的关键问题

1. 为什么我不能直接使用现货价格?

这取决于您使用现货价格的目的,您可能想用它来计算某些用户存入平台的资产价格,这意味着要确保用户不能就资产的真正价值向您撒谎——这点至关重要。

不幸的是,根据定义,只要有人买卖资产,现货价格就会发生变化。这意味着攻击者可以轻松地使资产的表观价值(apparent value)远高于或远低于资产的真实价值。对于使用现货价格来计算用户借贷能力的协议而言,如果作为抵押品存入的资产价值被人为夸大,意味着整个协议可能(并且将会,正如许多黑客所表明的那样)最终被榨干。

2. 如何判断我是否使用现货价格?

事实证明,如果您使用现货价格,效果可能不会被立即显现出来。

举个例子,如果您想找到 WBTC 兑 ETH 的价格。一个看似简单的解决方案是使用 Uniswap V2 里的 ETH/WBTC 交易对,抓取 ETH 和 WBTC 的储备金余额,然后将两者分开。但是,由于你计算的其实是现货价格,因此攻击者可以通过在流动性池内买入或卖出资产,这样交易对价格就能轻松被操纵了。

当然,这看起来相当简单,如果你真的想计算单个 ETH/WBTC 流动性池的 LP 代币价格时,又该怎么办呢?当你想要计算 ETH/WBTC 流动性池的美元总价值时,一个简单的做法是分别计算 ETH 和 WBTC 的美元价值。但是,这样做,本质上其实已经在考虑现货价格了,因为你仍然依赖于流动性池的准备金余额。这是一个极其微妙的细节,但许多项目可能都采用这种计算方式。如果您想了解更多这方面的信息,可以参阅这篇 文章。

最后要说的是,你可能正在使用一个没有在本文中列出的预言机,实际上,本文提到的这四个预言机并没有覆盖市场上的全部预言机,也不意味着它们是市场上最好的四个预言机。

撰文:Samczsun,著名安全专家、区块链投资机构 Paradigm 研究合伙人翻译:卢江飞

来源链接:shouldiusespotpriceasmyoracle.com