概述
去中心化金融是一种创建于区块链上的金融,它不依赖券商、交易所或银行等金融机构提供金融工具,而是利用区块链上的智能合约进行金融活动。在DeFi中存在了大量的套利机会,包括但不限于清算、差价套利。本文将分析部分去中心化交易所以及聚合器在合约代码上可能存在的套利机会。分析
Uniswap
Uniswap是一个采用了自动做市商模型的去中心化的加密货币交易平台,目前有两个流行的版本,分别是UniswapV2和UniswapV3,我们将分别分析其中可能存在的套利机会。UniswapV2Router在UniswapV2中,用户一般是通过Router合约与Pair合约以及Factory合约进行交互。通常来说Router只是会在交易中中转代币,而不会存储代币,但由于种种原因,如空投、转账失误导致Router合约中存储了某些代币。那么如何将这些代币提取出来呢?通过分析UniswapV2Router02合约的代码,发现存在removeLiquidityETHSupportingFeeOnTransferTokens函数:
该函数用于移除其中一个代币为WETH的流动性,其内部调用removeLiquidity函数时传入的to的地址为address(this),也就是会将两种代币先转移到Router合约中,然后Router合约再将两种代币转移到指定的地址。这里虽然转移的WETH的数量是removeLiquidity返回的,无法修改,但是转移的另一种Token的数量是balanceOf(address(this)),即Router合约中的该代币的余额。因此根据上述分析,我们能得到一个套利的流程:监控到Router02合约存在ERC20代币;监控到Router02合约存在ERC20代币;调用addLiquidityETH添加该ERC20代币和WETH的流动性;调用removeLiquidityETHSupportingFeeOnTransferTokens移除流动性。局限性:如果该代币之前没有和WETH组流动性,当第一次添加流动性时会损失一小部分流动性;暂时未发现提取Router02合约中的WETH和ETH的方法。UniswapV2PairUniswapV2Pair合约,即所谓的流动性池,存储着提供流动性的2种代币,因为Pair合约中使用的是reserve来记录余额而不是balanceOf(address(this)),因此有人直接误转流动性代币到合约中时会出现balance和reserve出现差值,而Pair合约中存在平衡函数skim,我们可以调用该函数将这差值数量的代币给提取出来:
数据:上海升级完成以来的ETH质押存款已超过提款,净质押余额约4340枚ETH:5月8日消息,Token.Unlock数据显示,自以太坊上海升级完成以来,已有约242万枚ETH解除质押,约242万枚ETH新存入质押,净质押余额约4340枚ETH。即以太坊上海升级完成以来的ETH新存入质押数已超过解除质押数。此外,当前约枚14.57万ETH处于待提款状态。[2023/5/8 14:49:00]
可以看到该函数会将流动性池中两种流动性代币的balance和reserve差值数量的代币转移到to地址。流动性池中除了这两种代币外,也会因为误转、空投等原因存在其他的ERC20代币,如何提取这一部分的代币呢?对Pair合约的代码分析后发现无法提取这一部分代币,只有一种情况例外:当流动性池中存在该池的LP代币时。出现这种情况我们可以调用Pair合约的burn函数,移除流动性,取出相应的两种流动性代币:
UniswapV3SwapRouterUniswapV3的SwapRouter合约中也会存在和UniswapV2Router一样的情况,存在ERC20代币和ETH,但是幸运的是SwapRouter合约提供了几个函数可以方便提取其中的代币。提取ERC20代币我们可以使用sweepToken函数:
提取ETH我们可以使用refundETH函数:
ConsenSys分析师:以太坊上海升级激发机构投资者参与质押的兴趣:4月22日消息,以太坊区块链开发公司ConsenSys的分析师Michiel Milanovic表示,顶级机构级以太坊投资服务提供商4月份的资金流入已经是上个月的三倍左右。他还称,约80%的资金流入是在4月12日上海升级之后发生的。从那之后,大约1800万枚ETH可被提取,价值350亿美元,之前这些ETH被锁定在质押合约中。
允许提款也降低了与锁定ETH进行质押相关的流动性风险,这之前让一些投资者望而却步。Milanovic说道,我们预计,在长期验证者首次减少ETH之后,这将自然地提高质押率。(CoinDesk)[2023/4/22 14:20:08]
也能够直接调用unwrapWETH9函数将WETH还原成ETH并提取出来:
以上是对UniswapV3SwapRouter合约的套利分析。在对UniswapV3Pool合约的代码进行分析后,发现没有办法提取其合约中的其他代币,也不存在如UniswapV2Pair合约中balance和reserve有差值的情况。SushiSwap
SushiSwap最初是一个Uniswap的分叉项目,后来发展成为一个独立的生态系统,提供了许多不同的金融服务和产品。因为SushiSwap和UniswapV2一样,因此上述的针对UniswapV2的套利手段对与SushiSwap也同样适用。SushiXSwapSushiXSwap是SushiSwap推出的基于LayerZero的全链交易协议,支持的网络包括Optimism、Arbitrum、Fantom、BNBChain、Polygon和Avalanche。用户可以在支持的网络以及资产之间进行跨链交易。如何提取SushiXSwap合约中的代币呢?SushiXSwap中主要的功能都通过cook函数实现,该函数提供了一系列的操作,支持操作列表如下:
上海升级后净提款62.66万枚ETH,89.62万枚ETH处于待提款状态:金色财经报道,据Token.Unlocks数据显示,以太坊完成上海升级后至今,已完成约99.5万枚ETH提款,约36.84万枚ETH新存入质押,净提款约62.66万枚ETH。此外,当前验证者数量约为46.9万名,89.62万枚ETH处于待提款状态,其中待提款的实体中Kraken占比约46.2%,位列第一。[2023/4/17 14:07:53]
其中有一个操作ACTION_DST_WITHDRAW_TOKEN,其代码实现如下:
首先将传入cook函数的data进行解码,然后判断amount是否等于0,等于0则将amount的值设为该合约的ERC20代币的余额或者ETH的余额。最后调用_transferTokens将代币转移到指定的地址:
因此我们只需要构造传入cook函数的actions和datas,即将actions设置为ACTION_DST_WITHDRAW_TOKEN,在data中构造想要转移的代币、接收地址、数量,即可转移出SushiXSwap合约中的代币。SushiBentoBoxSushiBentoBox是SushiSwap生态系统中的一个组件。BentoBox是一个高度灵活的去中心化金融利率优化产品。简单来说,它是一个允许用户存储、借用和赚取利息的智能合约平台。BentoBox的主要目的是优化用户在DeFi领域中的收益。以太坊上的BentoBox合约中存储了大量了代币,那么该合约是否存在套利的空间呢?在BentoBox合约中用户可以通过deposit函数进行存款操作,函数的实现如下:
dForce创始人Mindao:上海升级标志着以太坊原生利率政策的确定:金色财经报道,dForce创始人Mindao发文称,ETH提现抛压分析都试图通过量化去分析质变事件,必然是谬以千里;提现是完成以太坊货币政策确定性的关键事件,不是简单加息、减息的市场操作;它标志着以太坊原生利率政策的确定,也是crypto的原生利率市场和美元利率政策分庭抗礼的起点。
此前他曾表示,上海升级后,ETH有几个基本面变化:(1)不确定性消除,愿长期质押的人会增加,ETH的净质押率预计会从现在15%到40%+;(2)质押的ETH从股权性质变债权性质,LSD们的流动性优势没那么明显,节点质押的ETH会变成类零息债券,面值折扣大概0.08%,节点多元化会打破LSD龙头的垄断;(3)ETH经济模型完成闭环[2023/4/14 14:02:49]
可以看到用户传入指定的代币地址,扣款地址,接收地址,数量,股份数量,函数首先做了一系列校验,然后将amount或者share进行转换,关键点在195-198行,这里做了一个校验:amount<=_tokenBalanceOf(token).sub(total.elastic)。在BentoBox合约中某种代币的余额使用的是total.elastic来记录,类似UniswapPair合约中的reserve,某些情况下会和_tokenBalanceOf(token)产生差值,我们可以利用deposit函数这里的特性,将差值部分真实转换成自己在BentoBox合约中的余额。因此我们传入参数时将token设置为存在差值的代币地址,将amount的值设置为差值,然后将from设置为BentoBox合约的地址,将to设置为自己的地址,在207行时由于地址为BentoBox合约地址,因此不会进行转账,只是平衡了total.elastic和_tokenBalanceOf(token)的值,将其转换为to地址在合约内的余额。DODO
Kraken:在上海升级6个月之前,ETH 取消质押“不可用”:金色财经报道,在以太坊合并之后,一些用户想解除他们已经抵押的ETH,Kraken发布公告称,允许用户使用 Kraken Pro 应用程序质押和解除他们的加密货币资产。然而,在上海宣布升级到以太坊网络之前,似乎ETH不可用。此外,Kraken团队表示,以太坊基金会预计上海升级将在“合并后的 6-12 个月”进行。[2022/9/16 7:01:48]
DODO是一个去中心化交易平台,使用独创的主动做市商算法为Web3资产提供高效的链上流动性。DODO既自己提供流动性,也聚合其它交易所的流动性。DODO有一系列合约,其中用户会通过DODOV2Proxy02合约进行代币的兑换。和UniswapRouter合约类似,该合约也会因为各种原因存在一些代币,我们应当如何提取这些代币?DODOV2Proxy02在DODOV2Proxy02合约中存在externalSwap函数,用来调用DODO聚合的外部平台进行兑换,如0x,1inch,代码实现如下:
1719-1721行在对传入的参数做校验,然后1724行校验fromToken是否为ETH,不是的话则会将调用者的代币转移到合约中,然后进行授权,在分析了DODOAPPROVE合约的代码后发现只需要将fromTokenAmount设置为0即可绕过:
然后会对调用的外部合约做校验,是白名单内的才能够调用,这里的swapTarget,calldataConcat都是由用户可控的,因此可以将swapTarget设置为0x或者1inch的合约地址,然后calldataConcat设置为其合约的view函数的编码,从而让返回的值为true,也能通过后面的require校验:
接下来会将合约中的toToken,全部转移给调用者,这里的toToken可以是ERC20代币,也可以是ETH,发送完后会进行最小的预期数量校验,我们将minReturnAmount的值设置为非常小的值即可通过。最后两个函数调用无关紧要。
通过以上的步骤我们就能够提取出DODOV2Proxy02合约中的ERC20代币以及ETH。1inch
1inch是一个去中心化交易所聚合器,它从多个DEX中汇集流动性,以便为用户提供最佳的代币兑换价格。通过整合来自不同来源的流动性,1inch帮助用户优化交易并在各个平台之间找到最优惠的价格。1inch的智能合约自动在各个去中心化交易所之间进行交易,使用户能够轻松地在不同交易所之间获取最佳价格和最低滑点。此外,1inch还提供了其他功能,如流动性挖矿和治理代币。1inch的主要合约是AggregationRouter,现在使用较多的是V4和V5版本,这两个合约也会因为各种原因存在一些代币,我们可以通过构造的传入函数中的参数,提取合约中的代币。AggregationRouterV5AggregationRouterV5合约存在swap函数,其实现如下:
校验了desc中的minReturnAmount后,从desc中获取srcToken和dstToken,接下来986-997行可以通过构造desc结构体中的flags和srcToken进行绕过:
然后执行函数_execute,这里会进行call调用,并会校验执行状态,由于executor由用户传入,因此这里我们可以使用0地址进行绕过:
然后获取合约中dstToken的余额。1007-1018行我们可以构造desc中flags以及minReturnAmount进行绕过:
最后会将合约中的dstToken余额都转到dstReceiver地址中,该地址也由用户控制:
通过以上的步骤,我们能构造传入swap函数的参数从而将AggregationRouterV5合约中的代币提走。AggregationRouterV4AggregationRouterV4与AggregationRouterV5差别不大,AggregationRouterV4中也存在swap函数,实现如下:
可以发现跟AggregationRouterV5的swap函数的实现是一样的,只是AggregationRouterV5对call进行了优化,因此使用和AggregationRouterV5一样的方法即可提取出存在AggregationRouterV4合约中的代币。总结
本文简单介绍了部分去中心化交易所以及聚合器,并探讨了其中可能存在的套利,从合约代码层面分析了套利的原理,但在实际中能否成功还和诸多因素相关,如GAS,节点速度等。参考Reference
如何从defi中捡钱WhatIsUniswapSUshiAcademyAboutDODO1inchaggregationprotocol关于我们
AtEoceneResearch,weprovidetheinsightsofintentionsandsecuritybehindeverythingyouknowordon'tknowofblockchain,andempowereveryindividualandorganizationtoanswercomplexquestionswehadn'tevendreamedofbackthen.了解更多:Website|Medium|Twitter
标签:HAITOKENKENUNIOrlando ChainCrypto Daily TokenGreenTrust TokenBusiness Universe
经Odaily星球日报不完全统计,4月3日-4月9日公布的海内外区块链融资事件共32起,较上周数据有一定上升,已披露融资总额约为2.9亿美元,较上周数据有明显上涨.
进入2023年第一季度以来,NFT规模出现可喜回升,链上交易活动逐渐活跃,市场开始密集上新,新老玩家竞争加剧.
当Blur这台NFT市场的流动性发动机也逐渐熄火: Blur自身乃至各NFT市场的ETH交易总量都在不断下滑当Doodles、CloneX、Moonbirds三个「老蓝筹」不断下跌成为「NFT三.
备受期待的Shanghai/Capella硬分叉计划已于今早进行,质押的ETH可以被提取。本文站在质押者角度,评估了解锁可能产生的潜在抛售压力,并讨论了在Shanghai升级后可能立即提取和出售.
流动性是DeFi的基石。Chronos是一个基于Arbitrum的去中心化交易所,旨在通过maNFTLP模型和ve(3,3)提供更稳定、更可持续的流动性,有机会成为Arbitrum的首要流动性层.
近期香港大会如火如荼,一级市场回暖,ABCDEQ1看了超过100个项目,亲身体验了市场几个特别火热的赛道,其中最热的包括Appchain、ZK和Gaming.