Q1ngying

今朝梦醒与君别,遥盼春风寄相思

0%

UniswapV2-Flash Swap

Flash Swaps

Uniswap flash swap 允许我们提取 Uniswap 上任何 ERC20 代币的全部储备,并无需预付费用即可执行任意逻辑,前提时在交易结束之前我们需要满足:

  • 使用相应的配对代币支付提取的ERC20代币
  • 返还提取的 ERC20 代币,并支付一部分的费用

Flash Swap 非常有用,因为它们消除了涉及 Uniswap 的多步骤交易的前期资本要求和不必要的操作顺序限制。

Examples

Capital Free Arbitrage(无资本套利)

Flash Swap 一个很有趣的用例就是无资本套利。Uniswap 设计的一个组成部分是激励套利者维持 Uniswap 市场价格的”公平”。虽然从博弈论上来说是合理的,但这种策略只有那些拥有足够资本来利用套利机会的人才能使用。Flash swap 完全消除了这一障碍,有效地实现了套利民主化

比如下面的场景:在 Uniswap 上购买 1 ETH 的成本为 200 DAI(通过调用 getAmountIn 并指定 1 ETH 作为精确输出来计算),而在 Oasis(或任何其他交易场所)上,1 ETH 购买 220 DAI。对于任何拥有 200 DAI 可用的人来说,这种情况代表着 20 DAI 的无风险利润。但是,我没有 200 DAI。不过通过 Flash Swap 只要有能力支付 gas,任何人都可以获得无风险的利润。

从 Uniswap 提取 ETH

第一步是乐观地通过 Flash Swap 提取 1 ETH。这将作为我们用来执行套利的资本,在这种情况下,我们假设:

  • 1 ETH 是预先计算的利润最大化交易
  • 自我们计算以来,Uniswap 或 Oasis 上的价格没有变化

可能的情况是,我们希望计算执行时的链上利润最大化交易,这对价格变动具有鲁棒性。这可能有点复杂,具体取决于所执行的策略。然而,一种常见的策略是根据固定的外部价格进行尽可能有利的交易。(例如,该价格可能是 Oasis 上一个或多个订单的平均执行价格。)如果 Uniswap 市场价格高于或低于该外部价格,则下面示例包含计算 Uniswap 最大交易金额的代码ExampleSwapToPrice.sol

Trade at External Venue(在外部地点进行交易)

一旦我们从 Uniswap 获得 1 ETH 的临时资本,我们现在就可以在 Oasis 上用它换取 220 DAI。一旦我们收到 DAI,我们就需要偿还 Uniswap。我们已经提到过,支付 1 ETH 所需的金额是 200 DAI。通过getAmountIn计算。因此,将 200 DAI发送回 Uniswap 对后,我们就获得了 20 DAI 利润。

Instant Leverage(即时杠杆)

Flash Swaps 可用于提高借贷协议和 Uniswap 杠杆化的效率。

以最简单的形式考虑 Maker:一个接收 ETH 作为抵押品并允许以它为抵押铸造 DAI,同时确保 ETH 的价值永远不会低于 DAI 价值的 150% 的系统。

假设我们使用该系统存入 3 ETH 的本金,并铸造最大数量的 DAI。以 1 ETH / 200 DAI 的价格,我们收到 400 DAI。理论上,我们可以通过出售 DAI 换取更多的 ETH、存入这些 ETH、铸造最大数量的 DAI(这次会更少)来提高这个头寸,然后重复知道达到我们想要的杠杆水平。

使用 Uniswap 作为过程中 DAI 到 ETH 部分的流动性来源非常简单。然而,以这种方式循环协议并不是特别好,并且可能会消耗大量气体。

不过幸运的是,Flash Swap 是我们能够预先提取全部 ETH 金额。如果我们想要 3 ETH 本金获得 2 倍的杠杆,我们可以简单地在 Flash Swap 中请求 3 ETH,并将 6 ETH 存入 Marker。这使我们能够铸造 800 DAI。如果我们铸造了足够多的货币来覆盖我们的 Flash Swap(比如 605),那么剩余的货币就可以作为抵御价格波动的安全边际。