价格预言机为什么对DeFi如此重要?( 三 )


价格预言机为什么对DeFi如此重要?
本文插图
这个案例研究说明了使用去中心化交易所作为价格预言机时最常见的错误--攻击者在交易过程中几乎完全控制了价格 , 而试图准确地读出这个价格就像在秤上读出它完成结算前的重量一样 。 你很可能会得到错误的数字 , 根据情况 , 可能会让你损失很多钱 。
Synthetix MKR操纵
2019年12月 , Synthetix又遭遇攻击 , 原因是价格预言机操纵 。 这次值得注意的是 , 它跨越了链上价格数据和链下价格数据之间的障碍 。
Reddit用户u/MusaTheRedGuard观察到 , 一名攻击者针对sMKR和iMKR(反向MKR)进行了一些非常可疑的交易 。 攻击者首先通过买入sMKR购买了MKR的多头头寸 , 然后从Uniswap ETH/MKR交易对中购买了大量的MKR 。 等待一段时间后 , 攻击者将他们的sMKR卖出换成iMKR , 并将他们的MKR卖回Uniswap 。 然后 , 他们重复这个过程 。
在幕后 , 攻击者通过Uniswap进行的交易让他们可以随意改变Synthetix上MKR的价格 。 这很可能是因为Synthetix所依赖的链外价格推送实际上是依赖于MKR的链上价格 , 没有足够的流动性让套利者将市场重新设置回最佳状态 。
这个事件说明 , 即使你认为自己使用的是链下价格数据 , 但实际上你可能仍然在使用链上价格数据 , 你仍然可能暴露在使用这些数据的复杂性之中 。
bZx黑客
2020年2月 , bZx在几天内被黑了两次 , 损失约1百万美元 。 你可以在这里找到palkeo写的关于两次黑客的优秀技术分析 , 但我们只看黑客的第二次攻击 。
在第二个黑客攻击中 , 攻击者首先用ETH购买了Kyber上几乎所有的sUSD 。 然后 , 攻击者自己从Synthetix购买了第二批sUSD , 并将其存放在bZx上 。 攻击者用sUSD作为抵押 , 借到了他们允许的最大数额的ETH 。 然后他们将sUSD卖回给Kyber 。
如果你一直在关注 , 你会认识到这本质上是相同的抵押贷款攻击 , 但使用不同的抵押品和不同的去中心化交易所 。
yVault Bug
2020年7月25日 , 我向yEarn报告了一个关于他们新的yVault合约推出的bug 。 我将在下面简单总结一下 。
yVault系统允许用户存入Token并在上面赚取收益率 , 而不需要自己管理 。 在内部 , 金库会跟踪yVault Token的总发行量以及存入的基础 Token总量 。 单个yVault Token的价值由铸造的Token 与存入的Token的比例给出 。 金库赚取的任何收益都会分摊到所有已发行的yVault Token (因此 , 也就分摊到所有yVault Token 持有人身上) 。
第一个yVault允许用户通过向Balancer MUSD/USDC池提供流动性来赚取USDC的收益率 。 当用户向Balancer池子提供流动性时 , 他们会收到BPT作为回报 , BPT可以兑换池子的一部分 。 因此 , yVault根据可以用其BPT赎回的MUSD/USDC的数量来计算其持有的价值 。
这似乎是正确的实现方式 , 但不幸的是 , 与之前给出的原理相同--交易过程中Balancer池的状态并不稳定 , 不能被信任 。 在这种情况下 , 由于Balancer选择的价格曲线 , 用户从USDC换成MUSD时 , 不会得到1:1的汇率 , 但事实上会在池子里留下一些MUSD 。 这意味着BPT的价值可以暂时被放大 , 这使得攻击者可以随意操纵价格 , 随后将金库耗尽 。
这一事件表明 , 价格预言机并不总是清晰的反映价格数据 , 开发者需要警惕他们摄取的是什么样的数据 , 并考虑这些数据是否能被无权用户轻易操纵 。
对于收益率耕作的黑客攻击
2020年10月26日 , 一个不知名的用户入侵了流动性挖矿的池子 , 使用的技术你现在可能已经猜到了 。 你可以在这里阅读官方的事后报告 , 但我再一次为你总结一下:攻击者通过执行交易将曲线池中USDC的价格虚化 , 以降低的价格进入耕作池 , 通过逆转之前的交易恢复价格 , 并以更高的价格退出耕作池 。 这导致了超过3300万美元的损失 。