LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > Vitalik:Uniswap v2 价格预言机能够抵御闪电贷攻击

Vitalik:Uniswap v2 价格预言机能够抵御闪电贷攻击

2020-02-19 洒脱喜 来源:区块链网络

近日,在bZx连遭攻击之后,关于“预言机”、“闪电贷”、“管理密钥”的讨论已变得越来越多,DeFi生态正在经历一个短暂的痛苦期。

对此,以太坊联合创始人Vitalik Buterin也不得不站出来维稳局面了,他在今日转发了Uniswap创始人Hayden Adams的一条推文,并评论称:

11 “计划中的Uniswap v2 价格预言机设计,能够抵御最近的闪电贷攻击。” 真的如此吗?

我们来看这条推文中推荐的文章《Uniswap何时会成为一个好的预言机?》

文章作者是安全分析平台Gauntlet成员,斯坦福博士生Guillermo Angeris。

以下是译文内容: Uniswap已成为了一种非常流行的传统订单簿式交易所替代方案,并且已成为了一种测量两种币之间相对价格的常用方法(通常被称为‘价格预言机’)。有点令人惊讶的是,尽管Uniswap的基本思想非常简单,但它的实际效果却是相当好的:在“现实世界”中,与规模大得多的交易所相比,Uniswap似乎准确地估计了两种资产的相对价格。

Uniswap的稳定性也是令人惊讶的,因为它似乎不受那些试操纵价格以谋取私利的不良行为者的影响。这些结果可能是Uniswap用户的直觉,因为他们已目睹了它在野外的表现。而对于怀疑者来说,我们的分析为“Uniswap是一个好预言机”的条件创建了一个数学框架。在最近发表的论文(已被Cryptoeconomic Systems 2020接受)中,我们对Uniswap进行了一番分析,并希望在会议之前与更广泛的受众分享一些结果。

  恒定乘积市场(Constant-product markets)  

Uniswap是恒定乘积自动做市商(通常简称为恒定乘积AMM)的特殊例子。其思想如下:我们有一个合约(或交易所),它有一些代币“A”(包含R这样的代币)的储备以及一些代币"B"(包含R’ 这样的代币)的储备。

一个想购买代币"B" Δ’ 币的代理人必须投入足够的代币“A”,以使储备乘积保持不变。换言之,如果代理人想从储备中购买代币"B" Δ’币,那么代理人必须将“A”代币的Δ币投入储备,以便新储备乘积与旧储备乘积相同:

1

方程(1)可以很容易地用来推导我们将要用到的量。例如,币“A”的Uniswap价格 m?,相对于币“B”的定义,是用一定数量的币“B”购买币“A”的边际价格。

2

这相当于是用币“B”购买无限小数量币“A”的平均价格,我们可以将其绘制为价格在Δ = 0时的斜率:

3

在下一节中,我们将把Uniswap的边际价格与真实市场价格联系起来(剧透:在不收费的情况下,且在一般假设下,它们是相等的)。

注:截至目前,恒定乘积公式(方程式(1))不包括任何交易费用。为了简单起见,我们将在文章的剩余部分假设这个案例是免费的,但我们在这里所做的大多数陈述与收费案例中的预期是基本一致的。

  套利以及它告诉了我们什么  

为了说明Uniswap的价格应相对于参考市场的价格,我们需要假设这些市场是如何相互作用的。

在金融数学中,一个非常常见和简单的方法,就是说不存在套利。换言之,我们会假设,不承担任何风险,只在这两个市场之间进行交易,是不可能免费赚到钱的。

因此,我们可以证明,如果m?≠m(其中m是参考市场价格),那么必然存在一笔足够小的交易,使得代理人可以获得正利润,这就意味着,在这个假设下m? = m。

为了证明这一点,我们假设m? > m, 然后,通过定义m?,存在一个足够小的币“A”输入,例如Δ,这样:

4

在给定币“A”的Δ的情况下,Δ’是币“B”的输出。

同样,对于市场来说,存在足够小的交易,使得mΔ ≈ Δ’’,但是,由于Δ’’ < Δ’ (因为m?> m),我们可以很容易地通过在公开市场上以Δ''交易Δ来轻松获利,然后在Uniswap中以Δ交易Δ’,也就是说,我们的利润是正的(因为 Δ’’– Δ’ > 0)。注意,这个推导虽然不是完全严格的,但基本上遵循了数学证明。

由于我们可以在m?<m时提出类似的声明,因此我们得出结论,在无套利条件下,m? = m。 这就意味着,如果我们假设没有套利和交易费用,那么Uniswap的市场价格一定是等于真实的市场价格!当然,无套利假设仅在实践中大致成立,因此Uniswap可能会偏离真实市场价格,特别是在一个区块或少量区块内。 更为详细的分析表明,在许多市场模型下,真实的市场价格将非常接近Uniswap价格,基于代理的模拟验证了这一点。有关详细信息,请参见论文第2节。 注:类似(但较弱)的声明适用于有交易费用的情况: γm ≤ m? ≤ γ??m, 其中(1-γ)是交易费的百分比。如前所述,有关详细信息,请参见论文第2节。

  Uniswap的优良特性  

Uniswap还有一些很好的特性,这增强了我们的信念,即它在实践当中很可能是一个好的预言机。

更具体地说: (a) 不可能仅仅通过在市场内交易币来耗尽Uniswap的储备; (b)向市场增加流动性是正确的做法,因为它降低了特定币的交易成本,同时增加了操纵预言机的成本。

  储备金的边界  

要证明没有交易能耗尽Uniswap的币,这是不难的。 由于k = R’R,那么,通过AM-GM不等式(均值不等式)我们得到:

5

这立即意味着,可能储备金的总和,是以积k的平方根为界的。根据定义,每次交易后k总是常数,那么储量的总和总是离0较远的。

  增加流动性降低交易成本  

有几种方法可以证明这一事实,但最简单的一点是,给定币“A”的输入Δ,我们得到:

6

利用无套利情况下R =m?R’的事实,则币B的输出等于:

7

对于固定边际价格m?,它在R'中增加(注意分母随着R'的增加而减少)。因此,可用储量越高,给定输入量的输出量就越大。这对于很多使用Uniswap协议的用户来说是很直观的,在更多流动性池的情况下,他们看到的滑动是较小的。

  价格操纵是昂贵的(当进行大的变动时)  

事实上,将Uniswap价格操纵到任何固定金额的成本,都与储备量与区块数量成线性关系,这在很多实际情况下可能是昂贵的,尽管我们注意到,对价格非常小或短期的扰动,会是相对便宜的。 现在,假设攻击者希望将Uniswap m?的价格操纵到一定的量p > m(其中m是市场价格),那么这个单一操作(例如,对于单个区块)的成本至少是:

8

(关于推导,见论文附录E部分),如果我们假设 p ≥ (1+ε)m且ε>0,那么由于 C(p)在p中(p>m)是增加的,我们得到的成本至少是:

9

据我们所知

10

以及

11

其中K至少为1/(32√2)。找到C(ε)的这一下界有点棘手,相关论据在论文附录E中可见。如前所述,这一下界与一个常数因子相关,但这里给出的常数K是一个非常弱的下界(因此,这个特殊的选择应该只是作为经验法则,而不是作为一个确切数)。

事实上,成本与储备量R是成线性关系的,这一事实正说明了大型流动性池对稳健的重要性。另一方面,由于当ε很小时,成本是平方标度的,攻击者有可能在很长一段时间内对Uniswap中报告的价格进行轻微操纵,而无需花费太多费用。

例如,如果储备池的R=1000 ETH,攻击者可通过ε=1%操纵价格,大约为每个区块C(.01) ≈ 0.025 ETH(这里的下界相当弱,给出C(.01)≥ 0.002 ETH)。

请注意,这种操纵在实践中是可能存在的,因此,我们将警告说,任何协议都不应依赖这些预言机(oracle)所报告价格非常细微的变化,也不应该依赖在非常短的时间内报告的价格。

换而言之,在试图对价格进行重大调整时,操纵很快就会变得昂贵,这也是我们目前没有观察到对Uniswap市场进行大规模操纵的原因之一。

  结论  

Uniswap虽然相对简单,但它似乎具有很好的理论性质,这表明,在实践中,它作为一个去中心化市场和价格预言机可以拥有稳定性。此外,上面的声明确实强调了在Uniswap中拥有大型储备池的重要性,因为所有结果都以某种方式依赖于此。

如前所述,以上只是完整论文中陈述的一小部分,对细节和证明感兴趣的读者都应该看看论文!

  附录  

2020年2月15日发生bZx攻击时,攻击者利用bZx智能合约逻辑中的一个漏洞来消耗合约资金,我们要重申上述结论条件的重要性。

据我们所知,这次攻击并不依赖于预言机(oracle)操作,而是涉及到在单个区块中执行的多个事务。

特别是,如果攻击可以在一个区块中执行,那么操纵的代价就是非常小的(代价基本上只是交易费用),因此在大多数情况下是相当可行的,因为上面给出的界限并不适用。

这就强调了我们在“操纵成本高昂”部分内容所作警告的重要性:

(a) 合约依赖于Uniswap价格的微小变化可能是不明智的(这次攻击证明了,成本是相当便宜的); (b)合约不应在很短的一段时间内基于Uniswap报告的价格; 从文章内容来看,似乎V神的“能够抵御闪电贷攻击”的结论似乎有些夸大了,他可能只是想表达自己看好这个方案。

你怎么看?

—-

编译者/作者:洒脱喜

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...