Uniswap学习(2)—价格操控问题

344 阅读3分钟

上一篇学习了Uniswap学习(1)——AMM的可行性,其中有提到v1版本存在着一些问题,其中一个比较容易被黑客攻击的就是价格操控问题了,下面展开分析一下。

一、操控价格影响代币兑换

我们已知Uniswap的AMM价格机制是根据恒定乘积来确定的,在一个交易对中,一种币数量的急剧减少,会带来其价格的显著提升。黑客正是利用这一特性来进行价格操控从而带给受害者资金损失。

继续沿用上一篇中的例子

已知用Uniswap v1创建的一个ETH和TokenA的交易对,ETH数量为100,TokenA的数量为10000,每次swap操作需要先扣除0.3%的手续费。

为了维持K的值恒定: K=X*Y=100*10000=1000000

需要满足无论X和Y的数量如何变动,任何swap操作发生后,池中X和Y的数量乘积恒定。

由上一篇中已知,假设Alice在池中ETH数量100,TokenA数量为10000时,用1ETH发起Swap,她将会收到98.72个TokenA。我们先记下这是正常情况的兑换操作。

  1. 在Alice进行Swap前,攻击者用90ETH发起兑换操作,此时攻击者将Swap兑换出4729.35个TokenA,计算过程如下:

before_eth=100
before_tokenA=10000
//after swap
after_eth=100+90*(1-0.003)=189.73
after_tokenA=K/after_eth=1000000/189.73=5270.65
// Attacker can get tokenA :
swap_tokenA=before_tokenA-after_tokenA=10000-5270.65=4729.35

  1. 此时,Alice发起swap操作,用1个ETH兑换TokenA,她能够得到TokenA的数量为:
before_eth=189.73
before_tokenA=5270.65
//after Alice Swap
after_eth=189.73+1*(1-0.003)=190.73
after_tokenA=K/after_eth=1000000/190.73=5243.01
//Alice can get tokenA :
swap_tokenA=before_tokenA-after_tokenA=5270.65-5243.01=27.64
  1. 当Alice完成swap操作后,攻击者再做一次逆向兑换,把之前兑换出4729.35个TokenA再swap成ETH:
before_eth=190.73
before_tokenA=5243.01
//after swap
after_tokenA=5243.01+4729.35*(1-0.003)=9958.17
after_eth=K/after_tokenA=1000000/9958.17=100.42

// Attacker can get ETH :
swap_eth=before_eth-after_eth=190.73-100.42=90.31

到此,攻击者完成了一次价格操控。在这个过程中,Alice用1个ETH兑换到了27.64个TokenA,但是如果没有攻击者的操控行为,Alice本应该可以得到98.72个TokenA,她损失了71.08个TokenA。而攻击者在此过程中只需要准备90个ETH,操作完后得到了90.31个ETH。

二、操纵价格影响其他DeFi产品

上文的例子定量的分析了攻击者操控代币价格的过程,我们可以看到在ETH和TokenA这组交易对中,攻击者投入大量ETH,兑换出大量的TokenA,这让TokenA的价格大幅上升,从而Alice兑换出的TokenA的数量锐减。这也符合了“物以稀为贵”的普世道理。同时,我们也能想到,TokenA的价格上升带来的影响,不仅能让用户swap过程资金受损,也可以利用TokenA变贵的这个特点,给攻击者带来其他收益。

比如Defi类产品中有通过抵押物贷款的Dapp,借贷的过程大致如下:

  1. 用户以代币A作为借贷抵押物品,想要获得代币B
  2. 借贷Dapp去查询代币A和B的价格,再评估可以借给这个用户多少代币B

如果Dapp去查询的AMM中代币A的价格此时刚好被攻击者操控,代币A价格大幅上升,借贷Dapp就会将更多的代币B借给用户,这个借出量实际超过了抵押物真正的价值,攻击者就可以利用这个过程从Dapp中套利。

除此以外,还有很多业务逻辑复杂的Defi产品,只要用到了从AMM查询价格作为价格依据的地方,就存在被黑客攻击或套利的机会。因此Uniswap v1中存在的价格操控问题是十分严重的,Uniswap也在后面的版本中进行了修复和改进,后面将继续学习了解。