复制成功

分享至

主页 > 数字货币 >

通过代码识别DeFi中的套利机会

2023.04.20

概述

去中心化金融(英语:Decentralized finance,俗称 DeFi)是一种创建于区块链上的金融,它不依赖券商、交易所或银行等金融机构提供金融工具,而是利用区块链上的智能合约进行金融活动。在 DeFi 中存在了大量的套利机会,包括但不限于清算、差价套利。本文将分析部分去中心化交易所(DEX)以及聚合器(Aggregator)在合约代码上可能存在的套利机会。

分析

Uniswap

Uniswap 是一个采用了自动做市商(AMM)模型的去中心化的加密货币交易平台,目前有两个流行的版本,分别是 Uniswap V2 和 Uniswap V3,我们将分别分析其中可能存在的套利机会。

Uniswap V2 Router

在 Uniswap V2 中,用户一般是通过 Router 合约与 Pair 合约以及 Factory 合约进行交互。通常来说 Router 只是会在交易中中转代币,而不会存储代币,但由于种种原因,如空投、转账失误导致 Router 合约中存储了某些代币。那么如何将这些代币提取出来呢?

通过分析 Uniswap V2 Router 02 合约的代码,发现存在 removeLiquidityETHSupportingFeeOnTransferTokens 函数:

通过代码识别DeFi中的套利机会

该函数用于移除其中一个代币为 WETH 的流动性,其内部调用 removeLiquidity 函数时传入的 to 的地址为 address(this),也就是会将两种代币先转移到 Router 合约中,然后 Router 合约再将两种代币转移到指定的地址。这里虽然转移的 WETH 的数量是 removeLiquidity 返回的,无法修改,但是转移的另一种 Token 的数量是 balanceOf(address(this)),即 Router 合约中的该代币的余额。

因此根据上述分析,我们能得到一个套利的流程:

监控到 Router 02 合约存在 ERC 20 代币;

  • 监控到 Router 02 合约存在 ERC 20 代币;

  • 调用 addLiquidityETH 添加该 ERC 20 代币和 WETH 的流动性;

  • 调用 removeLiquidityETHSupportingFeeOnTransferTokens 移除流动性。

  • 局限性:

  • 如果该代币之前没有和 WETH 组流动性,当第一次添加流动性时会损失一小部分流动性(MINIMUM_LIQUIDITY);

  • 暂时未发现提取 Router 02 合约中的 WETH 和 ETH 的方法。

  • Uniswap V2 Pair

    Uniswap V2 Pair 合约,即所谓的流动性池,存储着提供流动性的 2 种代币,因为 Pair 合约中使用的是 reserve 来记录余额而不是 balanceOf(address(this)),因此有人直接误转流动性代币到合约中时会出现 balance 和 reserve 出现差值,而 Pair 合约中存在平衡函数 skim,我们可以调用该函数将这差值数量的代币给提取出来:

    通过代码识别DeFi中的套利机会

    可以看到该函数会将流动性池中两种流动性代币的 balance 和 reserve 差值数量的代币转移到 to 地址。

    流动性池中除了这两种代币外,也会因为误转、空投等原因存在其他的 ERC 20 代币,如何提取这一部分的代币呢?

    对 Pair 合约的代码分析后发现无法提取这一部分代币,只有一种情况例外:当流动性池中存在该池的 LP 代币时。

    出现这种情况我们可以调用 Pair 合约的 burn 函数,移除流动性,取出相应的两种流动性代币:

    通过代码识别DeFi中的套利机会

    Uniswap V3 SwapRouter

    Uniswap V3 的 SwapRouter 合约中也会存在和 Uniswap V2 Router 一样的情况,存在 ERC 20 代币和 ETH,但是幸运的是 SwapRouter 合约提供了几个函数可以方便提取其中的代币。

    提取 ERC 20 代币我们可以使用 sweepToken 函数:

    通过代码识别DeFi中的套利机会

    提取 ETH 我们可以使用 refundETH 函数:

    通过代码识别DeFi中的套利机会

    也能够直接调用 unwrapWETH 9  函数将 WETH 还原成 ETH 并提取出来:

    通过代码识别DeFi中的套利机会

    以上是对 Uniswap V3 SwapRouter 合约的套利分析。

    在对 Uniswap V3 Pool 合约的代码进行分析后,发现没有办法提取其合约中的其他代币,也不存在如 Uniswap V2 Pair 合约中 balance 和 reserve 有差值的情况。

    SushiSwap

    SushiSwap 最初是一个 Uniswap 的分叉项目,后来发展成为一个独立的生态系统,提供了许多不同的金融服务和产品。

    因为 SushiSwap 和 Uniswap V2 一样,因此上述的针对 Uniswap V2 的套利手段对与 SushiSwap 也同样适用。

    SushiXSwap

    免责声明:数字资产交易涉及重大风险,本资料不应作为投资决策依据,亦不应被解释为从事投资交易的建议。请确保充分了解所涉及的风险并谨慎投资。OKEx学院仅提供信息参考,不构成任何投资建议,用户一切投资行为与本站无关。

    加⼊OKEx全球社群

    和全球数字资产投资者交流讨论

    扫码加入OKEx社群

    相关推荐

    industry-frontier