Uniswap V2 的改进

Uniswap v2 的改进

避免两次滑点

什么是滑点

假设初始状态下池中有 10 ETH 和 3000 DAI,x = 10, y = 3000,k = 10 * 3000 = 30000。

  1. 初始状态:
    10 ETH
    3000 DAI
    恒定乘积 k = 30000
  2. 用户交易:
    用户想用 1 ETH 交换 DAI。
    新的 ETH 数量:10 + 1 = 11 ETH
    新的 DAI 数量:y = k / 新的 ETH 数量 = 30000 / 11 ≈ 2727 DAI
  3. 调整结果:
    池中现在有 11 ETH 和 2727 DAI
    DAI 的减少量:3000 - 2727 = 273 DAI
    用户收到 273 DAI

滑点 = 300 - 273 = 27 DAI。

Uniswap V2改进

Uniswap v1 只支持ERC20/ETH交易对,任何两个ERC20间的交易,都需要以“和ETH的交易对”为中间渠道交易两次。所以会存在两次滑点。

而Uniswap v2 支持任意两种ERC20的交易对。只承受一次滑点。

价格预言机

Uniswap V1 的价格操纵攻击

由于Uniswap V1直接使用恒定乘积公式衡量价值,所以有价格操纵的风险。

初始状态

Uniswap 流动性池:100 ETH 和 30000 DAI,ETH 价格为 300 DAI/ETH
借贷协议:依赖 Uniswap 价格预言机

步骤 1:借入闪电贷

攻击者从 Aave 或 dYdX 等平台借入 2,000,000 USD

步骤 2:操纵 Uniswap 价格

攻击者将 2,000,000 USD 存入 Uniswap 流动性池,换取 ETH
新的池状态:
增加 2,000,000 USD 后,池中有 5,200,000 USD 和 3000 ETH
ETH 价格被操纵为 1,733.33 USD/ETH

步骤 3:利用操纵后的价格进行借贷

攻击者将 375 ETH 作为抵押品存入借贷协议,总价值 650,000 USD
按 150% 的抵押率,攻击者借出 433,333.33 USD

步骤 4:套利操作

攻击者利用高价在其他平台卖出 ETH,或在 Uniswap 上进行高价交易
假设攻击者在其他平台按 1,733.33 USD/ETH 卖出 375 ETH,获得 650,000 USD
价格恢复后,攻击者在 300 USD/ETH 的价格买回 ETH,买回 2166.67 ETH(650,000 / 300)

步骤 5:还贷和恢复价格

攻击者用部分利润偿还 2,000,000 USD 闪电贷
还清闪电贷后,剩余的 433,333.33 USD 和部分 ETH 用于恢复 Uniswap 价格
恢复后的 Uniswap 池状态接近初始状态,但攻击者已经通过操纵和套利获利

最终收益

假设攻击者通过重复操作和套利,获得了显著的利润。在还清闪电贷和恢复价格后,攻击者仍然保留了一部分 ETH 和 USD 作为利润。

Uniswap V2 的价格预言机的改进

(1)价格每个区块更新一次,记录区块第一笔交易开始之前的累计价格
(2)价格使用时间加权平均价格(Time-Weighted Average Price, TWAP)

作为一种防止价格操纵和提供更稳定价格信息的机制。这是对 Uniswap v1 直接使用瞬时价格的一种改进,因为瞬时价格容易受到大额交易或价格操纵的影响。
V2在每个区块的第一笔交易前计算和记录价格而不是任意时间段。

闪电贷

闪电贷是一种无需抵押即可借款的DeFi创新,允许用户在一个区块内借出和归还大额资金。这意味着在同一个交易中,用户可以借款、执行操作(如套利、换币、偿还债务)并归还贷款,这一切都必须在交易被挖掘到区块之前完成。

使用闪电贷的步骤:

  1. 借贷启动:
    借出大量资金,通常是稳定币或其他流动性高的代币。
  2. 执行交易:
    使用借来的资金在Uniswap上执行一系列交易
  3. 归还贷款:
    同一个区块交易结束前,将借出的资金连同借贷费用一并归还给原贷款平台。

元交易

使用户在不支付以太坊交易费(gas)的情况下参与交易的机制。元交易使得第三方可以代表用户支付交易费用,从而降低了新用户参与 DeFi 的门槛,并提高了用户体验。

posted @ 2021-03-04 15:33  sorachannel  阅读(262)  评论(0)    收藏  举报