编者按:本文来自区块律动BlockBeats,作者:律动研究院,Odaily星球日报经授权转载。了解以太坊黑暗森林的朋友一定对抢跑(Frontrunning)套利机器人印象深刻。这些机器人程序会时刻监测交易池中待确认交易,当发现存在套利空间的交易时,他们会发起一笔gasprice更高的转账,确保能够在可套利交易前抢先入块。举一个最简单的抢跑例子,此时1枚UNI可兑换2枚USDC,通过监测我发现交易池中有一笔通过Uniswap以USDC大量兑换UNI的待确认交易,我会发起一笔比此待确认交易gasprice更高的USDC兑换UNI的交易,确保我的交易能够排在此交易之前被确认。由于大多数以太坊矿工挑选交易的默认标准为gasprice的高低,为了自身收益最大化矿工会选择gasprice高的交易优先入块。因此我们就以2USDC/UNI的汇率兑换到了相应的UNI。当那笔大额兑换UNI的交易上链后,假设由于滑点引发的价格变化将USDC-UNI的汇率拉升至了3USDC/UNI,此时若我将之前换得的UNI兑换回USDC就可实现50%的盈利。然而在神奇的DeFi世界中,不是只有抢先别人一步才能获得套利机会,还有一种套利机制叫做「尾追」。bZx「尾追」事件
2020年7月13日,保证金交易借贷协议bZx通过Uniswap进行了其治理代币BZRX的IDO。此次拍卖在以太坊第10451767区块时开始,bZx总共提供了500万枚BZRX代币。活动刚一开始,某用户就「尾追」其后成为了本次IDO的第一位参与者,并以比发行价略高一点的价格兑换了IDO总量几乎一半的BZRX代币。随着参与者的增多,BZRX币价一路攀升,几分钟后,该用户以发行价10倍的价格将最初兑换的所有BZRX卖出,并成功将近55万刀的盈利收入囊肿。听起来这一切好像都很简单,但其实为了完成这次「尾追」操作,该用户准备了700多个以太坊账户,并对交易池进行了严密的监控。为了让大家更容易理解什么是「尾追」,我们举一个更加通俗易懂的例子。假设某平台宣布将在双十一当天零点举行1枚ETH换购100枚BTC的活动,本活动为无许可活动,所有用户可以进行参与。平台将在零点时使用官方地址在链上发起一笔交易宣布活动开始,第一个给官方地址转账1ETH的用户成功获得换购机会,并宣告本次活动结束。所有在平台方宣布活动开始前及活动结束后进行转账则被记为无效。用户们不知道平台方发起的这笔转账会被收入到哪一区块中,用户更无法判断这笔交易将会是这一块中的第几个交易。那么想在活动开始后第一个给平台转账获得这次换购机会就只能单纯靠运气了吗?不同的获胜对策
要解决这个问题,我们需要复习一下区块中转账排序的机制。首先,矿工会从交易池中挑选出待确认的交易并将其放入自己所搭建的区块内,而大多数情况下,如上文所说,矿工们默认的挑选标准是GasPrice,也就是说,GasPrice最高的转账将会成为该区块中的第一笔转账。当然,矿工也不一定非要按这种标准挑选转账,例如想要作恶的矿工可以将区块填满对自己有利的转账。明确这一点后我们可以采取的策略就是平台方官方地址进行监测,并在发现平台方发起转账并上链后迅速向平台方地址发起一笔gasprice极高的1ETH转账,确保我们的转账成为下一块的第一笔转账。然而,除非平台方的转账是上一区块中最后一笔转账才能确保我们有100%的胜算,但这种情况发生的概率是极低的,所以我们需要想出另一种对策。如果我们同时发起多笔交易,那这样我们的胜算不就大大提高了吗?假设即使所有被记做无效的转账在活动后平台方都将原封退还,但这个策略还存在着一些问题。首先,以太坊账户受到转账序号nonce的限制,每次只能发起一笔转账,上一笔转账未出现结果前是无法进行下一笔转账的。其次,若用户使用100个账号同时发起转账,那么用户需要预先准备100枚ETH,这个成本是很高的。这时候智能合约就派上用途了,智能合约不存在nonce限制。若我们部署的智能合约赢得活动,那奖品还是属于我们的。此时我们需要做的就是往我们的智能合约中打入1ETH,然后准备好100个有足够支付GasFee的账户。在拍卖开始的时候,100个账户同时调用这个智能合约,智能合约将向平台方发起转账。但如果平台方没有按时开始拍卖呢?或者网络出现了延时呢?更好的方法是好好利用起交易池中所提供的信息,因为交易池能告诉你这条链上未来将发生的一切。那么我们需要做的就是盯紧交易池中的每笔交易,试着找出项目方地址所发起的交易,并查明此交易的GasPrice,然后通过智能合约发起100笔与该交易GasPrice相同的转账。为什么要发起与目标交易GasPrice相同的转账呢?还是根据矿工挑选交易入块的逻辑,由于我们发起的交易与平台方发起的交易GasPrice相同,所以我们发起的交易将有极大概率与平台方发起的交易出现在同一区块中,且很可能会将目标交易「包围」。若我们发起的100笔交易中刚好有一笔交易成为了目标交易后的第二笔交易,我们就成功地成为了本次活动的天选之子,以1枚ETH成功换得了100枚BTC。「天选之子」的操作
让我们再回到bZx事件,看看那个用户是怎么在短短几分钟内撸到了55万刀的。若想登录Uniswap创建一个币种的交易对,你需要成为流动性提供者,向Uniswap提供该币和ETH各50%的流动性,这也将决定该币的初始价格,也就是IDO发行价。在7月13日世界协调时间02:28:24,以太坊第10451767块,bZx向Uniswap提供了1000枚ETH和500万枚BZRX代币,以0.0002ETH/BZRX的发行价开始了IDO。该用户的策略是在IDO开始的第一时间以最低汇率用ETH兑换尽可能多的BZRX,坐等其他用户持续推高汇率,在汇率到达高点时将BZRX兑换回ETH盈利离场。由于Uniswap是唯一的兑换通道,且只有ETH-BZRX交易对,在保证能够以最低汇率兑换BZRX的情况下,之后所有买盘都将推高汇率并变成该用户的获利。首先,该用户准备了732个以太坊地址并预存好GasFee。随后该用户在IDO开始前不到一个小时的时候部署好了智能合约,并在智能合约中准备了650枚ETH用作兑换BZRX。在IDO开始时刻732个以太坊地址同时广播交易。最终他成功了,该用户发起的732笔交易中刚好有一笔正好排在了bZx注入流动性的交易之后。这笔成功交易之外的所有交易都失败了。
图片来源:<ThefastestdrawontheBlockchain:EthereumBackrunning>除了该获胜用户外,还有别的用户也尝试使用此策略。在第10451767区块中,一共有266笔交易,其中141笔来自于获胜用户,还有另外两个尝试使用此策略的用户分别发出了59笔和23笔交易,这些用户发起的交易与启动IDO的交易GasPrice一模一样都是60GWei。最终获胜用户靠努力和付出得到了上天的眷顾。成功以最低汇率兑得大量BZRX只能算完成了任务的一半,「天选之子」需要将这些BZRX在高点全部出货才算是大功告成。由于Uniswap使用联合曲线计算交易对汇率,当BZRX储备量越来越少时,价格上升斜率将增加。在IDO开启之后的第14区块时,他开始出货了!
图片来源:<ThefastestdrawontheBlockchain:EthereumBackrunning>他将最初以650枚ETH兑换的1966111枚BZRX分批在190个区块时间、大约50分钟的时间内完成出货,共获利约55万刀,总共消耗Gas为1.47个ETH。想成为「天选之子」其实很难
虽然乍一看用1.47个ETH撸到了55万刀的收益十分诱人,但其实这并没有想象中的那么容易。首先,这一切都是建立在你懂代码、会写智能合约的基础上,并且必须确保智能合约不存在问题,否则智能合约中的资产是十分危险的。其次,就算写好了合约,还有其他会写合约的用户与你竞争这个套利机会,你并不一定能够成为那个天选之子。再者,就算你是第一个冲进去的,而且用最低的汇率冲到了很多代币,如果后面没人接盘,那这些代币同样会砸在手里。最后,最关键的是你得先有650个ETH!参考阅读:启动IDO的交易获胜用户智能合约地址<EthereumisaDarkForest><ThefastestdrawontheBlockchain:EthereumBackrunning>
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。