火星链 火星链
Ctrl+D收藏火星链
首页 > 火币APP > 正文

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

作者:

时间:1900/1/1 0:00:00

概述

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

分析

Uniswap

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

UniswapV2Router

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

通过分析UniswapV2Router?02合约的代码,发现存在?removeLiquidityETHSupportingFeeOnTransferTokens?函数:

该函数用于移除其中一个代币为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?移除流动性。局限性:

贝莱德旗下iShares申请发行现货比特币ETF:金色财经报道,基金管理巨头贝莱德的iShares部门周四下午向美SEC提交了组建现货比特币ETF的文件。

根据该文件,该基金的资产将被命名为iShares比特币信托,基金资产主要将由托管人代表信托持有的比特币组成。该文件称,托管人将是加密交易所Coinbase。[2023/6/16 21:40:58]

如果该代币之前没有和WETH组流动性,当第一次添加流动性时会损失一小部分流动性;暂时未发现提取Router?02合约中的WETH和ETH的方法。UniswapV2Pair

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

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

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

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

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

UniswapV3SwapRouter

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

淘宝小程序接入Cocos游戏引擎,探索电商元宇宙:12月5日,据Cocos引擎官方消息,近日,Cocos推出社区版,实现对淘宝平台的支持。内容开发者和商家使用社区版CocosCreator,即可轻松实现将游戏一键发布至淘宝购物平台。

这是继Cocos和阿里淘宝开放平台(TaobaoOpenPlatform,简称TOP)联合举办的2022淘宝开放生态创新大赛之后,双方的又一次合作。(鞭牛士)[2022/12/5 21:23:48]

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

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

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

以上是对UniswapV3SwapRouter合约的套利分析。

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

SushiSwap

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

CZ:Binance仅出售小部分FTT,SBF应该承担暴雷的主要责任:金色财经报道,在11月14日举行的Twitter Space上,CZ 表示关于FTX 的投资与退出都在早期,一切信息都是公开的。Binance仅出售一小部份FTT,还持有很大份额。

CZ 同时表示,Binance很愿意帮助FTX的用户,但如果行业里所有暴雷都要Binance帮助,就是对Binance用户的不负责任。CZ认为,在 FTX的暴雷事件中,SBF应该承担主要责任,因为他对员工撒谎了。但FTX不应该承担全部责任,每一个人包括用户、股东、世界各地的监管机构以及专业的投资者都有责任,这些问题应该提早被发现。[2022/11/14 13:04:01]

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

SushiXSwap

SushiXSwap是SushiSwap推出的基于LayerZero的全链交易协议,支持的网络包括?Optimism、Arbitrum、Fantom、BNB?Chain、Polygon?和?Avalanche。用户可以在支持的网络以及资产之间进行跨链交易。

如何提取SushiXSwap合约中的代币呢?

SushiXSwap中主要的功能都通过?cook?函数实现,该函数提供了一系列的操作,支持操作列表如下:

其中有一个操作?ACTION_DST_WITHDRAW_TOKEN,其代码实现如下:

首先将传入?cook?函数的data进行解码,然后判断amount是否等于?0?,等于?0?则将amount的值设为该合约的ERC?20代币的余额或者ETH的余额。最后调用?_transferTokens?将代币转移到指定的地址:

欧盟确认全面禁止向俄罗斯人提供加密服务:10月6日消息,欧盟已经确认全面禁止向俄罗斯人提供加密服务,欧盟委员会在声明中表示,通过禁止所有加密资产钱包、账户或托管服务,现有的对加密资产的禁令已经得到加强。欧盟委员会上周提出的建议得到欧盟政府的签署。

先前的加密制裁已在欧盟官方公报上公布生效,并适用于俄罗斯公民、居民和实体,除非他们居住在欧盟。

此前9月29日消息,欧盟将加强对俄罗斯人在欧盟内部的加密投资的限制,以应对在俄罗斯占领的乌克兰地区举行的公投。知情人士透露,此前的加密持有上限为10000欧元(9600美元),将被取消,这可能意味着俄罗斯人将无法在欧盟加密钱包中持有任何资产。(CoinDesk)[2022/10/6 18:41:13]

因此我们只需要构造传入?cook?函数的actions和datas,即将actions设置为?ACTION_DST_WITHDRAW_TOKEN?,在data中构造想要转移的代币、接收地址、数量,即可转移出SushiXSwap合约中的代币。

SushiBentoBox

SushiBentoBox是SushiSwap生态系统中的一个组件。BentoBox是一个高度灵活的去中心化金融利率优化产品。简单来说,它是一个允许用户存储、借用和赚取利息的智能合约平台。BentoBox的主要目的是优化用户在DeFi领域中的收益。

以太坊上的BentoBox合约中存储了大量了代币,那么该合约是否存在套利的空间呢?

在BentoBox合约中用户可以通过?deposit?函数进行存款操作,函数的实现如下:

可以看到用户传入指定的代币地址,扣款地址,接收地址,数量,股份数量,函数首先做了一系列校验,然后将amount或者share进行转换,关键点在195-198行,这里做了一个校验:amount<=_tokenBalanceOf(token).sub(total.elastic)。

英国监管机构:加密公司不受严格监管的影响:金色财经报道,英国金融行为监管局(FCA)透露,尽管首次未能满足监管要求,但许多加密货币公司仍在寻求在英国经营的许可。他们知道我们有一个良好的监管体系,如果他们符合我们的标准,这对于他们在世界各地寻求申请的每个司法管辖区都很重要。在新首相Liz Truss的领导下,英国的加密监管可能正在发生变化。在她上任之前,曾参与该国加密政策的几位关键官员在她上任前辞去了政府职务,其中包括前财政大臣 Rishi Sunak 和财政部经济秘书 John Glen。英国政府上周在下议院提出了经济犯罪和企业透明度法案。[2022/10/3 18:37:57]

在BentoBox合约中某种代币的余额使用的是?total.elastic?来记录,类似UniswapPair合约中的reserve,某些情况下会和?_tokenBalanceOf(token)?产生差值,我们可以利用?deposit?函数这里的特性,将差值部分真实转换成自己在BentoBox合约中的余额。

因此我们传入参数时将token设置为存在差值的代币地址,将amount的值设置为差值,然后将from设置为BentoBox合约的地址,将to设置为自己的地址,在207?行时由于地址为BentoBox合约地址,因此不会进行转账,只是平衡了total.elastic?和?_tokenBalanceOf(token)?的值,将其转换为to地址在合约内的余额。

DODO

DODO是一个去中心化交易平台,使用独创的主动做市商算法为Web3资产提供高效的链上流动性。DODO既自己提供流动性,也聚合其它交易所的流动性。

DODO有一系列合约,其中用户会通过DODO?V2?Proxy?02合约进行代币的兑换。和UniswapRouter合约类似,该合约也会因为各种原因存在一些代币,我们应当如何提取这些代币?

DODO?V2?Proxy?02?

在DODO?V2?Proxy?02合约中存在?externalSwap函数,用来调用DODO聚合的外部平台进行兑换,如?0x?,?1inch,代码实现如下:

1719-1721?行在对传入的参数做校验,然后?1724?行校验fromToken是否为ETH,不是的话则会将调用者的代币转移到合约中,然后进行授权,在分析了DODOAPPROVE?合约的代码后发现只需要将fromTokenAmount设置为?0?即可绕过:

然后会对调用的外部合约做校验,是白名单内的才能够调用,这里的?swapTarget,calldataConcat都是由用户可控的,因此可以将?swapTarget?设置为0x或者1inch的合约地址,然后?calldataConcat?设置为其合约的view函数的编码,从而让返回的值为true,也能通过后面的require校验:

接下来会将合约中的toToken,全部转移给调用者,这里的toToken可以是ERC?20代币,也可以是ETH,发送完后会进行最小的预期数量校验,我们将?minReturnAmount?的值设置为非常小的值即可通过。最后两个函数调用无关紧要。

通过以上的步骤我们就能够提取出DODO?V2?Proxy?02合约中的ERC?20代币以及ETH。

1inch

1inch是一个去中心化交易所聚合器,它从多个DEX中汇集流动性,以便为用户提供最佳的代币兑换价格。通过整合来自不同来源的流动性,1inch帮助用户优化交易并在各个平台之间找到最优惠的价格。1inch的智能合约自动在各个去中心化交易所之间进行交易,使用户能够轻松地在不同交易所之间获取最佳价格和最低滑点。此外,1inch还提供了其他功能,如流动性挖矿和治理代币。

1inch的主要合约是AggregationRouter,现在使用较多的是V?4和V?5版本,这两个合约也会因为各种原因存在一些代币,我们可以通过构造的传入函数中的参数,提取合约中的代币。

AggregationRouterV?5?

AggregationRouterV?5合约存在?swap?函数,其实现如下:

校验了desc中的minReturnAmount后,从desc中获取srcToken和dstToken,接下来986-997?行可以通过构造desc结构体中的flags和srcToken进行绕过:

然后执行函数?_execute,这里会进行call调用,并会校验执行状态,由于executor由用户传入,因此这里我们可以使用?0?地址进行绕过:

然后获取合约中dstToken的余额。1007-1018?行我们可以构造desc中flags以及minReturnAmount进行绕过:

最后会将合约中的dstToken余额都转到dstReceiver地址中,该地址也由用户控制:

通过以上的步骤,我们能构造传入?swap?函数的参数从而将AggregationRouterV?5合约中的代币提走。

AggregationRouterV?4?

AggregationRouterV?4与AggregationRouterV?5差别不大,AggregationRouterV?4中也存在?swap?函数,实现如下:

可以发现跟AggregationRouterV?5的?swap?函数的实现是一样的,只是AggregationRouterV?5对call进行了优化,因此使用和AggregationRouterV?5一样的方法即可提取出存在AggregationRouterV?4合约中的代币。

总结

本文简单介绍了部分去中心化交易所以及聚合器,并探讨了其中可能存在的套利,从合约代码层面分析了套利的原理,但在实际中能否成功还和诸多因素相关,如GAS,节点速度等。

标签:SWAPTERROUTEOUTCranberrySwapAdappter TokenRouter ProtocolYouclout

火币APP热门资讯
比特币:长推:探究Ordinals 与BRC-20的另一面

有关Ordinals,区块空间以及“BRC-20”,未被深思的问题。Ordinals引发的潮流,至今仍在引起争议。一些人认为,向区块空间写入与任何一笔比特币的密码学安全都无关的数据,是有害的.

1900/1/1 0:00:00
ROT:ETH Global Tokyo进行时,有哪些项目正在Build?

4月13日,ETHGlobalTokyo黑客松在东京开幕,来自全球各地的以太坊支持者和开发者聚集在东京涩谷区的DigitalGarage,进行现场采访、产品发布和交流.

1900/1/1 0:00:00
WEB3:香港见闻:香港几无「全球加密中心」可能,为什么

撰文|ThePrimediaDAO发起人Jerry热闹的喧嚣之后,我们有必要停下来冷静一下。我们如何把握香港政策机会的前提是「香港能够把握加密市场局势」,以成就香港全球加密中心地位.

1900/1/1 0:00:00
NFT:Blur借贷产品Blend的首发教程

注:本文来自@bitfool1推特,其是加密圈职业投资人,阅项目数超过5K,投资数百。原推内容由MarsBit整理如下:Blur昨夜的产品Blend,给NFT市场带来了地震.

1900/1/1 0:00:00
PON:长推:NFT赛道早期项目分享——Jaypeggers

注:本文来自@victalk_eth推特,原推文内容由MarsBit整理如下:@jaypeggerz是一个另类的NFT流动性解决方案项目,其独创的以太本位只涨不跌的经济模型为这个项目的核心.

1900/1/1 0:00:00
Crypto顶级交易员Art_XBT的成功公式

今天我要开始一个采访系列,采访的对象是我在Crypto领域发现的有趣的人。这个系列的第一位采访对象是我去年在Twitter上发现的Crypto交易者?@art_xbt.

1900/1/1 0:00:00